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

news/2025/10/10 15:27:09/文章来源:https://www.cnblogs.com/alexander619/p/19133162

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

1.实验内容

本次实验以 Linux 可执行文件pwn1为对象,核心目标是通过三种技术手段触发程序中默认不执行的getShell函数(获取交互式 Shell),同时掌握底层攻防相关技能。具体内容包括:

  1. 手工修改pwn1的机器指令,直接改变程序执行流程,让main函数调用getShell而非默认的foo函数;

  2. 利用foo函数的缓冲区溢出(BOF)漏洞,构造攻击字符串覆盖堆栈中的返回地址,间接触发getShell

  3. 编写并注入自定义shellcode(机器指令段),通过 BOF 漏洞执行注入的代码以获取 Shell。

    实验过程中需掌握关键技能:NOP/JNE/JE/JMP/CMP 等汇编指令的机器码、反汇编工具(objdump)与十六进制编辑器的使用、程序执行流程修改逻辑、BOF 攻击中payload构造方法。

2.实验过程

2.0 实验环境准备

  1. 实验环境:Kali官网下载的VMWare虚拟机,使用hostname命令更改终端名

image-20251009203425191

图2.0.1 虚拟机环境

  1. 将给出的pwn1文件复制到虚拟机中,并更名为pwn20232304

cd426599788cd4890b9cda920d761756

图2.0.2 文件更名过程

2.1 直接修改机器指令,改变程序执行流程

  1. 理论计算

    对pwn1使用odjump工具进行反汇编,得到的结果如下所示:

e1287ec87fcb832307e6a945bcb485f3

图2.1.1 运行odjump对pwn1可执行文件进行反汇编

7d926a31b45f97b075a39640d321bc9c

图2.1.2 反汇编结果的关键部分

如图2.1.2所示,下方红框中所示call 8048491 <foo>表示该指令将调用地址在0x8048491处的foo函数,其对应的机器指令为e8 d7 ff ff ff,其中e8为跳转,d7 ff ff ff为此时EIP寄存器中值08 04 84 ba为跳转到08 04 84 91地址处所需要加上的值,即-41的补码。

如果我们想让该程序在这里返回的地址变成getShell函数的地址,只需要修改e8之后的数值,使其等于getShell函数地址减去EIP寄存器中值08 04 84 ba所得结果的补码即可。

计算过程为:

\[0804847d-080484ba = ffffffc3 \]

小端序就是c3 ff ff ff ,也就是说,我们只需要将e8之后的地址改为c3 ff ff ff即可。

  1. 修改实践
    使用vi打开pwn20232304文件,结果如图所示

5a5fc5406e7ac808d24211f189d60f51

图2.1.3 使用vi打开pwn20232304文件的结果

使用vi中的%!xxd命令将输出结果转为以十六进制显示,结果如下:

fa3732765b3dc5881e05c7d14eaa8b78

图2.1.4 使用十六进制显示pwn20232304文件内容

使用/d7ff命令查找要修改的内容,结果如下

fa3732765b3dc5881e05c7d14eaa8b78

图2.1.5 查找要修改的值

之后把d7修改成c3,如图所示

e6a773cba228176c7696e50084b46bf8

图2.1.6 修改d7为c3

之后转换十六进制为原格式,使用%!xxd -r命令并存盘退出,如图所示

589d1f8b0c802b6ecaa834d520c4c3f7

图2.1.7 将十六进制转换为原格式并保存退出

再次使用odjump 工具对pwn20232304文件进行反编译,以验证是否修改正确,结果如图

089d2983ff11f95f443a71bcf6690535

图2.1.8 再次通过反编译验证是否修改正确

执行修改后的文件,得到了shell提示符,证明攻击成功,结果如图所示

2c348087ecbe0b7fac196cd30b24f547
图2.1.9 运行结果

2.2通过构造输入参数,造成BOF攻击,改变程序执行流

