WAF防御能力評(píng)測(cè)及工具
本篇文章介紹如何從常規(guī)攻擊的防御能力來(lái)評(píng)測(cè)一款WAF。一共覆蓋了十六種攻擊類型,每種類型均從利用場(chǎng)景(攻擊操作的目的),注入點(diǎn)(漏洞產(chǎn)生的地方,比如說(shuō)大多數(shù)WAF都會(huì)較全面地覆蓋來(lái)自GET請(qǐng)求的攻擊,有選擇地覆蓋來(lái)自POST請(qǐng)求的攻擊而忽略來(lái)自請(qǐng)求頭的攻擊)和繞過(guò)方式來(lái)評(píng)測(cè),最后附上評(píng)測(cè)代碼。
一、SQL注入(注入)
1. 利用場(chǎng)景
從攻擊者進(jìn)行SQL注入的階段來(lái)看,一般分為探測(cè)與攻擊兩個(gè)階段(p.s.攻擊階段是WAF的重點(diǎn)防御階段)
(1)探測(cè)階段
1) 探測(cè)是否存在SQL注入:基于SQL錯(cuò)誤回顯(e.g.extractvalue) 或時(shí)間響應(yīng)(Benchmark,sleep)來(lái)探測(cè)目標(biāo)網(wǎng)站是否存在SQL注入點(diǎn)
2) 識(shí)別數(shù)據(jù)庫(kù)類型:根據(jù)數(shù)據(jù)庫(kù)的slang來(lái)判斷目標(biāo)網(wǎng)站采用的哪種數(shù)據(jù)庫(kù)及數(shù)據(jù)庫(kù)的版本等基本信息,例如@@version,user()
(2)利用階段
i. select型SQLi
1) 讀取元數(shù)據(jù)庫(kù):通過(guò)讀取數(shù)據(jù)庫(kù)管理系統(tǒng)元數(shù)據(jù)庫(kù)(e.g. MySQL的information_schema, SQL Server的sysobjects)來(lái)探測(cè)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù),表,列等基本信息
2) 提取數(shù)據(jù):使用union查詢或盲注中的逐位探測(cè)(e.g.length,substr)或者條件探測(cè)(Select if(1=1,’a’,’b’);)來(lái)提取數(shù)據(jù)庫(kù)管理系統(tǒng)中的數(shù)據(jù),其中經(jīng)常會(huì)用到concat(),group_concat()等函數(shù),
3) 讀取系統(tǒng)文件:讀取數(shù)據(jù)庫(kù)管理系統(tǒng)所在操作系統(tǒng)中的重要系統(tǒng)文件(eg. MySQL的load_file)
4) 寫入系統(tǒng)文件:向數(shù)據(jù)庫(kù)管理系統(tǒng)所在操作系統(tǒng)寫入后門文件(e.g.MySQL的select into outfile)
5) 執(zhí)行系統(tǒng)命令:以數(shù)據(jù)庫(kù)管理系統(tǒng)為跳板執(zhí)行系統(tǒng)命令(e.g.SQL Server的exec master…xp_cmdshell)
ii. update型SQLi
iii. insert型SQLi
2.注入點(diǎn)
記住:任何輸入都是有害的
(1)GET QueryString
(2)POST
(3)Referer
(4)Cookie
(5)X_Forwarded_For
(6)UserAgent
(7)Basic-Authorization
特別注意:注入點(diǎn)不僅僅只存在于參數(shù)值,也存在于參數(shù)名,url路徑,那種只檢測(cè)參數(shù)值的WAF的防御能力必定有限
3.繞過(guò)方式
這里的繞過(guò)主要是針對(duì)采取模式匹配來(lái)識(shí)別攻擊的WAF檢測(cè)方法(其實(shí)大多數(shù)WAF的基本方法都是這個(gè),引申到IDS,IPS,anti-virus等安全產(chǎn)品都是采取的這種方法)
采取模式匹配的檢測(cè)方法會(huì)繞過(guò)的原因無(wú)外乎以下幾種:
1)HTTP協(xié)議解析漏洞 :WAF進(jìn)行模式匹配的時(shí)候都是對(duì)HTTP協(xié)議變量進(jìn)行匹配,攻擊者構(gòu)造異常的HTTP數(shù)據(jù)包導(dǎo)致不能正常提取變量,都不能進(jìn)入到模式匹配階段,自然而然就繞過(guò)了
2)模式匹配的先天不良:字符串匹配,無(wú)論是簡(jiǎn)單的正則匹配或者會(huì)配合一定的邏輯的匹配(比如對(duì)不同關(guān)鍵字進(jìn)行加權(quán)操作,前后依賴關(guān)系判斷)反正都逃不開(kāi)模式兩個(gè)字,而模式是固定的,就導(dǎo)致了各種側(cè)漏。
對(duì)于第二點(diǎn),在云WAF上的問(wèn)題最為嚴(yán)重,我們知道云WAF的用戶類型是多樣化的(不同的搭建技術(shù)PHP/ASP/JSP,運(yùn)行環(huán)境Windows/Linux,訪問(wèn)方式PC/Mobile),理想狀態(tài)下,應(yīng)該按站點(diǎn)類型精準(zhǔn)投放防御規(guī)則,但是..基于站點(diǎn)自動(dòng)建模(安全人員中缺乏數(shù)據(jù)分析師)是個(gè)“前沿”的技術(shù)活,而免費(fèi)模式下是產(chǎn)生不了多大動(dòng)力來(lái)投入精力的,所以現(xiàn)實(shí)是傾向于選擇更通用的方式(放棄少數(shù)人)按危害優(yōu)先級(jí)來(lái)定制規(guī)則。
以上繞過(guò)原因衍生了以下的通用繞過(guò)方式
(1)參數(shù)污染
(2)URL重寫
http://localhost/uyg/id/123+or+1=1/tp/456
(3) 加密payload
MD5、SHA-1、自定義加密
(4)緩沖區(qū)溢出
(5)編碼繞過(guò)
(6)特殊字符插入(%00)
(7)異常HTTP請(qǐng)求包(e.g.超級(jí)大,不符合HTTP規(guī)范但被server容錯(cuò)的數(shù)據(jù)包)
(8)數(shù)據(jù)包分塊傳輸方式Transfer-Encoding: chunked
SQL注入一般存在以下繞過(guò)方式(其實(shí)也就是模式匹配的先天不良)
1) 編碼繞過(guò):通過(guò)對(duì)SQL注入攻擊Payload進(jìn)行Unicode編碼,十六進(jìn)制編碼,雙URL編碼來(lái)繞過(guò)檢測(cè)規(guī)則
2) 注釋語(yǔ)句繞過(guò):通過(guò)在SQL注入攻擊Payload中插入注釋語(yǔ)句(內(nèi)聯(lián)注釋)來(lái)繞過(guò)檢測(cè)規(guī)則
3)大小寫繞過(guò):通過(guò)變化SQL注入攻擊Payload的大小寫來(lái)繞過(guò)檢測(cè)規(guī)則
4) 類型轉(zhuǎn)換繞過(guò):使用hex, ascii, ord, char,chr,cast,convert等類型轉(zhuǎn)換函數(shù)來(lái)變化特定字符來(lái)繞過(guò)檢測(cè)規(guī)則,除了類型轉(zhuǎn)換函數(shù)還有隱性類型轉(zhuǎn)換的特征 http://danqingdani.blog.163.com/blog/static/186094195201331854938182/
5) 生僻的SQL關(guān)鍵字繞過(guò)
6)特殊的sql語(yǔ)法(e.g. mysql . ~ ! + - 符號(hào))
7)關(guān)鍵字拆分
8)請(qǐng)求方式轉(zhuǎn)換(將GET轉(zhuǎn)變?yōu)镻OST,因?yàn)檎`報(bào)的問(wèn)題POST的規(guī)則要遠(yuǎn)遠(yuǎn)比GET規(guī)則松)
(參考了Seay大神總結(jié)的繞過(guò)方式)
二、文件包含(文件操作)
攻擊的核心目標(biāo)之一是信息操縱,而信息的載體就是文件(數(shù)據(jù)),對(duì)文件的非法讀、寫、刪除等操作就成為防御的核心。
1.利用場(chǎng)景
(1)包含本地文件
本地文件包含的出發(fā)點(diǎn)一般分為兩種
a. 讀取系統(tǒng)文件獲取敏感信息,例如配置文件
除了讀取同目錄下的文件外,一般會(huì)配合目錄遍歷
b. 實(shí)施代碼執(zhí)行
(1)包含(執(zhí)行)存在后門的文件(寫入后門的方法有很多,例如SQLI寫馬/文件上傳寫馬/代碼注入)
(2)包含(執(zhí)行)系統(tǒng)可執(zhí)行文件
(2)使用php://input 協(xié)議將文件包含漏洞變成代碼執(zhí)行漏洞 http://danqingdani.blog.163.com/blog/static/1860941952013993810261/
(2)包含遠(yuǎn)程文件
2.注入點(diǎn)
記?。喝魏屋斎攵际怯泻Φ?/p>
(1)GET QueryString
(2)POST
3.繞過(guò)方式
繞過(guò)目錄遍歷檢測(cè)(其實(shí)目錄遍歷因該單獨(dú)列出來(lái),在命令執(zhí)行等地方都會(huì)用到)
1) 編碼繞過(guò):
b. %c0%af Apache,Tomcat UTF-8編碼錯(cuò)誤
c. %25%5c Unicode漏洞
d. %c0%af
e. %c1%9c Unicode漏洞
f. %fc%80%80%80%80%af Unicode漏洞
2) 截?cái)? %00
讀取系統(tǒng)文件時(shí)的繞過(guò)檢測(cè)方法
1) 使用php://filter協(xié)議以base64編碼方式讀取指定文件內(nèi)容
2)使用data:// URI schema協(xié)議執(zhí)行系統(tǒng)命令
三、文件上傳/下載(文件操作)
1.利用場(chǎng)景
(1)直接上傳webshell文件
一般的文件上傳模塊,都會(huì)配置文件上傳白名單(e.g.只允許上傳圖片文件) ,所以這種攻擊方式的一般看是否有白名單以及如何繞過(guò)白名單
webshell的類型如下:
1> asp shell
2> php shell
3> jsp shell
4> python shell
5> pl-cgi shell
6> sh shell
7> c shell
8> cfm shell
9> exe shell
(2)圖片寫馬上傳
在文件名無(wú)法做文章的情況下,一般會(huì)配合服務(wù)器解析漏洞或者文件包含漏洞來(lái)利用
(3)下載任意文件
處理用戶請(qǐng)求的時(shí)候允許用戶提交文件路徑,攻擊者通過(guò)變化目錄或文件地址來(lái)達(dá)到下載系統(tǒng)敏感文件的目的
補(bǔ)充:
(1) PUT HTTP Method
(2) ActiveX
(3)JavaApplets
2.注入點(diǎn)
文件上傳表單
3.繞過(guò)
文件名白名單繞過(guò)
(1)利用上傳文件請(qǐng)求的解析漏洞,e.g.不能正常提取文件名
(2)配合服務(wù)器解析漏洞,構(gòu)造奇怪的文件名繞過(guò)白名單, e.g. file.php%00.jpg
服務(wù)器解析漏洞
(1)Apache解析漏洞
xxx.php.jpg
xxx.php.rar
xxx.php.x1.x2.x3
xxx.php. (windows下點(diǎn)和空格都會(huì)被自動(dòng)消除)
(2)Nginx解析漏洞
xxx.jpg%00.php
xxx.jpg/a.php
(3)IIS解析漏洞
xxx.asp;.jpg xxx.asa;.jpg xxx.cer;.jpg xxx.cdx;.jpg
xxx.asp:.jpg xxx.asa:.jpg xxx.cer:.jpg xxx.cdx:.jpg
xxx.asp/xx.jpg xxx.asa/xx.jpg xxx.cer/xx.jpg xxx.cdx/xx.jpg
參考 http://drops.wooyun.org/papers/539
四、命令執(zhí)行 (注入)
1.利用場(chǎng)景
輸入點(diǎn)接收并運(yùn)行系統(tǒng)命令
2.注入點(diǎn)
(1)POST
(2)GET
(3)Cookie
五、代碼執(zhí)行 (注入)
1.利用場(chǎng)景
(1)輸入點(diǎn)接收并運(yùn)行PHP/JSP/ASP代碼
2.注入點(diǎn)
(1)POST
(2)GET
(3)Cookie
六、webshell (這個(gè)分類有點(diǎn)糾結(jié),主要是從已經(jīng)被種馬的情況下看能否攔截)
1.利用場(chǎng)景
配合文件上傳、代碼執(zhí)行,SQLI寫馬等操作寫入webshell后進(jìn)行webshell連接
webshell按傳遞payload來(lái)分類的
(1)payload采用請(qǐng)求頭提交,以cookie提交最多,其中采取自定義請(qǐng)求頭更隱蔽
(2)payload采用POST提交
2.注入點(diǎn)
(1)GET QueryString
(2)POST
(3)Cookie
(4)其他請(qǐng)求頭
3.繞過(guò)方式
webshell payload提交的時(shí)候一般都會(huì)加密
以下列出常見(jiàn)的webshell,可以探測(cè)一下這些基本的webshell WAF是否能攔截
caidao一句話連接客戶端
Lanker微型php 后門客戶 2.0正式版 一句話連接客戶端
weevely php后門生成工具及客戶端端
webacco php后門生成工具及客戶端端
phpspy.php
b374k.php
80sec.php
90sec.php
r57.php
c99.php
b4che10r
X14ob-Sh3ll
aspxspy
server_sync.php (phpadmin后門文件)
七、XSS
1. 利用場(chǎng)景
從攻擊者進(jìn)行 XSS注的階段來(lái)看,一般分為探測(cè)與攻擊兩個(gè)階段。
探測(cè)階段是指彈框測(cè)試 xss是否存在,常用alert(),prompt(),confirm()等函數(shù)(彈框只是一種,也有看 html標(biāo)簽是否能實(shí)際運(yùn)行);
攻擊階段是指在確認(rèn)存在 XSS后,進(jìn)行利用,例如盲打盜取 cookie(session hijacking)偽造用戶身份登陸,蠕蟲(chóng)傳播,keylogger,下載安裝惡意軟件,構(gòu)造釣魚(yú)頁(yè)面
(xss我了解的太少,xss好復(fù)雜滴說(shuō),按成因劃分有反射型xss,存儲(chǔ)型xss,DOM型XSS,mXSS(突變型XSS),UXSS(通用型XSS),按平臺(tái)劃分還有flash xss,xss和sqli的攻擊方式都能出成一本書(shū)了)
2.注入點(diǎn)
記?。喝魏屋斎攵际怯泻Φ?/p>
(1)GET QueryString
(2)POST
(3)Cookie
3.繞過(guò)方式
1)編碼繞過(guò)(url unicode編碼,base64編碼)
2)使用Data URI schema繞過(guò)
3)使用Javascript偽協(xié)議
4)基于事件函數(shù)繞過(guò)
5)類型轉(zhuǎn)換繞過(guò)引號(hào)e.g.String.fromCharCode
6)xss payload在錨點(diǎn)后提交 https://www.securusglobal.com/community/2014/10/13/bypassing-wafs-with-svg/
八、CSRF
(其實(shí)CSRF更像一種攻擊模式而不僅僅是漏洞類型)
1.攻擊場(chǎng)景
由于http請(qǐng)求無(wú)狀態(tài),而服務(wù)器僅僅依賴于用戶瀏覽器發(fā)送cookie信息進(jìn)行身份合法性判斷,而web瀏覽器會(huì)自動(dòng)發(fā)送session id(cookie)的特性,攻擊者誘使受害者訪問(wèn)惡意請(qǐng)求,以受害者的身份執(zhí)行“構(gòu)造”的請(qǐng)求
2.注入點(diǎn)
記住:任何輸入都是有害的
(1)GET QueryString
(2)POST
3.繞過(guò)方式
csrf實(shí)際上是一種邏輯上的錯(cuò)誤,常規(guī)csrf的防御其實(shí)就不好辦(不能根據(jù)referer,有些csrf結(jié)合x(chóng)ss本來(lái)請(qǐng)求就是本域發(fā)起;而且還存在協(xié)議轉(zhuǎn)換丟referer,mobile平臺(tái)丟referer的情況)
九 、自動(dòng)化工具攻擊
自動(dòng)化工具的攻擊據(jù)統(tǒng)計(jì)占了總攻擊的90%,能否準(zhǔn)確的攔截這些自動(dòng)化工具是非??简?yàn)WAF能力的評(píng)測(cè)項(xiàng)。
自動(dòng)化工具分為離線工具與在線工具
<1>在線工具(基本是綜合性工具):
各種CDN服務(wù)都附帶網(wǎng)絡(luò)安全在線檢測(cè)功能(云端掃描器),這里就不提及了
<2>離線工具分為以下幾類:
a. 漏洞掃描器
(1)綜合漏洞掃描器
這里列出比較常用的
scanner信息參考 http://www.sectoolmarket.com/price-and-feature-comparison-of-web-application-scanners-unified-list.html
AWVS
AppScan
WebInspect
NetSparker
Websecurify
WebCruiser
Nikto
wikto
w3af
vega
OWASP-ZAP
arachni-scanner
golismero
brakeman ruby on rails漏洞掃描器
grendel-scan
(2)專項(xiàng)掃描器
a. SQLI/NoSQLI
Havij, SQLMap, Pangolin
b.XSS
X5S,XSScrapy
c.文件包含
fimap
d.開(kāi)源框架漏洞掃描器
wpscan
joomscan
(3)密碼破解工具
hydra
medusa
patator
(4)目錄字典攻擊工具
Pker
dirbuster
(5)其他
burpsuit
MSF
還有各種自己寫的腳本工具 sh/perl/python(e.g. pycurl,python-urllib)/php/ruby/java
十、惡意爬蟲(chóng)/采集器/機(jī)器人
惡意爬蟲(chóng)/采集器/機(jī)器人會(huì)給以內(nèi)容為王,帶寬又不寬裕的小網(wǎng)站帶來(lái)要命的傷害,所以也是評(píng)測(cè)WAF防御能力的重要方面,能否有效精準(zhǔn)地將其與搜索引擎(搜索引擎是不會(huì)提供其完整的IP段的)與正常的API調(diào)用區(qū)分開(kāi)來(lái)一直是WAF面臨的難題。
1.攻擊場(chǎng)景
(1)偽裝成搜索引擎繞過(guò)檢測(cè),該場(chǎng)景適用于缺少準(zhǔn)確的的搜索引擎判斷方法
(2)自動(dòng)發(fā)送垃圾評(píng)論機(jī)器人等
十一、信息泄露
1.攻擊場(chǎng)景
(1) 系統(tǒng)文件
直接訪問(wèn)備份、隱藏等信息文件
(2) 錯(cuò)誤回顯
暴目錄,暴路徑
(3)列目錄
(4)管理后臺(tái)暴露:搜索引擎收錄管理后臺(tái)后如何處理
十二 、重定向
主要用于釣魚(yú)
一般情況下WAF是不會(huì)防御這種漏洞
十三、基于會(huì)話的攻擊
1.攻擊場(chǎng)景
(1)采用固定的會(huì)話
(2)會(huì)話ID生成算法可猜測(cè)
(3)利用xss等其他漏洞劫持會(huì)話ID
十四、權(quán)限驗(yàn)證漏洞
1.攻擊場(chǎng)景
垂直/水平提升權(quán)限
(1)請(qǐng)求參數(shù)來(lái)控制權(quán)限
(2)referer來(lái)控制訪問(wèn)權(quán)限
一般情況下WAF不會(huì)防御這種漏洞(基本邏輯漏洞云WAF都不會(huì)防御)
十五 、拒絕服務(wù)
1.攻擊場(chǎng)景
(1)xml billion laughs (消耗內(nèi)存)
(2)CC (消耗帶寬)
(3)slow HTTP DoS(消耗帶寬)
十六、其他漏洞
(1)HTTP響應(yīng)拆分
(2)XML實(shí)體攻擊 可以參考pnig0s大牛的《XML實(shí)體攻擊-從內(nèi)網(wǎng)探測(cè)到命令執(zhí)行步步驚心》
(3)隱藏參數(shù)篡改
1)hidden表單值篡改
2)viewstate值篡改
(4)其他注入
1)XXE注入
2) XPath注入
3)LDAP注入
4)CRLF注入
(5)邏輯錯(cuò)誤 云WAF不會(huì)防!!
上訴評(píng)測(cè)的方法都是從WAF防御覆蓋度來(lái)考慮的,覆蓋的越全當(dāng)然越好。
其實(shí),WAF防御能力的評(píng)測(cè)概括的說(shuō)就是檢出率 (漏報(bào)率 false negative)與準(zhǔn)確率 (誤報(bào)率false
positive)。檢出率是一般是WAF廠商對(duì)外宣傳的核心,而實(shí)際準(zhǔn)確率(不少云WAF對(duì)管理后臺(tái),API接口調(diào)用,富文
本的誤報(bào)就滿嚴(yán)重的)更為重要(安全一定不能影響正常使用),后續(xù)另開(kāi)一篇來(lái)講誤報(bào)的問(wèn)題。
十七、WAF測(cè)試工具
WAF能力評(píng)測(cè)的方法,一句話來(lái)說(shuō),就是構(gòu)造攻擊場(chǎng)景,發(fā)送攻擊包,看WAF的響應(yīng)。
測(cè)試工具地址: https://github.com/tanjiti/WAFTest
源碼介紹:
(1)攻擊場(chǎng)景
https://github.com/tanjiti/WAFTest/tree/master/vulCode (持續(xù)添加中)
(2)發(fā)包工具
https://github.com/tanjiti/WAFTest/blob/master/HTTP.pl (參考:HTTP.pl——通過(guò)HTTP發(fā)包工具了解HTTP協(xié)議 )
https://github.com/tanjiti/WAFTest/blob/master/HTTPFromFile.pl (從文件讀取HTTP包內(nèi)容,并發(fā)送)
(3)攻擊包
https://github.com/tanjiti/WAFTest/tree/master/t (持續(xù)添加中)
測(cè)試示例:
git clone https://github.com/tanjiti/WAFTest.git
perl HTTPFromFile.pl -host www.tanjiti.com -dir t -code 403

選項(xiàng)說(shuō)明如下
perl HTTPFromFile.pl --helpUsage: perl HTTPFromFile.pl [-code 403] [-uri 127.0.0.1] [-host example.com] [-port 80] -file request_file_path-code: 指定攔截響應(yīng)碼,默認(rèn)為403,不同的WAF會(huì)為攔截響應(yīng)定制不同的響應(yīng)碼-uri: 指定使用WAF的IP或域名,默認(rèn)127.0.0.1-host: 指定發(fā)送請(qǐng)求的Host頭,如果uri未指定,則uri設(shè)置為host的值,默認(rèn)localhost-port: 指定使用WAF的端口號(hào),默認(rèn)80-file: T文件的文件路徑-dir: 存放T文件的目錄路徑。
原文地址:http://danqingdani.blog.163.com/blog/static/1860941952014101462723470/