CTFshow | Base64多层嵌套解码 | atob | btoa | slice| substr | reverse| join | spilt |

介绍Base64编码

Base64 是一种基于 64 个可打印字符的二进制到文本的编码方式,核心目的是将二进制数据(如图片、音频、非 ASCII 文本)转换成 ASCII 字符集的字符串,方便在仅支持文本传输的场景(如 HTTP、邮件、XML)中安全传输,避免数据丢失或解析错误。

image

了解更多点击:https://zhuanlan.zhihu.com/p/339477329

看关键的编码部分

document.getElementById('loginForm').addEventListener('submit', function(e) {
            const correctPassword = "SXpVRlF4TTFVelJtdFNSazB3VTJ4U1UwNXFSWGRVVlZrOWNWYzU=";
            
            function validatePassword(input) {
                let encoded = btoa(input);
                encoded = btoa(encoded + 'xH7jK').slice(3);
                encoded = btoa(encoded.split('').reverse().join(''));
                encoded = btoa('aB3' + encoded + 'qW9').substr(2);
                return btoa(encoded) === correctPassword;
            }

一共有5层base64的组合加密

第一层:

image

第二层:

由于前面被删掉了两位,我们向前面随便补两个字符 ,比如BL
image
我们看到前面的乱码,刚好是XX3,和加上去的aB3,对应,我们直接删掉就行。
删掉后位数正确 (4的倍数)

第三层:

image

直接进行reverse

得到
FM016RTJ4SDdqSw==

第四、五层:
对原base64进行爆破
import base64

flag = "FM016RTJ4SDdqSw=="
base64_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
results = []  # 存储所有的结果

for i in base64_chars:
    for j in base64_chars:
        for k in base64_chars:
            s = i + j + k + flag
            try:
                decoded_first = base64.b64decode(s).decode('utf-8')
                decoded_trimmed = decoded_first[:-5]  # 移除最后5个字符
                decoded_final = base64.b64decode(decoded_trimmed).decode('utf-8')
                results.append(decoded_final)  # 将结果添加到列表
            except Exception:
                continue

# 将所有结果写入文件,每行一个
with open('flag.txt', 'w',encoding='utf-8') as f:
    for result in results:
        f.write(result + '\n')

image

随便找一个没用乱码的密码即可

参考大佬文章:https://www.cnblogs.com/lee0/p/19074272

posted @ 2025-12-16 21:11  Dragon_Roar  阅读(112)  评论(0)    收藏  举报