目录
1.Sql注入
2.Xml注入(xml实体注入,XXE)
3.远程文件包含漏洞
4.本地文件包含漏洞
5.命令注入漏洞
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
可以查找各种类型的漏洞
速度较慢
1.概念
XML注入类似于SQL注入,XML文件一般用作存储数据及配置,如果在修改或新增数据时,没有对用户可控数据做转义,直接输入或输出数据,都将导致XML注入漏洞。
2.产生的原因
XML注入产生的原因与SQL注入差不多。
传输的数据包含了标签内容。
修改数据时会覆盖原有的标签
3.检测与防护
对用户输入进行检查过滤
对特殊字符进行转码
& --> &
< --> <
> --> >
" --> "
' --> '
4.例子
服务器是生成XML来存储用户数据
guest用户申请改密码,会更改123
要是用户提交的不是简单的字母组合,而是如下信息:
12345