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

news/2024/10/8 23:50:34

1.实验内容

(1).掌握反汇编与十六进制编程器
(2).能正确修改机器指令改变程序执行流程
(3).能正确构造payload进行bof攻击

2.实验过程

(1).直接修改程序机器指令,改变程序执行流程
将pwn1文件放入共享文件夹,后续在kali中使用,再将文件复制到实验文件夹share路径下

找到本次实验所用的三个代码片段foo、main和getshell

文件中main函数"call 8048491"含义为调用8048491处的foo函数,其机器指令为e8 d7 ff ff ff,若修改d7ffffff为,"getShell-80484ba"对应的补码,即可调用getshell。经计算补码为c3ffffff。
修改文件内容,使main调用getshell
下面是修改过程:
在终端输入vi pwn20222417 ,打开文件后为乱码

输入:%!xxd进入16进制模式

后找到e8 d7的位置将d7修改为e3,修改结果如下:

运行文件后得到shell提示符,操作成功

(2).通过构造输入参数,造成BOF攻击,改变程序执行流
确认输入字符串哪几个字符会覆盖到返回地址:
第一次输入1111111122222222333333334444444455555555

第二次输入1111111122222222333333334444444412345678

确认用什么值来覆盖返回地址
getShell的内存地址,通过反汇编时可以看到,即0804847d。
接下来要确认下字节序,简单说是输入11111111222222223333333344444444\x08\x04\x84\x7d,还是输入11111111222222223333333344444444\x7d\x84\x04\x08。

修改前的eip为

修改后的eip为

对比之前 eip 0x34333231 0x34333231 ,正确应用输入 11111111222222223333333344444444\x7d\x84\x04\x08
由为我们没法通过键盘输入\x7d\x84\x04\x08这样的16进制值,所以先生成包括这样字符串的一个文件。\x0a表示回车,如果没有的话,在程序运行时就需要手工按一下回车键。
可以使用16进制查看指令xxd查看input文件的内容是否如预期。

然后将input的输入,通过管道符“|”,作为pwn1的输入。

(3).注入Shellcode并执行
准备一段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
注入bof攻击

找到进程号

再开另外一个终端,用gdb来调试pwn1这个进程

在原终端摁下enter

找到01020304的返回地址,shellcode为紧挨着的下一个地址0xffffd300
最后根据shellcode的地址更改并注入
输入ls得到正确结果

3.问题及解决方法

问题:在实验的过程中,发现execstack这个指令无法应用。
解决方法:刚开始采用了sudo apt-get upgrade指令进行下载,发现仍旧无法运行,后通过查阅资料发现该指令无法成功安装,后使用外部官网进行安装步骤,官网链接为:http://ftp.de.debian.org/debian/pool/main/p/prelink/execstack_0.0.20131005-1+b10_amd64.deb。
安装好后使用sudo dpkg -i execstack_0.0.20131005-1+b10_amd64.deb命令进行解压,最终安装成功。

4.学习感悟、思考等

在实验的最开始,首先需要安装kali虚拟机,在经过网上教程安装完毕后,我开始了本次的实验内容。本次实验我了解到许多关于缓冲区溢出攻击的原理的相关知识。再根据指导书一步一步完成的时候,丰富了我的动手能力。在进行缓冲区溢出攻击时,我体验到了精确控制程序执行流的复杂性。通过构造特定的输入字符串来覆盖返回地址,我成功地将程序的执行流程引导至getShell函数。这个过程不仅锻炼了我的编程技巧,也提高了我对程序内存布局和栈操作的理解。最重要的是,我对于网络攻防这门课有了更深的认识,同时还学习了Linux下的机器指令与汇编,让我收获良多。

参考资料

《0x11_MAL_逆向与Bof基础.md》

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

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

相关文章

第一课 php基础语法 变量 函数

php语法<?php// 代码段   ?> php输出方法:echo 和 print不同点:echo-能够输出一个以上的字符串,英文逗号隔开print-只能输出一个字符串,并始终返回1echo 比 print 稍快,并且开销低 注释注释不会被作为程序来读取和执行。它唯一的作用是供代码编辑者阅读(让别人…

CentOS 8 停止维护后通过 rpm 包手动安装 docker

根据 Docker官方文档 的指引,进入 Docker rpm 包下载的地址,根据自己系统的架构和具体版本选择对应的路径这里我使用 https://download.docker.com/linux/centos/7/x86_64/stable 版本,根据 docker 官方的给出的安装命令选择性的下载对应的 rpm 包最终使用 yum 命令安装下载…

02 Vue默认项目说明

1. node_modules pnpm 安装的第三方依赖 2. public 公共资源,存放网页图标等 3. src 开发代码存放位置 3.1 项目入口文件 main.ts import { createApp } from vue // 引入vue import ./style.css // 引入默认样式 import App from ./App.vue // 引入页面 App.VuecreateApp(App…

深度学习环境配置

安装显卡驱动 安装显卡驱动: sudo apt install ubuntu-drivers-common # 安装 ubuntu-drivers 工具 ubuntu-drivers devices # 查看可用的 NVIDIA 驱动程序版本sudo ubuntu-drivers autoinstall # 自动安装推荐的驱动版本 sudo apt install nvidia-…

解构UI设计

解构UI设计 第一章 界面类型 1.1 闪屏页 又称为启动页,就是APP启动在进入功能主界面前用户看到的页面。 闪屏页决定了用户对App的第一印象。 闪屏页显示的时间很短,通常只有1秒。 闪屏页分为品牌宣传型、节日关怀型和活动推广型3种类型。 1.1.1 品牌宣传型 App的闪屏页是为体…

创建新的 App 页面

完整的页面创建过程包括三个步骤:在 layout 目录下创建 XML 文件创建与 XML 文件对应的 Java 代码在 AndroidManifest.xml 中注册页面配置实现两个 Activity 相互跳转的代码: MainActivity: package com.example.myapplication1;import androidx.appcompat.app.AppCompatActiv…

[Vue] 异步路由组件和非路由组件的区别?

异步路由组件 都知道异步路由组件通过 () => import("./views/Home.vue") 导入路由组件。 但是它怎么就按需加载资源、代码分割了? 不同的代码解析报告 非异步路由组件异步路由组件代码分析报告生成代码 pnpm install webpack-bundle-analyzerfile:[vue.config.j…

课上测试:位运算(AI)

2.使用位运算编写并调用下面函数,把当前时间(使用C库函数获得)设置到TIME中,给出代码,使用git记录过程。为了使用位运算将当前时间设置到一个自定义的 TIME 结构体或变量中(尽管通常我们不会直接用位运算来处理时间,因为时间通常是由多个独立的字段如小时、分钟、秒等组…