WAF自動化暴破(繞過)腳本xwaf
xwaf
xwaf是一個python寫的waf自動繞過工具,上一個版本是bypass_waf,xwaf相比bypass_waf更智能,可無人干預,自動暴破waf
Disclaimer
- [!] legal disclaimer: Usage of 3xp10it.py and web.py for attacking targets without prior mutual consent is
- illegal.It is the end user's responsibility to obey all applicable local, state and federal laws.Developers
- assume no liability and are not responsible for any misuse or damage caused by this program.
Requirement
- python3
- pip3
- works on linux(test on ubuntu and kali2.0,others not test)
- python3安裝可參考如下步驟:
- apt-get install python3
- 或:
- wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz
- tar xJf Python-3.5.2.tar.xz
- cd Python-3.5.2
- ./configure --prefix=/opt/python3
- make && make install
- ln -s /opt/python3/bin/python3.5 /usr/local/bin/python3
- pip3安裝:
- apt-get install -y python3-pip
- kali linux2安裝pip3可參考如下步驟:
- echo "deb-src http://http.kali.org/kali kali main non-free contrib" >> /etc/apt/sources.list
- echo "deb-src http://security.kali.org/kali-security kali/updates main contrib non-free" >> /etc/apt/sources.list
- apt-get update
- apt-get install python3-pip
Usage
- eg:
- python3 xwaf.py -u "http://www.baidu.com/1.php?id=1"
- python3 xwaf.py -u "http://www.baidu.com/1.php" --data="postdata" -p xxx
- python3 xwaf.py -r /tmp/headerfile -p xxx --level 5
Attention
1.xwaf支持除-m/-l外的所有sqlmap參數,用法和sqlmap一樣即可,-m/-l為批量功能,暫不支持,如果需要批量,請自行code實現
2.由于xwaf已經有比較好的參數方案,一般情況下盡量少用參數,如果有必須要用的參數除外[如--data/-p/-r等參數]
3.普通get類型注入點,這樣用即可:
python3 xwaf.py -u "http://www.baidu.com/1.php?id=1&page=2" -p id
4.人工輸入的參數的優先級大于xwaf自帶的參數方案
5.關于--tamper參數的使用:
xwaf的主要功能是排列組合使用所有可能的tamper組合來爆破waf,如果人為使用了--tamper參數,xwaf將在人為設置的已有
tamper基礎上再排列組合,eg.人為使用的命令為:
python3 xwaf.py -u "http://www.baidu.com/1.php?id=1" --tamper=space2comment
那么xwaf使用的tamper方案中的每個都會有space2comment
6.關于代理的使用:
a)xwaf默認不用代理,如果使用代理需要在xwaf運行后選擇y|Y
b)使用的代理來源于程序自動收集的網上的代理
c)使用代理有防封的優點,但網絡連接速度不一定能保證
7.need python3
代碼流程圖
以[127.0.0.1/1.php?id=1為例]
1.start
2.檢測系統/root/.sqlmap/output/127.0.0.1/log文件是否存在
3.獲取log文件:
如果不存在log文件則調用get_log_file_need_tamper函數,執行完這個函數后獲得log文件,也即成功檢測出目標
url有sqli注入漏洞,如果執行完get_log_file_need_tamper函數沒有獲得log文件則認為該url沒有sqli漏洞
4.獲取db_type[數據庫類型]
調用get_db_type_need_tamper函數,用于后面的tamper排列組合時,只將目標url對應的數據庫類型的tamper用于
該目標在sql注入時tamper的選擇后的組合
5.獲取sqli_type[注入方法]
調用get_good_sqli_type_need_tamper函數,sql注入方法中一共有U|S|E+B|Q|T 6種注入方法,后3種查詢效率低,
首先在log文件中查找是否有U|S|E這3種高效方法中的任意一種,如果有略過這一步,否則執行
get_good_sqli_type_need_tamper函數,執行該函數將嘗試獲得一種以上的高效注入方法
6.獲取current-db[當前數據庫名]
如果上面獲得了高效注入方法,則先用高效注入方法獲得current-db,如果沒有則用B|Q|T方法嘗試獲得
current-db,用來嘗試獲得current-db的函數是get_db_name_need_tamper
7.獲取table[當前數據庫的表名]
如果上面獲得了高效注入方法,則先用高效注入方法獲得table,如果沒有則用B|Q|T方法嘗試獲得table,嘗試獲得
table的函數是get_table_name_need_tamper
8.獲取column[當前數據庫的***個表的所有列名]
如果上面獲得了高效注入方法,則先用高效注入方法獲得column,如果沒有則用B|Q|T方法獲得column,嘗試獲得
column的函數是get_column_name_need_tamper
9.獲取entries[column對應的真實數據]
調用get_entries_need_tamper函數,執行完get_entries_need_tamper函數后,waf成功繞過,從上面的步驟一直到
這個步驟,逐步獲得***繞過waf的腳本組合
About
1.xwaf支持記憶,運行中斷后下次繼續運行時會在中斷時的***一個命令附近繼續跑,不會重新經歷上面的所有函數的處理
2.xwaf支持sqlmap除-m/-l外的所有參數用法
3.各個get_xxx_need_tamper函數的處理采用針對當前url的數據庫類型(eg.MySQL)的所有過waf的腳本
(在sqlmap的tamper目錄中)的排列組合的結果與--hex或--no-cast選項進行暴力破解如果--hex起作用了則不再使用
--no-cast嘗試,--no-cast起作用了也不再用--hex嘗試
4.xwaf運行完后將在/root/.sqlmap/output/127.0.0.1目錄下的ini文件中看到相關信息,bypassed_command是成功暴破
waf的sqlmap語句
5.在tamper組合中,先用到的tamper會加入到上面的ini文件中,在以后的每個tamper組合中,綜合已經得到的有用的
tamper再組合,在上面的ini文件中的tamper_list即為不斷完善的tamper組合
6.支持自動更新升級,當前版本為1.1
Changelog
[2017-02-13]
更新支持代替sqlmap跑普通沒有waf的注入點,之前版本要求只能跑有waf的注入點
[2017-02-13]
更新支持自動進行版本升級
[2017-02-12]
更新支持所有sqlmap參數
[2017-01-18]
fix line128處的slef改成self
fix line128處的db_name未定義錯誤
[2016-11-15]
修復一處ACCESS數據庫考慮不周全判斷和幾處good_print函數調用錯誤
增加支持代理自動切換功能,自選,默認不用代理[用代理速度較慢]
[2016-11-02]
增加access數據庫特殊性的處理gg
[2016-11-01]
get_db_type_need_tamper之后的數據庫類型獲取由之前的get_db_type_from_log_file改成
eval(get_key_value_from_config_file(self.log_config_file,'default','db_type'))