分享
furryCTF 官方 Writeup(POFP)
输入“/”快速插入内容
furryCTF 官方 Writeup(POFP)
3月26日修改
MISC
题目名
考点
解题思路
WEB
Ezmd5
源代码:
代码块
PHP
if ($user !== $pass && md5($user) === md5($pass)) {
echo "Congratulations! Here is your flag: <br>";
echo file_get_contents($flag_path);
}
我们需要通过 POST 方法传入 user 和 pass 两个参数,并且需要同时满足以下两个条件才能拿到 Flag,$user !== $pass:user和pass的值不能全等,类型或数值必须不同,md5($user) === md5($pass):user的MD5 哈希值必须与pass的哈希值全等
通常我们遇到MD5比较,会想到 0e 开头的魔法哈希碰撞比如说0e215962017,但是,那个技巧通常用于PHP的弱类型比较 (==),这里呢是强比较,对于强类型比较,0e123是字符串,0e456也是字符串,且它们字符不同,所以0e123!==e456。普通的MD5碰撞在这里失效了,那怎么办呢?
在PHP7早期版本及更早的版本种md5()函数无法处理数组,如果你对一个数组进行MD5运算:
代码块
PHP
md5(['a']);
会返回 NULL,并且抛出一个Warning警告
所以我们将 user 设为数组,例如 user[]=1,我们将 pass 设为数组,例如 pass[]=2,判断条件 1 ($user !== $pass)也就是['1'] 不等于 ['2'],条件成立。
判断条件 2 (md5($user) === md5($pass)而md5(['1']) 结果为NULL,md5(['2']) 结果也为NULL
NULL===NULL,条件成立!
因此我们可以构造payload
代码块
PHP
user[]=1&pass[]=2
成功拿到了flag:
代码块
Markdown
POFP{059f63ab-4ca5-4e55-840c-af898d25204c}
CCPreview
打开题目靶机,我们看到一个名为 CloudConnect的网页工具,其功能是测试网站连通性
这题的描述里说到服务部署在亚马逊云服务器上,并且是EC2实例,题目还说这是一个curl的代理
这是一道很典型的云安全题,云服务提供了元数据服务,允许实例访问自身的配置信息和凭证,攻击者可以利用SSRF漏洞访问这些元数据服务