20222325 2024-2025-1 《网络与系统攻防技术》实验一实验报告

news/2024/10/8 18:19:57/文章来源:https://www.cnblogs.com/shutong233/p/18452240

1.实验内容

  • 缓冲区溢出基本知识:堆栈、函数调用。
  • shellcode技术以及其在各平台的运用与防御。
  • BOF攻击防御技术。

2.实验目标

本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。
三个实践内容如下:
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。

3.实验过程

任务一:手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

  1. 下载目标文件pwn1并进行反汇编。
  2. 观察核心的getShell、foo、main代码。

    main函数调用foo,对应机器指令为“ e8 d7ffffff”,我们想让它调用getShell,只要修改“d7ffffff“为"getShell-80484ba"对应的补码”c3ffffff“就行。
  3. 修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff,输入
    cp pwn1 pwn2
    vi pwn2
    在vi内按ESC键,输入:%!xxd将显示模式切换为16进制模式,输入\e8 d7查找其所在位置,找到后按i进入输入模式修改d7为c3,输入:%!xxd -r切换16进制模式为原模式,输入:wq退出vi。
  4. 再次进行反汇编查看call指令是否正确调用getShell。

    可以看到修改成功,成功调用了getShell函数。

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

  1. 使用gdb调试pwn1文件,输入字符串,观察返回地址的覆盖情况

    如果输入字符串1111111122222222333333334444444412345678,那 1234 那四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。那只要把这四个字符替换为 getShell 的内存地址,输给pwn1,pwn1就会运行getShell。
  2. 通过反汇编时可以看到getShell的内存地址,即0804847d。接下来要确认下字节序,简单说是输入11111111222222223333333344444444\x08\x04\x84\x7d,还是输入11111111222222223333333344444444\x7d\x84\x04\x08。
  3. 对比之前eip 0x34333231 0x34333231,正确应用输入11111111222222223333333344444444\x7d\x84\x04\x08。
  4. 生成一个包含\x7d\x84\x04\x08这样的16进制值的字符串的文件。
  5. 使用16进制查看指令xxd查看input文件的内容是否如预期。
  6. 将input的输入,通过管道符“|”,作为pwn1的输入。

    成功触发getShell函数。

任务三:注入一个自己制作的shellcode并运行这段shellcode。

  1. 选择一段shellcode:
    \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\
  2. 将pwn1设置为堆栈可执行,并关闭地址随机化。
  3. 构造攻击buf。
  4. 打开一个终端注入攻击。
  5. 打开另一个终端,找到pwn1进程号,再用gdb调试该进程。

  6. 设置断点查看注入buf的内存地址。

  7. 在另一个终端按下回车。
  8. 修改返回地址为0xffffd380。

    成功运行shellcode。

4.问题及解决方案

  • 问题1:在安装Kali时显示网络配置失败,不能正常安装Kali。
  • 问题1解决方案:改变网络配置方式为手动,打开自己电脑的网络连接面板选择一个可用的网络手动连接。
  • 问题2:下载目标文件pwn1反汇编时提示没有pwn1文件,但实验最初以及下载pwn1。
  • 问题2解决方案:错误将pwn1下载到了自己的电脑,在虚拟机自带的火狐浏览器中下载pwn1到虚拟机,再进行反汇编。

  • 问题3:在使用gdb调试pwn1文件时找不到gdb命令,无法进行调试。
  • 问题3解决方案:通过安装包安装gdb,再进行调试,成功调试。
  • 问题4:在查看pwn1进程号时未能显示。
  • 问题4解决方案:输入./pwn1执行文件,再次查看进程号。
  • 问题5:在设置堆栈可执行时找不到execstack命令。
  • 问题5解决方案:下载execstack。

5.学习感悟、思考等

通过本次实验我深刻理解了缓冲区溢出的原理以及其出现的场景,对shellcode技术以及其在Linux平台的运用也更加熟悉了,在实验中我学会了进行反汇编和进入十六进制编程器,掌握了修改机器指令改变程序执行流程的能力,同时我也能正确构造payload进行bof攻击 。实验中使用的操作让我对课程的理论学习理解地更加透彻与直观,通过本次实验我对在Linux命令行调试文件有了初步掌握。不仅如此,面对实验过程中出现的卡顿点,我能利用网络上的参考资料逐一解决,这次实验也提升了我在大量资料面前查找自己所需资料的能力,对我的学习和工作都有很大帮助。

参考资料

  • 《实践指导》
  • 《Kali界面汉化》
  • 《kali Linux 安装教程》

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

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

相关文章

用AI构建小程序可行吗?

