我的博客:acsec.xyz
微信公众号: Ac sec
一.概述
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
二.整型注入(POST)
1.爆字段列数
2.查看数据库名和数据库用户
3.爆该库下所有的表
4.爆字段
5.获取username和password
6.md5解密
三.整型注入(GET)
同post注入,不同的是在url中构造payload
四.搜索型注入
SQL语句:
where username like '%xxx%';
此处为模糊查询,闭合方式为 ’
五.xx型注入
此处为 ') 闭合
六.insert注入
在注册的地方进行注入,为 ’ 闭合
SQL语句:
insert into member(username,pw,sex,phonenum,email,address) values('xxx',1,2,3,4,5);
payload:
1' or updatexml(1,concat(0x7e,database()),0) or '
1' or updatexml(1,concat(0x7e,database()),0))#
以上2种方式都可以闭合语句
1.爆数据库名
2.爆表名,因为updatexml不能换行显示,所以显示结果不全
3.用left(),mid(),rigth()分段显示或者用limit指定输出
4.爆字段
5.爆字段值
6.md5解密
7.floor报错
floor()报错注入准确地说应该是floor(),count(),group by冲突报错,
是当这三个函数在特定情况一起使用产生的错误。
语句:
and select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)
七.update注入
注册后登录,在修改信息处进行注入
SQL语句:
update member set sex='',phonenum='',address='',email='' where username='';
payload:
1' and updatexml(1,concat(0x7e,database()),0)#
八.delete注入
在删除处进行注入
SQL语句:
delete from message where id= ;
此处为整型注入(注意:在burp中构造payload时,需要转url编码)
九.http头注入
直接在user-agent处构造语句
十.基于boolian的盲注
sqlmap跑,也可以自己写脚本或者用burp进行爆破
十一.基于time的盲注
sqlmap
十二.宽字节注入
MySQL的在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ASCII码要大于128,才到汉字的范围)。因为GBK是多字节编码,两个字节为一个汉字,所以%DF和后面的\也就是%5c中变成了一个汉字,而“逃逸“了出来。
因为 ’ 会被转义,所以当我们输入 1%df’ 时会变成 1%df%5c’ ,也就是 1運’