nginx文件解析漏洞测试

nginx文件解析漏洞测试

码农世界 2024-05-28 前端 69 次浏览 0个评论

环境条件:ubuntu14,已安装docker,docker pull ubuntu:14.04.5

一、Nginx配置

1、使用docker启动容器:

docker run -itd --name ubuntu -p 8088:80 ubuntu:14.04.5

2、进入容器:

docker exec -it ubuntu /bin/bash

3、然后使用以下语句安装相关环境:(注意是在容器中执行)

①apt-get update # 更新源

②apt-get install vim #安装vim

③apt-get install nginx#安装nginx

④service nginx start#启动nginx服务

⑤apt-get install php5-fpm#安装php5-fpm

配置方法:

刚安装好的Nginx是不能解析php的,需要修改配置文件:/etc/nginx/sites-available/default:

①cd  /etc/nginx/sites-available/

②vim default

修改以下四项(不要忘记loaction也要打开)

Nginx的两种启动方式

第五行如果打开,就是使用tcp方式启动,php-fpm将会本地监听9000端口如果倒数第三行打开,则

是使用套接字方式启动。

现在使用/etc/init.d/php5-fpm start启动web服务然后到web目录中写一个测试的php文件,重启

nginx服务:尝试访问,如果可以解析,则环境配置成功。

③/etc/init.d/php5-fpm start

④cd /usr/share/nginx/html   进入web目录

创建测试程序

⑤vim   info.php

重启nginx服务

⑥service nginx restart

访问:192.168.129.136:8088/info.php

相关目录

/usr/share/nginx/html#默认web目录

/etc/nginx/# 配置文件目录

/etc/php5/fpm # php配置文件目录

/var/log/nginx/access.log #访问日志

/var/log/nginx/error.log # 错误日志

原理

1、对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加

为test.jpg/x.php 进行解析攻击。

2、对低版本的Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。

3、Nginx下,请求文件/shell.gif时在后面加个*.php,即/shell.gif/1.php,可能会被当作PHP代码执行。

4、和Apache一样,Nginx也是通过mime.types识别文件:文件在/etc/nginx/mime.types

示例:

创建一个1.jpg,然后访问1.jpg/1.php显示:"Access denied."为什么?

Nginx拿到文件路径/1.jpg/1.php后,一看后缀是.php,便认为该文件是php文件转交给php去处理。

php一看/1.jpg/1.php不存在,便删去最后的/1.php,又看/1.jpg存在,便把/1jpg当成要执行的文件

了,又因为后缀为jpg,php认为这不是php文件,于是返回“Access denied.

从宿主机上传图片到容器

5、 docker cp /root/桌面/202405241631779.png 071eeea207dd:/usr/share/nginx/html


cgi.fix_pathinfo,该值默认为1,表示开启。

用途:对文件路径进行“修理’

当php遇到文件路径“/aaa.xxx/bbb.yyy/ccc.zzz”时,若然后判断“/aaa.xxx/bbb.yyy/ccc.zzz”不存在,

则会去掉最后的“/ccc.zzz”当做文件“/aaa.xxx/bbb.yyy”是否存在

若存在,则把“/aaa.xxx/bbb.yyy"/aaa.xxx/bbb.yyy/ccc.zzz",若“/aaa.xxx/bbb.yyy”仍不存在,则继

续去掉"/bbb.yyy”,以此类推。

配置:

cgi.fix_pathinfo这个配置在php.ini 中可以修改,默认是开启的

/etc/php5/fpm/php.ini

默认是1,不需要修改

在vim编辑器中/ 查找关键词

配置/etc/php5/fpm/pool.d/www.conf中security.limit_extensions允许解析其他格式文件为PHP

改为空

注意:把注意去掉

测试

再次访问1.png/1.php

这应该是尝试解析成php失败

文件解析漏洞修复方法:

1.将php.ini文件中的cgi.fix _pathinfo的值设为0。这样php在解析1jpg/1.php这样的目录时,只要

1.php不存在就会显示404。

2.将/etc/php5/fpm/pool.d/www.conf中security.limit extensions后面的值设为.php。

Nginx配置

配置方法:

相关目录

原理

配置:

文件解析漏洞修复方法:


转载请注明来自码农世界,本文标题:《nginx文件解析漏洞测试》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,69人围观)参与讨论

还没有评论,来说两句吧...

Top