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. 【GIT】Git Flow最佳实践

    Git Flow 工作流一共包含五种分支: 两个长期分支: 主分支 master:用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版 开发分支 develop:用于日常开发,存放最新的 ...

  2. 【markdown】使用 js 实现自己得markdown 网页编辑器

    首先从这里下载其浏览器版: https://github.com/evilstreak/markdown-js/releases 解压缩后在其js文件同目录下新建一个网页进行测试,代码如下: < ...

  3. 通过身份证分析出生年月日、性别、年龄的SQL语句

    ),) ) ),)<>'X' ) ) )<>'X' ),)),)),)) ),)),)),)) ) as int)) where [出生日期]<>'' #字符串格式 ...

  4. java基础---->Comparable和Comparator的使用

    Comparable和Comparator都可以实现排序,今天我们就开始两种比较排序接口的学习. Comparable的使用 一.Comparable的文档说明: Lists (and arrays) ...

  5. DG快照备库

    1.使用快照先决条件:主备库开启闪回功能 2.把备库转为快照库 DGMGRL> convert database satest to SNAPSHOT STANDBY; Converting d ...

  6. thinkphp---手机访问切换模板!

    手机访问切换模板:一般用在手机在做自适应的情况. 第一步:需要添加判断是否是手机访问的方法: http://www.cnblogs.com/e0yu/p/7561811.html 第二步:Home / ...

  7. nginx_log介绍和分割

    nginx access_log日志简介 log_format 日志格式 1.语法:log_format name(格式名字) 格式样式(即想要得到什么样的日志内容)示例: log_format ma ...

  8. nginx解决带_的head内容丢失

    若请求 Head 信息中存在自定义信息并且以 "_" 下划线间隔,则必须配置underscores_in_headers 否则 Head 无法向 Tomcat 转发 解决办法: 在 ...

  9. 自定义一个ListView实现聊天界面

    摘要 ListView可以称得上Android中最常用也最难用的控件了,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示 ...

  10. VirtualBox Guest Additions installation

    在使用VirtualBox为CentOS安装增强功能时,输出是: 文本: Verifying archive integrity... All good. Uncompressing VirtualB ...