Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问abc.png%00.php来执行其中的代码,恶意攻击者可以通过上传包含执行代码的图片文件来执行有特殊目的的代码。

影响版本:0.5.*, 0.6.*, 0.7 <= 0.7.65, 0.8

<= 0.8.37

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.aabc.com/aaxx.png,我们以如下的方式去访问

将会得到一个URI

/aaxx.png/%00.php

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

/scripts/aaxx.png/%00.php

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

/scripts/%00.php

所以不存在此问题。

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

/scripts/aabc.png和%00.php

最后,以/scripts/aabc.png作为此次请求需要执行的脚本,攻击者就可以实现让nginx以php来解析任何类型的文件了。

POC:

访问一个nginx来支持php的站点,在一个任何资源的文件如robots.txt后面加上/aaxx.php,这个时候你可以看到如下的区别:

访问http://www.abcd.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.abcd.com/robots.txt/%00.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

解决方案:

nginx升级到 0.7

> 0.7.65,

0.8 > 0.8.37

php %00,Nginx %00 null byte执行任意代码(php)漏洞相关推荐

  1. Struts2/WebWork高危漏洞(远程执行任意代码)

    exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞.  漏洞名称:Struts2/XWork < 2.2.0 Remote Command Execution ...

  2. 谷歌浏览器修复_谷歌发布 Chrome 紧急补丁 修复可执行任意代码的高危漏洞

    稿源:http://cnBeta.COM 面向 Chrome 用户,谷歌今天发布了一项紧急安全更新,修复了可以执行任意代码的漏洞.谷歌正向 Windows.macOS 和 GNU/Linux 平台上的 ...

  3. QuickTime 0day ***代码发布,可能允许执行任意代码

    QuickTime 0day ***代码发布,可能允许执行任意代码 仅仅在 Apple 升级播放器堵上九个严重安全漏洞之后的一个星期,一个暂无补丁的 Apple QuickTime 缺陷就于星期二被发 ...

  4. 热门开源CI/CD解决方案 GoCD 中曝极严重漏洞,可被用于接管服务器并执行任意代码...

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...

  5. Fortinet 修复严重漏洞,可导致未认证黑客以最高权限执行任意代码

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 Fortinet 更新 FortiManager 和 FortiAnalyzer 网络管理解决方案,修复可导致攻击者以最高权限执行任意代码 ...

  6. 网页脚本注入执行任意代码

    网页脚本注入执行任意代码 --突破网页本地脚本验证方法实例 最近为了帮朋友批量查询信息,查询页面上要求输入验证码,查询结果要保存到文件.首先想到的是验证码自动识别,太复杂了.总算让我找到一个非常好的软 ...

  7. 我发现了个Python黑魔法,执行任意代码都会自动念上一段「平安经」

    来源 | Python编程时光 最近的"平安经"可谓是引起了不小的风波啊. 作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG. 为此,明哥今天分享一个 P ...

  8. python任意代码都可以缩进去_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...

    最近的"平安经"可谓是引起了不小的风波啊. 作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG. 为此,明哥今天分享一个 Python 的黑魔法,教你如何在 ...

  9. python执行一段代码_我发现了个 Python 黑魔法,执行任意代码都会自动念上一段 『平安经』...

    最近的"平安经"可谓是引起了不小的风波啊. 作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG. 为此明哥就研究了一下,如何在你执行任意 Python 代码 ...

最新文章

  1. 双十一,程序员前女友发来消息。。。
  2. 每日一皮:后来…后来…他得到了永生...
  3. 1092 最好吃的月饼 (20分)_24行代码AC
  4. mysql版本 hibernate_Mysql 不同版本 说明
  5. apache禁止多目录运行php文件下载,Nginx Apache下如何禁止指定目录运行PHP脚本
  6. python实现第一个web_使用Python的Flask框架来搭建第一个Web应用程序
  7. Win10如何配置数据源ODBC数据源
  8. Google 思源黑体:改变字体界的未来
  9. gm220s路由器怎么设置_中国移动GM220-S光猫修改为桥接模式并启用IPV6
  10. 微信小程序开发前后端交互快速入门
  11. HTML5视频方案:支持iPad Safari、Firefox、Chrome、IE9876
  12. 《重装系统》Windows纯净装机+常用工具(最简单易懂教程)--菜鸟小回
  13. 【NOI2003】智破连环阵
  14. 小练习 通过csv模块读取csv文件
  15. android强制重启路由器,路由器要不要每天重启?你的路由器用对了吗?难怪网速慢…...
  16. 大学计算机二级必考,计算机二级大学生必考吗
  17. 服务器怎么部署静态网站,纯静态网站部署服务器
  18. 不再月光,从记账开始
  19. 学习Excel VBA(一)——VBA理论初步
  20. 让窗口一直在上面 (转)

热门文章

  1. python怎么复制上面的语句_JAVA、python、Go的复制语句
  2. 事件总线第一次点击_用户体验研究指南3-3第一次点击测试
  3. bigint最大有多少位_一台 Java 服务器可以跑多少个线程?
  4. java面向对象程序设计(jdk1.6)第三版 目录页数_Java面向对象程序设计/普通高等教育计算机规划教材简介,目录书摘...
  5. php点击价格_按价格从高到低排序和从低到高排序_可点击切换,WooCommerce 教程:[解决] 排序,航运成本 – 从低到高...
  6. “你的板子短路了,正在冒烟!”
  7. 300+队伍/8大直播间,这场NXP智能车竞赛谁才是真的神车?
  8. 计算机桌面显示保护眼睛设置,电脑屏幕如何设置最保护眼睛
  9. 怪哉翻译软件测试,翻译怪哉虫文言文
  10. BUUCTF--- LFI-------本地文件包含(Local File Include)