目录

1.Sql注入

2.Xml注入(xml实体注入,XXE)

3.远程文件包含漏洞

4.本地文件包含漏洞

5.命令注入漏洞


1.Sql注入

1.概念

1.SQL注入是一种Web应用代码中的漏洞。

2.黑客可以构造特殊数据库请求,使Web应用执行带有附加条件的SQL语句

用户请求中使用了带有参数的值,但是没有进行任何过滤

用户请求中使用了带有参数的值,没有进行任何转码

3.通过特殊的请求,Web应用向数据库访问时会附带其它命令:

任意查询命令

创建数据库/表

更新数据库/表内容

更改用户权限

删除数据/表/数据库

执行系统命令

2.原理

1.就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行指定的SQL语句。具体来说,它是利用现有应用程序,将SQL语句注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入SQL语句得到一个存在安全漏洞的网站上的数据,而不是按照设计者意图去执行SQL语句。

2.应用为了和数据库进行沟通完成必要的管理和存储工作,必须和数据库保留一种接口。目前的数据库一般都是提供api以支持管理,应用使用底层开发语言如 Php,Java,asp,Python与这些api进行通讯。对于数据库的操作,目前普遍使用一种SQL语言(Structured Query Language语言,SQL语言的功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户 指出做什么而不需要指出怎么做),SQL作为字符串通过API传入给数据库,数据库将查询的结果返回,数据库自身是无法分辨传入的SQL是合法的还是不合法的,它完全信任传入的数据,如果传入的SQL语句被恶意用户控制或者篡改,将导致数据库以当前调用者的身份执行预期之外的命令并且返回结果,导致安全问题。

3.对于数据安全的影响

1.可读取/修改数据库中的库和表

获取用户的账号,密码(可能被加密过),邮箱,联系方式

信用卡信息

修改产品价格

删除数据

2.可执行系统命令

修改权限,获取系统管理员权限

修改任意文件

安装后门

4.方法

1.右边是一个登陆界面

点击“submit”之后,web应用会执行:

接收发送的POST请求

获取用户名和密码:(bart, simpson)

构建SQL语句:select * from users where username = 'bart' and password = 'simpson';

发送给数据库服务器来验证

2.这个时候,我们可以对username进行变化

输入的用户名不是简单的bart,而是 bart' and 1=1; --

这样整个语句变成如下:

select * from users where username = 'bart' and 1=1; -- ' and password = 'simpson';

这个时候,--后面的都会变成注释,不用密码就能进行登陆。

5.类型

简单注入(simple SQL injection)

永真式:最后加入 or 1=1 来保证无论如何都能获取数据。

错误语句:让Web应用构造错误的SQL语句来抛异常,来判断数据库类型

结束注释:使用注释符注释剩余语句

联合查询:使用union all,后面可以写我要查询的真正语句

例子dvwa

1' and 1=1; #    --判断是否可以被注入

1' or 1=1; #     --来尝试获取全部账号信息

1' union all select 1, 2; #     --来判断可以获取的参数个数

1' union all select 1,(@@version); #    --来获取数据库版本

1' union all select 1,(database()); #    --获取数据库名称

1' union all select 1, group_concat(column_name) from information_schema.columns where table_name='users' ; #    --获取表所有列名

盲注(Blind SQL injection)

一般我们可以根据返回数据获取我们想要的信息。

但一些页面,我们是获取不到详细信息。信息只有正确或不正确

6.SQL-Server、MySQL、ORACLE数据库的注入方法

1.注释符:--(MSSQL, MySQL),  #(MySQL),   /*comment*/(MySQL)

2.单行用分号隔开,运行多个SQL语句:MSSQL

3.判断(IF,ELSE语句)

MySQL:IF(condition,true-part,false-part)

SELECT IF(1=1,'true','false')

MSSQL:IF condition true-part ELSE false-part

IF (1=1) SELECT 'true' ELSE SELECT 'false'

Oracle:BEGIN  IF condition THEN true-part; ELSE false-part; END IF; END;

BEGIN IF (1=1) THEN dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); END IF; END;

