Bof基础

Bof原理

Linux下进程地址空间的布局

典型的堆栈结构

  上图中可以看到栈中有return address还有局部变量,也就是函数的参数,bof攻击是利用上参数的溢出将返回地址return address用自己构造的数据覆盖掉,从而控制程序的进程。接下来就试着通过bof攻击来实现调用getshell函数。

  通过前面可以看出只要把返回地址改成getshell函数的起始地址就可以,但是需要先确定局部变量的大小,然后才能将getshell的起始地址恰好放到return address的位置。直接的想法就是拿一个足够长的参数去试,这时要借助debug工具才能看出那部分数据是溢出的,那部分数据在局部变量范围内,linux终端下gdb就可以进入debug。在debug下运行程序并输入测试用例1111111122222222333333334444444455555556666666,查看结果如下图。

里面用到info命令查看eip寄存器(返回地址)的值,注意到0x35就是‘5’的ascll码,因此可以确定地址应该在8个5的位置,于是再输入一组测试,1111111122222222333333334444444412345678来确定4字节地址的具体位置。

  此时就可以确定输入32字节之后的4个字节就是我们要覆盖的返回地址所在的位置了,接下来就是把原来的地址改为getshell函数的起始地址。从之前逆向的反汇编中我们知道getshell的起始地址是0x0804847d,但是直接按这个顺序输入会错,因为从上图中看出当输入是1234时eip寄存器中的值却对应的是4321,这是因为栈顶是低地址的缘故,所以0x0804847d也需要反着输入,即0x7d840408。这时又出现一个问题,如何将0x0408输入,直接输入显然不能实现,但我们知道在编程语言中的print函数是可以做到的,再加上管道|就能把数据输入了。

下面选择使用perl语言构造输入数据:

 可以看到成功的调用了getshell函数。

  既然可以跳转到任意我们输入的地址,那么只要注入自己编写的shelcode然后再跳到对应的位置,我们的shellcode就可以顺利的运行。下面尝试利用类似的方法插入并让程序运行自己编写的代码。

shallcode注入

准备工作

  

root@KaliYL:~# execstack -s pwn1    //设置堆栈可执行
root@KaliYL:~# execstack -q pwn1 //查询文件的堆栈是否可执行
X pwn1
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
2
root@KaliYL:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@KaliYL:~# more /proc/sys/kernel/randomize_va_space
0

  首先需要确定我们插入shellcode后的地址在哪,下图是已经跳转失败后查看的寄存器数据,所以此时栈顶esp就是eip的下一字,因为eip刚刚弹出栈,从栈顶的数据也可以看出。我直接选择了eip后作为shellcode的起始地址,因此我应该把eip的值改为0xbffff1f0,同样在注入时地址需要反着输入,但是shellcode不需要逆序输入,因为程序是按照从低地址到高地址执行的。


接下来就构造输入数据,先按前一步把eip和前32字节内容写到input2文件中。然后编写shellcode,编写一个c文件编译,然后反汇编找到需要的部分加到input2后面,。

代码如下图,只有输出hello world的功能,为了方便直接将整段程序接到input2后面,利用hello >> input2很方便就能实现。

将input2作为输入程序成功输出hello world如下

shellcode的编写其实有很多坑,了解更多http://www.cnblogs.com/xxy745214935/p/6477120.html。

Bof基础实践的更多相关文章

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

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

  2. 20145308 《网络对抗》 逆向及BOF基础实践 学习总结

    20145308 <网络对抗> 逆向及BOF基础实践 学习总结 实践目的 通过两种方法,实现程序能够运行原本并不会被运行的代码 实践原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串 ...

  3. 20145320《网络对抗》逆向及Bof基础实践

    1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn20145320的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的 ...

  4. 20155202张旭《网络对抗技术》 week1 PC平台逆向破解及Bof基础实践

    20155202张旭<网络对抗技术> week1 PC平台逆向破解及Bof基础实践 1.实践目标: 实践对象:一个名为pwn1的linux可执行文件. 该程序正常执行流程是: main调用 ...

  5. 2017-2018-2 20155229《网络对抗技术》Exp1:逆向及Bof基础实践

    逆向及Bof基础实践 实践基础知识 管道命令: 能够将一个命令的执行结果经过筛选,只保留需要的信息. cut:选取指定列. 按指定字符分隔:只显示第n 列的数据 cut -d '分隔符' -f n 选 ...

  6. 20145206邹京儒《网络对抗》逆向及Bof基础实践

    20145206邹京儒<网络对抗>逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:ma ...

  7. 20145216《网络对抗》逆向及BOF基础实践

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

  8. 20145305 《网络对抗》逆向及Bof基础实践

    逆向及Bof基础实践说明 实践说明地址 实验过程及结果截图

  9. 20145327 《网络对抗》逆向及BOF基础实践

    20145327 <网络对抗>逆向及BOF基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任 ...

  10. 20145204《网络对抗》逆向及bof基础实践

    20145204<网络对抗>逆向及bof基础实践 实践目的说明 实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何 ...

随机推荐

  1. PAC 自动代理

    最近看了 HTTP权威指南 里面有关于  代理的介绍,代理有很多种,今天主要来说说 自动代理PAC PAC(Proxy Auto Config) 是一个 Script:经由编写这个 Script,我们 ...

  2. div+css网页标准布局实例教程(三)

    前边两节学完后,前台工作基本上完成了,下边的任务该程序员添加程序了.为什么说是基本完成呢?因为要做的工作还很多,不但要把首页做出来,其它的列表页详细页等页面也得做.还要配合程序员把整个网站完成,这样才 ...

  3. ssh stricthostkeychecking=0

    SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击. 但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查. ...

  4. <转>MySQL临时表的简单用法

    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. ...

  5. matlab做曲线拟合

    python 做曲线拟合 https://blog.csdn.net/qq_16583687/article/details/72723708 matlab做拟合函数,可以在命令行输入:数据x,数据y ...

  6. 逻辑运算,&,&&, |, ||, ^, !

    &:与  特点:判断时两边为true才为true,只要两边有一个为false则结果为false:true&true=true: false&true=false: true&a ...

  7. 记两个国外CTF的弱pwn

    两道题都来自CSAW CTF 18.PWN学得不够多,如果哪里错了,欢迎留言交流. 第一个题 get_it checksec检查之后,发现栈保护没开,很可能是栈溢出.IDA打开F5看伪源码. int ...

  8. JavaScript循环练习2

    折纸:折多少次和珠穆朗玛峰一样高1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 var hou = 0.0001; var cishu = 0; for(var i= ...

  9. yii2 restful api——app接口编程实例

    <?php namespace common\components; use common\models\Cart; use common\models\User; use Yii; use y ...

  10. UVALive - 7269 I - Snake Carpet

    思路: 多画画就发现从五的时候可以这么填: 六的时候这么填: 七的时候这么填: 看出规律了吗? 没看出的话再画画把. #include <bits/stdc++.h> using name ...