2018.5.29 完成attacklab

把第四个attack做了,第四个和第五个attacklab和前边的stack overflow攻击不同,是另一种更先进的return oriented programming攻击。

这里的目标代码在编译中加入了地址随机和栈中代码不可执行这两个保护。也就是说你不知道栈究竟在哪,每次代码执行栈的位置都不一样的,即使你找到了栈的位置,你注入到栈上的代码也没办法执行。

但是,这两个措施并没有改变ret这个指令仍然会去执行代码的事实,并且代码的地址是不变的,那么我们的攻击方式就变成了:拆分现有的代码成为我们想要的代码,然后用ret去一条一条执行现有的代码——有点像是拼碎片的感觉。

所以基本上就是在栈溢出的部分放上你的gadget们的所在地址,需要注意的是最后一定要以ret结束,这样才会返回栈上执行下一个gadget。

如果gadget中有pop指令的话栈上还需要混入准备好的数据,pop之后当然也要以ret结束,这里有一个小trick是0x90这个代码是无操作的意思,可以夹在任何指令中间,我刚开始没搞明白这一点,弄得很痛苦。

第五个attack是道附加题,据说很难,我自然喜闻乐见的被劝退了。

所以,总算能完成这个很无聊的lab还是很令人高兴的。。。

猜你喜欢

转载自www.cnblogs.com/dynasty919/p/9108050.html