Exp1-PC平台逆向破解

1.实验结果

1.1直接修改程序机器指令,改变程序执行流程

1.2通过构造输入参数,造成BOF攻击,改变程序执行流

1.3注入Shellcode并执行

2.实验体会

2.1实验收获与感想

本次实验在Linux环境下,通过三种方式实现缓冲区攻击,达到不同的攻击目标。通过本次实验,我有以下收获。

2.1.1运用掌握Linux操作系统基本操作

假期在家自学了实验楼的Linux课程,该课程偏向实践,未对诸如命令写法和计算机操作系统的一些基本概论进行说明,所学知识能够支持简单的Linux使用。在本次实验过程中,我不停地查找命令资料,从基础的复制文件,到修改一些系统配置,一些博客给予了我很大的帮助,我印象很深,有一篇博客是这么说的,“指令千万条,勤练第一条”。经过本次实验,目前已经基本能够实现对Linux系统的使用,遇到问题,也知道该如何解决了。

2.1.2掌握缓冲区攻击的基本概念

信安基础课程中,我们就已经学过缓冲区溢出攻击的基本概念的,但没有掌握具体的攻击方法和原理,所谓缓冲区溢出攻击,是一种利用缓冲区溢出漏洞所进行的攻击行动。本实验实现了三种手段,分别达到不同效果如图示。

操作 目的 分析
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数 运行原本不可访问的代码片段 我认为这样的操作更像是恶意代码,通过修改可执行文件的内容达到目的
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数 强行修改程序执行流 相较于注入shellcode,这样的操作只能利用本机的函数不能直接执行任意代码
注入一个自己制作的shellcode并运行这段shellcode 注入运行任意代码 底层攻击,最为致命

2.1.3使用CSS和Typora完成人生的第一篇博客

虽然一年多前就开通了博客园,但始终没有写过自己的博客。

我一开始选了个挺丑的模板,实在是看不下去,然后就花了好几个小时找模板、试模板。寻找模板的过程中也看到了很多好的设计,大部分的模板都是基于HTML或者CSS的。上学期正好学了Java网站设计,虽然学的不精,但基本代码能够看懂,博客园的后台也比较简单,最终选定了这么一个模板。

开学下载课程资料的时候就发现老师的文档多为后缀为.md的文件,就下载了Typora当作阅读器,有时候思维导图做出来也可以导为md文件,我觉得Typora相较于Word更简洁,更强调结构,也省去了很多更改格式的时间。

还有一个困扰我了好一段时间的事儿,我一开始设置使用markdown格式博文后,不知道怎么加入图片(如果是在本地编辑器插入的图片,地址都是本地文件地址,一上传就失效),上网一查好像真有这么一回事(其实就两个提出这问题的),还推荐下载什么cnblogsUpload和dotnet-sdk,安装了之后还不兼容我的PNG格式截图,然后我又装回格式工厂(???)准备转格式,正一筹莫展等安装的时候,发现有一个小小的上传图标,我直接就傻了。。。。

不过还是挺麻烦的,没法实时预览加入的照片,上传过后会消除之前的文件名,刚开始做后面的部分就只能按着截图的标号上传。

PS:这个模板一开始装上总是错位,我把侧边页的CSS文件改来改去没改对,最后发现自己忘了设置不禁用原有模板了-。-,提醒各位同志,原作者的部署文档一定要仔细看,我为我自己的动脚能力点赞

2.1.4实验感想

老师说的很对,这次的实验如果只是复制代码-运行-截图,这个实验很快就能完成。重要的还是要理解自己在做什么,我中间做错了一两次,在理解的基础上,我发现重复的时候整个操作是很流利的,而且命令行,不一定就比窗口界面更麻烦。

本次的实验确实很简单,我为什么拖到现在呢,说到底——

其实实验的视频我看了一共三遍,课前一遍,测试一遍,考前一遍,每次都想着先把手上另一份作业写完再统一找时机搞这个,就一直拖一直拖,中间找博客模板还找了好长时间,太拖延了,后面实验我会赶上的。

2.2什么是漏洞?漏洞有什么危害?

我认为计算机漏洞是一种人为的或自然产生的,从计算机和计算机网络的底层到高层,由于硬件、软件、协议等方面存在的可被人利用的缺陷。

漏洞的恶意利用可以破坏计算机系统和网络,如果不加防备和改进,漏洞将严重损害我们的信息安全。

PS:真的是俺一个字一个字打出来的

3.实验重点知识

3.1掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码

指令 机器码 作用
NOP 0x90 no operation,执行Nop指令只使程序计数器PC加1,同时占用一个机器周期
JNE 0x75 若不相等则转移
JE 0x74 零/等于
JMP 0xE9 无条件转移
CMP 0x3B cmp(compare)指令进行比较两个操作数的大小