4.字符串链接:

MSSQL:+

MySQL,Oracle: ||

7.安全防护

为什么会出现SQL注入漏洞?

数据库可以运行系统命令

用最小化权限的账户启动数据库

禁止让数据库执行系统命令

连接数据库的用户权限过大

使用IDS,WAF等监控是否有异常操作

连接数据库的用户权限最小化

错误信息返回过多的信息

统一管理错误信息

禁止向用户提供错误信息

在服务器没有进行有效的过滤,针对用户输入的特殊符号没有转码。

过滤所有客户端数据

审核数据

8.一些SQL注入漏洞检测工具的使用

SQLMAP

功能强大

界面不友好

AWVS/APPScan/WebInspect

可以查找各种类型的漏洞

速度较慢

2.Xml注入(xml实体注入,XXE)

1.概念

XML注入类似于SQL注入,XML文件一般用作存储数据及配置,如果在修改或新增数据时,没有对用户可控数据做转义,直接输入或输出数据,都将导致XML注入漏洞。

2.产生的原因

XML注入产生的原因与SQL注入差不多。

传输的数据包含了标签内容。

修改数据时会覆盖原有的标签

3.检测与防护

对用户输入进行检查过滤

对特殊字符进行转码

& --> &

< --> <

> --> >

" --> "

' --> '

4.例子

服务器是生成XML来存储用户数据

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest"> 来宾用户
    <name>likui</name>  
    <passwd>123</passwd>
</USER>
<USER role="admin"> 管理员
    <name>admin</name>
    <passwd>1adtyr32e762t7te3</passwd>
</USER>

guest用户申请改密码,会更改123

要是用户提交的不是简单的字母组合,而是如下信息:

12345</passwd></USER><USER role="admin"><name>admin</name><passwd>123456</passwd></USER><!---

这样,配置文件会变成:

<?xml version="1.0" encoding="UTF-8"?>
<USER rule="guest">
    <name>user</name>
    <passwd>12345</passwd>
</USER>
<USER rule="admin">
    <name>admin</name>
    <passwd>123456</passwd>
</USER><!---</passwd>
</USER>
<USER role="admin">
    <name>admin</name>
    <passwd>1adtyr32e762t7te3</passwd>
</USER>

3.远程文件包含漏洞

1.概念

1.程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为包含。

2.在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。

3.如果PHP的配置选项allow_url_include为ON的话,则include/require函数是可以加载远程文件的,这种漏洞被称为远程文件包含漏洞。

2.PHP常见的导致文件包含的函数如下:

include() 包含 重复调用

include_once() 只有一次性调用

require() 请求

require_once()

fopen()打开

readfile()读取

3.利用方式

1.执行任意代码,来操作服务器

2.操作数据库,插入恶意数据,可能获取系统权限

3.修改系统配置,修改网络配置,可能对服务器及网络造成影响

4.代码注入攻击后可以进一步对网络渗透,由于代码注入攻击多半可获取系统权限,对网络的进一步渗透难度大大降低

4.代码审计方法

查看是否有如下代码:

include(), include_once()

require(), require_once()

fopen()

readfile()

5.修复方法

1.不需要执行远程代码时,可以修改php.ini配置:

allow_url_fopen = Off

allow_url_include = Off

2.不要直接导入用户输入的内容

执行代码的参数,或文件名,禁止和用户输入相关,只能由开发人员定义代码内容,用户3.只能提交“1、2、3”等参数,代表相应代码。

4.本地文件包含漏洞

1.概念

1.与远程文件包含漏洞类似,可以读取任意的本地文件

2.可以通过远程文件包含漏洞来生成本地文件包含漏洞的代码来利用

3.本地文件包含漏洞可以包含本地文件,在条件允许时甚至能执行代码

上传图片马,然后包含

读敏感文件,读PHP文件

包含日志文件GetShell

包含/proc/self/envion文件GetShell

包含data:或php://input等伪协议

若有phpinfo则可以包含临时文件

2.所用到的函数

与远程文件包含漏洞所用到的函数相同:

include(), include_once()

require(), require_once()

