SCTF-2024复现
字数 2129 2025-08-29 08:29:58
SCTF-2024 漏洞利用技术深度解析
目录
Linux权限滥用漏洞利用
漏洞背景
在题目环境中发现/bin/和/sbin目录的所有者为UID 1000(当前用户),且权限设置为777(完全控制)。这属于不合理的权限配置。
利用原理
/sbin目录下的程序通常以root权限执行poweroff程序在系统关闭时会被调用- 在Docker环境中,通常以root权限启动
init.sh,最终会以root权限执行poweroff
利用步骤
- 检查目录权限:
ls -la /bin /sbin
- 确认当前用户UID:
id
- 劫持
poweroff程序:
echo '#!/bin/sh
/bin/sh' > /sbin/poweroff
chmod +x /sbin/poweroff
- 等待系统关闭时自动以root权限执行我们的payload
内核漏洞利用技术
利用链组成
- 信息泄露:通过notes leak泄露内核基地址
- 竞争条件:利用userfaultfd机制提高竞争成功率
- 结构体劫持:劫持tty_struct到rt_regs
- ROP执行:最终执行内核ROP链
关键代码片段
if (uffd == -1)
err_exit("syscall for userfaultfd ERROR in register_userfaultfd func");
if (res == -1)
err_exit("pthread_create ERROR in register_userfaultfd func");
技术要点
- userfaultfd:用户态页错误处理机制,可用于精确控制竞争时机
- tty_struct:内核中表示终端设备的结构体,常被用于利用
- rt_regs:保存寄存器状态的结构体,可用于控制执行流
虚拟机代码逆向分析
虚拟机工作原理
虚拟机通过(opcode-0x21)*2+offset计算跳转偏移,与rsp栈地址相加后执行
操作码解析表
| Opcode | 地址 | 功能描述 | 备注 |
|---|---|---|---|
| 0x21 | 0x1274 | call调用 | |
| 0x22 | 0x1299 | sub rsp,8; mov rsi,[rsp] | |
| 0x23 | 0x12a7 | xor [rsp-0x10],[rsp-0x8]; sub rsp,8 | |
| 0x24 | 0x12c4 | xchg [rsp-8],[rsp-0x18] | |
| 0x25 | 0x12e0 | xchg [rsp-0x8],[rsp-0x10] | |
| 0x26 | 0x12fc | push 4字节; (rsp+8) | |
| 0x27 | 0x1319 | 只保留rsp-8低一个字节 | |
| 0x28 | 0x132e | rsp-8 | |
| 0x29 | 0x1332 | [rsp-8]>>8 | |
| 0x2a | 0x1348 | mov [rsp-8],[rsp+8]; (rsp+8) | |
| 0x2b | 0x135c | [rsp-8]<<8 | |
| 0x2c | 0x1372 | if [rsp-8]==0,继续,否则跳跃0x138c(rsp-8), add rsi,2 | 实现jnz |
| 0x2d | 0x13a3 | mov [rsp-0x10],([rsp-8]>>[rsp-0x10]); (rsp-8) | |
| 0x2e | 0x13c0 | mov [rsp-0x10],([rsp-8]<<[rsp-0x10]); (rsp-8) | |
| 0x2f | 0x13dd | mov [rsp-0x10],([rsp-8] and [rsp-0x10]); (rsp-8) | |
| 0x30 | 0x13fa | mov rax,[rsp-0x8]; mov rsi,[rsp-0x18]; mov rdx,[rsp-0x20]; mov rdi,[rsp-0x10], syscall还原进入时的rdi,rsi,(rsp-0x18); mov [rsp-0x8],rax | |
| 0x31 | 0x1425 | push rsp | |
| 0x32 | 0x1439 | push rip | |
| 0x33 | 0x1452 | exit |
栈溢出漏洞利用
漏洞成因
动态分配算法内存时向下取整错误,导致栈溢出
利用方法
- 构造特定输入触发计算错误
- 覆盖返回地址
- 执行shellcode或ROP链
Go编译器漏洞利用
漏洞背景
基于GitHub开源项目Go简易编译器,ugo编译器编译hello.ugo文件后转为可执行文件
漏洞细节
- 测试函数返回字符串到栈上变量时存在溢出
- 静态编译且未开启PIE
- 可直接计算偏移劫持栈执行system("/bin/sh")
利用步骤
- 分析二进制文件确定偏移
checksec --file=target
objdump -d target
- 构造溢出payload覆盖返回地址
- 跳转到system函数执行"/bin/sh"
总结
本文详细分析了SCTF-2024中涉及的多种漏洞利用技术,包括Linux权限滥用、内核漏洞利用、虚拟机逆向、栈溢出和Go编译器漏洞。每种技术都提供了关键原理和利用方法,可作为CTF比赛和漏洞研究的参考。