7d926a31b45f97b075a39640d321bc9c

  1. 观察程序功能

    首先还是先观察程序功能,我们还是从图2.1.2所展示内容来看,main函数在调用foo函数时,指令 lea -0x1c(%ebp), %eax计算缓冲区的起始地址,其中偏移量 -0x1c表示缓冲区从 ebp指针向低地址方向延伸 0x1c字节(即 28 字节)。这对应 C 代码中的类似 char buffer[28];的声明;证明这里读入字符串时,系统只预留了28字节的缓冲区,这里便可以造成缓冲区溢出,由于main函数在调用foo时会将下一个指令的地址(即call指令的下一行,地址为08 04 84 ba)压入堆栈,以使foo函数执行完之后继续执行下一行命令,所以我们只需要在输入字符串时输入超过 28字节 的字符串就有可能覆盖到返回地址,如果将返回地址覆盖成getShell函数的地址,就能达到获取shell的效果。

  2. 在程序中可以看到,foo函数在指令lea -0x1c(%ebp), %eax将缓冲区的地址加载到eax,然后传递给gets。这意味着缓冲区从ebp - 0x1c开始。缓冲区的大小取决于它如何定义。但栈帧总大小是0x38(56)字节,缓冲区是其中的一部分。从ebp - 0x1c到ebp之间是28字节,缓冲区可能只占用这部分空间。

    为了覆盖返回地址,我们需要知道从缓冲区开始到返回地址的偏移。返回地址保存在栈上,在ebp之后。典型栈布局:

    • 调用函数后,栈上保存返回地址,然后push ebp设置新栈帧。
    • 所以,在foo函数中:ebp指向保存的旧ebp。返回地址在ebp + 4。局部变量从ebp - 偏移开始。

    缓冲区从ebp - 0x1c开始。到返回地址的距离是:

    • 从缓冲区开始到ebp:0x1c字节(28字节)。
    • 然后ebp本身占4字节(32位系统),所以返回地址在ebp + 4
    • 因此,从缓冲区开始到返回地址的偏移是:0x1c + 4 = 0x20(32字节)。

    实践证明:
    gdb对程序进行调试,输入111111112222222233333333444444445555,最后使用info r命令查看到eip已经被5555(ASCII码为35 35 35 35覆盖),如图所示:

0e677c5a157bffd7832f27cb07c59972

图2.2.1 证明第33字节开始为返回地址

使用字符串1111111122222222333333334444444412345678进行调试,得到eip被覆盖为34 33 32 31,证明了该系统存储方式为小端序,如图所示

067dcb757830a130764ca41d03e7eec5

图2.2.2 证明系统存储方式为小端序

所以,我们的字符串在第33字节处开始覆盖返回地址,由于返回地址在32位系统中占4字节,所以我们只需要构建任意32字节数据+要返回的函数地址的字符串作为函数输入,即可触发getShell函数。由之前的反编译分析我们可以知道该系统的存储方式为小端序,并且我们所需要触发的函数getShell的地址为08 04 84 7d ,所以我们所构建的字符串为:

\[11111111222222223333333344444444 \x7d\x84\x04\x08 \]

  1. 使用perl生成字符串,利用>重定向将字符串输出到文件input中,并使用xxd工具确认文件内容是否正确,如图所示:

14c2a703c96323d53b8bc457c9fad7c9

图2.2.3 生成字符串输出到文件与文件内容确认

  1. input文件内容作为程序输入,运行程序

    使用cat命令读取文件内容,并使用|管道符将输出作为程序输入,最后得到的结果如图所示,成功得到了shell,如图所示

14c2a703c96323d53b8bc457c9fad7c9

图2.2.4 成功得到shell

2.3 注入Shellcode并执行

  1. 准备工作

    首先设置堆栈可执行,由于使用的环境为新版Kali,已不再支持execstack,于是使用相同功能的工具patchelf,如图所示:

ac24e43fa9533e8c2b50caafde3f6bad

图2.3.1 使用patchelf设置堆栈可执行

之后关闭地址随机化,注意,这里必须使用root用户才能执行操作,管理员用户使用sudo不可以执行,如图所示:

f8121792a031b43bea39b0329654b525

图2.3.2 关闭地址随机化

  1. 确定Shellcode最后四位地址

    使用一个终端窗口注入目前最后四位地址未知暂设为1234的Shellcode,另开一个终端窗口对该程序进行调试,如图所示:

fe641a1ace094be570ba6507d8b1f28e

图2.3.3 第一次注入与调试过程

首先在另一个终端找到pwn1程序的进程号,使用gdb对该程序进行调试,由上图可知进程号为87363,调试过程如图所示
02059404300872069ca112688fdc6551

图2.3.4 调试过程

之后对foo函数设置断点,以查看注入buf的内存地址,如图所示

af84fde74c732e9341a98eb0f32fff87

图2.3.5 添加断点

看到断在0x80484ae,此时在另一个终端按下回车,如图所示

1ad636324b38bbacec85090dc01a7ff9

图2.3.6 继续调试

0xffffcf8c处找到了1234(0x01020304),于是从0xffffcf90开始就是我们的Shellcode.(使用anything+retaddr+nops+shellcode结构),使用perl构建Shellcode,如图所示
d3cb14ede773a2b70d5ff35675b2601e

