• Nginx 文件名逻辑漏洞(CVE-2013-4547)(Vulhub)


    Nginx 文件名逻辑漏洞(CVE-2013-4547)(Vulhub)

    漏洞简介

    在Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7版本中存在错误解析用户请求的url信息,从而导致文件代码执行,权限绕过等问题。

    适用环境

    Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7版本

    漏洞成因

    漏洞成因大概为Nginx本身并不能解析PHP代码,只能通过加载PHP模块来进行解析代码。通过正则表达式来匹配以.php结尾的请求路径交给PHP模块去解析,但是Nginx在加载文件名时遇到‘\0’便会停止读取‘\0’后面的内容,于是通过以上思路,我们在进行文件上传的时候,文件名应该设置为1.gif,在进行访问时,访问文件应为1.gif'\0'.php,通过正则表达式匹配.php后缀将请求路径交给PHP模块,PHP模块在读取文件名时遇到\0便不会读取后面的.php,从而解析文件为1.gif,但是在实际过程中,Nginx在读取文件名碰到'\0'便会出现报错并停止执行,当我们在'\0'前面加入空格后,Nginx便会跳过报错处理,这样便可以成功利用'\0'进行截断,因此我们的请求路径应该为1.gif[0x20][0x00].php,Nginx在读取文件名为1.gif[0x20],因此我们在上传文件时应该上传文件名1.gif[0x20]
    具体解释可查看参考文章

    • '\0'为字符串结束标志,十六进制表示为0x00
    • 空格字符,十六进制表示为0x20

    环境搭建

    环境路径

    /vulhub/nginx/CVE-2013-4547

    启动命令

    docker-compose up -d

    查看环境配置

    docker-compose up -d

    访问界面
    在这里插入图片描述

    漏洞复现

    构建上传文件内容

     phpinfo();?>

    对上传文件进行抓包,在文件名后面添加空格
    在这里插入图片描述
    成功上传
    在这里插入图片描述
    抓取访问1.gif.php文件的数据包,发送至repeater模块
    在这里插入图片描述
    在访问路径gif后通过十六进制视角右键点击添加字节添加空格和'\0'的十六进制数
    在这里插入图片描述
    发送数据包查看回显内容,1.gif[0x20]中的代码已被执行,将phpinfo()代码换成后门代码即可连接后门。
    在这里插入图片描述

    漏洞总结

    利用该漏洞需要满足

    1. Nginx版本满足0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7版本
    2. 文件上传点
    3. 可以上传带空格文件名的文件
    4. 服务器没有做文件重命名

    修复建议

    1. 升级最新版Nginx
    2. 过滤空格
    3. 文件重命名
    4. 取消文件目录执行权限
    5. 云存储

    参考文献

    [1]Nginx 文件名逻辑漏洞(CVE-2013-4547)
    [2]Nginx 文件名逻辑漏洞(CVE-2013-4547)漏洞复现
    [3]Nginx服务漏洞详解

    以上内容仅作学习,如有瑕疵或错误,欢迎指正,感谢阅读。


    __EOF__

  • 本文作者: 了了青山见
  • 本文链接: https://www.cnblogs.com/Pengj/p/17626735.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    HarmonyOS云开发基础认证【最新题库 满分答案】
    (七)Bean的实例化方式
    网络安全(黑客)自学
    D. For Gamers. By Gamers.(思维 + dp + 二分)(调和级数)
    Spring底层架构核心概念解析
    大模型产业化有四个关键,昇腾AI推动“AI+遥感”打了个样
    浅谈制药企业安全供电系统的设计与应用
    IOC课程整理-17 Spring事件
    php的伪协议详解
    H5生成二维码
  • 原文地址:https://www.cnblogs.com/Pengj/p/17626735.html