Nginx
是一款轻量级的Web
服务器 / 反向代理服务器及电子邮件(IMAP/POP3)
代理服务器。其特点是占有内存少,并发能力强,事实上 nginx 的并发能力在同类型的网页服务器中表现较好,中国大陆使用Nginx
网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
nginx 漏洞复现(包含 nginx 的介绍,配置,访问控制等内容)
# CVE-2013-4547 文件名解析逻辑
由于非法字符空格和截止符导致 Nginx
在解析 URL 时的有限状态机混乱导致攻击者可以通过一个非编码空格绕过后缀名限制,允许攻击者绕过后缀名限制执行 PHP 代码。通过上传带有空格和截断符的文件, Nginx
本身不支持解析 PHP
只能加载 FastCGI模块
解析
影响版本
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
等于是因为存在构造文件名 被 php 的模块加载但实际上又被其他模块加载
1 | docker compose up -d |
# CVE-2016-1247 权限提升
内网中如果有机器是这样的可以拿这个打一下,目前复现有点困难
# CVE-2017-7529 越界读取缓存
正常读取缓存工具我们替换了读取的开始结束位置就可以读取到不同的信息
开启环境
1 |
|
Nginx
在进行反向代理时,会将一些静态文件进行缓存,缓存文件包括如下,当再次请求这些文件时它会直接将缓存文件的 Http
响应包体返回给我们
1 | 文件头 + Http响应包头 + Http响应包体 |
而我们构造 http
请求包头部中的 range
字段,选择 start
开始和 end
结束值让 Nginx
返回给我们指定位置的文件数据。如我们设置 start
和 end
为负值,则会返回 Http
响应包体的负数位置的文件数据给我们,也就是文件头和 Http
响应包头,这样我们就可以得到一些敏感信息如服务器的真实 IP
等,
直接打 POC
得到了对到服务器的真实 IP
脚本到自己电脑里
1 | python poc.py http://192.168.0.13:8080/ |
# CVE-2021-23017 命令执行 DNS 解析
漏洞分析文章 — 腾讯云
CVE-2021-23017 Nginx DNS 解析程序漏洞 | CN-SEC
POC 项目地址
靶场没有拿 Docker
开使用的是在线的 w
影响版本
0.6.18 - 1.20.0
POC
打不过去啊 不知道少了什么库还是什么,如果单单这样打会造成网站的拒绝服务 网站访问速度变的非常慢
1 | python3 poc.py -t http://x.x.x.x |
如果使用 python3 poc.py --target 172.1.16.100 --dns_server 172.1.16.1
类似这样的命令,指定 dns 服务器,会让目标直接显示 502
# Nginx 错误配置导致 3 种漏洞
【vulhub】Nginx 错误配置导致的漏洞_vulfocus nginx 配置错误
Docke
运行和在线的 Vulhub
启动后会监听 8080/8081/8082
三个端口,分别对应三种漏洞,自己电脑里的名字是这个
1 | docker compose up -d |
# CRLF 注入
在 HTTP
协议里, http
头部和 http
正文是用两个 CRLF
分割的,恶意的注入 http
返回包头部,即是 CRLF
注入漏洞,配置按照下面这里的问题是, $uri
变量包含用户输入的 URL
路径,如果这个路径被恶意构造,就可能导致安全问题
1 |
|
如果用户在 URL 中输入 %0a%0d
(这是 %0d%0a
的另一种写法,即 CRLF
), Nginx
会将其解码为 \r\n
,也就是 HTTP
头部和正文之间的分隔符
1 | http://192.168.100.23:8080/%0a%0dSet-Cookie:%20hahahah_caocaocao |
换行后衔接新的内容可以构造响应体的内容
# 目录穿越漏洞
Nginx
在配置别名的时候,如果忘记加 /
前面的闭合不了可以构造 ../跳转
,将造成一个目录穿越漏洞传穿越到根目录
1 | location /files { // 正常应该 /files/ 如忘记加了就可以凭借../跳转 |
# add_header 被覆盖
没啥实战用处啊
# Nginx 解析 PHP 漏洞
Nginx 解析漏洞复现_nginx 1.18.0 漏洞
# 漏洞原理
nginx.conf
的如下配置导致 nginx 把以’.php’结尾的文件交给 fastcgi
处理,所以我们可以上传任意一张图片后在后面接入 /saber.png/x.php
这样 fastcgi
就会去处理这个文件,但是发现不存在 x.php
这个时候配置开始出问题
1 | cgi.fix_pathinfo=1 // 自动修复路径,这个文件不存在就采用上层路径,拿上传路径去解析PHP |
利用这个原理我们上次有一个 PHP
的图片马上传成功后在后面随便拼接任意的 PHP
文件 服务器找不到这个文件就会把上一层的东西作为 PHP
去解析
1 | /saber.png/x.php=====>找不到x.php======>saber.png=====>作为php解析修复 |
# 复现步骤
复现就是首先制造好图片马然后抓包上传
1 | copy /b zhengchang.png + phpinfo.php get.png |
上传后 BP
抓取到路径然后拼接,最后在后面衔接
1 | http://192.168.0.13/uploadfiles/b18fbeebdbe0d538fc4667d2a9791c35.png |
# 漏洞防范
漏洞其实是由 php.ini
中 cgi.fix pathinfo
选项与 php-fpm
的配置一起导致的,防范的话,只需在 php-fpm
配置文件中设置 security.limit_extensions=.php
,重启一下服务即可。