CVE-2013-4547 文件上传
漏洞原理:
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进行解析,最终造成解析漏洞
影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
https://vulhub.org/#/environments/nginx/CVE-2013-4547
条件:(1) 符合的漏洞版本 ,(2) 文件上传点





解析漏洞(配置不当)


目录穿越(配置不当)
漏洞原理:
Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。 错误的配置文件示例(原本的目的是为了让用户访问到/home/目录下的文件):
location /files {
alias /home/;
}
Payload: http://your-ip:8081/files../
,成功穿越到根目录:

CRLF注入(配置不当)

Nginx会将$uri进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞。
错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):
location / {
return 302 https://$host$uri;
}
%0a是换行 %0d是回车
检测:手工检测方式 %0aSet-cookie:JSPSESSID%3Ddrops

如果要触发XSS,那么XSS代码就要写在下面的html中,而不是响应头部上,所以%0d%0a%0d%0a<img src=1 onerror=alert(/xss/)>/

工具检测,CRLFuzz:https://github.com/dwisiswant0/crlfuzz/releases
支持单个目标和批量目标



没有漏洞payload测试


有漏洞payload测试