AI工具在软件开发中扮演着越来越重要的角色,它可以帮助开发者提高效率、增强软件功能、降低开发门槛。通过合理选择和应用AI工具,可以显著提升软件开发的质量和效率。随着移动互联网的快速发展,多端应用的需求日益增长。为了提高开发效率、降低成本并保证用户体验的一致性,…

PyQt5 使用 QLabel 实现图像 360度 不间断旋转

PyQt5 使用 QLabel 实现图像 360度 不间断旋转 当我们需要实现让一个图像 360度 旋转时,比如:音乐播放器中播放时,歌曲封面的旋转效果,你可以尝试使用下面的方法 代码结构 本文中全部代码全在test_QLabel_whirling.py这一个文件中编码,步骤中有变动的地方会注释标注,无改…

systemverilog笔记

变量类型变量名 状态数 是否带符号 比特数logic 4 无 1bit 2 无 1byte 2 有 8shortint 2 有 16int 2 有 32longint 2 有 64integer 4 有 32time 4 无 64$isunknown(表达式):在表达式任意位出现X或者Z时返回1。 数组 数组初始化 使用单引号加大括号数组遍历 $size(数组)会返回

DSP概述及应用——TMS320DM6437ZDU4、TMS320DM6437ZWT6、TMS320DM6437ZWT7数字媒体处理器

TMS320DM6437采用基于超标量架构的C64x+内核,具有高效的乘法累加单元和多格式指令集,能够在单个时钟周期内执行两条指令,大大提高了运算速度和效率。概述:TMS320DM6437是一款DSP芯片,具有强大的处理能力和丰富的功能模块。 TMS320DM6437采用基于超标量架构的C64x+内核,具…

csp-s模拟10

rank 31,垫底了,T1 0pts,T2 18pts,T3 0pts,T4 50pts 状态有点不好,策略有问题,T4是可以切的,但是不知道为什么弃了。T1不会线性基寄。T3 奇怪结论题,T2 结论题。 在猜结论上还是不行。 T1 欧几里得的噩梦 用到了线性基线性无关的性质,将两个数连边,把环去掉,并查集判…

Kubernetes的Pod调度:让你的应用像乘坐头等舱!

一、Kubernetes 中 Pod 调度的重要性 在 Kubernetes 的世界里,Pod 调度就像是一个繁忙的交通指挥官,负责把小车(也就是我们的 Pod)送到最合适的停车位(节点)。调度不仅关乎资源的合理利用,还关乎应用的“生死存亡”,下面让我们来看看为什么调度这么重要。资源优化: 想象…

二叉树的概念、表示法、性质和操作

本文记述了二叉树的基本概念、表示法、性质和操作。 ◆ 概念 二叉树(以下也简称树)是一种存放多个元素的数据结构。每个元素称为结点,每个结点有左、右两个链接,每个链接要么指向其他结点,要么是空链接。 某个结点是它的左、右链接指向的结点的父结点,被指向的结点是其父…

Springboot中统一启动多个socketIO

前言 这篇随笔属实没想到一个好名字,起因是在项目中遇到了一个springboot服务会发出多个socket服务的场景,而且我们使用的是socketIO服务,为了减少调试工作和重复的开发工作,让开发在项目中专注于业务编写,因此封装了一个在启动springboot服务时,自动创建socketIONamespa…

CSP 模拟9

CSP 模拟9 我也不明白学校模拟赛什么命名逻辑,凑合着看吧最唐的一集 邻面合并 这个直接状压就做完了,赛时早早想到做法,但是因为自己太唐把 \(0\) 写成 \(1\),在优秀大样例的助攻下挂掉 \(50\)点击查看代码 #include<bits/stdc++.h> using namespace std; using llt=…

南沙C++信奥赛陈老师解一本通题 1297:公共子序列

​【题目描述】我们称序列Z=<z1,z2,...,zk>Z=<z1,z2,...,zk>是序列X=<x1,x2,...,xm>X=<x1,x2,...,xm>的子序列当且仅当存在严格上升的序列<i1,i2,...,ik><i1,i2,...,ik>,使得对j=1,2,...,k,有xij=zjxij=zj。比如Z=<a,b,f,c> 是X=&l…

语音生成公司 ElevenLabs 估值达 30 亿美元;OpenAI Realtime API 很好也很贵丨RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编…

万兆加速计算卡设计资料保存:372-基于XC7VX690T的万兆光纤、双FMC扩展的综合计算平台 RISCV 芯片验证平台

一、板卡概述 基于V7的高性能PCIe信号处理板,板卡选用Xilinx 公司Virtex7系列FPGA XC7VX690T-2FFG1761C为处理芯片,板卡提供两个标准FMC插槽,适用于高性能采集、回放以及相关处理。通过连接不同的FMC子卡的方式,可实现不同形式的数据采集、回放、处理的功能模块。板卡…