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

news/2024/10/8 23:47:12/文章来源:https://www.cnblogs.com/123ywx12323/p/18453284

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.hqwc.cn/news/810251.html

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

相关文章

第一课 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…

解构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") 导入路由组件。 但是它怎么就按需加载资源、代码分割了? 不同的代码解析报告 非异步路由组件异步路由组件

课上测试:位运算(AI)

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

vue3 pinia 存数据

pinia是vue2中的vuex,状态管理,可以实现数据共享 1、先安装 npm install pinia2、在main.ts中进行创建和载入3、在src下新建store文件夹 定义存的文件 4、在组件中使用 此时控制台会有具体的值。

笑傲江湖单机版安装教程+虚拟机一键端+GM+10职业单人副本

今天给大家带来一款单机游戏的架设:笑傲江湖10职业单机版单人副本坐骑门徒新时装商完整任务。 另外:本人承接各种游戏架设(单机+联网) 本人为了学习和研究软件内含的设计思想和原理,带了架设教程仅供娱乐。 教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你…

Eplan插件 - 自由文本编辑器

前言 使用此插件可以快速完成对项目中的自由文本、路径功能文本的修改、删除等操作。 插件介绍 用户界面 插件UI界面进行了更新,相比较之前的插件界面风格更清爽简洁。功能介绍插件批量将选中文本中的源文本替换为修改文本。 插件支持多种选择方式,可以在绘图区选中文本,也可…

Logisim-015-偶校验检错

仓库地址 https://gitee.com/gitliang/logisim-to-cpu

Android开发:日志功能备忘

临时记一下吧,以后就直接复制粘贴这里面的好了。实现一个日志记录程序的运行状态,并且带上时间信息,可以写一个类灵活调用。 MyLog.java package com.example.networkaccessrestrictions;import static android.content.ContentValues.TAG;import android.content.Context; …