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

一、实验内容

1、掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分)

2、掌握反汇编与十六进制编程器 (0.5分)

3、能正确修改机器指令改变程序执行流程(0.5分)

4、能正确构造payload进行bof攻击(0.5分)

二、实践目标

1、本次实践的对象是一个名为pwn1的linux可执行文件,如图:


2、该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串;
3、该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。

我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。

三、实验内容及步骤

直接修改程序机器指令,改变程序执行流程:

通过修改main函数中的call指令跳转的地址,使其本来该跳转到foo函数时,跳转到getshell函数,从而运行getshell函数。

任务一:

1、输入指令objdump -d pwn1反汇编文件 pwn1,结果如图所示:

分析结果中的main、foo、getShell函数,call 8048491 <foo>是汇编指令,将调用位于地址8048491处的foo函数;

其对应机器指令为e8 d7 ff ff ff,e8即跳转之意;

call指令调用函数对应的机器指令为:“e8”+“该函数相对于EIP值的偏移量”,让main函数调用getShell,修改“d7ffffff”为,

“getShell地址 - EIP(80484ba)”对应的补码就行(804847d - 80484ba),得到结果为c3 ff ff ff。

2、输入指令vi pwn1,文件以ASCII码的形式出现;

3、输入:%!xxd调用命令行,将文件转换为16进制,如图所示:

4、输入/d7,查找要修改的内容:

5、输入i转换为插入模式,d7修改为c3:

6、输入:%!xxd -r,将文件转换为ASCII码形式,输入:wq保存并退出;

7、再次反汇编查看,

8、再次运行修改后的pwn1文件,得到shell提示符:

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

知识要求:堆栈结构,返回地址

学习目标:理解攻击缓冲区的结果,掌握返回地址的获取

实验步骤:

1、确认返回地址,输入指令objdump -d pwn1反汇编文件 pwn1,查看getshell()的内存地址

2、gdb调试pwn1,输入r运行程序,这里遇到点问题:

gdb报告信息:Detaching after fork from child process 4487(该问题尚未解决)。

任务三:注入Shellcode并执行

shellcode是一段机器指令,通常这段机器指令的目的是为获取一个交互式的shell,所以这段机器指令被称为shellcode。

实验步骤:

1、输入apt-get install execstack安装execstack,设置堆栈可执行:

execstack -s pwn3 //设置堆栈可执行
execstack -q pwn3 //查询文件的堆栈是否可执行;
2、more /proc/sys/kernel/randomize_va_space //查看随机化是否关闭
'echo "0" > /proc/sys/kernel/randomize_va_space //关闭随机化;
安装过程:

3、构造要注入的payload;

4、在一个窗口运行(cat input_shellcode;cat);

5、在gdb里面attach 2396调试;

6、在ret指令的地址处设置断点,

7、在另一个终端按下回车,这样程序就会执行之后在断点处停下来;

8、继续运行程序;

9、查看0xffffd34c地址后面16字节的内容:

10、修改注入代码的覆盖地址,再次运行(cat input_shellcode;cat),则攻击成功!

四、实验过程中遇到的问题

1、安装execstack包时:

解决方法是更新安装源即可。

2、任务一需要输入:wq保存退出时遇到如下问题:

查阅资料后得知解决方法为输入:wq!即可。

五、实验感想

本次实验是网络对抗第一次实验,实验包含三个任务,虽然跟着步骤做并不难,但是内容较多,需要掌握的新的知识点较多。同时实验过程中我也遇到了许多复杂的问题,

但在查阅资料后也一一解决了。总的来说本次实验我完成任务的同时也收获了许多知识,为后续的学习打下良好的基础。

2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解的更多相关文章

  1. 2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解

    2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解 目录 一.逆向及Bof基础实践说明 二.直接修改程序机器指令,改变程序执行流程 三.通过构造输入参数,造成BOF攻击,改变程 ...

  2. 20155305《网络对抗》PC平台逆向破解(二)

    20155305<网络对抗>PC平台逆向破解(二) shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 ...

  3. 20155311《网络对抗》PC平台逆向破解(二)

    20155311<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  4. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验

    20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...

  5. 20145221《网络对抗》PC平台逆向破解

    20145221<网络对抗>PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户 ...

  6. 20155307《网络对抗》PC平台逆向破解(二)

    20155307<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  7. 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验

    20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...

  8. 20145201李子璇《网络对抗》PC平台逆向破解

    20145201<网络对抗>PC平台逆向破解 准备阶段 下载安装execstack. 获取shellcode的c语言代码 设置堆栈可执行 将环境设置为:堆栈可执行.地址随机化关闭(2开启, ...

  9. 20145219《网络对抗》PC平台逆向破解

    20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...

  10. 2015531 网络攻防 Exp1 PC平台逆向破解(5)M

    2015531 网络攻防 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是linux的可执行文件 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串 ...

随机推荐

  1. Java_Number(装箱和拆箱)

    所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number子类 装箱: 自动将基本数据类型装换为包装器类型 拆箱: 自动将包装器类型转换为基本数据类 ...

  2. SpringBoot 集成数据库连接池Druid

    1.pom.xml依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid< ...

  3. Mybatis注意点之#与$区别

    动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因.mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql ...

  4. SQL Server中文排序混乱

    在sql语句中指定了含有中文的列进行排序,但排序结果看起来毫无规则,并不是按照拼音进行排序的检查了DB的Collation后,发现是SQL_Latin1_General_CP1_CI_AS解决方法: ...

  5. 论文阅读笔记四十一:Very Deep Convolutional Networks For Large-Scale Image Recongnition(VGG ICLR2015)

    论文原址:https://arxiv.org/abs/1409.1556 代码原址:https://github.com/machrisaa/tensorflow-vgg 摘要 本文主要分析卷积网络的 ...

  6. JavaScript 动态选择方法和属性

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  7. James Munkres Topology: Theorem 19.6

    Theorem 19.6 Let \(f: A \rightarrow \prod_{\alpha \in J} X_{\alpha}\) be given by the equation \[ f( ...

  8. North American Invitational Programming Contest 2018

    A. Cut it Out! 枚举第一刀,那么之后每切一刀都会将原问题划分成两个子问题. 考虑DP,设$f[l][r]$表示$l$点顺时针一直到$r$点还未切割的最小代价,预处理出每条边的代价转移即可 ...

  9. NumPy数组对象

    1.创建NumPy数组 import numpy as np # 创建3*2*4的三维数组 a = np.arange(24).reshape(3, 2, 4) # 打印三维数组的所有元素 print ...

  10. day13_H5_CSS_1

    一.标签.HTML是可以被浏览器解析的一套规则 1.a标签:他是主动闭合标签,表现形式<a href="http://www.baidu.com">baidu<a ...