在真实 SQL 注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取,后续安全测试中我们也必须满足同等的操作才能进行注入。
1、简要明确参数类型
数字、字符(字符型要加‘’)、搜索、JSON等;
其中 SQL 语句干扰符号:’ " % ) }等,具体需看写法
2、简要明确请求方法
GET、POST、COOKIE(不是请求方法,是传送方式)、REQUEST、HTTP头等;
不同的请求方式,请求的数据类型、数据大小都不一样;
这个网站请求方法出现漏洞,要按照对应的请求方法,去测试注入;
(1)GET请求
编写php代码,实现GET请求的演示
用bp抓包192.168.74.144/1.php?g=789可以看到GET请求,网站页面会出现789
(2)POST请求
用bp抓包192.168.74.144/1.php?g=789$p=456,页面不打印456
因为p是POST方法,单纯的在get后面对p做请求是没办法回应的,必须做POST请求
hackbar有工具可以去做POST请求,抓包看一下
g=789是get方法,p=456放在最后,我们这里使用post请求,但是打印出来的是789456,因为get有个特性:只要在网址后面就可以接收到
(3)COOKIE请求
自己手动添加cookie一行
(4)REQUEST请求
REQUEST请求是全部接收,POST、GET和COOKIE的数据全部接收;
若我们不清楚对方的接收方式,就使用request请求,不用管对方是什么请求方法,因为request全部接收,便于绕过;
(5)_SERVER[’ HTTP_USER_AGENT ']
是php的全局变量,用来获取系统的一些值,一些信息;
参考文章:server详解
可以在网站的数据包查询注入,在http数据包里面注入,就是HTTP头部注入
3、参数字符型注入测试=>sqlilabs less 5 6
解法:想办法让字符闭合
打开靶场sqlilabs less 5
http://127.0.0.1/sqlilabs/Less-5/?id=1 and 1=1页面正常
http://127.0.0.1/sqlilabs/Less-5/?id=1 and 1=12页面仍然正常
查看源代码查询为什么,发现$id上有单引号,表示把传入的id值当作了字符
所以注入的时候需要把单引号释放出来
如果传入的id=1’ and 1=1,则查询的语句如下
如果传入的id=1’ and ‘1’='1,则查询的语句如下
打开靶场sqlilabs less 6
查看源码,发现
i
d
=
′
"
′
.
id = ' " '.
id=′"′.id.’ " ’ ,表明id前后都加上了双引号
所以我们加上双引号,再另数值不相等,看它能不能报错;
双引号和前面的双引号闭合,-–+将后面的limit都注释掉;
注入测试 http://127.0.0.1/sqlilabs/Less-6/?id=1" and 1=2–+ ,产生了报错
4、POST 数据提交注入测试=>sqlilabs less 11
打开靶场
使用数据抓包,找到注入点就在登录框附近
查看php源代码,可以看到是单引号,要把单引号闭合
用下面语句进行SQL注入,爆出数据库名称
5、参数 JSON 数据注入测试=>本地环境代码演示
JSON的格式为,它经常出现在APP中
对JSON进行注入测试,要用JSON的格式写
6、COOKIE 数据提交注入测试=>sqlilabs less 20
打开靶场
改写语句,观察SQL语句
这里观察php源代码,对POST注入会有过滤,所以采用cookie注入
抓取数据包,采用cookie注入,爆破出了数据
7、HTTP 头部参数数据注入测试=>sqlilabs less 18
打开靶场,出现了我的IP,这个页面可以检测我的IP,所以就是SERVER服务
观察php源代码,发现查询方式是insert
抓取数据包,尝试注入点