fopen()

readfile()

3.利用方式

1.漏洞危害:

执行任意代码

包含恶意文件控制网站

甚至控制服务器

2.上传带有PHP代码的图片

http://.../dvwa/vulnerabilities/fi/?page=../../../a.jpg

3.读取PHP文件

http://.../dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=../../../a.php

4.读取系统敏感文件

http://.../dvwa/vulnerabilities/fi/?page=/etc/passwd

5.系统敏感文件有:

Windows:

C:\boot.ini   // 查看系统版本

C:\Windows\System32\inetsrv\MetaBase.xml // IIS配置文件

C:\Windows\repair\sam // 存储系统初次安装的密码

C:\Program Files\mysql\my.ini // Mysql配置

C:\Program Files\mysql\data\mysql\user.MYD // Mysql root

C:\Windows\php.ini // PHP配置信息

C:\Windows\my.ini // Mysql配置信息

... ...

Linux:

/root/.ssh/authorized_keys

/root/.ssh/id_rsa

/root/.ssh/id_ras.keystore

/root/.ssh/known_hosts

/etc/passwd

/etc/shadow

/etc/my.cnf

/etc/httpd/conf/httpd.conf

/root/.bash_history

/root/.mysql_history

/proc/self/fd/fd[0-9]*(文件标识符)

/proc/mounts

/porc/config.gz

4.PHP语言中的封装协议

1.访问本地文件

file:// — 访问本地文件系统

文件系统是PHP使用的默认封装协议,展现了本地文件系统

php://filter -- 对本地磁盘文件进行读写

php://filter是一种元封装器,设计用于“数据流打开”时的“筛选过滤”应用。这对于一体式(all-in-one)的文件函数非常有用,类似readfile()、file()、file_get_contens(),在数据流内容读取之前没有机会应用其他过滤器

2.代码任意执行

php:// — 访问各个输入/输出流(I/O streams)

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读

data://伪协议

这是一种数据流封装器,data:URI schema(URL schema可以是很多形式)

利用data://伪协议进行代码执行的思路原理和php://是类似的,都是利用了PHP中的流的概念,将原本的include的文件流重定向到了用户可控制的输入流中

3.目录遍历

glob://伪协议

glob:// 查找匹配的文件路径模式

5.修复方法

1.不要直接导入用户输入的内容(与远程文件包含漏洞相同)

执行代码的参数,或文件名,禁止和用户输入相关,只能由开发人员定义代码内容,用户2.只能提交“1、2、3”等参数,代表相应代码。

5.命令注入漏洞

1.概念

1.用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令,可能会允许攻击者通过改变 $PATH 或程序执行环境的其他方面来执行一个恶意构造的代码

2.在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令

2.对系统安全产生的危害

1.继承Web服务程序的权限去执行系统命令或读 - 写文件

运行Web服务的用户权限等于黑客利用漏洞后执行命令的权限

2.反弹shell

通过特定方式进行反弹shell攻击

3.控制整个网站甚至控制服务器

根据权限,可能服务器整体被沦陷

4.进一步内网渗透

把当前控制的机器当作跳板来控制其它内网机器

3.脚本语言中可以执行系统命令的函数

1.PHP

system() 输出并返回最后一行shell结果。

exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

2.JSP

Runtime.getRuntime().exec(<commandstr>)

4.第三方组件存在的代码执行漏洞

Struts2漏洞(s2-016)

Struts2的DefaultActionMapper支持一种方法,可以使用”action:”, “redirect:” , “redirectAction:”对输入信息进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的struts2中,没有对”action:”, “redirect:” , “redirectAction:”等进行处理,导致ongl表达式可以被执行。

详细信息请查找 s2-016

5.命令注入漏洞的修复方法

PHP

尽量不要执行外部命令

尽量使用脚本解决工作,少用执行命令函数,php中禁止disable_functions

使用自定义函数或函数库来替代外部命令的功能

程序参数的情况,escapshellcmd过滤

程序参数值的情况,escapeshellarg过滤

参数值尽量使用引用号包裹,并在拼接前调用addslashes进行转义

