Nginx常见2个漏洞复现
0x01:CVE-2013-4547
1.使用vulhub进行漏洞搭建,切换到nginx/cve-2013-4547,虽然漏洞时间比较早,但是漏洞类型还是比较经典,在当下还是会存在许多这样的漏洞,允许docker:
docker-compose up -d
该漏洞是文件名逻辑漏洞:
这个漏洞其实和代码执行没有太大的关系,主要原因是错误地解析了请求的URL,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。这是一个nginx解析漏洞
2.漏洞复现
受影响版本
Nginx 0.8.41~1.4.3
Nginx 1.5.0~1.5.7
漏洞原理:
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;
}
正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。而存在CVE-2013-4547的情况下,我们请求1.gif[0x20][0x00].php ,这个URI可以匹配上正则 .php$,可以进入这个Location块;但进入后,由于fastcgi在查找文件时被\0截断,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。
直接上传php文件:
上传失败:
bp抓包改后缀加空格绕过:
3.访问上传,修改后缀,增加截断
访问:http://192.168.18.181:8080/uploadfiles/1.gif ...php
再通过hex增加截断:
0x02:CVE-2017-7529
这是一个低危的漏洞,一些敏感信息的泄漏,但是我们通过复现可以加深理解:
注意⚠️:
- 出现在靶场具有python3的内部环境
- 外网复现失败,说明不可外部读取敏感信息
- 影响版本:Nginx 的 0.5.6 - 1.13.2版本
1.漏洞搭建同样使用vulhub切换到cve-2017-7529:
docker-compose up -d
2.漏洞复现,直接使用准备好的py脚本
3.实验原理
(1)由于对http header中range域处理不当造成。
(2)主要代码是ngx_http_range_parse函数中的循环。
(3)Nginx在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中的“HTTP返回包体”返回给用户。
(4)如果我们的请求中包含Range头,Nginx将会根据我指定的start和end位置,返回指定长度的内容。而如果我构造了两个负的位置,如(-600, -9223372036854774591),将可能读取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。当Nginx服务器使用代理缓存的情况下,攻击者通过利用该漏洞可以拿到服务器的后端真实IP。
本文作者:Arrest
本文链接:https://www.cnblogs.com/arrest/articles/17491926.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步