3.2掌握反汇编与十六进制编程器

反汇编指令为objdump,可以使用man objdump查看功能(help不行),主要指令如下

bjdump [-a|--archive-headers]
[-b bfdname|--target=bfdname]
[-C|--demangle[=style] ]
[-d|--disassemble]
[-D|--disassemble-all]
[-z|--disassemble-zeroes]
[-EB|-EL|--endian={big | little }]
[-f|--file-headers]
[-F|--file-offsets]
[--file-start-context]
[-g|--debugging]
[-e|--debugging-tags]
[-h|--section-headers|--headers]
[-i|--info]
[-j section|--section=section]
[-l|--line-numbers
[-m machine|--architecture=machine]
[-M options|--disassembler-options=options]
[-p|--private-headers]
[-P options|--private=options]
[-r|--reloc]
[-R|--dynamic-reloc]
[-s|--full-contents]
[-W[lLiaprmfFsoRtUuTgAckK]|
[-G|--stabs]
​ [-t|--syms]
​ [-T|--dynamic-syms]
​ [-x|--all-headers]
​ [-w|--wide]
​ [--start-address=address]
​ [--stop-address=address]
​ [--prefix-addresses]
​ [--[no-]show-raw-insn]
​ [--adjust-vma=offset]
​ [--dwarf-depth=n]
​ [--dwarf-start=n]
​ [--special-syms]
​ [--prefix=prefix]
​ [--prefix-strip=level]
​ [--insn-width=width]
​ [-V|--version]
​ [-H|--help]

%!xxd 进入十六进制编辑模式
%!xxd -r 切换回原模式

3.3能正确修改机器指令改变程序执行流程

即实验一的第一部分。

3.4能正确构造payload进行bof攻击

老师介绍有两种payload构造方式,主要取决于堆栈留下的空间是否充足。
PS:如果以“缓冲区注入payload”为关键词搜索,没有太多的知识博文,倒是能找到我们学院之前学生的博文2333333

3.4实验中用到的基础知识

3.4.1文件的基础操作和Vi

文件的操作是最基础的,比如重命名、复制、移动、删除等。

Vi编辑器的使用在实验楼课程中有涉及,提供了一个专门的Vi课程,当时学是学了,过一段时间就忘了,还是得勤加练习。

3.4.2程序安装与root权限

在设置共享文件夹和和使用execstack时都需要使用apt-get命令下载软件包,一开始提醒权限不够,应该是我实验0的时候设置没到位,不过我也有看到同学是直接用root用户做的实验,这里我参考的是https://www.cnblogs.com/fjzhang/p/11345099.html

3.4.3地址位置、补码计算和操作系统知识概念

大二的计算机组成原理、大三上的操作系统课程知识现在就派上用场了。

3.实验过程中遇到的问题

3.1Linux命令不够熟悉

第一次实验过程时常遇到不清楚指令的情况,我参考的是这一篇博客,内容比较全面,找到具体指令还可以再查。

https://blog.csdn.net/w2462140956/article/details/89012880?ops_request_misc={"request_id"%3A"158326484619725247656554"%2C"scm"%3A"20140713.130056874.."}&request_id=158326484619725247656554&biz_id=0&utm_source=distribute.pc_search_result.none-task

3.2堆栈的概念理解得还不够透彻

之前学习数据结构的时候,没有尝试过编程实现堆栈,一直对堆栈的概念理解的不好。老师的课很细致,手绘图能够比较直接的看懂实验过程,但可能让我自己来画就画不出来了=。=

4.实验过程

4.1准备阶段




4.2直接修改程序机器指令,改变程序执行流程




第一次修改的时候大概是因为vi操作有问题,改动了其他部分,没成功,第二次就没问题了。




4.3通过构造输入参数,造成BOF攻击,改变程序执行流

使用GDB查看

使用perl写入并查看


结果:

4.4注入Shellcode并执行

第三部分的准备工作也相当重要
一开始遇到了个人用户权限不足的问题,我转至root用户修改了权限。


最后成功关闭地址随机化

注入测试

从查看进程这里我犯了两个错,一个是进程号写错了,一个是将猜测地址写入shellcode时高低位弄错了,导致第一次失败。这里先放成功的所有过程。




问题操作截图:

没有运行进程,或者是提前按下回车


attach的程序号错了,后面是做不出来的
第一次注入错误点在于把地址为末尾的AB,写入的时候应该是0xBA而不是0xAB


posted @ 2020-03-17 09:10  PeterDon  阅读(345)  评论(0编辑  收藏  举报