漏洞复现
01-环境搭建
02-Tomcat
03-Nginx
04-Apache
05-JBoss
06-WebLogic
07-Nacos
08-Struts2
09-Spring
10-Log4j2
11-Shiro
12-FastJson
13-RuoYi
14-ThinkPHP
-
+
03-Nginx
浏览
1
# 一、Nginx  Nginx 是由俄罗斯程序员伊戈尔・赛索耶夫开发的开源 Web 服务器软件,源代码以 2-clause BSD 许可证开放,可免费用于商业与个人场景。 其采用异步非阻塞事件驱动架构,结合 Linux 下的epoll、BSD 下的 kqueue 等高效事件通知机制,专为解决传统 Web 服务器面临的 C10K(一万个并发连接)问题设计,从诞生之初就确立了高并发、低资源消耗的核心技术目标。 # 二、CVE-2013-4547 ## 漏洞描述 文件名逻辑漏洞 -- CVE-2013-4547 Nginx在解析URL时会因为空格和截断符的存在,错误地解析请求的URL。所以可以通过添加非编码空格和截断符绕过文件后缀的限制。 > Nginx是怎么读取文件的呢? 当nginx读取到.php文件时,会将文件传递给Fast CGI进行解析,常用写法: ```php 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; } ``` 正常情况下,也只有.php后缀的文件才会被发送给fastcgi解析。 而存在CVE-2013-4547的情况下,我们请求1.gif\[0x20][0x00].php,这个URI可以匹配上正则\.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。 fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。 所以,我们只需要上传一个空格结尾的文件,即可使PHP解析。 > 什么是Fast CGI FastCGI(Fast Common Gateway Interface)是一种通用的、平台无关的、轻量级的进程间通信协议,用于在Web服务器和应用程序服务器之间进行通信。 允许Web服务器(Nginx)将请求传递给应用程序服务器(PHP-FPM),并接收应用程序服务器处理后的响应,然后将其发送回客户端。 > 举个例子 比如很多网站限制了允许访问后台的IP: ```json 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 0.8.41 - 1.4.3 / 1.5.0 - 1.5.7 ## 漏洞复现 进入靶场环境,启动容器 ```txt root@ubuntu:~/vulhub# cd ./nginx/CVE-2013-4547/ root@ubuntu:~/vulhub/nginx/CVE-2013-4547# docker compose up -d ``` 直接上传php后缀文件  抓取数据包,将php后缀名修改为jpg a.php,其中a是作为占位符存在  切换为16进制,将61修改为00  上传成功  传入成功  ## 修复建议 - 升级版本 # 三、解析漏洞 ## 漏洞描述 该漏洞是配置不当导致的解析漏洞。 通常nginx会把.php结尾的文件交给FastCGI处理,假设请求的URL是这样/uploadfiles/a.png/a.php,如果FastCGI在处理/a.php文件时发现这个文件不存在,并且配置文件中的配置项cgi.fix_pathinfo=1默认开启(路径修复:如果当前路径不存在则采用上级路径),那么此时这里交由fastcgi处理的文件就会变成/a.png。 还有一点就是 php-fpm.conf 中的security.limit_extensions配置项会限制FastCGI解析文件的类型。当设置为空的时候才允许fastcgi将.png等文件当做php代码解析。 ## 影响范围 - 全版本 ## 漏洞复现 进入靶场环境,启动容器   制作图片马: ```cmd copy test.jpg/b + shell.php/a shell.jpg # /b 标识按照二进制读取文件 # /a 按照文本读取文件 ```  上传制作的图片马,上传成功且得到路径:  访问路径并且加上.php,成功读取:  加上/.php,则会解析其中的php代码  ## 修复建议 - 将php.ini文件中的cgi.fix_pathinfo的值设置为0 - php-fpm.conf中的security.limit_extensions后面的值设置为.php # 四、目录穿越漏洞 ## 漏洞描述 当配置Nginx访问静态资源时,如果alias路径后没有配置/,而location路径后也没有配置/,就可能出现目录穿越漏洞。 ```json location /files { alias /home/; } ```  ## 影响范围 - 全版本 ## 漏洞复现 进入靶场环境,启动容器: ```txt root@ubuntu:~/vulhub# cd ./nginx/insecure-configuration/ root@ubuntu:~/vulhub/nginx/insecure-configuration# docker compose up -d ``` 当访问/files../时,Nginx实际处理的路径是/home/../,从而实现了穿越目录  ## 修复建议 - 修正 alias 斜杠 - 增加路径校验,禁止..路径序列 - 开启文件权限最小化
毛林
2026年11月15日 18:41
转发文档
收藏文档
上一篇
下一篇
评论(0)
登录
后可发表评论
还没有评论,来抢沙发~
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
还没有评论,来抢沙发~