漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行。80sec发现其中存在一个较为严重的安全问题,默认情况下可能导致服务器错误的将任何类型的文件以PHP的方式进行解析,这将导致严重的安全问题,使得恶意的***者可能攻陷支持php的nginx服务器。

漏洞分析:nginx默认以cgi的方式支持php的运行,譬如在配置文件当中可以以

location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

的方式支持对php的解析,location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。
那么假设存在一个http://www.80sec.com/80sec.jpg,我们以如下的方式去访问
http://www.80sec.com/80sec.jpg/80sec.php

将会得到一个URI

/80sec.jpg/80sec.php

经过location指令,该请求将会交给后端的fastcgi处理,nginx为其设置环境变量SCRIPT_FILENAME,内容为

/scripts/80sec.jpg/80sec.php

而在其他的webserver如lighttpd当中,我们发现其中的SCRIPT_FILENAME被正确的设置为

/scripts/80sec.jpg

所以不存在此问题。
后端的fastcgi在接受到该选项时,会根据fix_pathinfo配置决定是否对SCRIPT_FILENAME进行额外的处理,一般情况下如果不对fix_pathinfo进行设置将影响使用PATH_INFO进行路由选择的应用,所以该选项一般配置开启。Php通过该选项之后将查找其中真正的脚本文件名字,查找的方式也是查看文件是否存在,这个时候将分离出SCRIPT_FILENAME和PATH_INFO分别为

/scripts/80sec.jpg和80sec.php

最后,以/scripts/80sec.jpg作为此次请求需要执行的脚本,***者就可以实现让nginx以php来解析任何类型的文件了。
POC: 访问一个nginx来支持php的站点,在一个任何资源的文件如robots.txt后面加上/80sec.php,这个时候你可以看到如下的区别:
访问http://www.80sec.com/robots.txt

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:05:30 GMT
Content-Type: text/plain
Content-Length: 18
Last-Modified: Thu, 20 May 2010 06:26:34 GMT
Connection: keep-alive
Keep-Alive: timeout=20
Accept-Ranges: bytes

访问访问http://www.80sec.com/robots.txt/80sec.php

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:06:49 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.6

其中的Content-Type的变化说明了后端负责解析的变化,该站点就可能存在漏洞。
漏洞厂商:http://www.nginx.org
解决方案:
我们已经尝试联系官方,但是此前你可以通过以下的方式来减少损失

关闭cgi.fix_pathinfo为0

或者

if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}

转载于:https://blog.51cto.com/lynnteng0/994737

nginx文件类型错误解析漏洞相关推荐

  1. 《Nginx文件类型错误解析漏洞--攻击演练》 (转)

    今天看书看到其中提到的一个漏洞,那就是Nginx+PHP的服务器中,如果PHP的配置里 cgi.fix_pathinfo=1 那么就会产生一个漏洞.这个配置默认是1的,设为0会导致很多MVC框架(如T ...

  2. 记一次对DZ的渗透.(一句话木马与图片,文件上传解析漏洞)

    一.举例:St0rs Team 指剑碎星河分享 前言0X01 某日某帅正在使用着啊D 入侵百度的时候, 突然某位好友发来一条消息. "滴滴上车" 打开消息一看,说是要某帅帮忙日一个 ...

  3. .htaccess文件上传解析漏洞

    测试环境 upload-labs靶场(Pass-04) .htaccess原理 .htaccess文件是Apache服务器下的一个配置文件.其主要负责相关目录下的网页配置,即:在一个特定的文档目录中放 ...

  4. 0919文件上传-解析漏洞编辑器安全WAF绕过及安全修复

    其他漏洞 编辑器漏洞 网站在实现上传文章等功能时会套用第三方编辑器的功能 大部分编辑器漏洞都是文件上传漏洞 判断: 1.看界面 2.目录扫描 fkceditor.ewebeditor.ckeditor ...

  5. java.sql.SQLException: 无效的列类型: 错误解析

    八月 16, 2018 8:47:40 下午 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service( ...

  6. php文件类型验证,包含漏洞   文件类型白名单验证及判断后缀的解决办法

    $include_file 可控,可以上传文件, 上传后缀限制为jpg,gif,png,包含后缀限制必须为.php allow_url_include=Off (不考虑远程包含)if ( isset( ...

  7. nginx真的存在文件类型解析漏洞吗?

    这两天网上疯传一个Nginx的所谓文件类型错误解析漏洞,但是真的就只有这样吗?漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行.8 ...

  8. nginx是否存在文件类型解析漏洞(转)

    网上疯传一个Nginx的所谓文件类型错误解析漏洞,但是真的就只有这样吗?漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行.80se ...

  9. nginx 上传文件漏洞_文件上传及解析漏洞

    注:本文仅供学习参考 文件上传定义: 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等. 这种攻击方式是最为直接和有效的, ...

最新文章

  1. git 合并两个分支的某个文件
  2. python——赋值与深浅拷贝
  3. Failed to read artifact descriptor for xxx:jar:版本号
  4. 【转】C# 中文URL编码
  5. netty springmvc_springmvc源码架构解析之HandlerMapping
  6. 【数据结构基础笔记】【树】
  7. 《计算机程序设计艺术》pdf
  8. 深度学习最佳实践系列——权重w初始化
  9. 服务器被bash服务占满_用bash脚本自动下载ftp服务器文件
  10. C# 根据年、月、周、星期获得日期等
  11. ajax 防止用户反复提交
  12. 系统关机函数ExitWindowsEx详解
  13. java负载均衡搭建_负载均衡环境搭建(nginx和tomcat)
  14. ppt中插入html格式图表
  15. 这张几千人排在门外的大会门票,送你 | 来填写问卷
  16. 使用php-rdkafka错误总结: version `GLIBC_2.14‘ not found; rdkafka.so: undefined symbol: zend_object_alloc
  17. chrome导入\导出登录密码
  18. ACA云原生3阿里云容器产品体系
  19. 计算机论文参考文献最新年份,参考文献时间格式
  20. 内存条的选取与安装(详细)

热门文章

  1. 软件测试抛出异常,异常测试之异常注入初探
  2. element ui select 自动向上向下弹出_达观数据:Selenium使用技巧与机器人流程自动化实战...
  3. cocos2dx linux eclipse,如何将cocos2dx移植到eclipse上?
  4. ssm实现管理员和用户_基于SSM的网上水果生鲜超市商城管理系统
  5. 计算机窗口移动方法有,北京版一年级信息技术上册《操作窗口学本领》教案
  6. linux listener作用,Local_listener 的作用
  7. python 深度 视差 计算_python-窗口代价计算视差
  8. 2017.4.16 幂次方 思考记录
  9. python pip有什么用_pip的介绍和使用
  10. requests模块爬取糗事百科用xpath解析