freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Nginx 文件名逻辑漏洞(CVE-2013-4547)
2021-08-12 21:01:58

1、Nginx简介

Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件服务器,特点是占用内存小,并发能力强

2、漏洞原理

CGI:是一种协议,定义了web服务器传递的数据格式。

FastCGI:优化版的CGI程序

PHP-CGI:PHP解释器,能够对PHP文件进行解析并返回相应的解析结果

PHP-FPM:FastCGI进程管理程序

当Nginx得到一个用户请求时,首先对url进行解析,进行正则匹配,如果匹配到以.php后缀结尾的文件名,会将请求的PHP文件交给PHP-CGI去解析。其中处理模块如下:

location ~ \.php$ {
    root           html;
    include        fastcgi_params;

    fastcgi_pass   IP:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
    fastcgi_param  DOCUMENT_ROOT /var/www/html;
}

以.php结尾的文件都会交给该模块处理,其中fastcgi_pass就是Nginx与PHP-FPM之间的媒介,通过ip+port的方式将请求转发给PHP解释器

CVE-2013-4547漏洞是由于非法字符空格和截止符导致Nginx在解析URL时的有限状态机混乱,导致攻击者可以通过一个非编码空格绕过后缀名限制。假设服务器中存在文件‘123.png ',则可以通过访问如下网址让服务器认为'123.png '的后缀为php

http://192.168.146.1/123.png \0.php

从代码层面来说,我们请求的url中123.png[0x20][0x00].php正好与location模块中的.php相匹配,但进入该模块后Nginx确认为请求的文件名是'123.png ',就设置其为script_name的值交给CGI进行解析,最终造成解析漏洞

3、影响版本

Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

4、漏洞复现

进入/vulhub/nginx/CVE-2013-4547,启动靶场环境:docker-compose up -d

利用攻击主机浏览器访问:http://靶机ip:8080,利用该图片上传页面,上传一个图片webshell,代码如下:

GIF98A
<?php phpinfo(); ?>

上传时抓包进行重命名:’phpinfo.png ',记得后面有空格

图片.png

访问上传的图片马,可以正常访问

使用0x00截断将图片马解析为PHP文件,访问该url并抓包修改http://192.168.146.134/uploadfiles/phpinfo.png a.php
原始请求抓包如下:
图片.png

a作为占位符,将%20删除后进入Hex中把表示a的61修改为00,最后发送请求

图片.png

最终发送的请求包如下

图片.png

按照上述修改后Nginx收到的请求就变为了:http://192.168.146.134/uploadfiles/phpinfo.png \0.php,使得png被解析为了PHP

图片.png

5、漏洞修复

将Nginx升级到1.5.7之后

# 渗透测试 # web安全 # 漏洞分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录