Shellcode攻击实验

//csdn博客目前暂时不再更新了,有兴趣请访问我的技术博客-晓的博客:zhangxiaolong.org 


      首先,先要知道什么是shellcode,Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。详见维基百科shellcode介绍:http://en.wikipedia.org/wiki/Shellcode

      今天,先从一个简单的漏洞程序入手分析进行shellcode攻击。看一个程序vulp.c

#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[1024];
strncpy(buf, argv[1], sizeof(buf) - 1);
printf(buf);
exit(0);
}

    我们的目的是在程序执行到exit()时,通过更改exit的内存地址中的内容,把shellcode的地址作为内容写入到该地址。

(1)编译vulp.c程序,并且设置为suid权限。如图1所示。

图1

(2)编写一个shellcode代码(一般可以在网上找到,并做小修改就可以了),并定义一个环境变量EGG,在变量中存放shellcode;编写一个get()函数,目的是获取这个变量的地址。如图2示。所获取的地址为0xbffff838.

    get()函数作用是返回变量EGG在内存中的地址。函数内容为:

#include<stdio.h>
int main()
{
     printf("%p\n",getenv("EGG"));
     exit(0);
}

图2

(3)寻找exit函数的地址,用objdump –R vulp命令,寻找exit的地址,如图3示.

图 3

(4)为了在exit函数位置内写入地址,首先要计算在此位置要写入的字符数,如图4所示。Exit在第八个位置上。

图 4

(5)有以上内容知,用vulp函数在exit地址内写入如下图5示的内容,其中在0x0804a010的低地址写入0xf839,在高地址位写入0xbfff。(计算方法在图中已表明)

图 5

   

      接下来在运行vulp的程序中,执行到exit时,不进行退出,而转向执行shellcode代码,运行得到root权限。如图6所示。(运行后可能结果与图片显示不一样,此图是为了更好的显示效果,所以所有的填充都用0)

图 6

 

 

你可能感兴趣的:(服务器)