格式字符串错误漏洞/网安-演示格式化字符串溢出漏洞实验_手把手教网络安全教程
1. 实验目的
了解格式化字符串溢出的基本概念掌握格式化字符串溢出的原理和性质熟悉格式化字符串溢出攻击的方法简单掌握格式化字符串溢出的防范方法。
2. 实验环境
C++ 6.0
XP
3. 实验原理
格式化字符串的漏洞是由像这样的代码 () 引起的,其中 是用户输入的数据,具有 Set-UID root 权限这类程序在运行的时候, 语句将会变得非常危险,因为它可能会导致下面的结果:1、使得程序崩溃。2、任意一块内存读取数据。3、修改任意一块内存里的数据。最后一种结果是非常危险的,因为它允许用户修改 set-UID root 程序内部变量的值,从而改变这些程序的行为。本次实验将会提供一个具有格式化漏洞的程序,我们的任务是制定一个计划来探索这些漏洞。除了攻击这些漏洞,我们将会探索如何制定一种策略来防御这种攻击,并且评估这种策略是否起作用,并解释其中的原因。
4. 实验内容及步骤
1、下面的程序要求用户提供输入数据,这些数据将会被保存在 缓冲区 中,程序将会使用 打出缓冲区 中的数据,这个程序是一个 set-UID 程序,它以 root 权限运行。不幸地是,这个程序在 打出 数据的过程中存在一个格式化漏洞。
2、我们将会探索这些漏洞,并检验一下可以造成多大的危害。程序有两个秘密的值存在内存中,我们对这些秘密的值感兴趣。但是这些秘密值对我们来说是未知的,不可能通过读二进制代码来获取它们(实验中为了简单起见,硬编码这些秘密值为 0x44 和 0x55)。
3、尽管我们不知道这些秘密的值,但是我们获取存放这些秘密值的内存地址倒不是特别困难,因为对大多数系统而言,每次运行程序,这些内存地址基本上是相同的。实验假设我们已经知道了这些内存地址,为了达到这个目的,程序特意为我们打出了这些地址。
4、这些二进制代码对我们来说,只有只读和运行权限,我们没有办法修改它。也就是说在不能修改二进制代码的前提下,达到上述目标。幸运的是,我们可以有一份源码的拷贝,利用它,我们可以制定我们的攻击策略。
5、程序代码:
6、找到桌面\实验工具\Debug\.exe双击,在实验环境下运行上述程序进行攻击,首先输入1,回车,然后输入10个%S.,回车
5. 实验结果与分析
利用格式化字符函数引发非法指针访问内存,引起程序崩溃。
我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!
~
网络安全学习,我们一起交流
~