Nginx解析漏洞

原理:在任意文件名后面添加如/*.php,nginx都会将该文件当做php文件类型,交给php去解析执行
例:xx.jpg,其中源码为<?php phpinfo();?>
访问xx.jpg时,在xx.jpg后面添加/xx.php,即可实现nginx解析漏洞,将xx.jpg以php解析执行

我们将上述情况做个实验:这里我使用的是集成环境phpstudy

浏览器访问:


返回了Access denied,这是为何?
我们先来梳理一遍流程,Nginx看到xx.jpg,根据mime.types,知道它是图片类型,就交给图片去处理;Nginx看到xx.jpg/xx.php,看到了.php,知道它是php类型,就交给php去处理,php看到xx.jpg/xx.php后缀是.php,就执行xx.jpg/xx.php这个文件,执行时发现不存在xx.php,就删除/xx.php,继续向前看,发现了xx.jpg,但php发现.jpg不是他认识的php类型,就不以php执行,就返回了Access denied.

为什么php可以遇到删除它呢,这是因为php.ini中的配置:cgi.fix_pathinfo=1,一般默认为1,当他为1时,即表示开启php对文件路径的修理,假设当php见到aa.xxx/aa.yyy/aa.zzz这个文件时,php没有找到aa.xxx/aa.yyy/aa.zzz这个文件(记住,aa.xxx/aa.yyy/aa.zzz是个整体!),就删除后面的/aa.zzz,检测aa.xxx/aa.yyy这个文件是否存在,若存在,并且php认识它,就以php解析执行(不认识返回Access denied.),若不存在,删除/aa.yyy,检测aa,xxx文件是否存在,以此类推
注:文章中所有实验,全部默认开启php修理功能(cgi.fix_pathinfo=1)

测试上面的xx.jpg/xx.php时,cgi.fix_pathinfo是开启的,为什么还是无法解析呢,正如上面所说,php不认识.jpg这个类型,需要配置http-fpm.conf中的security.limit_extensions为空(这个配置完后需要重启nginx)
例:security.limit_extensions默认配置为;security.limit_extensions = .php .php3 .php4 .php5

这个什么意思?这个表示security.limit_extensions允许解析其他文件为php类型,我的理解就是,规定php认识的后缀类型有哪些(限制它),这也就是为什么php不认识.jpg,要知道,但凡php认识的后缀类型,都要以php格式来解析执行的,一开始security.limit_extensions只认识.php .php3 .php4 .php5,现在改为空,表示php认识任何后缀类型,那又有疑问了,有人说我设置了security.limit_extensions=空,可我直接访问xx.jpg,xx.jpg没有被php解析执行,Why?其实,security.limit_extensions=空确实表示将任何后缀名文件当做php解析执行,但你要知道,文件首先是要经过Nginx判断的,像这个xx.jpg,Nginx认识他,直接判断他为图片,就交给图片处理了,那还轮得到php修理后执行,所以要想将xx.jpg给php修理执行,首先要过Nginx这一关,如使用xx.jpg/xx.php或xx.jpg/xx.php/xx.xxoo(从右往左判断Nginx是否认识),使用.php欺骗Nginx,告诉他,我这是php文件,交给php去。
可以看看IIS7.x的解析漏洞,有异曲同工之妙 文件解析漏洞总结-IIS
如果想让xx.jpg可以以php解析,可以配置nginx.conf,就像配置apache的httpd.conf中的AddType(当然这个我是猜的,实际可能没有,nginx可能只能通过在url中,在xx.jpg后面添加/xx.php来将xx.jpg以php解析执行,毕竟每个中间件都不同嘛)

所以综合而言,Nginx漏洞利用的条件是:
(1)Nginx的http-fpm.conf中security.limit_extensions=空或其它指定的以php解析执行的后缀
(2)php开启文件修理:php.ini中cgi.fix_pathinfo=1

接下来就可以进行漏洞复现了,分别在说一下流程
xx.jpg源码:

利用一:xx.jpg/xx.php,Nginx从右向左找认识的后缀,看到.php,将xx.jpg/xx.php交给php去修理执行,php修理时发现xx.jpg/xx.php不存在,删除/xx.php,继续修理,发现xx.jpg存在,就将xx.jpg以php解析执行

利用二:xx.jpg/xx.php/xx.xxoo,Nginx从右向左找认识的后缀,看到.xxoo,不认识,看到.php认识,将xx.jpg/xx.php/xx.xxoo交给php去修理执行,php修理时发现xx.jpg/xx.php/xx.xxoo不存在,就删除/xx.xxoo,继续修理,发现xx.jpg/xx.php不存在,删除/xx.php,继续修理,发现xx.jpg存在,就将xx.jpg以php解析执行

防御方法:
(1)php.ini中设置cgi.fix_pathinfo=0
(2)php-fpm.conf中设置security.limit_extensions=.php,只允许.php后缀以php解析执行

注意:我写的实验室linux下的,windows又是另外一回事了,不会全部相同,例如windows中没有php-fpm.conf配置文件,直接可以利用nginx解析漏洞,访问图片时会显示源码,不会返回图片等等。
这篇文章我是使用phpstudy集成环境搭的,有些文件路径和网上直接用agnix或docker环境所说的路径不一致。
有些东西还得用原装,这个目录遍历准备写的,配置了参数环境还是复现不了,也有可能是我phpstudy使用还不到家~

文件解析漏洞总结-Nginx相关推荐

  1. 【文件上传漏洞-07】中间件文件解析漏洞概述及实例——Apache、IIS和Nginx

    目录 1 Apache解析漏洞 1.1 概述 1.2 Apache解析漏洞实例 1.2.1 实验目的 1.2.2 实验环境 1.2.3 实验一:验证解析顺序漏洞 1.3 总结 2 IIS 解析漏洞 2 ...

  2. 【文件上传漏洞11】中间件文件解析漏洞基础知识及实验——Nginx

    目录 1 文件解析漏洞概述 1.1 概述 1.2 Nginx 解析漏洞 1.2.1 空字节解析漏洞 1.2.2 文件名逻辑漏洞 CVE-2013-4547 1.2.3 CGI-PHP 解析漏洞 2 实 ...

  3. 学习笔记文件解析漏洞

    一.概念 文件解析漏洞主要由于网站管理员操作不当或者web服务器自身的漏洞,导致一些特殊文件被IIS.apache.nginx或其他web服务器在某种情况下解释成脚本文件执行 比如网站管理员配置不当, ...

  4. hackmap-[常见的文件解析漏洞总结]

    hackmap-[常见的文件解析漏洞总结] 0.前言 1.Apache解析漏洞 2.IIS解析漏洞 2.1 IIS6.0解析漏洞 2.2 IIS7.0/7.5解析漏洞 3.PHP CGI解析漏洞 3. ...

  5. 上传漏洞防御与IIS6.0文件解析漏洞(防御方法)

    目录 上传类型漏洞的总体防御原则 不同环境上传漏洞的防御方法 一.上传漏洞防御原则 核心思想:确保上传的文件不会被服务器解析成可执行的脚本,进而引发遍离功能设计的意外后果. 限制文件上传类型:白名单结 ...

  6. 哪些服务器曾被发现文件解析漏洞,常见的文件解析漏洞总结

    常见的文件解析漏洞总结 iis解析漏洞 解析漏洞主要是说一些特殊文件被iis,apache,nginx等web容器在特殊情况下被解释成脚本文件格式 ==iis5.x/6.0解析漏洞:== 1,目录解析 ...

  7. 文件解析漏洞总结-Apache

    Apache解析漏洞 多后缀名解析:xx.php.xxoo Apache认为一个文件可以有多个后缀名,例如:peak.txt.jpg.xx Apache的解析规则是从后(右)往前(左)依次判断后缀名, ...

  8. IIS6.0文件解析漏洞原理/复现

    IIS文件解析漏洞原理 IIS6.0存在文件解析漏洞 , 文件名中分号( ; )后面的内容不会被解析 比如 a.asp;jpg 文件 会被IIS解析成 a.asp 这个漏洞是逻辑上的问题,IIS6.0 ...

  9. Apache文件解析漏洞

    我最为熟悉的便是Apache了,先来研究它的文件解析漏洞.百度许久,又谷歌一番,最终发觉,Apache关于文件解析,似乎只有三种"漏洞".之所以打引号是因为我觉得这三种" ...

最新文章

  1. 关于GCN,我有三种写法
  2. Python多进程编程-进程间共享 对象
  3. 软件工程的瀑布, 大泥球, 教堂,集市,和银弹
  4. 计算机主机磁盘怎么开,电脑bios怎么设置硬盘启动
  5. (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  6. Appointment在SPRO里的date profile配置
  7. 阿里巴巴2018年纳税516亿元,稳居行业第一名,大家怎么看?
  8. 批量提取文件创建时间_不要眨眼!批量提取文件名,只需30秒
  9. 物联网安全有哪些注意事项
  10. 用awk一些常用技巧sort uniq
  11. 一级指针,二级指针,指向数组的指针
  12. PHP用301重定向根域名到www域名
  13. C#基础知识-编写第一个程序(二)
  14. java安装证书_Java安装证书文件
  15. BZOJ4874:筐子放球
  16. 都说谷歌浏览器好用,网页翻译插件必不可少
  17. android 字幕跑马灯,led跑马灯字幕
  18. 邓俊辉数据结构学习心得系列——如何正确衡量一个算法的好坏
  19. 数据中心机房设备标签规范建议
  20. RACV2022观点集锦 | 视觉基础模型

热门文章

  1. 学习《apache源代码全景分析》之DSO概念
  2. R软件的下载及安装(截图步骤详细)
  3. 19-for循环语句
  4. 《数据库SQL实战》查找所有已经分配部门的员工的last_name和first_name
  5. 个人成长:拉开你和同龄人差距的100个顶级认知
  6. kaggle入门-Bike Sharing Demand自行车需求预测
  7. 数据湖之iceberg系列(一)iceberg能做什么
  8. Redis 6.0 如何实现大幅度的性能提升?
  9. Kafka设计解析(八)- Exactly Once语义与事务机制原理
  10. 模拟银行自助终端系统