下来文件先checksec分析:
canary没开,意味着可以用stack overflow
NX开了,意味着不能直接注入shellcode,要利用现成的sysytem等lib函数和写好了的参数(比如 “insh” )
RELRO没有full relro:意味着我们可以修改got表
PS : ALSR意味着libc地址是随机的,也就是说,每次调用plt.entry的地址不一样
PIE :“如果程序开启了PIE保护的话,在每次加载程序时都变换加载地址,从而不能通过ROPgadget等一些工具来帮助解题”
得到信息:64位小端程序,没有开启canary,应该可以使用栈溢出的方法解题
在IDA上跑一跑,看看程序的逻辑和漏洞:
逻辑很简单,主程序就一个打印字符串,看看vulnerable_function
这里read函数读入的长度明显大于buf的长度,用栈溢出控制程序执行流,用ida看到一个很明显的后门函数:callsystem,得到地址
使用gdb动态调试获取垃圾数据长度:0xa0 - 0x20 = 128, 128 + 8 = 136
有了垃圾数据长度和后门函数的地址就可以做攻击脚本了:
执行获得shell再cat flag就ok