DASCTF 2024暑期挑战赛 - MagicBook
感谢 dbgbgtf 提供的脚本用以复现
文件属性
属性 | 值 |
---|---|
Arch | x64 |
RELRO | Full |
Canary | off |
NX | on |
PIE | on |
strip | no |
libc | 2.35-0ubuntu3.6 |
seccomp rules
解题思路
一个菜单题,没有show,只给了程序基地址。堆块删除不会清空,
因此只能分配5个堆块。有一次堆块uaf机会,
可以写[ptr + 8]
~`[ptr + 0x20](刚好能写largebin的
bk_nextsize`)
堆块大小允许超过0x400,因此可以做largebin attack,而在edit_the_book
函数中,
读取的长度是由book
决定的。由于给了程序基地址,因此可以利用largebin attack,
将堆地址写到book
上,这样就可以造成栈溢出打rop
在以前的文章中中提到过read
的参数count
是不能超过SSIZE_MAX
的,
在官方wp中也提到了这一点,因此在主循环中每次都book &= 0xffff
限制大小
只禁了execve
系统调用,因此可以使用execveat
来拿shell
在设置传参函数的时候还要将r8置为0,因为这个flags
在我们的情况下是0x1e
,
会导致execveat
无法打开shell
EXPLOIT
1 | from pwn import * |
禁用了execve
后,对于fork出来的程序也是有效的,因此后续不能使用cat flag
来打印文件内容,
应使用
1 | read FLAG < flag |
来打印flag
- 标题: DASCTF 2024暑期挑战赛 - MagicBook
- 作者: RocketDev
- 创建于 : 2024-07-30 09:14:00
- 更新于 : 2024-07-30 09:14:00
- 链接: https://rocketmadev.github.io/2024/07/30/MagicBook/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论