20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础
20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础
实践目标
实践对象:一个名为pwn1的linux可执行文件。
pwn1正常执行流程:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
- 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。
我们将学习两种方法实现目标:
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。(强行修改程序执行流)
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。(运行原本不可访问的代码片段)
基础知识
熟悉Linux基本操作,能看懂常用指令,如管道(|),输入、输出重定向(>)等。
- 管道命令:管道符(|)左边命令的输出就会作为管道符右边命令的输入。
- 输入、输出重定向:LINUX默认输入是键盘,输出是显示器,可以用重定向(<、>)来改变这些设置,将输入或输出导向到指定地方。
能看得懂汇编、机器指令、EIP、指令地址。
会使用gdb,vi。
理解Bof的原理。
实践要求
掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分)
- NOP:即“空指令”,在执行到其时,CPU什么也不做,只是继续执行NOP后面的一条指令。
- JNE:条件转移指令,不等于则跳转。
- JE:条件转移指令,等于则跳转。
- CMP:比较指令,功能上相当于减法指令,但只是对操作数之间运算比较,不保存结果。执行后,将对标志寄存器产生影响。
掌握反汇编与十六进制编程器 (1分)
- 反汇编:
objdump -d xxx - 二进制转十六进制:
:%!xxd
- 反汇编:
- 掌握可执行文件的基本格式(2分)
掌握缓冲区溢出攻击的原理(1分)
- 当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。
原程序功能

直接修改程序机器指令,改变程序执行流程
将目标文件
20145219反汇编objdump -d 20145219,阅读发现getShell函数的地址是804847d,foo函数的地址是8048491,要想使main函数调用foo函数的机器指令是e8 d7ffffff,其下条指令的地址为80484ba,要想使main函数调用getShell函数只要修改d7ffffff为getShell-80484ba对应的补码c3ffffff就行。利用
vi 20145219命令打开目标文件20145219,屏幕上显示二进制乱码,利用:%!xxd命令,将二进制转换为十六进制。

- 利用
/e8d7命令查找要修改的内容,将d7修改为c3。


- 利用
:%!xxd -r命令将十六进制转换为二进制并存盘退出:wq。


- 更改程序后结果:

通过构造输入参数,造成BOF攻击,改变程序执行流
gdb调试确认输入字符串哪几个字符会覆盖到返回地址
- 首先输入
1111111122222222333333334444444455555555,用info r命令查看溢出时寄存器状态如下,观察%eip的值,发现%eip的值是0x35353535,大致确定溢出字符为55555555。
- 首先输入


- 再输入
1111111122222222333333334444444412345678,用info r命令查看溢出时寄存器状态如下,观察%eip的值,发现%eip的值是0x34333231,确定溢出字符为1234。

只要把这四个字符替换为
getShell的内存地址,输给pwn20145219,pwn20145219就会运行getShell。构造输入字符串来覆盖返回地址
- 我们没法通过键盘输入
\x7d\x84\x04\x08这样的16进制值,所以先生成包括这样字符串的一个文件,命令为perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input(\x0a表示回车)。
- 我们没法通过键盘输入

- 使用16进制查看指令
xxd input查看input文件的内容。

- 使用
(cat input; cat) | ./pwn20145219命令,将input的输入通过管道符“|”作为pwn20145219的输入。更改程序后结果:

参考文献
20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础的更多相关文章
- 20145219《网络对抗》PC平台逆向破解
20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- 2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解
2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解 目录 一.逆向及Bof基础实践说明 二.直接修改程序机器指令,改变程序执行流程 三.通过构造输入参数,造成BOF攻击,改变程 ...
- 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验
20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...
- 20155305《网络对抗》PC平台逆向破解(二)
20155305<网络对抗>PC平台逆向破解(二) shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 ...
- 20155311《网络对抗》PC平台逆向破解(二)
20155311<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...
- 20145221《网络对抗》PC平台逆向破解
20145221<网络对抗>PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户 ...
- 20155307《网络对抗》PC平台逆向破解(二)
20155307<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...
- 20145201李子璇《网络对抗》PC平台逆向破解
20145201<网络对抗>PC平台逆向破解 准备阶段 下载安装execstack. 获取shellcode的c语言代码 设置堆栈可执行 将环境设置为:堆栈可执行.地址随机化关闭(2开启, ...
- 20145240《网络对抗》PC平台逆向破解_advanced
PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...
随机推荐
- PHP之ob_start()控制缓冲生成html
输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用. 我们先举一个简单的例子,让大家对Outp ...
- 【顽固BUG】Visual Studio 2015 + TestDriven.NET-3.8.2860_Personal_Beta 调用的目标发生了异常。
前言 突然怎么弄也无法断点调试了 输出如下: ------ Test started: Assembly: Server5.V2.dll ------ 调用的目标发生了异常. 而且网站运行提示: -- ...
- 点击button,button背景图片变化
1.设置背景渐变效果,在drawable目录下建buttonshape.xml文件, 内容为: <?xml version="1.0" encoding="utf- ...
- C++虚继承的概念[转]
C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类.这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数 ...
- Linux 2.6.16 TCP连接速度异常的问题分析
版权声明:本文由余子军原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/104 来源:腾云阁 https://www.qclo ...
- 静态资源的gzip
1.项目中,接触到gzip.未压缩的文件和压缩后的文件的比例可能达到:3:1.所以,gzip是网络中文件高速传输的很好方法. 2.一般js.css.html文件都会在后端进行gzip.当浏览器请求这些 ...
- 图论之最短路径(3)队列优化的Bellman-Ford算法(SPFA算法)
在Bellman-Ford算法中 我们可以看到大量的优化空间:如果一个点的最短路径已经确定了,那么它就不会再改变,因此不需要再处理.换句话说:我们每次只对最短路径改变了的顶点的所有出边进行操作 使用一 ...
- [UML]UML 教程 - 第二部分
UML作为软件开发典型的开发过程 业务过程模型创建 业务过程模型被用来定义发生在企业或组织内部的高级业务活动和业务过程,并且是建立用例模型的基础.一般来说业务过程模型比一个软件系统所能实现的更多(比如 ...
- interface Impl
public interface ActionBarOperations { void initSthOne(); void initSthTwo(); } public class ActionBa ...
- Thinkphp --- 路由定义
thinkPHP的路由: thinkphp下的 conf 下可以进行配置:(154行) /* 系统变量名称设置 */ 'VAR_MODULE' => 'm', // 默认模块获取变量 'VAR_ ...