萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

admin 2024年10月13日21:41:51评论12 views字数 1716阅读5分43秒阅读模式

0x01:stack3

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

本篇文章仅为翻译原文是来自https://0xrick.github.io/binary-exploitation/bof1 的缓冲区课程系列。为了模拟真实测试,从这里开始起使用黑盒测试。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

先正常无参数运行一次结果发现啥也没弹出来

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

由于啥回显都没有那么可以随便输入点字符带进去,比如带100个A进去结果提示Segmentation fault(段错误)。如果看到它基本上可以确认发生了缓冲区溢出。同时第一行写着calling function pointer(调用函数指针, 跳转到0x414141)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

总结一下信息,有一个函数指针(function pointer),它根据该函数的给定内存地址执行了一个函数。内存地址放在一个变量中,当我们超过缓冲区容量限制时,可以覆盖这个变量。目前可以看到函数指针正在调用地址0x41414141, 0x41在16进制中是字符’A’

想要进一步打通关这题需要了解缓冲区发生的位置。因为这里是随机生成n个A,可能是99个就溢出或者是98个就溢出,但还没确切知道缓冲区的容量是多少。其次还需要找到执行函数的内存地址。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

0x02:判断缓冲区容量

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

这里首先需要用scp命令把靶机上的文件传到kali本地上用gdb分析

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

在运行前需要用到另外一个工具kali的pattern_create和pattern_offset,位置在/usr/share/Metasploit-framework/tools/exploit

pattern_create会用来创造一些字符串的payload可以用来检测溢出位置比如以下语句可以创造出100个字符串payload(后面会用到)而另外一个pattern_offset会帮你确定位置(这个位置可以理解为溢出点位置或者是容量)。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

然后gdb 文件名启动

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

首先需要在main入口设置一个断点,这可以让程序在main函数第一条指令后中断

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

然后就可run让程序跑起来。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

输入c让程序继续跑起来然后输入刚才pattern_create创造出的字符串,此时最后一行提示程序停在0x63413163这里。这里有问题。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

那么用回pattern_offset确定下这个0x63413163位置在哪,系统提示是在64这个点。这也意味着缓冲区容量是64,超过这个点就会发生溢出。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

0x03:查找函数内存地址

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

Gdb有条命令info functions可以列出程序所有函数和它的内存地址。Objdump(它可以反汇编目标文件或者可执行文件的命令,一般在LINUX环境下)也可做到这一点。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

由于Kali环境下的内存地址可能和Protostar靶机上的文件内存地址稍微有些不同,我们要爬回Protostar上做

命令:objdump -d stack3

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

往下拉的时候发现一个奇怪的内存地址0x0804824叫win

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

0x04:解题方法

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

前面已经判断出缓冲区的容量限制为64,之后我们可以传递函数的地址,函数指针将执行它。而这里的函数地址是指win这个奇怪的函数地址传参过去。这里的x是代表16进制的意思

命令:python -c “print ‘A’ * 64 + ‘x24x84x04x08’” | ./stack3

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

当然看回源码感觉原作者脑回路有点大

#include

#include

#include

#include

void win()

{

printf("code flow successfully changedn");

}

int main(int argc, char **argv)

{

volatile int (*fp)();

char buffer[64];

fp = 0;

gets(buffer);

if(fp) {

printf("callingfunction pointer, jumping to 0x%08xn", fp);

fp();

}

}

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

从源代码这样白盒测试的话可以看到函数win()在头部定义,然后定义函数指针的main()分配64个字符串的缓冲区容量。然后把值设为0.之后它接收我们的参数并储存在缓冲区中。最后强调的是if语句。该语句检查功能指针是否从0变更成其它值。然后调用新值的地址。

萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

原文始发于微信公众号(神隐攻防实验室):萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月13日21:41:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   萌新学习缓冲区溢出漏洞(3.尝试黑盒测试)https://cn-sec.com/archives/788094.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息