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