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. Django的视图与网址之加法计算

    在最新的Django2.1中,views.py中采用的地址映射方式发生了变化,通过一个加法运算我们来看一看. 方法一:在视图views.py中定义视图逻辑,求解两个数的加法运算:c = a + b,定 ...

  2. iOS判断UIView是否显示在屏幕上

    @interface - (BOOL)isDisplayedInScreen; @end @implementation UIView(UIScreenDisplaying) //判断View是否显示 ...

  3. Java applets A Java applet example

    https://en.wikipedia.org/wiki/Ajax_(programming) https://zh.wikipedia.org/wiki/AJAX Ajax (also AJAX; ...

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

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

  5. 冒泡排序快速版(C)

    冒泡排序C语言版:在每轮排序中检查时候有元素位置交换,如果无交换,说明数组元素已经有序,无需继续排序 #include <stdio.h> #include <stdlib.h> ...

  6. MyEclipse中jquery.js文件报missing semicolon的错误解决

    myeclipse的验证问题不影响jquery的应用,如果看着别扭,解决办法如下:选中你想去掉的js文件:右键选择 MyEclipse-->Exclude From Validation :然后 ...

  7. 002-nginx-在 nginx 反向代理中使用域名,配置动态域名解析

    一.概述 代理(proxy),即中间人,它代替客户端发送请求给服务器,收到响应后再转给客户端.通常意义上的代理是从用户的角度讲的,用户通过某个代理可以访问多个网站,这个代理是靠近用户的,比如某些公司可 ...

  8. PHP中header('content-type:text/html;charset="utf-8')和error_reporting()的作用

    1.header PHP文件插入header("Content-type: text/html; charset=utf-8");相当于页面里面的<meta http-equ ...

  9. unity3d-Visual Studio Tools for Unity快捷键

    1.首先 当安装for unity 后,打开vs2013(我使用的是vs2013),右键可以看到for unity 提供了两个快捷键 2.其次 (Ctrl+Shift+M) 3.最后(Ctrl+Shi ...

  10. -webkit-line-clamp超过两行就出现省略号

    -webkit-line-clamp 是一个 不规范的属性(unsupported WebKit property),它没有出现在 CSS 规范草案中. 限制在一个块元素显示的文本的行数. 为了实现该 ...