图2.3.7 构建Shellcode

注入运行,成功获取shell,如图所示

f99e2c2b2d5765eeff9049b4e9303da5

图2.3.8 运行结果

在同一台主机上结合nc实现远程模拟攻击,如图所示

d71058bb2839e7c9354798b72f375df4

图2.3.9 远程模拟攻击

3.问题及解决方案

  • 问题1:没有execstack?

  • 问题1解决方案:

    询问AI得到答案:execstack已不存在于新版Kali上,可以使用patchelf代替

  • 问题2:Shellcode部分直接按照实验指导书的命令使用不成功?

  • 问题2解决方案:

    细看才发现每个人的返回地址是不一样的,需要根据自己的地址确定合适的Shellcode

4.学习感悟、思考等

通过本次实验,我深刻体会到网络攻防技术是理论与实践紧密结合的领域,亲手实践缓冲区溢出的三种攻击方式让我对系统底层机制如汇编指令、内存布局和函数调用栈有了直观认识,理解了缓冲区溢出漏洞的巨大危害性以及安全编程和系统防护的重要性;在反复调试和排除故障的过程中,我不仅提升了使用反汇编工具、调试器和十六进制编辑器等底层分析和操作能力,更培养了面对技术挑战时冷静分析、严谨求证的科学态度,认识到细致耐心在攻防实践中的关键作用,这些收获对我未来深入网络安全领域的学习和研究奠定了坚实基础。

参考资料

  • 0x11_MAL_逆向与Bof基础.md

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

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

相关文章

lsh 的源码注释(1)

