Nginx漏洞复现
Nginx与Apache一样,自身是不支持解析PHP语言的,只能通过加载PHP模块来解析PHP。 大致流程如下:
用户访问域名->域名进行DNS解析->请求到对应IP服务器和端口->nginx监听到对应端口的请求->nginx对url进行location匹配->执行匹配location下的规则->nginx转发请求给php->php-fpm的master进程监听到nginx请求->master进程将请求分配给其中一个闲置的worker进程->worker进程执行请求->worker进程返回执行结果给nginx->nginx返回结果给用户。
①CVE-2013-4547(文件名逻辑漏洞)复现
该漏洞利用了Nginx错误的解析了URL地址,导致可以绕过服务端限制,从而解析PHP文件,造成命令执行的危害。
根据nginx.conf文件中location中的定义,以.php结尾的文件都解析为php。
若我们访问的文件名为 shell.gif[0x20][0x00].php ,该文件名以.php结尾可以被FastCGI接收,FastCGI在读取文件名时被00截断,导致读取的文件名为shell.gif[0x20],配合limit_extensions为空即可利用成功。
该漏洞利用条件有两个:
Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
php-fpm.conf中的security.limit_extensions为空
进入到 CVE-2013-4547 目录启动漏洞环境,启动漏洞环境
docker-compose up -d