打开环境,先进行nc连接,发现随便输入一些东西后就会被弹出,检查附件并用相应ida打开。
发现定义了一个字符串buf,距栈底距离为0x10,并且有一个read函数,再检查附件其他内容并没有发现bin/sh,但是发现了一个tips,跳转到该地址进行查看
发现机器码24 30,$0在机器码中为 \x24\x30,可以利用system($0)获得shell权限。
只需要取它地址后一位就可以了也就是取到0x400541就能得到$0的机器码。
要构造的payload就是首先需要覆盖返回地址,使用ret弹出一个地址,再使用pop rdi ret 把我们的shell的地址存进rdi寄存器里,最后再调用system函数,因为rdi里存着shell函数的地址所以调用了system函数就等于system($0)。