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

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值