摘要: SQLMap相信大家都不陌生,这篇文章将会告诉大家如何使用 SQLMap 的一些功能来绕过 WAF / IDS,快来一起学习吧!
Web 应用防火墙已经成为众多企业的安全解决方案,然而还是有许多公司仅仅依靠防火墙来进行保护。不幸的是,大多数(不是所有)的防火墙都可以被绕过,在这片文章中,我将会演示如何使用 SQLMap 的一些功能来绕过 WAF / IDS。
原作者为 SQLMap 编写了一些script,可以在 subversion 存储库的最新开发版本中找到:svn checkout。
篡改script的重点在于是使用特殊方法修改请求来避免 WAF 的检测,在某些情况下,可能需要将若干个script组合起来一起绕过 WAF。
我将要演示的第一个是space2hash.py和space2morehash.py,它们可以与 MySQL 一起使用(依然没有在MSSQL上进行尝试)。这些将所有空格替换为使用随机文本来截断注释,扩展版本(space2morehash.py)还将在某些函数名称和括号之间添加注释。
要开始使用篡改script,需先使用 –tamper 参数,后面再加上其名称。在本文的示例中,我将使用以下命令:
sqlmap -u http://192.168.0.107/test.php?id=1 -v 3 --dbms "MySQL" --technique U -p id --batch --tamper "space2morehash.py"
如图1所示,使用了%23randomText%0A来替换注入中的空格,当然这是经过URL编码的。部分函数如:CHAR(), USER(), CONCAT() 都变为 FUNCTION%23randomText%0A() ,因为它们并没有出现在IGNORE_SPACE_AFFECTED_KEYWORDS的黑名单中。这是因为MySQL的函数名称的解析以及它是如何处理函数的调用和标识符的。
另外两个替换空格的是space2mssqlblank.py和space2mysqlblank.py。MySQL允许字符 09, 0A-0D, A0 被用作空格,而MSSQL允许的字符范围要更加的宽,包括从 01-1F。
接下来我们有一些乱码的:charencode.py 和 chardoubleencode.py 。这些对于绕过不同的关键字过滤非常有用,例如,当检测到 table_name 且无法绕过它时。
如果 Web 应用的 URL 由于某些原因解码了请求,则 chardoubleencode.py 就可以派上用场。
此外,如果有的应用是用 ASP / ASP.NET 编写的话,则 charunicodeencode.py 和 percentage.py就可以用于隐藏真正有效的 payload。
ASP 的一个有趣特性就是可以在字符之间添加任意数量的百分号。例如,AND 1=%%%%%%%%1
就十分有效!