如何使用SQLMap指令碼繞過Web應用防火牆
Web 應用防火牆已經成為眾多企業的安全解決方案,然而還是有許多公司 經常忽略了一些比較實際的漏洞,僅僅依靠防火牆來進行保護。不幸的是,大多數(不是所有)的防火牆都可以被繞過,在這片文章中,我將會演示如何使用 SQLMap 的一些功能來繞過 WAF / IDS。
原作者為 SQLMap 編寫了一些指令碼,可以在 subversion 儲存庫的最新開發版本中找到: svn checkout 。
篡改指令碼的重點在於是使用特殊方法修改請求來避免 WAF 的檢測,在某些情況下,可能需要將若干個指令碼組合起來一起繞過 WAF。有關篡改指令碼的完整列表,請參照 https://svn.sqlmap.org/sqlmap/trunk/sqlmap/tamper/ 。
我將要演示的第一個指令碼是 space2hash.py 和 space2morehash.py ,它們可以與 MySQL 一起使用(依然沒有在MSSQL上進行嘗試)。這些指令碼將所有空格替換為使用隨機文字來截斷註釋,指令碼的擴充套件版本( space2morehash.py )還將在某些函式名稱和括號之間添加註釋。
要開始使用篡改指令碼,需先使用 –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
就十分有效!
“總之,我只是展示了一部分的指令碼,我強烈建議你們在使用前要對其進行測試,因為每個指令碼可以在不同的情況下使用。”
*本文源自: websec ,由大學新生Bai 翻譯整理,轉載請註明來自 Freebuf