漏洞描述

由于Nginx.conf的如下配置导致nginx把以’.php’结尾的文件交给fastcgi处理,为此可以构造http://liuwx.cn/test.png/.php (url结尾不一定是‘.php’,任何服务器端不存在的php文件均可,比如’a.php’),其中test.png是我们上传的包含PHP代码的照片文件。

漏洞复现环境

1
2
3
4
5
Windows Server 2003

Nginx

PhpStudy

图片

版本环境是:Nginx + PHP5.2

2003服务器必须能和PC物理主机相互Ping通

图片

在这里我物理主机的IP是:192.168.1.101

2008虚拟机的IP是:192.168.119.134

图片

访问:http://192.168.119.134/

环境搭建完毕!

Nginx-解析漏洞复现

一个一句话图片木马为:test.jpg,如果在URL中访问:http://www.liuwx.cn/test.jpg/.a.php会吧图片当做脚本格式解析执行!

图片

访问:http://192.168.119.134/1.jpg

图片

可以看到是一个正常的图片!

当在RUL后面加一个/*.php或者是/.php,就会被当做脚本文件执行!

访问:http://192.168.119.134/1.jpg/a.php

图片

为了演示,我在hacker.jpg中添加了:

1
2
3
<?php
phpinfo();
?>

图片

访问:http://192.168.119.134/hacker.jpg是一张图片!

我们按照Nginx解析漏洞,后面加上/.php

http://192.168.119.134/hacker.jpg/.php

图片

成功执行phpinfophp代码!

图片

漏洞防御

1、将php.ini文件中的cgi.fix_pathinfo的值设置为1

2、将/etc/php5/fpm/pool.d/www.confsecurity.limit_ectensions后面的值设置为.php