SEED-缓冲区溢出攻击

这篇具有很好参考价值的文章主要介绍了SEED-缓冲区溢出攻击。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验环境:SEED-Ubuntu20.04虚拟机

A. 缓冲区溢出攻击实验准备

a) 缓冲区溢出原理

seed 缓冲区溢出,网络安全
**缓冲区溢出攻击原理:**利用溢出的数据改变源程序的控制流,如覆盖返回地址

b) 分析生成badfile文件的exploit.py程序

Shellcode部分
seed 缓冲区溢出,网络安全

字节数组末尾处填入shellcode
seed 缓冲区溢出,网络安全
seed 缓冲区溢出,网络安全

c) 编译目标服务器上具有缓冲区溢出漏洞的stack.c程序,并将其缓冲区大小设为“L1”,L1大小在makefile文件中

输入命令:gcc -DBUF_SIZE=$(L1) -o stack -z execstack -fno-stack-protector stack.c,结果显示函数bof中存在缓冲区溢出
seed 缓冲区溢出,网络安全

d) 因为stack.c编译命令在makefile文件中因此需通过执行命令make完成编译,再通过命令make install 将编译成的二进制文件复制到文件夹bof-containers folder下,这样创建和开启的containers可以运行和利用

seed 缓冲区溢出,网络安全

e) 建立container

seed 缓冲区溢出,网络安全

注意:

  • 若执行命令dcbuild无法建立container,那可能是Docker没有开启Docker,只用命令“systemctl restart docker.service”开启Docker,若还是没法开启那就需要更改mirrors配置文件了—多尝试(增加或恢复到初始镜像网站)。如果还是不行可以尝试重启虚拟机SEED Ubuntu20.04
  • 若执行dcup命令报错“WARNING: Found orphan containers (elgg-10.9.0.5, mysql-10.9.0.6) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
    ERROR: for bof-server-L2 Cannot start service bof-server-L2: Address already in use”
    =》说明IP地址被其他服务占用
    根据提示执行命令:docker-compose up -d --remove-orphans
    seed 缓冲区溢出,网络安全
f) Shellcode代码解析

Shellcode是能够完成一定功能和由计算机执行的机器码,通常以十六进制的形式存在。Shellcode以数据形式发送给目标服务器,以攻击目标服务器上具有缓冲区漏洞的程序,并获得一定的权限

通用Shellcode代码
seed 缓冲区溢出,网络安全

B. Task1:熟悉Shellcode

a) 运行shellcode_32.py 和shellcode_64.py两个python文件,将shellcode代码分别写进文件codefile_32和 codefile_64

seed 缓冲区溢出,网络安全

b) 编译call_shellcode.c文件,该文件用于运行上面生成的两个文件中的shellcode代码

seed 缓冲区溢出,网络安全

c) 测试两个文件中的shellcode代码

seed 缓冲区溢出,网络安全

C. Task2:Level-1 Attack 目标服务器及端口:10.9.0.5 9090

a) 在目录/Labsetup下打开一个终端,并在该终端开启containers

seed 缓冲区溢出,网络安全

b) 在目录/Labsetup下打开一个终端,向目标服务器发送数据
i. 输入正常数据“hello”

输入命令:echo hello | nc 10.9.0.5 9090=>键入:Ctrl+C
seed 缓冲区溢出,网络安全

未关闭随即地址之前,相同一个服务器输入hello得到的结果:ebp和偏移量的值会变化

seed 缓冲区溢出,网络安全

执行命令:sudo /sbin/sysctl -w kernel.randomize_va_space=0 关闭随即地址
seed 缓冲区溢出,网络安全

注意:若重新启动docker,则重新获得ebp和偏移量值(地址)与之前相比也会变化
seed 缓冲区溢出,网络安全

ii. 输入具有shellcode代码的数据

使用exploit.py文件生成文件badfile—含shellcode代码,大小为517bytes;
直接发送exploit.py未修改前的输出结果的返回结果
seed 缓冲区溢出,网络安全

修改exploit.py文件
填入shellcode代码段
seed 缓冲区溢出,网络安全

Offset=缓冲区大小+4(调用者ebp占的空间)
该ret(返回地址)的值为shellcode代码在的入口位置处=ebp+8,offset(偏移量)-函数栈帧中栈顶到ret处的大小=ebp-buffer’s address+4
seed 缓冲区溢出,网络安全

运行expliot.py生成badfile文件
seed 缓冲区溢出,网络安全
seed 缓冲区溢出,网络安全

将badfile传输到目标服务器,在container中查看结果:成功执行了shellcode代码
seed 缓冲区溢出,网络安全

D. Task3:Level-2 Attack 目标服务器及端口:10.9.0.6 9090

a) 发送正常数据

服务器只给出缓冲区地址而没有给出ebp值,因此无法得出缓冲区大小
seed 缓冲区溢出,网络安全

