Watchbird是一個(gè)專(zhuān)門(mén)為AWD而生的PHP防火墻,采用純PHP+JS+CSS編寫(xiě)而成,單文件設(shè)計(jì)模式,無(wú)任何外部依賴(lài),其特點(diǎn)有將原始請(qǐng)求包拼湊出來(lái)而實(shí)現(xiàn)的內(nèi)網(wǎng)轉(zhuǎn)發(fā),基于putenv和ld_preload的命令執(zhí)行保護(hù),一個(gè)漂亮的前端以及流量重放功能.
工具安裝
廣大研究人員可以使用下列命令直接將項(xiàng)目源碼克隆至本地
工具部署
1.進(jìn)入下載好的文件夾目錄
2.編譯waf.c生成.so文件,參考命令:gcc waf.c -shared -fPIC -o waf.so
3.將waf.so,watchbird.php文件存放在/var/www/html或其他目錄中
4.訪(fǎng)問(wèn)任意啟用了waf的文件, 參數(shù)?watchbird=ui打開(kāi)watchbird控制臺(tái), 創(chuàng)建一個(gè)初始密碼并進(jìn)行相關(guān)配置
5.將以下代碼放入需要啟用waf的php腳本的第一行 6.enjoy it!
功能介紹
易于配置(單文件, 無(wú)需加載外部js/css)
可以隨時(shí)開(kāi)啟/關(guān)閉某項(xiàng)防御
基本防御:
數(shù)據(jù)庫(kù)注入(sql injection)
文件上傳(upload)
文件包含(lfi)
flag關(guān)鍵字
PHP反序列化(unserialize)
命令執(zhí)行(rce)
分布式拒絕服務(wù)攻擊(ddos)
請(qǐng)求頭,請(qǐng)求參數(shù)(GET/POST)關(guān)鍵字
特殊字符
深度防御:
響應(yīng)檢測(cè)/反向代理(默認(rèn)將流量發(fā)送至本地服務(wù)器自檢,可配置代理服務(wù)器IP及端口實(shí)現(xiàn)反代功能)
響應(yīng)flag檢測(cè)并返回虛假flag
基于open_basedir的PHP文件操作保護(hù)
基于LD_PRELOAD的指令執(zhí)行保護(hù)
網(wǎng)頁(yè)控制臺(tái):
功能開(kāi)關(guān)及配置
實(shí)時(shí)日志查看
日志流量重放, 可廣播流量至指定網(wǎng)段
RCE/文件上傳/深度檢測(cè) 防御通知(由于chrome無(wú)法允許不安全的網(wǎng)站(無(wú)SSL證書(shū))顯示通知,請(qǐng)使用Firefox并修改about:config中dom.webnotifications.allowinsecure為true)
工具起源
一開(kāi)始做這個(gè)工具是因?yàn)榧磳⒓觓wd的線(xiàn)下賽而又沒(méi)有好用的waf,網(wǎng)上的waf無(wú)法滿(mǎn)足自己的需求于是就開(kāi)始著寫(xiě)自己的waf,一開(kāi)始的構(gòu)想很簡(jiǎn)單,我從網(wǎng)上找到了一份awd的簡(jiǎn)單waf(所以你可能會(huì)在源碼的某處發(fā)現(xiàn)似曾熟悉的代碼),然后實(shí)現(xiàn)了GET/POST/請(qǐng)求頭關(guān)鍵字檢測(cè),文件上傳檢測(cè)的功能(留了個(gè)trick,上傳php等惡意文件會(huì)提示上傳成功),后面又加入了防ddos的功能(原理很簡(jiǎn)陋,就是記錄每秒某個(gè)IP的訪(fǎng)問(wèn)次數(shù),超過(guò)某個(gè)次數(shù)就直接die)
到后來(lái)leohearts看到了我的waf并且開(kāi)始參與這個(gè)waf的編寫(xiě)工作,我們構(gòu)想通過(guò)純PHP的代碼將原始請(qǐng)求包重新拼湊起來(lái),最后將這個(gè)請(qǐng)求包發(fā)給自身完成自檢或發(fā)送到其他靶機(jī)實(shí)現(xiàn)內(nèi)網(wǎng)轉(zhuǎn)發(fā)的功能,這個(gè)功能一旦實(shí)現(xiàn),無(wú)疑會(huì)非常強(qiáng)大,我們經(jīng)歷了很多問(wèn)題,比如BOM頭,分塊運(yùn)輸,如何獲取原始的multipart/form-data等等,幸好我們最終成功實(shí)現(xiàn)了這個(gè)功能,也是本waf最亮眼的功能–內(nèi)網(wǎng)轉(zhuǎn)發(fā).
過(guò)了一段時(shí)間后,leohearts的一個(gè)提議讓我們重新回到waf的編寫(xiě)工作:基于putenv和ld_preload的命令執(zhí)行保護(hù).經(jīng)由他手這個(gè)waf又實(shí)現(xiàn)了一個(gè)漂亮的前端方便使用人員對(duì)waf的控制,我們的靈感不斷迸發(fā),又相繼實(shí)現(xiàn)了基于open_basedir的文件操作保護(hù)(防止使用php讀取/flag),與命令執(zhí)行保護(hù)構(gòu)成了內(nèi)外的雙重防護(hù),最后我們實(shí)現(xiàn)了流量重放與批量提交flag的功能.
工具預(yù)覽
工具缺點(diǎn)
正如你所見(jiàn),這個(gè)waf雖然對(duì)外很強(qiáng)大,但并非沒(méi)有缺點(diǎn),它自身仍然存在許多問(wèn)題,例如open_basedir,ld_preload可以被繞過(guò),靈活多變的PHP可以繞過(guò)關(guān)鍵字檢測(cè),還有由于自檢可能帶來(lái)的安全問(wèn)題,而waf本身的安全問(wèn)題由于在awd中只有ctf和www-data權(quán)限的情況下很難對(duì)waf的功能與自身安全進(jìn)行增強(qiáng),所以我們本著學(xué)習(xí)與交流的態(tài)度開(kāi)源了本waf