Category: CS458

Buffer Overflow攻略

Buffer Overflow是通过程序在设计上的缺陷,向程序输入特殊设计的字符串来达到获取计算机权限的程序漏洞。由于C语言本身对程序使用内存的限制并不严格,这就给了漏洞可乘之机。 下面这段代码就存在严重的buffer overflow漏洞。 void printSomething(char* str) {     char string[50];     strcpy(string, str);     printf("Printing %s\n", string); }   int main(int argc, char* argv[]) { if ( argc >= 2 ) { printSomething( argv[1] ); } } 代码在把参数str存入string之前并没有检查str的长度,而string这个array的最大长度却只有50。如果str是一个长度大于49(C字符串以0结尾)的字符串,那么就会引发问题。 下面看一个更加直白的例子:(因为是在64位系统上面进行的测试,所以用来保存地址的地方用了long long。 long long ago….) void pt(long long in, int num) { long long a[1];     Read More