我开始学习软件安全,但我不理解什么是缓冲区溢出攻击和ROP攻击。
据我所知,
缓冲区溢出攻击: 当一个缓冲区到达其大小限制时,填充缓冲区并添加其他代码,以便攻击者可以执行代码中的另一个函数或自己的shellcode。
ROP攻击: 通过给定某些输入,可以覆盖返回地址,从而使攻击者可以控制代码流程。
但是这两种攻击的确切区别是什么?
我觉得它们都只是提供了过多的输入来覆盖不应被访问的区域。
例如,如果我有以下代码:
据我所知,
缓冲区溢出攻击: 当一个缓冲区到达其大小限制时,填充缓冲区并添加其他代码,以便攻击者可以执行代码中的另一个函数或自己的shellcode。
ROP攻击: 通过给定某些输入,可以覆盖返回地址,从而使攻击者可以控制代码流程。
但是这两种攻击的确切区别是什么?
我觉得它们都只是提供了过多的输入来覆盖不应被访问的区域。
例如,如果我有以下代码:
1 #include <stdio.h>
2
3 void check(){
4 printf("overflow occurs!\n");
5 }
6
7 int main(int argc, char* argv[]){
8 char buffer[256];
9 gets(buffer);
10 printf("%s\n", buffer);
11 return 0;
12 }
尝试通过向gets()
函数提供某个输入来执行check()
函数。
这是一次ROP攻击还是缓冲区溢出攻击?