2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335
一.实验目标:
本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。
三个实践内容如下:
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
这几种思路,基本代表现实情况中的攻击目标:
运行原本不可访问的代码片段
强行修改程序执行流
以及注入运行任意代码。
二.基础指令:
objdump -d:反汇编目标文件中包含的可执行指令。
call+地址 是说这条指令将调用位于地址处的函数
gdb info 查看寄存器的数值
\x0a表示回车
xxd:进行十六进制的输出,也可以将十六进制输出转换为原来的二进制格式。
三.直接修改机器指令
先使用objdump指令查看反汇编代码
call后面表示要跳转的地址,表示main函数跳转到foo函数处
我们想要修改地址,跳转到getshell函数中,机器指令e8后的地址即可,直接修改为为c3即完成跳转地址转变
运行结果如下:
四.构造输入函数,进行bof攻击:
先确认那几个字符会覆盖返回地址,这里使用一个40bit的字符串来进行探测
通过前后对比EIP寄存器的地址,发现字符串中的1234字段覆盖了地址,那么只需要在对应的位置将其进行eip地址的覆盖修改
同时,验证字符串11111111222222223333333344444444\x7d\x84\x04\x08的准确性
最后,将字符串注入,完成攻击
五.注入shellcode并执行
首先先确认堆栈,文件堆栈可执行,关闭地址随机化,防止地址的变化
构造payload:使用命令perl -e 'print "A" x 32;print "\x04\x03\x02\x01\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
用A来填满缓冲区,以确认,寻找字符串中对应的的4个字节
输入命令 (cat input_shellcode;cat) | ./20165335 注入攻击bof
在另外一个终端进行gdb调试,先使用 ps -ef | grep 20165335寻找进程号
用attach 命令调用·进程
同时,反汇编,在函数return esp指针变化执行后的ret语句出,设置断点
使用info r esp 查看esp寄存器的值,找出shellcode的地址(地址就在指针的后面)
最后,将找到的4个字节的地址填充进去,完成注入,再次运行程序,实现攻击
六. 实验收获与感想
在此次实验中,我感受到了实验原理的重要性,经过刘老师的原理讲解,使得在实验中思路清晰,知道现在自己在做什么,这样做的目的是什么,使得在过程中,清晰明了,
也经过实验,更深刻的认识到了其中的原理以及eip寄存器,地址等在内存的实际变化,受益匪浅。
漏洞,就是能够使得恶意代码,经过各种非正常的方式注入计算机,并进行运行的计算机运行bug。
漏洞可以使得计算机按照其他人的指令,操作进行运行,可以使得恶意代码不经过各种安全方式运行程序,从而执行shellcode,破坏计算机
NOP 机器码90:NOP指令为空指令,计算机不进行任何操作
JNE 机器码75:条件转移指令,对比是否相等,不相等就跳转
JE 机器码74 :条件转移指令,对比是否相等,相等就跳转
JMP:无条件转移指令。
段内直接短转 机器码:EB
段内直接近转移Jmp near 机器码:E9
段内间接转移 Jmp word 机器码:FF
段间直接(远)转移Jmp far 机器码:EA
CMP:比较指令,对标志寄存器产生影响
2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335的更多相关文章
- 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 ...
- 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 网络对抗技术 20165305 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...
- 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...
- 2018-2019-2 20165316 《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165316 <网络对抗技术>Exp1 PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
- 2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解 实验内容及步骤 第一部分:直接修改程序机器指令,改变程序执行流程 关键:通过修改call指令跳转的地址,将原本指向被 ...
随机推荐
- MongDB 数据结构
Object ID :Documents 自生成的 _id String: 字符串,必须是utf-8 Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True ...
- js之promise讲解
1 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个对象,也就是说与其他JavaScript ...
- C# int[,] 和 int[][]
int[] 一维数组 int[,] 二维数组 int[] [] 交错数组 又称“数组的数组” 一维数组声明与初始化 声明: int[] a = new int[]; 声明与初始化: int arr ...
- 十二、JDBC
day17 JDBC入门 l 导jar包:驱动! l 加载驱动类:Class.forName(“类名”); l 给出url.username.password,其中url背下来! l 使用Driver ...
- 剑指offer——python【第60题】把二叉树打印成多行
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行.#类似于二维列表[[1,2],[4,5]] 解题思路 其实这倒题和其他类似的题有所区别,这里是分层打印,把每层的节点值放在同一 ...
- 配置NTP网络时间自动校对系统时间和创建备份文件
1 案例1:配置用户和组账号 1.1 问题 本例要求创建下列用户.组以及组的成员关系: 新建用户 alex,其用户ID为3456,密码是flectrag 创建一个名为 adminuser 的组 创建一 ...
- 配置 Tomcat 以服务方式自动运行
接手一台用 Tomcat 跑着 Java Web 应用的 Linux CentOS 服务器,通过镜像的方式更换服务器后站点无法访问,发现是因为 Tomcat 不能在服务器启动后自动启动,于是基于 in ...
- ubuntu16.04升级Python3.5到Python3.7
因为python3.5和python3.6之后的版本差异很大,所有需要改变python的版本 简易安装python后得到的3版本的版本号是python3.5. 可以使用下面的命令查看py版本: pyt ...
- JAVA RPC (五) 之thrift序列化RPC消息体
让大家久等了.继续更新thrift序列化的消息体,下面我们一步一步的看一看thrift的rpc是怎么实例化消息体的. 首先我们先准备一个request文件 namespace java bky str ...
- Python004-数据处理示例:以某个数据(字段)为基准从数据中获取不同的字段行数
数据源样式如下所示: 需求: 读取文本,以第一列为基准参考系,每个基准仅输出满足需要条数的数据:不满足,全部输出. 比如,基准为 6236683970000018780,输出条数要求为 5.若文本中含 ...