• NSS [NISACTF 2022]bingdundun~


    NSS [NISACTF 2022]bingdundun~

    考点:phar伪协议

    点击连接,跳转到上传文件界面

    image-20230711115754939

    提示只能上传图片或者压缩包

    同时注意到了,url栏有个GET传参。传值为index试试,发现回显好多个//index.php,猜测这里传参,会自动帮我们加上一个.php,我们传?bingdundun=index,后台解析为?bingdundun=index.php,然后进行文件包含。

    phar伪协议:

    phar ( php archive ) 是 PHP 里类似于 jar ( java archive ) 的一种打包文件。如果使用的是 PHP 5.3 或更高版本,那么 .phar 后缀文件是默认开启支持的,你不需要任何其他的安装就可以使用它。

    用法:?file=phar://压缩包/内部文件
    主要是用于在php中对压缩文件格式的读取。这种方式通常是用来配合文件上传漏洞使用。

    生成phar文件脚本:(就了解一下)

    
        $payload = '' ;//一句话木马
        $phar = new Phar("example.phar"); //后缀名必须为phar
        $phar->startBuffering();
        $phar->setStub(""); //设置stub
        $phar->addFromString("phar.php", "$payload"); //添加要压缩的文件
        // $phar->setMetadata(...); //在metadata添加内容,可参考 phar反序列化,此处用不着,故注释
        $phar->stopBuffering();
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1、stub是phar文件的文件头,格式为......可以是任意字符,包括留空,且 php 闭合符与最后一个分号之间不能有多于一个的空格符。另外 php 闭合符也可省略。包含在 php 代码块中的语句在 phar 文件被包含时被执行。最短省略闭合符的stub是__HALT_COMPILER();?>。前面的内容是没有限制的,也就是说我们可以构造一个图片文件或者 pdf 文件来绕过上传的限制,将这个phar文件上传上去。

    2、manifest describing the contents存放着压缩文件的信息,每个被压缩文件的权限,属性等信息都放在这里,这里还会以序列化的形式存储着用户自定义的meta-dataphar文件存储meta-data时会先将内容序列化后再存入进去,当文件操作函数通过phar://伪协议解析phar文件时就会先将数据反序列化,这样就可以构成反序列化攻击。这里是phar反序列化攻击最核心的地方,但对这道题没有帮助。

    3、the file contents:被压缩文件的内容,这里写入一句话木马,但对 phar 反序列化攻击没有帮助

    4、signature:可选,phar文件的签名,允许的有MD5, SHA1, SHA256, SHA512和OPENSSL

    (3条消息) 『PHP』phar文件详解_phar文件格式_调用phar类方法生成phar文件_Ho1aAs的博客-CSDN博客

    开始做题。我们先创建一个一句话木马文件。

    image-20230711115349717

    这里得提一下。

    phar://、zip://、bzip2://、zlib://都可用于读取压缩文件,zip:// 、 bzip2:// 、 zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif zip xxx 等等。而phar://的伪协议,可以将任意后缀名的压缩包(原来是 .phar 或 .zip,注意:PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行 ) 解包,从而可以通过上传压缩包绕过对后缀名的限制,再利用伪协议实现文件包含。

    所以.zip后缀也是可以的,不用.phar,直接压缩就行啦。

    image-20230711115501390

    上传压缩包,返回了路径。

    image-20230711120743072

    成功进行RCE(为什么最后不是/shell.php而是/shell,因为之前提了,后台会自动加上.php

    image-20230711121123529

    getshell,根目录下找到flag

    image-20230711121258105

    好文推荐:

    [(3条消息) NISACTF 2022]bingdundun wp_Leafzzz__的博客-CSDN博客

    [(3条消息) NISACTF 2022]bingdundun~_ph0ebus的博客-CSDN博客

  • 相关阅读:
    最强辅助!阿里最新总结22年大厂Java面试真题+核心知识点全面覆盖+答案详解!
    万字剖析Ribbon核心组件以及运行原理
    【最佳实践】CentOS7.9 下绿色安装最新版本的 Tomcat-10.1.2 以及最新的 Java19
    进程互斥的软硬件实现方法
    SpringBoot启动代码和自动装配源码分析
    如何下载GitHub上的代码
    (十六)数据结构-图的遍历
    maven项目、idea抽风问题解决
    (续)SSM整合之spring笔记(AOP 基于注解的AOP之前置通知)(P101)
    55.ReentrantReadWriteLock应用于缓存
  • 原文地址:https://blog.csdn.net/Jayjay___/article/details/134446159