Nginx文件类型错误解析漏洞--攻击演练

今天看书看到其中提到的一个漏洞,那就是Nginx+PHP的服务器中,如果PHP的配置里 cgi.fix_pathinfo=1 那么就会产生一个漏洞。这个配置默认是1的,设为0会导致很多MVC框架(如Thinkphp)都无法运行。这个漏洞就是比如 localhost/img/1.jpg 是正常地访问一张图片,而 localhost/img/1.jpg/1.php 却会把这张图片作为PHP文件来执行!如下图,应该是404 NotFound 才对的,它却显示说是有语法错误。

好家伙,既然有漏洞那就尝试怎么攻击吧。先看思路:首先弄一个很小的JPG文件方便修改,然后在JPG文件中插入代码,再上传,最后在浏览器打开。

第一步,小的JPG文件当然是直接用Photoshop做一个了;

几个像素就够了。样子随便,你喜欢就好。

第二步,在JPG中插入代码,这个要用到二进制编辑器;

JPG图片如何修改成为可以执行PHP代码?这里以实验目的,以成功执行一个输出PHP运行环境信息的函数 phpinfo() 为例。

首先这里编辑图片的话并不是说用画图或者Phtoshop之类的图形软件,这次要用到的软件叫做 二进制编辑器,其中我用的这款名叫 Bz.exe,打开图片文件如下图

不要被吓到,就是16进制的数而已,右边显示的是对应的ASCII码,我们直接改右边就可以了。通过几个JPG文件的对比发现,从第二行开始就可以自行修改了,于是开工修改,注意不要使用退格删除导致长度缩短,要用字符替换的,否则会造成文件格式损坏。修改成如下图,保存到本地的图片文件夹中,在本地测试。

!注意不要使用退格删除导致长度缩短,图片损坏,比如像下图第一个的那种改了之后不显示缩略图的就已经是损坏了,损坏的图片可能会在上传的时候被拦截掉。

改好之后再本地测试,

似乎还不行,看起来应该是后面有一些PHP语法错误,那就简单粗暴,修改成下图这样,即是把后面的内容全部使用/* 来注释掉 结尾用 */ 闭合注释,当然结尾的注释不加也可以,只会多显示一个“Unterminated comment starting”的警告而已。

可以看到,已经可以执行PHP代码了。本地攻击演练成功!

第三步,上传,因为上传的确实是jpg格式的文件,网站几乎无法识别和拦截;

第四步,在浏览器打开,Hello World!

这一步成功需要两个条件:

1)服务器是Nginx+PHP并且配置里是cgi.fix_pathinfo=1;

2)网站没有屏蔽上传目录的脚本执行权限;

所以,慢慢找吧,也许可遇而不可求;

|++ 此漏洞的功击效果与“文件上传漏洞”相当

∞、防御建议

1)使用Apache、IIS等成熟久经考验的服务器软件,在动态语言的支持上,Nginx还是太年经了。

2)上传目录、静态资源目录,都设置好屏蔽脚本执行权限。例如使用Apache服务器的在相应目录下放一个 .htaccess 文件,里面写上

RewriteEngine On
RewriteRule (?i:\.php)$ - [F]
时间: 2025-01-02 14:18:47

Nginx文件类型错误解析漏洞--攻击演练的相关文章

再提供一种解决Nginx文件类型错误解析漏洞的方法

[文章作者:张宴 本文版本:v1.2 最后修改:2010.05.24 转载请注明原文链接:http://blog.zyan.cc/nginx_0day/] 注:2010年5月23日14:00前阅读本文的朋友,请按目前v1.1版本的最新配置进行设置. 昨日,80Sec 爆出Nginx具有严重的0day漏洞,详见<Nginx文件类型错误解析漏洞>.只要用户拥有上传图片权限的Nginx+PHP服务器,就有被入侵的可能. 其实此漏洞并不是Nginx的漏洞,而是PHP PATH_INFO的漏洞,详见:h

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

今天看书看到其中提到的一个漏洞,那就是Nginx+PHP的服务器中,如果PHP的配置里 cgi.fix_pathinfo=1 那么就会产生一个漏洞.这个配置默认是1的,设为0会导致很多MVC框架(如Thinkphp)都无法运行.这个漏洞就是比如 localhost/img/1.jpg 是正常地访问一张图片,而 localhost/img/1.jpg/1.php 却会把这张图片作为PHP文件来执行!如下图,应该是404 NotFound 才对的,它却显示说是有语法错误. 好家伙,既然有漏洞那就尝试

nginx文件类型错误解析漏洞

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

文件上传解析漏洞

以下转自clancyb00m的github ----------------------------------------------------------------------------------------------------------------------- nginx nginx <8.03 空字节代码执行漏洞 影响版本:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37 上传图片马然后这样访问: 就会执行PHP代码 nginx 1.

ci 文件类型错误xlsx

ci文件上传类检查文件类型时会导入一个 mimes.php 文件 修改 application/config/mines.php 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip'), 将 xlsx va

php之文件类型解析漏洞防御与攻击

php在处理文件上传时,经常可以用到下面几种方式来判断文件的类型 1.通过文件名后缀,不安全,非常容易欺骗2.通过mime判断,部分类型的文件通过修改文件后缀名,也可以欺骗服务器3.通过头字节判断文件类型,但是判断范围有限,比如docx/xlsx等新的文档,通过头信息判断时,其实是一个zip包 PHP通过读取文件头部两个字节判断文件真实类型及其应用示例 function checkFileType($fileName){ $file     = fopen($fileName, "rb"

文件解析漏洞汇总

解析漏洞正如其名,一般大家常说的是,文件在某种格式下,会被执行为该脚本语言的文件. 文件上传漏洞通常与Web容器的解析漏洞配合利用 常见Web容器有IIS.Nginx.Apache.Tomcat等 好了正文开始汇总了,反正都转载贴的,我自己也忘了在哪里看到的了,就不注明转贴地址了. IIS 6.0解析漏洞 目录解析:/xx.asp/xx.jpg xx.jpg可替换为任意文本文件(e.g. xx.txt),文本内容为后门代码 IIS6.0 会将 xx.jpg 解析为 asp 文件. 后缀解析:/x

1.2 文件上传之解析漏洞

浅谈文件解析及上传漏洞 文件解析漏洞 解析漏洞主要是一些特殊文件被iis.Apache.Nginx等服务在某种情况下解释成脚本文件格式并得以执行而产生的漏洞. iis 5.x/6.0解析漏洞 iis6.0解析漏洞主要有以下三种: ?? 1. 目录解析漏洞 /xx.asp/xx.jpg ??在网站下创建文件夹名字为.asp..asa的文件夹,其目录内的任何扩展名的文件都被iis当做asp文件来解析         并执行.因此只要攻击者可以通过该漏洞直接上传图片马,并且可以不需要改后缀名! 2.

文件解析漏洞

1:IIS6.0解析漏洞 目录解析漏洞,在以.asp结尾的目录下的文件都会被当作asp文件来执行,比如上传了1.jpg的文件到upload.asp目录下,那么1.jpg文件就会被当作asp文件来执行. 文件名解析漏洞,IIS6.0从左向右解析文件名,遇到分号就会自动终止解析,所以上传形如1.asp;.jpg的文件就被当作1.asp文件来执行. 2:IIS7.0,7.5和Nginx<8.03畸形解析漏洞(写webshell漏洞) 原理:在上传文件所在目录下创建一个一句话木马文件 实现过程:新建一个