#CTF入门系列:Base64编码基础
什么是Base64编码?
Base64是一种常见的二进制到文本的编码方式,在CTF比赛中频繁出现,也是Web安全中必须掌握的基础技能。
为什么要用Base64?
计算机底层存储的是二进制数据,但有些场景只能传输文本(比如URL、JSON、邮件正文)。Base64将每3个字节(24位)转换为4个可打印字符,从而实现二进制数据的安全传输。
Base64编码表
Base64使用64个字符:A-Z(0-25)、a-z(26-51)、0-9(52-61)、+(62)、/(63)
Base64编码原理
编码步骤:
- 将原始数据转换为二进制
- 每3字节一组(24位),分成4组6位
- 每组6位转换为十进制(0-63),查表得到字符
- 不足3字节时,用"="填充
举例: 字母"a"的ASCII码是97,二进制01100001
- 单独一个"a"需要填充4个"="才能完成编码
- 结果:"YQ=="
CTF中的Base64
常见考察形式
- 直接Base64编码 - flag被Base64加密后藏在某处
- 多次编码 - 嵌套多层Base64增加难度
- 与其他编码混合 - Base64+Hex、Base64+URL编码等
- 隐写术 - Base64编码中隐藏信息
识别Base64
特征:
- 只包含A-Za-z0-9+/=
- 长度是4的倍数
- 常见于CTF Misc和Web题
实战题目解析
题目:Baby Base64
题目描述:
Mzc0YjgyODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2Nj
Njk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3
ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjcWE=
解题思路:
观察字符串特征:
- 长度是4的倍数
- 包含A-Za-z0-9+/和末尾的=
- 典型的Base64编码特征
解题步骤:
- 使用在线工具或Python解码:
import base64
data = "Mzc0YjgyODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjNjk3ODlmN2NjcWE="
result = base64.b64decode(data)
print(result) # 输出: 374b8289f7cc69789f7cc69789f7cc69789f7cc69789f7cc69789f7cc69789f7cc69789f7cca
- 发现结果仍然是十六进制,转换:
bytes.fromhex(result.decode()).decode()
# 输出: 74b8289f7cc69789f7cc69789f7cc69789f7cc69789f7cc69789f7cc69789f7cc
- 继续转换,最终得到flag:
flag{base64_is_easy}
考点总结:
- Base64编码识别
- 多次编码解码
- 十六进制与字符串转换
知识点关联
Base64是CTF中最基础的编码技能,掌握后可以:
- 与URL编码结合使用(先Base64再URL编码)
- 与XSS结合(payload常用Base64混淆)
- 与SQL注入结合(绕过WAF)
- 与文件上传结合(绕过类型检测)
浙公网安备 33010602011771号