漏洞影响版本:Nginx 0.8.41-1.4.3
Nginx 1.5.0-1.5.7-
漏洞条件: 能够上传图片马+nginx漏洞版本
漏洞原理:
当我们URL中xxx[0x20][0x00].php时 nginx规则中匹配上 .php$时会将这个请求文件交给php-fpm处理,当php-fpm处理时碰到0x00截断,则图片会当作php文件解析,触发图片马
漏洞过程:
1、上传一个图片,,通过bp修改上传的图片名称为 图片.jpg空格
2、访问 URL: IP:port/xxx
3、拦截访问数据包,使修改URL为 IP:PORT/xxx/%E5%9B%BE%E7%89%87.jpg空格0x00.php
4、使用蚁剑连接1.php 密码a连接成功
##如果我们上传了一个图片马没有空格时,通过URL+00截断会显示未响应,原因是,nginx会检测url中是否有00截断,如果有则不返回 nginx源代码:“ case '\0': return NGX_HTTP_PARSE_INVALID_REQUEST;”,
但是nginx存在一个逻辑错误,如果URL中00截断前有空格,则跳过00截断的检测 出现逻辑错误,所以上传的图片马结尾需要BP加上空格;
当访问IP:PORT/XX.jpg0x200x00.php时,绕过NGINX的00截断检测,将XXX.jpg0x20发送给php-fpm当成php文件处理,导致代码执行