Writeup

Wrtieup

复现

Misc

哈基游

题目源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$func_template = 'function check($file_hash, %s) { if ($file_hash !== "5baf19ce6561538119dfe32d561d6ab8509703606f768fea72723a01ee4264b7") { echo "%s not cached"; } }';
$cached_key = isset($_GET['c']) ? $_GET['c'] : '$f_0';
if (!preg_match('/^[a-zA-Z0-9_\$]{1,5}$/', $cached_key)) {
die('Invalid cached key');
}
$func = sprintf($func_template, $cached_key, $cached_key);
eval($func);
if (isset($_GET['h']) && isset($_GET['algo']) && isset($_GET['file'])) {
$file_hash = hash_file($_GET['algo'], $_GET['file']);
check($file_hash, $_GET['file']);
} else {
phpinfo();
}
?>

对于参数c传入int$c,就会产生报错,我们就能从报错中看到文件哈希后的结果。

从phpinfo中我们可以看到可用的哈希算法

image-20250227183144596

由于crc不是一种安全的算法,只要给出足够多不同的crc就有可能恢复出被加密的内容,而这里有三种可用的crc

image-20250227183429546

image-20250227183447325

image-20250227183501701

官方给的脚本不知道为什么跑不出来(

下面是一个密码爷的做法,只能膜拜Orz

image-20250227201333820