nginx解析漏洞简单复现及修复

Nginx简介

Nginx是一款轻量级的web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占内存小、并发能力强;国内使用Nginx的有百度、京东、新浪、网易、腾讯、淘宝等

优势

1、作为Web服务器,Nginx处理静态文件、索引文件、自动索引的效率非常高
2、作为代理服务器,Nginx可以实现无缓存的反向代理加速,提高网站运行速度
3、作为负载均衡服务器,Nginx既可以在内部直接支持rails和PHP,也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进行负载均衡
4、性能方面:Nginx是专门为性能优化而开发的,非常注重效率;它采用内核poll模型,可以支持更多的并发连接,最大可以支持对五万个并发连接数的响应,且只占用很低的内存资源
5、稳定性方面:Nginx采取了分阶段资源分配技术,使得CPU与内存的占用率非常低,类似DOS这样的攻击对Nginx来说基本上是没有任何作用的
6、高可用性方面:Nginx支持热部署,启动速度特别迅速,可以在不间断服务的情况下,对软件版本或配置进行升级,即使运行数月也无需重新启动,几乎可以做到7x24小时不间断地运行

通过yum安装Nginx

#service firewalld stop      #关闭防火墙
#setenforce 0

#yum install -y nginx

提示no package Nginx available:
需要先安装epel:

yum install epel-release

安装epel后就可以安装Nginx了

启动Nginx:

[root@localhost ~]#service nginx start
Redirecting to /bin/systemctl start nginx.service
[root@localhost ~]#service nginx status
Redirecting to /bin/systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disa>
   Active: active (running) since Tue 2020-08-18 15:01:02 CST; 6s ago
  Process: 20686 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 20684 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
  Process: 20683 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCC>
 Main PID: 20688 (nginx)
    Tasks: 2 (limit: 5892)
   Memory: 4.1M
   CGroup: /system.slice/nginx.service
           ├─20688 nginx: master process /usr/sbin/nginx
           └─20689 nginx: worker process

Aug 18 15:01:02 localhost.localdomain systemd[1]: Starting The nginx HTTP and reverse p>
Aug 18 15:01:02 localhost.localdomain nginx[20684]: nginx: the configuration file /etc/>
Aug 18 15:01:02 localhost.localdomain nginx[20684]: nginx: configuration file /etc/ngin>
Aug 18 15:01:02 localhost.localdomain systemd[1]: nginx.service: Failed to parse PID fr>
Aug 18 15:01:02 localhost.localdomain systemd[1]: Started The nginx HTTP and reverse pr>

在这里插入图片描述

Nginx解析漏洞原理

Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。
当访问www.xxx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI;PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以会将phpinfo.jpg作为PHP文件来解析

漏洞形式

www.xxx.com/1.jpg/1.php
www.xxx.com/1.jpg%00.php(Nginx<8.03空字节代码执行漏洞)
www.xxx.com/1.jpg/%20\1.jpg

危害

利用该漏洞,攻击者可以将任意文件类型作为PHP文件解析,从而获取webshell

漏洞简单复现

先找到Nginx的默认web目录:
在这里插入图片描述
新建文件1.jpg:
在这里插入图片描述
用火狐浏览器访问localhost/1.jpg:显示图片解析错误
在这里插入图片描述
访问localhost/1.jpg/1.php:显示页面不存在
在这里插入图片描述
原因:Nginx不支持PHP

解决方法:配置Nginx支持PHP
将配置文件改为备份文件:
在这里插入图片描述
使用默认的配置文件作为配置文件:
在这里插入图片描述
修改Nginx配置文件/etc/nginx/nginx.conf,添加fastcgi支持:
在这里插入图片描述
45:增加index.php
在这里插入图片描述
65—71:去掉前面的#号
在这里插入图片描述
69:修改为网站根目录的绝对路径

重启Nginx
在这里插入图片描述
重启成功

测试Nginx

在网站根目录/usr/share/nginx/html里新建test.php
在这里插入图片描述
重新访问localhost/1.jpg/1.php:
在这里插入图片描述
修改/etc/php-fpm.d/www.conf:
在这里插入图片描述
39、41:修改用户、组为Nginx
在这里插入图片描述
190:添加一些常用的扩展名

重启PHP服务:

参考链接 :

nginx解析漏洞简单复现及修复 :https://mp.weixin.qq.com/s/86RxwkVNZJAAT4w_uOWvSw

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寰宇001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值