wisecsj / wisecsj.github.io

Blog
Apache License 2.0
0 stars 0 forks source link

CSAPP Attack lab 有感 #11

Open wisecsj opened 5 years ago

wisecsj commented 5 years ago

了解了利用缓冲区溢出进行攻击的两种方式:1.CI (code injection) 2.ROP(Return-Oriented Programming)

第一种方式比较简单,但在如下场景就不太适用:

1.每次栈的位置是随机的,于是我们没有办法确定需要跳转的地址

2.即使我们能够找到规律注入代码,但是栈是不可执行的,一旦执行,则会遇到段错误

而应该用ROP: image

因为无法再代码注入,所以想到利用程序自身的代码指令来实现我们想要执行的功能。 而每一个Gadget(小的代码段,后跟ret),合起来,便组成了我们想要的代码片段。

如何获得gadget呢?

譬如我们要实现 popq %rdi:通过指令的编码表得到其二进制表示,然后到反汇编出来的文件里去查找,并且满足后跟c3(ret)。最后记录下此条指令开始的内存地址即可

PS:注意机器是大端序还是小端序