1 / 10
文档名称:

基于shellcode分析缓冲区溢出攻击.doc

格式:doc   大小:18KB   页数:10页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

基于shellcode分析缓冲区溢出攻击.doc

上传人:丰儿 2022/5/12 文件大小:18 KB

下载得到文件列表

基于shellcode分析缓冲区溢出攻击.doc

相关文档

文档介绍

文档介绍:基于shellcode分析缓冲区溢出攻击
摘 要: 缓冲区的本质是内存中的一个片段,它用于暂时存放输入与输出的数据或者代码。缓冲区溢出是一种非常危险的漏洞,在各种应用软件及操作系统中广泛存在。如果攻击者发现目标主机存在缓冲区出是指有大量的数据写入缓冲区,超过了缓冲区所能容纳的最大范围,超过了最初定义的内存边界,从而覆盖了相邻内存区域的数据,这种现象大多发生在固定分配存储空间的情况下[7]。在理想状态下,程序会检查数据的长度,并且不允许输入的字符长度超过缓冲区的大小。而且,系统软件也会使用特殊的指令为每个程序划定存储区域,禁止越界访问[8]。实际上,并不是所有的程序都会具有上述功能,而是假设输入的数据长度不会超过缓冲区的边界,这就为缓冲区溢出留下隐患。
缓冲区溢出攻击
缓冲区溢出攻击是利用缓冲区溢出漏洞进行的攻击行为,这种攻击行为会出现内存数据被修改、程序执行失败、系统重启等现象,也可以在远程执行恶意代码,导致目标主机被控制[9]。这是一种具有破坏性的攻击行为。
程序执行的异常情况
在正常情况下,在向计算机传输信息时,计算机会默认提交的信息全部为数据。如果程序的设计规则不严格,在提交的信息加入代码时,计算机并不会识别出信息中包含的代码,仍会把这些内容当作数据在计算机里运行。该现象可以通过一个能够显示输入内容的脚本()进行解释。如图1所示。 图1显示了该脚本的四次执行结果,可以发现前两次执行的输出结果与输入结果一致,后面两次执行的输出是把参数内容作为命令来执行。因为程序编写者没有对该脚本内容的书写规则做出严格的规定,导致在执行脚本时没有对输入的参数严格检查,没对普通字符和命令做严格地区分,输出许多其他信息,这是一种异常情况。
2 实际案例
攻击者会利用程序执行的异常情况,编写恶意程序,针对具有缓冲区溢出漏洞的目标主机发起攻击,使服务进程遭到破坏。下面将在引言中提到的实验环境,不断进行模糊测试,讲解shellcode的形成过程。
确定溢出的范围
编写可以向110端口(POP3协议默认的端口号)发送数据的脚本。脚本中包含大量的溢出字符,均为字母A(十六进制为41),如果不断修改字母A的发送量,当发送2700个字母A时,脚本就不再继续执行,此时,EIP寄存器的内容已被修改为“41414141”。当发送2600个字母A时,脚本也不再继续执行,但是EIP寄存器的内容并非是“41414141”,说明溢出字符还没覆盖到EIP寄存器上。因此,能够覆盖EIP寄存器的字符数目在2600到2700之间。
确定溢出的精确位置并验证
在本案例中选择使用唯一字符串法找出精确位置。将以三个为一组不重复的2700个字符替换溢出字符中的字母A,重新发送溢出字符,根据EIP寄存器的内容计算偏移量,确定溢出的精确位置。
利用该偏移量,将精确位置后的内容修改为由4个字母B(十六进制为42)和20个字母C,其余的内容修改为字母A,重新发送溢出字符,结果如圖2所示。其中,EIP寄存器的内容为“42424242”,证明之前测试得到的溢出位置是准确的。而且,图2中ESP寄存器的内容恰好为溢出字符中的20个字母C,这个现象将为在溢出字符中添加具有特定功能