20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践

1.1 实践目标

本次实践的对象是一个名为pwn1linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

我们将学习两种方法

利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。

手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

其实我们还可以做的更多,比如说注入一个自己制作的shellcode并运行这段shellcode

这几种思路,基本代表现实情况中的攻击目标:

  1. 运行原本不可访问的代码片段
  2. 强行修改程序执行流
  3. 以及注入运行任意代码

1.2 基础知识

该实践需要同学们熟悉Linux基本操作,能看懂常用指令,如管道(|)输入输出重定向(>)等。

理解Bof的原理。

能看得懂汇编、机器指令、EIP、指令地址。

会使用gdb,vi

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

①用VI更改程序执行流程

知识要求:Call指令,EIP寄存器,指令跳转的偏移计算,补码,反汇编指令objdump,十六进制编辑工具
学习目标:理解可执行文件与机器指令
进阶:掌握ELF文件格式,掌握动态技术

为了截图和实际操作的方便,我用"cp pwn1 20145314"语句将我们所要操作的文件改至20145314。

首先执行一次20145314文件:

图1:

接下来,我们需要修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff。

首先用第一种方法更改过去:

vi pwn2 :进入vi模式

:%!xxd :将显示模式切换为16进制模式

e8d7:查找要修改的内容

到这一步我们可以看到如下画面:

图2:

"r"修改d7为c3

图3:

:%!xxd -r:转换成原格式

:wq:保存并退出

再次执行此文件,就可以发现功能已经被我们所更改了:

图4:

注:这里是getshell的功能,默认已经让我们进入了bush,所以用exit退出

①用wxhexeditor恢复程序执行流程

另外,我们用wxhexeditor来将程序的执行流程恢复

输入指令apt-get install wxhexeditor进行安装wxhexeditor

出现如图的错误:

图5:

分析原因,出现提示"Failed to fetch xxxx",这是我们还没连网的表示,所以我们只要连网就可以了。

连网安装后,输入wxHexEditor 20145314进入编辑

图7:

“crtl”+"F"的快捷键搜索所需要的E8 C3段,更改回来

图8:

图9:

更改完成,保存并退出wxhexeditor,重新运行程序试试

图10:

成功

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

3.1 反汇编,了解程序的基本功能

objdump -d pwn1 | more语句来实现反汇编,管道的作用是将前半段的输出作为后半段的输入,从而输出出来。

在输出的反汇编语句中找到getshell函数段

图11:

foo函数段

图12:

3.2 确认输入字符串哪几个字符会覆盖到返回地址

用GDB跑程序,寻找需要修改的返回地址的位置:

图13:

然后详细查看info r

图14

这里我们发现eip内本来应该有的指令值被我覆盖了,覆盖为5(ASCII码)

图15

再执行,发现EIP中的值又改变了,所以现在我们可以确定需要更改的位置了。

3.3 确认用什么值来覆盖返回地址

首先我们再次确认getshell的地址

图11:

发现为0804847d

接下来要确认下字节序,简单说是输入

11111111222222223333333344444444\x08\x04\x84\x7d

还是输入

11111111222222223333333344444444\x7d\x84\x04\x08

图16:

对比之前 eip 0x34333232 0x34333232 ,正确应用输入

11111111222222223333333344444444\x7d\x84\x04\x08

因此:

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

图17:

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

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

图18:

