Bof基础实践_实践的基础是什么

Bof基础实践_实践的基础是什么Bof基础Bof原理Linux下进程地址空间的布局典型的堆栈结构上图中可以看到栈中有returnaddress还有局部变量,也就是函数的参数,bof攻击是利用上参数的溢出将返回地址retur

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Bof基础

Bof原理

Linux下进程地址空间的布局

 Bof基础实践_实践的基础是什么

典型的堆栈结构

Bof基础实践_实践的基础是什么

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

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

Bof基础实践_实践的基础是什么

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

Bof基础实践_实践的基础是什么

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

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

Bof基础实践_实践的基础是什么 可以看到成功的调用了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不需要逆序输入,因为程序是按照从低地址到高地址执行的。Bof基础实践_实践的基础是什么


Bof基础实践_实践的基础是什么

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

Bof基础实践_实践的基础是什么

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

Bof基础实践_实践的基础是什么

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

Bof基础实践_实践的基础是什么

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167361.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • H5移动端开发学习总结

    H5移动端开发学习总结对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范往往会遵循以下两点:1.首先,选取一款手机的屏幕宽高作为基准(现在一般选取iphone6的375×667)。之前项目中也用到过iphone5的320×568。2.对于retina屏幕(如:dpr=2),为了达到高清效果,视觉稿的画布大小会是基准的2倍,也就是说像素点个数是原来的4倍(对iphone6而言:原先的375×667,就会变成

    2022年6月21日
    44
  • 实习感悟——从用户中来,到用户中去

    实习感悟——从用户中来,到用户中去

    2021年12月14日
    46
  • 网站管理后台帐号密码暴力激活成功教程方法

    网站管理后台帐号密码暴力激活成功教程方法【导读】对于网站运行的个人站长而言,最担心的是应如何有效且安全的去管理自己的网站,否则自己辛辛苦苦经营的网站就会被不请自来的不速之客给攻破,轻则站点数据被窃取,重则整个网站都被攻陷,导致无法恢复。本文主要从管理后台这个方面来讲解其黑客攻击过程,并通过在虚拟环境中展开实例演示,各读者可以跟着本教程去做实验,通过实验加强对攻击过程的了解,如果你是一名菜鸟站长也可以针对性的去做一下防护方案。…

    2022年8月22日
    6
  • js三目运算符

    js三目运算符js三目运算符js三目运算符的正常表达为variable=boolean_expression?true_value:false_value;当boolean_expression传入的不是表达式而是变量时,是如何判断的?在es5文档中找到了解释:先将boolean_expression进行计算拿到结果赋给lref,然后根据ToBoolean(lref)拿到是tr

    2022年6月29日
    25
  • 卡方分布、t分布、F分布的期望与方差的计算「建议收藏」

    文章目录卡方分布卡方分布的期望和方差t分布t分布的期望和方差F分布F分布的期望和方差卡方分布设X1,X2,……Xn独立同分布,且服从公共分布N(0,1),则Y=X12+X22+……Xn2服从自由度为n的卡方分布.设X_1,X_2,……X_n独立同分布,且服从公共分布N(0,1),则Y=X_1^2+X_2^2+……X_n^2服从自由度为n的卡方分布.设X1​,X2​,……Xn​独立同分布,且服从公共分布N(0,1),则Y=X12​+X22​+……Xn2​服从自由度为n的卡方分布.卡方分布的期望和方

    2022年4月8日
    353
  • 用JavaScript对GridView进行上移下移,保存排序

    用JavaScript对GridView进行上移下移,保存排序

    2021年7月27日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号