记一次“上传”命令执行的绕过案例

简介: 记一次“上传”命令执行的绕过案例

0x01 前言

前几天在“搞基大队”群里看到@六八老哥提到的一个问题,几个师傅都在讨论其绕过方式,自己也做了些测试,感觉还是挺有意思的,经老哥同意将这次讨论过程和绕过方式整理分享给大家。


这是一个基于上传的命令执行漏洞,以前还真没见过,虽然这种漏洞很少见,但如果遇到了你能绕过吗?欢迎各位师傅补充绕过姿势!


0x02 问题描述

遇到这样一个超级奇葩的利用点,文件上传时会把文件名放到cmd中去执行,但不允许出现空格,如果文件名中存在空格时则上传失败。

而且它这个系统每次上传会按时间戳创建一个文件夹, 它的存在导致每次上传执行,当前时间戳目录下只会存在一个文件,还有一个关键点就是后缀必须为jpg。

    C:\inetpub\wwwroot\1631023487\&dir&.jpg


    0x03 漏洞简述

    为什么后台是放到cmd中去执行的?因为它提供了这样一个功能,可以把图片或者文档转为pdf,后台是使用的一个exe程序,加文件路径去进行转换,可以通过控制文件名执行简单的命令。

    但是想去执行比如下载木马、添加账号等这些复杂一点的命令就不行了,只要出现空格就无法上传执行

    0x04 测试方法

    首先想到的绕过方式是以前测试过的“Windows环境变量截取绕过”,但在实际测试中发现不能用于这种场景,因为Windows文件命名规则中默认不允许使用这些字符:\、/、:、*、?、"、<、>、|

      %path:~10,1%
      %programfiles:~10,1%
      %processor_identifier:~7,1%
      %commonprogramw6432:~10,1%
      %commonprogramfiles(x86):~10,1%
      %commonprogramfiles:~10,1%
      %commonprogramfiles:~10,-18%
      %commonprogramfiles:~23,1%
      %fps_browser_app_profile_string:~8,1%
      [...SNIP...]


      本地搭建了一个上传漏洞,利用Burpsuite抓包,将上传文件数据包中文件名处的空格用%20进行解码发送后即可成功把带有空格命令的文件写进目标磁盘中,并且能够正常执行。

      注:这里必须将%20解码后再发送,否则会原样写入,文件名为:&net%20user.jpg。还有就是这个上传漏洞中是没有过滤空格等字符,如果已经过滤该绕过方式则可能无效。


      @六八老哥在测试中发现在cd中可以用,;等字符代替空格,但在跨目录时又发现不能用\,因为文件名中不允许出现\、/,最终测试出来可用于跨目录的cd命令如下。

        切换上级目录,不允许使用\/
        C:\inetpub\wwwroot\1631023487>cd;..\
        cd,..结合&连接符实现跨目录
        C:\inetpub\wwwroot>cd;..&cd;..&cd;windows&cd;system32


        0x05 绕过方式

        这个“上传”命令执行漏洞的关键点其实就是上传目录,文件名可控,然后再配合cd;..绕过空格垮目录,&命令连接就OK了。只要求后缀必须为jpg,文件名中不带空格即可。


        本地模拟测试:

        我们可以先将cs马改为cs.jpg传上去,目录在1631359215,然后再构造一个用于跨目录和执行cs马的jpg文件传上去,目录在1631023487,文件名为:&cd;..&cd;1631359215&cs.jpg&.jpg,上传执行后可以看到已经完美上线了。


        cmd /c C:\inetpub\wwwroot\1631023487\&cd;..&cd;1631359215&cs.jpg&.jpg


        注:由于没有环境进行复现测试,所以对实际情况并不是很清楚,可能更复杂些吧。说实话,在整理完这篇文章后对@六八老哥的文件落地这块都还处于蒙蔽状态,懒的再去研究了,就这样吧!!!

        相关文章
        |
        5月前
        |
        SQL 安全 Linux
        命令执行漏洞
        命令执行漏洞
        |
        7月前
        |
        Web App开发 安全 云计算
        H3C任意命令执行漏洞
        H3C任意命令执行漏洞
        96 1
        |
        开发框架 安全 .NET
        记一次绕过安全狗命令执行上线
        记一次绕过安全狗命令执行上线
        239 1
        |
        移动开发 监控 安全
        |
        存储 编解码 安全
        |
        安全 Linux 开发工具
        总结,复习,整合命令执行漏洞实现及其绕过(绕过方式大全)
        &gt;🍀1复习一下以前的内容 &gt;🍀2总结整合一下过滤方法
        274 0
        |
        安全 网络协议 Java
        命令执行漏洞详细讲解
        应用有时需要调用一些执行系统命令的函数,如PHP中的`system`、`exec`、`shell_exec`、`passthru`、`popen`、`proc_popen`等,当用户能控制这些函数的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
        |
        安全 PHP
        ctfshow-萌新-web9( 利用命令执行漏洞读取网站敏感文件)
        ctf.show 萌新模块 web9关,这一关考察的是命令执行漏洞的利用方式,使用PHP的命令执行函数执行系统命令,读取网站根目录下的配置文件,获取flag
        531 0
        ctfshow-萌新-web9( 利用命令执行漏洞读取网站敏感文件)
        |
        Linux Shell
        检测不同服务器上代码差别的shell的脚本
        检测不同服务器上代码差别
        1278 0