20145314郑凯杰《网络对抗技术》实验1 逆向及Bof基础实践的更多相关文章

  1. 20145311王亦徐《网络对抗技术》MAL_逆向与Bof基础

    20145311王亦徐<网络对抗技术>MAL_逆向与Bof基础 实践目标 运行一个可执行文件,通过逆向或者Bof技术执行原本不应该执行的代码片段采用的两种方法: 1.利用foo函数的Bof ...

  2. 20165101刘天野 2018-2019-2《网络对抗技术》Exp1 逆向与Bof基础

    20165101刘天野 2018-2019-2<网络对抗技术>Exp1 逆向与Bof基础 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执 ...

  3. 20155235 《网络攻防》 实验一 逆向及Bof基础实践说明

    20155235 <网络攻防> 实验一 逆向及Bof基础实践说明 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  4. 2018-2019-2 20165114《网络对抗技术》Exp1 逆向与Bof基础

    逆向及Bof基础实践 目录 一.实践目标 二.实验操作和步骤 1.直接修改程序机器指令 2.通过构造输入参数,造成BOF攻击. 3.注入Shellcode并执行 三.实验总结 四.实验遇到的错误和问题 ...

  5. 20165218 《网络对抗技术》Exp1 逆向及Bof基础

    Exp1 逆向及Bof基础 基础知识 1. NOP, JNE, JE, JMP, CMP汇编指令的机器码 指令 机器码 NOP NOP指令即"空指令",在x86的CPU中机器码为0 ...

  6. 20145324王嘉澜 《网络对抗技术》 MAL_逆向与Bof基础

    实践目标 •本次实践的对象是一个名为pwn1的linux可执行文件. •该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. •该程序同时包含另一个代码片段,get ...

  7. 20145222黄亚奇 《网络对抗技术》 MAL_逆向与Bof基础

    学习目的 通过一些方法,使能够运行本不该被运行的代码部分,或得到shell的使用: 将正常运行代码部分某处call后的目标地址,修改为另一部分我们希望执行.却本不应该执行的代码部分首地址(这需要我们有 ...

  8. 网络对抗实验一 逆向及Bof基础实践

    网络对抗实验一 逆向及Bof基础实践 一.实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. ...

  9. 20145230熊佳炜《网络对抗》实验九:web安全基础实践

    20145230熊佳炜<网络对抗>实验九:web安全基础实践 webgoat webgoat的中文是代罪羔羊的意思,而它是一个有很多漏洞的web应用程序,我们可以利用它来研究关于web应用 ...

随机推荐

  1. x86 体系指令

    FASM 第二章 - 2.1 x86 体系指令 Author: 徐艺波  From: xuyibo.org  Updated: 2008-04-17   官方论坛   本站软件反馈.软件开发交流.   ...

  2. MongoDB复制集原理

    版权声明:本文由孔德雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/136 来源:腾云阁 https://www.qclo ...

  3. vux报错 this指针问题

    报错: 代码: 结果:取不到this.tishi,不明白为什么在请求内部会取不到这个值. 分析:this可能有问题 解决: 结果: 这样就能取到this.tishi的值了. 总结: methods:{ ...

  4. FileInputStream与FileOutputStream类 Reader类和Writer类 解析

    FileInputStream和FileOutputStream类分别用来创建磁盘文件的输入流和输出流对象,通过它们的构造函数来指定文件路径和文件名. 创建FileInputStream实例对象时,指 ...

  5. centos7关闭自动锁屏

    centos 7默认几分钟不动就锁屏,实在很讨厌,所以在设置中将其去掉 1.不同的版本应该设置的地方稍有变化,我不敢保证我的这个方法你一定可以用,所以用之前希望你了解你的系统的版本. 2.左上角点击应 ...

  6. c# 数据库数据与DataGridView表控件的绑定

    public Form1() { InitializeComponent(); //连接数据库 string str = "Data Source=IP;Initial Catalog=数据 ...

  7. mysql格式化日期的函数

    转自:https://www.cnblogs.com/duhuo/p/5650876.html mysql格式化日期   mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的 ...

  8. 从零打造在线网盘系统之Hibernate配置O/R映射

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  9. Css--input输入框点击时去掉外框outline:medium;(chrome)

    .search input[type='search']{ background:no-repeat 0 0 scroll #EEEEEE; border:none; outline:medium; ...

  10. Token Based Authentication -- Implementation Demonstration

    https://www.w3.org/2001/sw/Europe/events/foaf-galway/papers/fp/token_based_authentication/