2022 BlueWhaleCTF 解题分析与技术教学
0x01 逆向工程(RE)部分
easyxor 题目解析
题目描述:简单的异或加密
解题步骤:
- 题目提供了一个经过异或加密的字节数组
- 使用0x22作为异或密钥进行解密
- Python解密代码:
f2 = [0x44,0x4E,0x43,0x45,0x59,0x5A,0X6D,0X50,0x7D,0x13,0x51,0x7D,0x54,0x11,0X50,0X5B,0X5B,0X5B,0X5B,0X5B,0X5B,0X5B,0X5B,0X5B,0X5B,0x7D,0x47,0x16,0x51,0x5B,0X5F]
flag=''
for i in range(31):
flag +=chr(f2[i]^0x22)
print(flag)
技术要点:
- 异或加密是可逆的,A ^ B = C ⇒ C ^ B = A
- 需要识别出加密算法和密钥
oh_my_python 题目解析
题目描述:pyc反编译题目
解题步骤:
- 反编译pyc文件获取源代码
- 分析代码逻辑:
def chall():
flag = ''
l = 'CKNOPWY_acfghkloruwy{}'
index = [10,14,8,11,20,0,8,2,7,6,3,17,7,1,3,5,2,7,12,3,5,7,4,19,9,7,18,15,16,13,21]
answer = ''
for i in index:
answer += l[i]
print(answer)
- 直接运行代码获取flag
技术要点:
- pyc文件反编译工具使用
- Python索引操作理解
xpu 题目解析
解题步骤:
- 使用UPX工具脱壳:
upx -d filename - 脱壳后文件包含base64编码数据
- 解码base64获取flag
技术要点:
- UPX壳识别与脱壳技术
- base64解码方法
asm_master 题目解析
解题步骤:
- 获取汇编代码
- 使用gcc编译:
gcc -c file.s -o file.o - 使用IDA分析.o文件
- 定位printf等关键函数
技术要点:
- 汇编语言基础
- GCC编译流程
- IDA静态分析技术
0x02 杂项(Misc)部分
Checkin 题目解析
解题步骤:
- 扫描二维码或分析二维码链接
- 提取#号后的内容作为flag
技术要点:
- 二维码信息提取技术
simplepcap 题目解析
解题步骤:
- 分析pcap流量文件
- 提取MacOS程序
- 解密算法分析:
v7 = [0x25,0x2F,0x22,0x24,0x38,0x21,0x22,0x21,0x3A,0x1C,0x33,0x20,0x22,0x33,0x1C,0x2A,0x30,0x1C,0x35,0x26,0x31,0x3A,0x1C,0x26,0x22,0x30,0x3a,0x3E]
flag = ''
for i in range(len(v7)):
flag+= chr(v7[i]^0x43)
print(flag)
技术要点:
- Wireshark流量分析
- 数据包中文件提取
- 异或解密技术
warmatap 题目解析
解题步骤:
- 分析视频节拍
- 按照节拍敲击键盘
- 获取flag:
flag{wozuixihuanwarmale}
技术要点:
- 视频信息分析
- 节奏模式识别
0x03 Web安全部分
你比香农都牛逼 题目解析
解题步骤:
- Ctrl+S保存网页
- 分析JS代码
- 发现JSFuck编码
- 解码JSFuck获取flag
技术要点:
- JSFuck编码原理与解码
- 前端代码分析技术
old php game 题目解析
题目代码:
error_reporting(0);
require __DIR__.'/flag.php';
$exam = 'return\''.sha1(time()).'\';';
if (!isset($_GET['flag'])) {
echo '<a href="./?flag='.$exam.'">Click here</a>';
}
else if (strlen($_GET['flag']) != strlen($exam)) {
echo 'Not allowed length';
}
else if (preg_match('/`|"|\.|\\\\|$|$|
$$
|
$$
|_|flag|echo|print|require|include|die|exit/is', $_GET['flag'])) {
echo 'Not allowed keyword';
}
else if (eval($_GET['flag']) === sha1($flag)) {
echo $flag;
}
解题步骤:
- 分析$exam长度为49
- 绕过过滤字符限制
- 使用PHP短标签构造payload
技术要点:
- PHP eval函数风险
- 代码注入绕过技术
- PHP短标签使用
very old php game 题目解析
解题思路:
- 利用$GLOBALS超全局变量
- 构造payload访问全局变量
- 绕过限制获取flag
技术要点:
- PHP变量变量(
\[var)理解 - $GLOBALS超全局数组使用 ### Baby Unserialize 题目解析 **题目代码**: ```php require_once "flag.php"; class Foo { private $i_am_flag; public $i_am_not_flag; public function __construct() { $this->i_am_not_flag =&$this->i_am_flag; } public function __wakeup() { $this->i_am_not_flag = 'I am not flag!'; } } $O = new Foo(); echo base64_encode(serialize($O)); ``` **解题步骤**: 1. 分析序列化结构 2. 绕过__wakeup()方法 3. 利用引用传递特性 4. 构造恶意序列化数据 **技术要点**: - PHP序列化与反序列化 - __wakeup魔术方法绕过 - 对象引用理解 ## 0x04 PWN部分 ### flag_in_stack 题目解析 **解题步骤**: 1. 识别格式化字符串漏洞 2. 利用%p泄露栈上数据 3. 构造payload:`%10$p%11$p%12$p%13$p` 4. 从泄露数据中提取flag **技术要点**: - 格式化字符串漏洞利用 - 栈内存布局理解 - 地址泄露技术 ## 综合技术要点总结 1. **加密算法识别与破解**: - 异或加密特征与破解 - base64编码识别与解码 2. **逆向工程技术**: - pyc文件反编译 - UPX脱壳技术 - 汇编代码分析 3. **Web安全技术**: - PHP代码注入 - 反序列化漏洞利用 - 过滤绕过技术 4. **杂项分析技术**: - 流量文件分析 - 数据提取与解密 - 多媒体信息分析 5. **PWN技术**: - 格式化字符串漏洞利用 - 内存泄露技术 本WriteUp详细记录了2022 BlueWhaleCTF的解题思路和关键技术点,可作为CTF学习和训练的参考资料。\]