网站首页 | 网页制作 | 网络编程 | 图形图象 | 冲浪宝典 | 操作系统 | 软件教学 | 网络安全 | 认证考试 | 下载中心 | 游戏下载
| 网络安全首页 | 安全在线 | 病毒防治 | 黑客攻防 | 漏洞研究 | 黑客编程 | 破解手记 |
您现在的位置: 超人气学院 >> 网络安全 >> 黑客编程 >> 文章正文 用户登录 新用户注册
自己写溢出的基础,溢出原理           
自己写溢出的基础,溢出原理
作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:20:26
一:基础知识
计算机内存运行分配的区域分为3个
程序段区域:不允许写的
数据段区域:静态全局变量是位于数据段并且在程序开始运行的时候被加载
堆栈区域:放置程序的动态的用于计算的局部和临时变量则分配在堆栈里面和在过程调用中压入的返回地
址数据。堆栈是一个先入后出的队列。一般计算机系统堆栈的方向与内存的方向相反。压栈的xx作push= ESP-4,出栈的xx作是pop=ESP+4. 在一次函数调用中,堆栈中将被依次压入:参数,返回地址,EBP。如果函数有局部变量,接下来,就在 堆栈中开辟相应的空间以构造变量。函数执行结束,这些局部变量的内容将被丢失。但是不被清除。在函 数返回的时候,弹出EBP,恢复堆栈到函数调用的地址,弹出返回地址到EIP以继续执行程序。
在C语言程序中,参数的压栈顺序是反向的。比如func(a,b,c)。在参数入栈的时候,是:先压c,再压 b,最后a.在取参数的时候,
指令执行的图例:
指令区域
执行程序区
0 1 2 3
0
4
8 调用100处的函数,参数1(3位),2(10位)
C
10 0 1 2 3
100 执行处理
104
108
10C
110 返回调用 堆栈区域
0 1 2 3
如果EBP分配的空间不够xx作就是产生溢出的地方
200 保存以前的EBP4位(数据段的指针,用于可以使用局部动态
变量)现在的EBP等于当前的ESP-动态数据的大小值 ,
ESP=200
204 0C 00 00 00
此处是程序的返回地址
208 参数1,填充1位
20C 参数2填充2位
210
讲解例子WIN下的程序DEMO,演示参数导致的返回地址的变化
讲清主要4位的填充问题
另外溢出还会导致数据段的改变 3:如何利用堆栈溢出
原理可以概括为:由于字符串处理函数(gets,strcpy等等)没有对数组越界加以监视和限制,我们利用 字符数组写越界,覆盖堆栈中的老元素的值,就可以修改返回地址。 在DEMO的例子中,这导致CPU去访问 一个不存在的指令,结果出错。事实上,我们已经完全的控制了这个程序下一步的动作。如果我们用一个 实际存在指令地址来覆盖这个返回地址,CPU就会转而执行我们的指令。 那么有什么用呢,就算使得我们的程序可以跳转执行一些代码,如何用他来突破系统限制来获得权限呢? 二:系统权限知识
UNIX系统在运行的时候的权限检查主要是根据UID,GID,SID 三个标来检查的,主要根据SID来检查权限
SU系统调用就是SID变成SU的对象
S粘贴位使得运行程序的人具有该程序拥有者一样的权限
中断ROOT的S粘贴位的程序就可以获得超级用户的权限,SID位置没被调用返回修改回来。
VI的S粘贴位可以中断的例子 在UINX系统中,我们的指令可以执行一个shell,这个shell将获得和被我们堆栈溢出的程序相同的权限。 如果这个程序是setuid的,那么我们就可以获得root shell。 三:溢出突破权限的实现
首先要编写SHELLCODE的2进制代码作为溢出的参数进行传入:
shellcode的C程序 注意:execve函数将执行一个程序。他需要程序的名字地址作为第一个参数。一个内容为该程序的 argv[i](argv[n-1]=0)的指针数组作为第二个参数,以及(char*) 0作为第三个参数。
我们来看以看execve的汇编代码:
0x804ce7c <__execve>: push %ebp ‘保存以前的数据段地址
0x804ce7d <__execve+1>: mov %esp,%ebp ‘使得当前数据段指向堆栈
0x804ce7f <__execve+3>: push %edi
0x804ce80 <__execve+4>: push %ebx ‘保存
0x804ce81 <__execve+5>: mov 0x8(%ebp),%edi ‘ebp+8是第一个参数"/bin/sh\0"
0x804ce84 <__execve+8>: mov $0x0,%eax ‘清0
0x804ce89 <__execve+13>: test %eax,%eax
0x804ce8b <__execve+15>

[1] [2] [3] [4] 下一页

[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda    责任编辑:kinda 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
     Windows中巧用RUNDLL3[5355]
     黑客软件编写基础知识[827]
     Win32Asm快速教程[535]
    相 关 文 章
    化学金牌3.0的破解,自己一
    建立自己的动态链接库
    用VB编程实现自己的邮件“
    如何用PHP调用自己编写的C
    自己编写Email 炸弹
    隐藏自己
    如何编写自己的缓冲区溢出
    捕获自己的第一只Linux肉鸡
    给自己的网络设防
    如何禁止别人ping自己的主
    如何寻找自己的UNIX肉鸡
    进入系统后如何隐藏自己
    编写自己的潜入者个人版之
    打造自己的HTTP代理服务器
    定制自己的后门[推荐]
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)