使用safe_mode_exec_dir指定可执行文件的路径

web漏洞--注入漏洞相关推荐

  1. 注入漏洞-sql注入

     注入漏洞 注入漏洞 1 SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行指定的SQL语句.具体来说,它是利用现有应用程序, ...

  2. Web渗透测试---Web TOP 10 漏洞

    文章目录 前言 一.注入漏洞 二.跨站脚本(xss)漏洞 三.文件上传漏洞 四.文件包含漏洞 五.命令执行漏洞 六.代码执行漏洞 七.XML外部实体(XXE)漏洞 八.反序列化漏洞 九. SSRF漏洞 ...

  3. WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避 ...

  4. mysql注入漏洞语句,web安全之sql注入漏洞

    概念 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通俗地讲,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力 ...

  5. 【转】基于SQL的Web系统安全防范——SQL注入漏洞

    攻击研究及防范措施 SQL-Based Web System Security--Structured Query Language InjectionLeak Attack Study And De ...

  6. Web安全之SQL注入漏洞学习(一)

    Web程序三层架构 三层架构主要是指将业务应用规划为的表示层 UI.数据访问层 DAL 以及业务逻辑层 BLL,其分层的核心任务是"高内聚低耦合"的实现.在软件体系架构设计中,分层 ...

  7. web漏洞-SQL注入漏洞、目录遍历漏洞、文件下载漏洞

    这里用到的是Pikachu漏洞练习平台 一.SQL注入漏洞-数字型注入 SQL注入漏洞简介 在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库 ...

  8. 从小白到web渗透工程师——零基础指南(2)sql注入漏洞

    hello,各位小伙伴,在看过上一篇文章之后,想必大家伙对于web渗透工程师有了一定的了解,那么,作为一名渗透工程师,挖洞,就是我们的日常工作中必不可少的一部分了.在安全圈中,如果你挖的洞危险系数够高 ...

  9. Web安全之Sql注入漏洞

    Sql注入漏洞 SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行. ...

最新文章

  1. 教你用一行Python代码实现并行(附代码)
  2. NN如何在表格数据中战胜GBDT类模型
  3. 为什么AI感知与人类感知很难直接比较?
  4. 跟一个傻逼程序员合作是什么感受?
  5. [html] 写H5和小程序有什么相同及不同的地方吗?
  6. java url 本地文件是否存在_我的应用程序知道URL中是否存在文件会一直停止[重复]...
  7. 【debug】UnicodeDecodeError: codec can't decode byte 0xbd in position 4: invalid start byte
  8. 记几种解决跨域问题的办法
  9. 华为机试HJ95:人民币转换
  10. ncverilog脚本_基于脚本和test bench的ncverilog ASIC仿真实例分析
  11. 学习使用Ansj分词工具(一)
  12. 无人车业务中的视觉三维重建
  13. C# panel控件实现鼠标滚轮滚动拖动滚动条
  14. 开始学 ruby on rails
  15. 怎样通过一根网线,一台电脑,做到月入过万。
  16. Python晋级语法
  17. Java NIO(四)选择器Selector
  18. 【Grafana】【八】可视化之Stat、Gauge和Bar Gauge
  19. 97 个上传下载 PHP 源码
  20. 无法走进的春天 ——解读海子《面朝大海,春暖花开》

热门文章

  1. Could not resolve placeholder 占位符不能被解析
  2. 域控制器中五个角色基础(必记)
  3. 解决Windows Firewall/Internet Connection Sharing (ICS)服务无法启动(ping通IP,但不能浏览网页)
  4. linux 命令行高亮显示
  5. U盘pe(理论大白菜、优启通、微PE都可以) 装ESXI方案 (非通用UltraISO重做启动U盘),省U盘
  6. outlook答复_如何在Windows版Outlook中设置外出答复
  7. 疫情问题网络舆情监测方法
  8. FilterConfig接口及其使用方法详解
  9. 教育技术(Educational technology)学习分析和教育数据挖掘领域的SCI、SSCI、CSSCI期刊与会议
  10. adb 查看指定APP日志