要求:缓冲区大小只能在[100,300] 单位:bytes
分析:

  • bufferSize在[100,300]范围内,则offset在[100+4,300+4]范围内,且offset一定为4的倍数
  • offset最大为304,则ret后面—高地址方向都是NOP指令或shellcode代码,因此ret=buffer’s address + 304+4(ret部分占有空间大小)一定会指向NOP指令或shellcode指令入口处,而NOP指令会一直向下跳
  • 从offset=104开始一直填写上面一部确定好的ret值到offset=304结束,则ret部分一定会得到上面的ret值
b) 修改exploit.py文件

seed 缓冲区溢出,网络安全

c) 在目录/Labsetup/attack-code目录下运行exploit.py文件生成新的的badfile文件,将badfile传输到server-2并查看服务器端的输出

seed 缓冲区溢出,网络安全
结果显示成功在目标服务器上运行shellcode代码

E. Task4:Level-3 Attack

注:

  • 64位系统中,地址为8字节,其中最高的两个字节不用,因此64位系统中内存地址表示为0x0000XXXXXXXXXXXX
  • 在一些有关字符串操作的函数中将“0”识别为截断,如strcpy()函数,而在badfile文件中ret=0x0000XXXXXXXXXXXX,且stack.c程序中代码为“strcpy(buffer,str)
    =》执行strcpy()函数时ret段后面的内容会被截断
    =》64位系统中shellcode不放在ret后
a) 64位shellcode(在目录Labsetup/shellcode/下的文件shellcode_64.py中获得64位的shellcode代码)

Shellcode_64.py文件下的shellcode代码
seed 缓冲区溢出,网络安全

Exploit.py文件下的shellcode代码
seed 缓冲区溢出,网络安全

b) 输入正常数据“hello”

seed 缓冲区溢出,网络安全
地址为8bytes,而且最高两个字节恒为0
Buffer大小:208字节
Buffer_size=208bytes=》函数栈挺大,可以将shellcode放在缓冲区中

c) 修改exploit.py文件

seed 缓冲区溢出,网络安全
解释图中标记为1,2,3的内容

  1. start在[0,84]范围内均可。Len(shellcode)=165<buffer_size+ebp段=208+8=216,将shellcode放进缓冲区,只要确保"/bin/ls -l; echo Hello 64; /bin/tail -n 4 /etc/passwd *"在ret段前即可,而该字符串之前(包含该字符串)的shellcode长为133bytes
    =》offset(208+8)-start+1≥133=》0≤star≤84
  2. ret=buffer’address+[0,start]
  3. offset=buffer_size+8
d) 在目录/Labsetup/attack-code目录下运行exploit.py文件生成新的的badfile文件,将badfile传输到server-3并查看服务器端的输出

seed 缓冲区溢出,网络安全

F. Task5:Level-4 Attack

a) 发送正常消息“hello”

seed 缓冲区溢出,网络安全
Buffer_size=96bytes
Offset=Buffer_size+8=104bytes<len(shellcode)=165bytes
=》函数栈很小,不适于将shellcode放进缓冲区,而放在ret段后面又会被截断。但是badfile传进目标程序时已载入数据段,因此尽可能将ret设置大一点,跳转到数据段的shellcode代码部分执行shellcode
网上找到的资料:ret=rbp+n,n在1184与1424之间

b) 修改exploit.py文件

seed 缓冲区溢出,网络安全

c) 在目录/Labsetup/attack-code目录下运行exploit.py文件生成新的的badfile文件,将badfile传输到server-3并查看服务器端的输出

seed 缓冲区溢出,网络安全

G. Task6:针对缓冲区溢出攻击的对策之随即地址

a) 开启内存地址随机化保护, 并用server-1与server-2上的目标程序进行检验

输入命令:sudo /sbin/sysctl -w kernel.randomize_va_space=2
Server-3

seed 缓冲区溢出,网络安全

Server-1
seed 缓冲区溢出,网络安全

b) 设目标程序为server-1上的,并修改exploit.py文件中的shellcode,注:shellcode长度不能变

seed 缓冲区溢出,网络安全

seed 缓冲区溢出,网络安全

c) 在/Labsetup/attack-code目录下执行exploit.py程序,并另打开一窗口进行监听

seed 缓冲区溢出,网络安全

d) 执行/Labsetup/attack-code目录下的brute-force.sh程序,该程序会一直执行exploit.py程序直到获得目标服务器shell

输入命令:./brute-force.sh
seed 缓冲区溢出,网络安全
在第10106次成功获得server-1的shell
成功reverse shell

输入命令进行验证seed 缓冲区溢出,网络安全

H. Task7:针对缓冲区溢出攻击的其他几个对策

a) 打开StackGuard保护,并将badfile文件传输到stack-L1文件中,在/Labsetup/serve-code目录下直接执行stack-L1文件

先将badfile文件复制到目录/Labsetup/serve-code下
打开StackGuard保护:编译stack.c时去掉“
将stack.c -fno-stack-protector”
将stack.c直接编译为stack-L1
seed 缓冲区溢出,网络安全

