CVE-2013-4547
影响范围:
Nginx 0.8.41 - 1.4.3
Nginx 1.5.0 - 1.5.7
漏洞类型:
任意文件解析
操作系统限制:
无
配置要求:
默认配置
漏洞利用:
远程命令执行
利用原理:
在受影响的版本中,Nginx读取路径中的字符时候,遇到空格会认为路径部分结束,接下来是HTTP协议版本,如果在空格后面接着一个空字节(0x00),Nginx错误地跳过正常终止逻辑,允许非法字符序列进入后续路径处理。攻击者修改文件后缀,末尾有一个空格,Nginx接收到请求后在磁盘找到相应文件后认为请求合法,但完整路径是/uploadfiles/文件名.gif[0x20] [0x00].php,配置文件conf正则匹配到.php,就会交给后端FastCGI处理,由于FastCGI协议和PHP解析器是基于C语言字符串处理,C语言中的0x00代表字符串结束,PHP实际处理的文件则是/uploadfiles/文件名.gif,因为该文件已经被Nginx指定文件后缀,PHP会忽略其gif后缀,直接解析其中的PHP代码,导致远程代码执行
漏洞复现:
现成的vulhub来拉取镜像
#下载vulhub源代码
git clone https://github.com/vulhub/vulhub.git
#进入漏洞目录
cd vulhub/nginx/CVE-2013-4547
#拉取镜像
docker-compose up -d
写一个phpinfo,保存为php文件
<?php phpinfo(); ?>
访问http://靶机ip:8080,将刚刚写的的php木马上传

上传失败

选择木马php文件,用burpsuite抓取数据包

发送到Repeater模块

修改文件后缀为.gif ,gif后面有一个空格

发送后返回200
用burpsuite抓取http://公网ip:8080/uploadfiles/payload.gif.php的数据包
发送到Repeater模块,并修改访问路径,在gif后面加两个空格

到Hex将后一个20(空格)改为00,后发送返回200
查看页面,可以看到执行了phpinfo(),可以上传一句话木马,但是该信道是发一次数据包执行一次命令,并不是连续且实时通信的信道

本文链接:
/archives/cve-2013-4547
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Johan的秘密小窝!
喜欢就支持一下吧