SCTF-2024复现
字数 2129 2025-08-29 08:29:58

SCTF-2024 漏洞利用技术深度解析

目录

  1. Linux权限滥用漏洞利用
  2. 内核漏洞利用技术
  3. 虚拟机代码逆向分析
  4. 栈溢出漏洞利用
  5. Go编译器漏洞利用

Linux权限滥用漏洞利用

漏洞背景

在题目环境中发现/bin//sbin目录的所有者为UID 1000(当前用户),且权限设置为777(完全控制)。这属于不合理的权限配置。

利用原理

  1. /sbin目录下的程序通常以root权限执行
  2. poweroff程序在系统关闭时会被调用
  3. 在Docker环境中,通常以root权限启动init.sh,最终会以root权限执行poweroff

利用步骤

  1. 检查目录权限:
ls -la /bin /sbin
  1. 确认当前用户UID:
id
  1. 劫持poweroff程序:
echo '#!/bin/sh
/bin/sh' > /sbin/poweroff
chmod +x /sbin/poweroff
  1. 等待系统关闭时自动以root权限执行我们的payload

内核漏洞利用技术

利用链组成

  1. 信息泄露:通过notes leak泄露内核基地址
  2. 竞争条件:利用userfaultfd机制提高竞争成功率
  3. 结构体劫持:劫持tty_struct到rt_regs
  4. 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");

技术要点

  1. userfaultfd:用户态页错误处理机制,可用于精确控制竞争时机
  2. tty_struct:内核中表示终端设备的结构体,常被用于利用
  3. 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

栈溢出漏洞利用

漏洞成因

动态分配算法内存时向下取整错误,导致栈溢出

利用方法

  1. 构造特定输入触发计算错误
  2. 覆盖返回地址
  3. 执行shellcode或ROP链

Go编译器漏洞利用

漏洞背景

基于GitHub开源项目Go简易编译器,ugo编译器编译hello.ugo文件后转为可执行文件

漏洞细节

  1. 测试函数返回字符串到栈上变量时存在溢出
  2. 静态编译且未开启PIE
  3. 可直接计算偏移劫持栈执行system("/bin/sh")

利用步骤

  1. 分析二进制文件确定偏移
checksec --file=target
objdump -d target
  1. 构造溢出payload覆盖返回地址
  2. 跳转到system函数执行"/bin/sh"

总结

本文详细分析了SCTF-2024中涉及的多种漏洞利用技术,包括Linux权限滥用、内核漏洞利用、虚拟机逆向、栈溢出和Go编译器漏洞。每种技术都提供了关键原理和利用方法,可作为CTF比赛和漏洞研究的参考。

SCTF-2024 漏洞利用技术深度解析 目录 Linux权限滥用漏洞利用 内核漏洞利用技术 虚拟机代码逆向分析 栈溢出漏洞利用 Go编译器漏洞利用 Linux权限滥用漏洞利用 漏洞背景 在题目环境中发现 /bin/ 和 /sbin 目录的所有者为UID 1000(当前用户),且权限设置为777(完全控制)。这属于不合理的权限配置。 利用原理 /sbin 目录下的程序通常以root权限执行 poweroff 程序在系统关闭时会被调用 在Docker环境中,通常以root权限启动 init.sh ,最终会以root权限执行 poweroff 利用步骤 检查目录权限: 确认当前用户UID: 劫持 poweroff 程序: 等待系统关闭时自动以root权限执行我们的payload 内核漏洞利用技术 利用链组成 信息泄露 :通过notes leak泄露内核基地址 竞争条件 :利用userfaultfd机制提高竞争成功率 结构体劫持 :劫持tty_ struct到rt_ regs ROP执行 :最终执行内核ROP链 关键代码片段 技术要点 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") 利用步骤 分析二进制文件确定偏移 构造溢出payload覆盖返回地址 跳转到system函数执行"/bin/sh" 总结 本文详细分析了SCTF-2024中涉及的多种漏洞利用技术,包括Linux权限滥用、内核漏洞利用、虚拟机逆向、栈溢出和Go编译器漏洞。每种技术都提供了关键原理和利用方法,可作为CTF比赛和漏洞研究的参考。