b) 打开Non-executable Stack(栈堆不可执行)保护

只是不能运行堆栈上的shellcode代码,还是允许堆栈溢出
seed 缓冲区溢出,网络安全
堆栈不能执行

缺点:这个方法只是不能在堆栈上执行shellcode代码,而没有阻止缓冲区溢出,还有其他方法可进行攻击文章来源地址https://www.toymoban.com/news/detail-734492.html

到了这里,关于SEED-缓冲区溢出攻击的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络攻防技术——缓冲区溢出攻击(基于服务器)

          缓冲区溢出 被定义为程序试图将数据写入缓冲区边界之外的情况。恶意用户可以利用此漏洞更改程序的流控制,从而导致恶意代码的执行。本实验的目的是让学生对这种类型的漏洞有实际的了解,并学习如何利用攻击中的漏洞。      在这个实验中,学生将得到四个不

    2024年02月02日
    浏览(56)
  • 网络安全缓冲区溢出与僵尸网络答题分析

    一、缓冲区溢出攻击 缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。但是绝大多数程序都会假设数据长度总是与所分配的储存空间

    2023年04月21日
    浏览(31)
  • 【HUST】网络攻防实践|6_物联网设备固件安全实验|实验一 裸机缓冲区溢出漏洞利用

    写在最前: 大家分析的时候看一下自己学号是多少,然后分析对应的文件哈,我想都没想就打开01分析了,全部都做完了发现我不是这个文件,当事人现在就是很后悔,非常后悔呜呜呜呜呜。 打开 IDA Pro 7.6 ,打开 task1_0x.elf 文件, 选对应的选项。 然后点开 main 函数, f5 反汇

    2024年02月09日
    浏览(46)
  • [操作系统安全]缓冲区溢出

    一、C栈帧结构 函数调用内存中的三个区域,代码区、静态数据区、动态数据区(压栈和清栈就是在这个区域完成的)。 CPU 中有三个寄存器,分别是eip、ebp和esp。eip永远指向代码区中将要执行的下一条指令,执行方式包括顺序执行和跳转;ebp和esp用于管理栈空间,ebp指向栈底

    2024年02月03日
    浏览(36)
  • 5.1 缓冲区溢出与攻防博弈

    在黑客安全圈子中,基于内存攻击技术的攻击手段在随着时代的变化而不断发展着,内存攻击是指通过利用软件的安全漏洞,构造恶意的输入,从而使正常程序造成拒绝服务或者是远程获得控制权,内存攻击技术中最先登上历史舞台的就是缓冲区溢出漏洞,时至今日能够被广

    2024年02月16日
    浏览(32)
  • Redis缓冲区溢出及解决方案

    缓冲区(buffer),是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。 在Redis中,主要有三个场景用到了缓冲区的概念。 在客户端和服务器端之间进行通信时,用来暂存客户端发送

    2023年04月12日
    浏览(34)
  • 黑客攻击实战案例:12种开源情报收集、缓冲区溢出漏洞挖掘、路径遍历漏洞、自定义参数Cookie参数绕过2FA、二维码的XSS、恶意文件上传清单、反射型XSS漏洞、威胁情报搜索引擎

    黑客攻击实战案例:12种开源情报收集、缓冲区溢出漏洞挖掘、路径遍历漏洞、自定义参数Cookie参数绕过2FA、二维码的XSS、恶意文件上传清单、反射型XSS漏洞、威胁情报搜索引擎。 目前漏洞挖掘的常用方法只有一种就是人工分析为主,漏洞挖掘在很大程度上是个人行为,漏洞

    2024年02月04日
    浏览(40)
  • CVE-2023-5129 libwebp堆缓冲区溢出漏洞影响分析

    近日苹果、谷歌、Mozilla和微软等公司积极修复了libwebp组件中的缓冲区溢出漏洞,相关时间线如下: 9月7日,苹果发布紧急更新,修复了此前由多伦多大学公民实验室报告的iMessage 0-click 漏洞,漏洞被认为已经被NSO公司的Pegasus间谍软件所利用,漏洞编号CVE-2023-41064; 9月8日,

    2024年02月08日
    浏览(32)
  • sudo堆缓冲区溢出提权漏洞(CVE-2021-3156)

    这个漏洞被披露于2021年1月26日。漏洞的载体是我们常用的sudo命令。当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。因此只要存在sudoers文件(通

    2024年02月13日
    浏览(37)
  • libcurl Socks5 堆缓冲区溢出漏洞(CVE-2023-38545)详细分析

    curl 是用于在各种网络协议之间传输数据的命令行工具,libcurl 用于提供处理网络通信和数据传输的 Api 接口。curl 默认下载缓冲区为 102400 字节,但如果设置低于每秒 102400 字节,缓冲区大小会自动设置为更小的值。libcurl 下载缓冲区默认为 16KB,应用程序可通过 CURLOPT_BUFFERSI

    2024年02月08日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包