博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20145332 《网络攻防》 逆向与Bof实验
阅读量:5168 次
发布时间:2019-06-13

本文共 1264 字,大约阅读时间需要 4 分钟。

20145332 《网络攻防》逆向与Bof实验

实践目标

本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。这次实验的目标就是想办法运行这个代码片段。 我们将学习两种方法:     ①利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。     ②手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

基础知识

该实践需要熟悉Linux基本操作,能看懂常用指令,如管道(|),输入、输出重定向(>)等。理解Bof的原理。能看得懂汇编、机器指令、EIP、指令地址。会使用gdb,vi。

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

首先对pwn1进行反汇编,指令为objdump -d pwn1 | more

886702-20170228193542688-940983673.png

先看第12行,"call 8048491 "是汇编指令,是说这条指令将调用位于地址8048491处的foo函数;其对应机器指令为“e8 d7ffffff”,e8即跳转之意。本来正常流程,此时此刻EIP的值应该是下条指令的地址,即80484ba,但一解释e8这条指令呢,CPU就会转而执行 “EIP + d7ffffff”这个位置的指令。“d7ffffff”是补码,表示-41,41=0x29,80484ba +d7ffffff= 80484ba-0x29正好是8048491这个值,main函数调用foo,对应机器指令为“ e8 d7ffffff”,那我们想让它调用getShell,只要修改“d7ffffff”为,"getShell-80484ba"对应的补码就行。用Windows计算器,直接 47d-4ba就能得到补码,是c3ffffff。下面就修改可执行文件,将其中的call指令的目标地址由d7ffffff变为c3ffffff。
在修改前先将pwn1复制一份,命名为pwn20145332,指令为:cp pwn1 pwn20145332。使用vi编译,在输入完vi后出现的是乱码,需要将其转化为十六进制,使用的指令为%!xxd,然后使用指令/e8d7,找到需要修改的地方,将d7修改为c3,。(这部分没有截图,只截取了修改后的结果)
886702-20170228194119938-1716845591.png
修改后使用指令%!xxd -r将其转化为原来的形式,然后保存退出。运行pwn20145332,指令为./pwn20145332,运行下改后的代码,会得到shell提示符#,结果如下:
886702-20170228194324141-1520878822.png

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

886702-20170228200215251-946830689.png

886702-20170228200227423-1518453580.png
在实验前,将pwn复制一份,命名为20145332
实验指令为:more input,xxd input,(cat input; cat) | ./20145332,结果如下:
886702-20170228200430595-1348955751.png
886702-20170228200441923-433168020.png

转载于:https://www.cnblogs.com/lx20145332/p/6480628.html

你可能感兴趣的文章
nginx 的提升多个小文件访问的性能模块
查看>>
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
CVE-2014-6321 && MS14-066 Microsoft Schannel Remote Code Execution Vulnerability Analysis
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Mysql MHA高可用集群架构
查看>>
心急的C小加
查看>>
编译原理 First,Follow,select集求法
查看>>
iOS开发 runtime实现原理以及实际开发中的应用
查看>>
BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
查看>>
android 学习资源网址
查看>>
qt安装遇到的错误
查看>>
java:Apache Shiro 权限管理
查看>>
objective c的注释规范
查看>>
FreeNas安装配置使用
查看>>
Django(一)框架简介
查看>>
Python操作SQLite数据库的方法详解
查看>>
菜单和工具条(二)
查看>>
hadoop17---RPC和Socket的区别
查看>>