在这次复现中,经历了太多挫折。
刚刚开始的时候本地调试 get不到shell,就很疑问,而且不会爆破,想学下怎么爆破出那个0x05,
后来问了位师傅 ,他说用retdl_solve 试试,我就跑去学了,结果,还是不行,而且64位没有leak,也没stdout的,找了两天都没找到这种利用方法。。what_the_fuc;;;;;;
后来还是在群里问了一热心的师傅和sw师傅也解决了这道题。
这道题的利用思路就是利用了
这个 alarm 和syscall 最后一位想差0x5 师傅告诉我,因为alarm的实现就是
syscall(int_alarm, arg),所以可能近点吧。
剩下的思路就明确多了 ,虽然每次只能利用ebp往栈写东西,但是因为是没次进入了两层,又直接跳了出来所以写ebp也能写rop。就是利用了init_gadat 第一次用read在在alarm
后面的最后一位覆盖成0x5,然后往bss写东西,布置好东西就getshell,
下面我只贴出爆破的脚本。
exploit(i) io.sendline("aaaaa") try: if io.recvline(): io.interactive() except: io.close()