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

news/2024/10/8 18:21:23

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.ryyt.cn/news/69088.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

用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 欧几里得的噩梦 用到了线性基线性无关的性质,将两个数连边,把环去掉,并查集判…

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

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

Springboot中统一启动多个socketIO

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

软件工程第二次结对作业

软件工程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281作业目标 基于第一次结对作业项目程序的实现学号 102201129合作伙伴 102201127项目分工: 102201129周鑫: 前端开发: 设计和实现用户界面。 确保界面响…