fumo_backdoor复现

知识点

php代码审计,phpsession反序列化利用

Imgaick类

(vid:msl与mvg协议)

msl语法基础

截图

vid特性

截图

3 msl脚本标签

截图.

这题用到了上面的base64解密,据博客所说还可以直接使用inline:data:text/8BIM;base64实现不符合PPM协议的数据写入

源码

截图


接受两个参数,cmd可以实现清除/tmp目录与反序列化。

data构造的链子很简单,__sleep绕过waf后可以实现任意文件读取可以无法触发(需要序列化),__wakeup存在new $class($argv),想到原生类,这里利用了Imagick类

解题

三个利用点:需要触发sleep魔术方法来读取文件,同时wakeup会导致无参rce(并不可以直接利用)以及原生类利用(这里用到imagick)

利用imgick漏洞将flag移动到/tmp目录之后

将一段恶意数据设置到/tmp/sessxxx目录下,path设置在flag相应目录

利用vid:msl:/tmp/php*上传上面的数据到/tmp/sess_user中

触发phpsess反序列化来调用wakeup

0

清空tmp目录

截图

1

创建一个写入了脏数据的PPM图片,末尾是复制之后的flag路径,最终用来触发readfile函数

https://github.com/ImageMagick/ImageMagick/blob/main/www/formats.html

(PPM图片允许末尾写入脏数据并且不被imagic忽略)


截图

则在末尾写入数据,重要的是数据的大小要符合PPM要求

截图

截图


2

触发wakeup魔术方法利用imagick把上面的图片存入sess_user中

截图

将上面的图片数据修改为对应格式截图

本身是想用postman上传的,但是没找着发包的内容导致检查不了,就直接用bp发包了

截图

3

imagick的mvg协议将flag复制到res中

截图


4

启动session传入PHPSESSION反序列化sess_user来触发__sleep方法

截图

    最后发包就应该能获取flag的,这里可能本地环境有点问题....复现的大佬也说有时候要多试几次,我这边一直没出![截图](93b0dda5e3dba6abe80ceccaf4d888b3.png)

5

最后整理一下漏洞触发的流程

当我们开启session并且访问对应的php_user文件时会将他的内容反序列化,

这个文件是先前被攻击者利用imagick恶意写入的,因此存在脏数据(反序列化时会访问/tmp/xxx文件)

并且攻击者已经利用imagick协议将flag写入到/tmp/xxx文件中

参考

https://www.yuque.com/dat0u/ctf/utr6r6bhaltes2yv

https://aecous.github.io/2023/06/27/Imagick%E8%A7%A6%E5%8F%91msl/#%E6%A0%B7%E9%A2%98-ciscn2022-backdoor


fumo_backdoor复现
http://example.com/2023/10/28/fumo-backdoor复现/
作者
z2zQAQ
发布于
2023年10月28日
许可协议