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
2
3
4
docker compose up -d 

docker-compose ps

# CVE-2016-1247 权限提升

内网中如果有机器是这样的可以拿这个打一下,目前复现有点困难

# CVE-2017-7529 越界读取缓存

正常读取缓存工具我们替换了读取的开始结束位置就可以读取到不同的信息

开启环境

1
2
3
4
5
6
7
8

docker compose up -d

docker-compose ps




Nginx 在进行反向代理时,会将一些静态文件进行缓存,缓存文件包括如下,当再次请求这些文件时它会直接将缓存文件的 Http 响应包体返回给我们

1
文件头 + Http响应包头 + Http响应包体 

而我们构造 http 请求包头部中的 range 字段,选择 start 开始和 end 结束值让 Nginx 返回给我们指定位置的文件数据。如我们设置 startend 为负值,则会返回 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
2
3
docker compose up -d 

docker-compose ps

# CRLF 注入

HTTP 协议里, http 头部和 http 正文是用两个 CRLF 分割的,恶意的注入 http 返回包头部,即是 CRLF 注入漏洞,配置按照下面这里的问题是, $uri 变量包含用户输入的 URL 路径,如果这个路径被恶意构造,就可能导致安全问题

1
2
3
4
5
6
7
8
9


# 对匹配到的每一条域名路径执行302跳转,结果是重定向的目标地址是通过将请求的原始
# host(即请求的域名)和 uri(原始请求的路径)拼接到 https:// 协议前缀后面形成新的域名

  location / {
return 302 https://$host$uri;
}
Nginx错误配置

如果用户在 URL 中输入 %0a%0d (这是 %0d%0a 的另一种写法,即 CRLF ), Nginx 会将其解码为 \r\n ,也就是 HTTP 头部和正文之间的分隔符

1
2
3
4
5
6
7
http://192.168.100.23:8080/%0a%0dSet-Cookie:%20hahahah_caocaocao

http://192.168.100.23:8080/%0a%0d%0a%0dxxxx2233




换行后衔接新的内容可以构造响应体的内容

# 目录穿越漏洞

Nginx 在配置别名的时候,如果忘记加 / 前面的闭合不了可以构造 ../跳转 ,将造成一个目录穿越漏洞传穿越到根目录

1
2
3
4
location /files {  // 正常应该 /files/ 如忘记加了就可以凭借../跳转
alias /home/;
}

# add_header 被覆盖

没啥实战用处啊

# Nginx 解析 PHP 漏洞

Nginx 解析漏洞复现_nginx 1.18.0 漏洞

# 漏洞原理

nginx.conf 的如下配置导致 nginx 把以’.php’结尾的文件交给 fastcgi 处理,所以我们可以上传任意一张图片后在后面接入 /saber.png/x.php 这样 fastcgi 就会去处理这个文件,但是发现不存在 x.php 这个时候配置开始出问题

1
2
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
2
3
4
5
6
7
http://192.168.0.13/uploadfiles/b18fbeebdbe0d538fc4667d2a9791c35.png

// 触发PHPinfo()

http://192.168.0.13/uploadfiles/b18fbeebdbe0d538fc4667d2a9791c35.png/x.php


# 漏洞防范

漏洞其实是由 php.inicgi.fix pathinfo 选项与 php-fpm 的配置一起导致的,防范的话,只需在 php-fpm 配置文件中设置 security.limit_extensions=.php ,重启一下服务即可。

更新于 阅读次数