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

了解更多点击: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的组合加密
第一层:

第二层:
由于前面被删掉了两位,我们向前面随便补两个字符 ,比如BL

我们看到前面的乱码,刚好是XX3,和加上去的aB3,对应,我们直接删掉就行。
删掉后位数正确 (4的倍数)
第三层:

直接进行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')

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

浙公网安备 33010602011771号