当前位置: 首页 > news >正文

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

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.hskmm.com/?act=detail&tid=28029

相关文章:

  • Codeforces Round 1056 (Div. 2) A~D
  • 现代软件工程阅读和提问作业-1
  • 一种CDN动态加速回源白名单选路及降低源站探测量的方法
  • Windows系统-应用问题全面剖析Ⅰ:德承工控机DA-1200在Windows操作系统下[开机黑屏]的解决方法 - Johnny
  • 某中心在旧金山设立AGI实验室专注长期AI研究
  • Appcrawler自动遍历工具-智能遍历测试与测试用例生成
  • [USACO20FEB] Clock Tree S
  • 光储充一体化 + MyEMS:新能源场站的 “能源管家” 是这样工作的
  • idea插件Doc View
  • PGSQL + patroni + timescaledb 集群搭建
  • 随着种植精细化需求提升,草莓滴灌管、圆柱式滴灌管及 PVC 滴灌管成为节水灌溉核心装备,盘点五家实力厂家的特色产品
  • 2025 年最新推荐 OCR 图片识别软件厂商榜单:全面解析文字识别与格式转换服务商技术实力及服务能力ocr图片转excel/ocr图片转word厂商推荐
  • 2025 年高纯硼酸生产厂家最新推荐榜单:覆盖多领域优选,助力企业精准找高性能产品制造商核级/半导体/医用/电子/颗粒高纯硼酸厂家推荐
  • 计数集锦2
  • app.Environment.IsDevelopment()了解
  • 2025 年最新注浆管生产厂家综合实力排行榜:聚焦高精度与国企合作案例的优质厂家推荐管棚管/地质/边坡支护/袖阀/锚杆/岩心注浆管厂家推荐
  • 微算法科技(NASDAQ:MLGO)基于任务迁移的弹性框架重塑动态扩缩容,赋能边缘智能计算
  • 从小时级到分钟级:多点DMALL如何用Apache SeaTunnel把数据集成成本砍到1/3?
  • 2025 最新隔音棉生产厂家口碑推荐榜:甄选实力与品质兼具的品牌,含西南 / 昆明高性价比厂商最新推荐防火墙/内衬/鸡蛋/聚酯纤维/装修/吊顶隔音棉厂家推荐
  • 2025 升降杆厂家TOP 榜:梁山信达恒泰,专注多领域设备供应,气动型升降杆源头厂家推荐!
  • Playwright MCP 与 Claude 的完美协作:打造网页操作智能体
  • 2025 年高强钢板厂家最新推荐排行榜:聚焦国内优质企业,涵盖多型号产品,助力工业采购精准选型Q550D/合金/HG785D/ Q690D/S960QL/700L高强钢板厂家推荐
  • 2025 年最新推荐耐磨钢板生产厂家排行榜:涵盖高锰 / 堆焊 / 双金属 / NM 系列及无磁类型,解决采购难题助力企业选高性价比品牌
  • 高纯气体管道工程安装公司厂家推荐/管道施工队哪家好?
  • 找ant组件库对应样式
  • 指针
  • 达芬奇中文入门到精通视频教程DaVinci Resolve常用快捷键
  • 2025 年最新推荐!涵盖系统智能断桥窄边等多类型铝门窗厂家榜单,优秀生产厂家实力盘点智能/断桥/窄边/定制/全景/阳光房/隐框铝门窗厂家推荐
  • 读书笔记:**Oracle 中的数字类型:怎么选?怎么用?**
  • 什么是Symbol?