第 2 周:缓存溢出¶
虽然这种攻击现在已经基本没法使用了,但是它作为第一步还是适合入门的。
软件是安全链中的最脆弱的部分之一。
C 和 Java¶
众所周知,Java 有类型安全(运行时检测)和垃圾回收,而这两个都是 C 所没有的。
Java 还有运行时的边界检测:
这个会直接报错的。
不过这其中的检测就会被优化器优化掉。
危险的函数¶
C 语言里有很多不会检测边界的函数,比如 strcpy
、strcat
、sprintf
等。
这些函数一般可以被当作我们攻击的入口。
栈的布局¶
程序返回时¶
leave = mov ebp, esp; pop ebp
ret = pop eip