lsh 的源码注释(1)我正在通过 git@github.com:brenns10/lsh 这个项目学习如何实现一个 Shell。今天为源码添加了第一遍注释。 还有很多问号hhh /*****************************************************************…

Codeforces Round 1056 (Div. 2) A~D

A - El fucho 模拟。 胜者组共有 \(n-1\) 队进入败者组,进入败者组的会淘汰 \(n-2\) 队,最后剩两组再进行一场,总场数 \(2n-2\)。 不会算也可以直接模拟。点击查看代码 #include <bits/stdc++.h>using i64 = …

现代软件工程阅读和提问作业-1

在学习本课程之前,一直会有一种疑惑,即什么是现代软件工程?软件的开发? 首先谈一谈我对软件的理解,我认为比如手机使用的APP,小程序以及任何通过鼠标或手指点击能够执行特定功能的“工具”都叫软件。

一种CDN动态加速回源白名单选路及降低源站探测量的方法

本文分享自天翼云开发者社区《一种CDN动态加速回源白名单选路及降低源站探测量的方法》.作者:蒋辉 本方案主要包括以下几个方面: 1)本发明提出了一种减少跨运营商探测源站及回源的方法,技术方案流程图见附图1,具体…

Windows系统-应用问题全面剖析Ⅰ:德承工控机DA-1200在Windows操作系统下[开机黑屏]的解决方法 - Johnny

Windows系统作为全球市场份额最高的操作系统,承载着企业办公、个人娱乐、工业应用等多元场景需求。然而,在使用过程中若出现应用崩溃、兼容性冲突、性能出现异常等系统应用问题时,将会直接影响到用户体验甚至是生产…

Java文件路径/服务器路径的获取

Java文件路径/服务器路径的获取Java文件路径/服务器路径的获取 大家好,又见面了,我是你们的朋友全栈君。Java文件路径获取几种获取方式 getResourceAsStream ()返回的是inputstreamgetResource()返回:URLClass.getRe…

某中心在旧金山设立AGI实验室专注长期AI研究

某中心在旧金山成立全新AGI实验室,专注于开发能够在数字和物理世界执行任务的人工智能代理。实验室将结合大语言模型与强化学习技术,致力于实现能够从人类反馈中学习、自我修正并推断目标的实用AI系统。某中心在旧金…

Appcrawler自动遍历工具-智能遍历测试与测试用例生成

效率与成本的抉择 在软件开发过程中,测试环节直接影响产品质量和用户体验。随着系统迭代频繁、功能复杂化,企业在测试方法的选择上面临困境:手工测试灵活却效率低,自动化测试高效却前期投入大。那么,我们到底应该…

[USACO20FEB] Clock Tree S

一开始读错题意了。 然后以为自己做法假了,实际并没有。 有 \(O(n)\) 做法但我写的是 \(O(n^2)\) 的。 换根dp就行了,每次判断一下能不能成功。 注意如果到最后根是 \(1\) 也是可以成功的。点击查看代码 #include<…

完整教程:【Spark+Hive+hadoop】人类健康生活方式数据分析

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

mysql查看表大小,4种实用方法

MySQL数据库运维中,掌握表的大小信息对于性能优化、容量规划和维护工作至关重要。本文将详细介绍4种查看MySQL表大小的实用方法,帮助你精准掌握数据库存储状况。 方法1:查看单个表的完整大小信息 使用以下SQL可以查…

微算法科技(NASDAQ:MLGO)开发延迟和隐私感知卷积神经网络分布式推理,助力可靠人工智能系统技术

随着人工智能(AI)技术的不断发展,智能服务的广泛应用正在深刻改变着各行各业的面貌。在这个过程中,基于深度学习的系统往往面临计算资源的巨大需求,尤其是在边缘设备上运行复杂的卷积神经网络(CNN)时,计算负载…

不止节能,更能 “生钱”:MyEMS 辅助企业参与电力现货市场的实操案例

随着我国电力市场化改革的不断深化,电力现货市场从试点逐步走向常态化运行。对于用电大户企业而言,这既是机遇 —— 可通过灵活调整用电策略享受电价波动红利,也是挑战 —— 传统用电模式难以应对复杂的电价机制,往…

当能耗监控变 “游戏”:MyEMS 可视化看板如何让员工主动参与节能?

在企业节能管理中,“员工被动接受监控” 是长期存在的痛点 —— 传统能耗数据报表枯燥难懂,员工既不清楚自己的行为与能耗的关联,也缺乏主动节能的动力。而 MyEMS(My Energy Management System)可视化看板的出现,…

微算法科技(NASDAQ:MLGO)基于任务迁移的弹性框架重塑动态扩缩容,赋能边缘智能计算

在全球数字化进程加速的今天,边缘计算(Edge Computing,简称EC)作为推动移动互联网、物联网和智能终端普及的关键技术,正被赋予越来越多的期待。随着用户对于实时性、可靠性以及高性能数据处理需求的不断提升,传统…

从小时级到分钟级:多点DMALL如何用Apache SeaTunnel把数据集成成本砍到1/3?

过去我们依赖 Spark 自研同步工具,虽然稳定,却面临“启动慢、资源重、扩展难”的痛点。作者 | 贾敏 多点DMALL 资深大数据研发工程师 作者介绍 贾敏,多点 DMALL 资深大数据研发工程师,主导公司核心数据集成平台架构…

2025 最新隔音棉生产厂家口碑推荐榜:甄选实力与品质兼具的品牌,含西南 / 昆明高性价比厂商最新推荐防火墙/内衬/鸡蛋/聚酯纤维/装修/吊顶隔音棉厂家推荐

随着建筑装饰、汽车改装等领域对声学环境要求的升级,隔音棉市场需求持续扩大,但行业乱象让采购者面临多重挑战。部分厂商为压低成本选用劣质基材,导致产品隔音量不足、防火环保不达标,潮湿环境下易发霉老化;新品牌…

2025 年高强钢板厂家最新推荐排行榜:聚焦国内优质企业,涵盖多型号产品,助力工业采购精准选型Q550D/合金/HG785D/ Q690D/S960QL/700L高强钢板厂家推荐

当前,高强钢板作为工业生产的关键基础材料,在矿山、冶金、电力、汽车制造等领域的应用愈发广泛,下游行业对其耐磨、耐蚀、高强度等性能的要求也不断提高。然而,市场上高强钢板供应商资质参差不齐,部分产品存在耐磨…

2025 升降杆厂家TOP 榜:梁山信达恒泰,专注多领域设备供应,气动型升降杆源头厂家推荐!

随着智慧城市建设、安防监控升级及市政基础设施完善,升降杆作为支撑通讯设备、监控摄像头、照明系统的核心载体,市场需求持续增长。但行业现存诸多痛点:部分厂家使用薄壁钢材、劣质焊接工艺压缩成本,导致升降杆抗风…

2025 年最新推荐耐磨钢板生产厂家排行榜:涵盖高锰 / 堆焊 / 双金属 / NM 系列及无磁类型,解决采购难题助力企业选高性价比品牌

在矿山、冶金、电力等重工业及轻工业领域,耐磨钢板作为核心耗材,其质量与性能直接关联设备运行效率、维护成本及企业生产稳定性。当前市场中,耐磨钢板厂家数量繁杂,产品规格多样、价格跨度大,且部分厂家存在压缩成…