四个神兽 發表於 2012-5-28 13:29:05

中关村在线网站order by语句的盲注思路及修复方案(图)

基于order by内容的盲注<br />详细说明:<br />对http://active.zol.com.cn/diy/bisai.php?mont_h=2009-05&amp;id=12&amp;type=15&amp;order=zj_vote+desc 做安全检测。<br />尝试数值型注入未果。<br />不过,看到zj_vote+desc,想到这里也许能利用。<br />用工具扫它没发现注入。因为mysql的union前不能带order by。<br />但是order by里的内容是不是就没法注入了?<br />我不死心啊。<br />做了一些尝试,发现order by是可以盲注的。<br />这种方式依赖数据库结果中必须存在一个已知存在不一样数值的列。<br />不过,既然程序里order by那个字段了,那么那个字段理论上肯定有多种值的。比如本例中的zj_vote字段.<br />&nbsp;<br />漏洞证明:<br /><br />看排序。236和239数值相差3,我构造一个abs(zj_vote-237-(expr)) asc.<br />(expr)为假时,(239-237-0)=2,(236-237-0)=1,236排前面,<br />(expr)为真时,(239-237-1)=1,(236-237-1)=2,239排前面,<br />你也许会说,你这个236和239相差是3,当然简单了。如果相差2呢?<br />比如236和238怎么办?<br />不卖关子了,直接告诉你吧,他不是相差2么,你可以用abs(zj_vote-236-(expr)*3)啊<br />&nbsp;<br />http://active.zol.com.cn/diy/bisai.php?mont_h=2009-05&amp;id=12&amp;type=15&amp;order=abs(zj_vote-237-(length(user())&gt;20))+asc<br />&nbsp;<img alt="" src="https://img.jbzj.com/file_images/article/201205/201205281323429.jpg" /><br /><br />&nbsp;<br />&nbsp;<br />http://active.zol.com.cn/diy/bisai.php?mont_h=2009-05&amp;id=12&amp;type=15&amp;order=abs(zj_vote-237-(length(user())=20))+asc<br />&nbsp;<br />&nbsp;<img alt="" src="https://img.jbzj.com/file_images/article/201205/2012052813234210.jpg" /><br />&nbsp;<br />&nbsp;<br />修复方案:<br /><br />做一个允许的排序方式组合的数组,排序方式传排序方式的数组下标就可以了。<br />想直接传字段也可以,检查一下那个排序方式是否在数组里,不是就用默认排序方式。也就安全了。<br /><br />作者 小雨
頁: [1]
查看完整版本: 中关村在线网站order by语句的盲注思路及修复方案(图)