首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >渗透测试文件上传漏洞原理与验证(5)——Nginx文件解析漏洞

渗透测试文件上传漏洞原理与验证(5)——Nginx文件解析漏洞

原创
作者头像
周周的奇妙编程
修改2024-12-10 16:51:48
修改2024-12-10 16:51:48
1.1K0
举报
文章被收录于专栏:渗透测试专栏渗透测试专栏

Nginx配置

操作平台 : ubuntu14

代码语言:shell
复制
docker pull ubuntu:14.04.5

使用 docker run -d -it-p 本机端囗:80 ubuntu:14.04.5 启动镜像

使用docker exec -it 容器ID /bin/bash 进入容器

然后使用以下语句安装相关环境:

代码语言:shell
复制
apt-get update # 更新源
apt-getinstall vim #安装vim
apt-getinstall nginx#安装nginx
service nginx start #启动nginx服务
apt-get install php5-fpm#安装php5-fpm

刚安装好的Nginx是不能解析php的,需要修改配置文件:

/etc/nginx/sites-available/default:

Nginx的两种启动方式:

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

如果倒数第三行打开,则是使用套接字方式启动

现在使用/etc/init.d/php5-fpm start启动web服务

然后到web目录中写一个测试的php文件,重启nginx服务。

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

相关目录

代码语言:shell
复制
/usr/share/nginx/html#默认web目录
/etc/nginx/# 配置文件目录
/etc/php5/fpm # php配置文件目录
/var/log/nginx/access.log#访问日志
/var/log/nginx/error.log # 错误日志

Nginx文件解析漏洞

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

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

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

和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存在,便把/1.jpg当成要执行的文件了,又因为后缀为jpg,php认为这不是php文件,于是返回“Access denied."

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 中可以修改,默认是开启的

代码语言:shell
复制
/etc/php5/fpm/php.ini

默认是1,不需要修改

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

再次访问1.jpg/1.php

文件解析漏洞修复方法

1.将php.ini文件中的cgi.fix_pathinfo的值设为0。这样php在解析1.jpg/1.php这样的目录时,只要1.php不存在就会显示404。

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


本文部分图片摘自深信服安全服务认证工程师课程课件中,为方便个人学习使用,勿作商用!!!!文字内容为自己手打,并非直接搬运!如有侵权,请联系删除!!!

本文档所提供的信息仅用于教育目的及在获得明确授权的情况下进行渗透测试。任何未经授权使用本文档中技术信息的行为都是严格禁止的,并可能违反《中华人民共和国网络安全法》及相关法律法规。使用者应当合法合规地运用所学知识,不得用于非法入侵、破坏信息系统等恶意活动。我们强烈建议所有读者遵守当地法律与道德规范,在合法范围内探索信息技术。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Nginx配置
    • 相关目录
  • Nginx文件解析漏洞
    • 原理示例
  • 文件解析漏洞修复方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档