缓冲区溢出攻击(Buffer Overflows实验笔记)

缓冲区溢出是什么?

缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量溢出的数据在合法数据上,理想的情况是程序检查数据长度并不允许输入超过缓冲区长度的字符,但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患,操作系统所使用的缓冲区,又被称为"堆栈"。在各个操作进程之间,指令会被临时储存在"堆栈"当中,"堆栈"也会出现缓冲区溢出。

缓冲区溢出攻击及其原理:

通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。
这也是稍后做题的突破原理,缓冲区漏洞普遍并且易于实现,缓冲区溢出成为远程攻击的主要手段其原因在于缓冲区溢出漏洞给予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的控制权。
大多数的缓冲溢出攻击都是通过改变程序运行的流程到入侵者植入的恶意代码,其主要目的是为了获取超级用户的shell。
原理相当简单:将恶意指令存放在buffer中,这段指令可以得到 进程的控制权,从而达到攻击的目的。

检测:

(目前我的知识域只了解这个,学成归来再补充)
Kali Linux提供的BED工具(Bruteforce Exploit Detector)是一款缓存区漏洞检测工具。
BED通过加载插件,向目标主机发送攻击数据。如果发现目标无法响应,说明目标可能存在溢出区漏洞。经过多次测试验证,就可以判断漏洞出现的位置。然后手工执行验证,代码审核、反编译的方式等方式,就可以找出漏洞具体触发机制,从而加以利用。
先完成实验再说叭:
在这里插入图片描述
第一步可以随便填写,不用任何操作,进入第二步:
在这里插入图片描述
哦豁,这里要拦截了我不想花钱
在这里插入图片描述
看到这些参数,传到intruder。将room_no设为溢出目标:
在这里插入图片描述
如图,先清掉所有参数的$,然后在name_no加上就OK。攻击类型:

在这里插入图片描述
在这里插入图片描述
payload类型选择字符填充,然后开始攻击:
在这里插入图片描述
说明什么?现在我是查询的最大值都还没有溢出,说明我太小气设置值太小了,重新来一遍,将一些测试的值设置大一点;
在这里插入图片描述
再执行,查看length最长的响应如图,说明已经溢出了,copy放包就会恭喜你了:
在这里插入图片描述

那防御方法呢?

缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。如果能有效地消除缓冲区溢出的漏洞,则很大一部分的安全威胁可以得到缓解。
有四种基本的方法保护缓冲区免受缓冲区溢出的攻击和影响。
1.通过操作系统使得缓冲区不可执行,从而阻止攻击者植入攻击代码。
2.强制写正确的代码的方法。
3.利用编译器的边界检查来实现缓冲区的保护。这个方法使得缓冲区溢出不可能出现,从而完全消除了缓冲区溢出的威胁,但是相对而言代价比较大。
4.一种间接的方法,这个方法在程序指针失效前进行完整性检查。虽然这种方法不能使得所有的缓冲区溢出失效,但它能阻止绝大多数的缓冲区溢出攻击。分析这种保护方法的兼容性和性能优势。
这四种方法也只是问的度娘,今后我会自己总结防御方法,补充笔记!

发布了10 篇原创文章 · 获赞 10 · 访问量 2750

猜你喜欢

转载自blog.csdn.net/qq_43571759/article/details/104680872