Kali Linux渗透测试——缓冲区溢出

笔记内容参考安全牛课堂苑房弘老师的Kali Linux渗透测试教程

所有漏洞的根源均来自于数据的输入,缓冲区溢出的原理在于数据与代码边界模糊,当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑暴”,从而覆盖了相邻内存区域的数据,成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等后果。

为更好理解缓冲区溢出原理,参考笔者转载的文章:
手把手教你栈溢出从入门到放弃(上)
手把手教你栈溢出从入门到放弃(下)

一、发现漏洞的方法

(一)源码审计

软件开发人员,或者利用社工等方式获取源码进行审查、调试。条件苛刻,一般源码难以获取。

(二)逆向工程(Reverse Engineering)

利用逆向工程获取汇编源码进行分析,汇编代码分析工作量大,难度高。

(三)模糊测试(Fuzzing)

是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法,通常情况下会使用一个有效的输入和添加随机误差来完成,需要借助软件调试工具(如:ImmunityDebugger)。

二、模糊测试过程

首先要了解一些针对缓冲区溢出的安全保护技术,因为在模糊测试过程中要绕开这些保护机制。

  • DEP (Data Execution Prevention): 阻止数据页(默认的堆,栈以及内存池页)执行代码。在Linux中该机制为NX(No-eXecute)
  • ASLR (Address Space Layout Randomization): 堆、栈、共享库映射等线性区布局的随机化,增加攻击者预测目的地址的难度
  • 堆栈cookies:启用堆栈cookies机制后,函数执行时会先往栈里插入cookies,该cookies往往放置在ebp/rbp的上方,当函数返回的时候会验证cookie信息,如果不合法就停止程序运行,使得攻击者在覆盖返回地址的时候将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中将堆栈cookies机制称为canary

(一)Windows

测试软件为’SLMail 5.5.0 Mail Server’,其PASS命令存在缓冲区溢出漏洞。基本思路:(调试工具用ImmunityDebugger)
1.利用python脚本测试 PASS 命令接收到大量数据时是否会溢出,一般到3000个字符仍未出现溢出现象则说明该处应该不存在溢出漏洞。

2.发现溢出漏洞后,判断EIP对应的地址,基本方法有:二分法、唯一字符串法。唯一字符串法可以利用metasploit脚本usr/share/metasploit-framework/tools/pattern_create.rb 3000生成。

3.将EIP修改为Shellcode对应的内存地址,将Shellcode写入到该地址空间,程序读取EIP寄存器数值,将跳转到 shellcode 代码段并执行。

4.通过调试工具发现,发送的数据填充EIP后,紧接着会填充ESP指向的空间,因此我们将Shellcode放到ESP的位置。

5.判断ESP地址到栈底的距离,即可以存放Shellcode的大小。利用python脚本向软件发送数据测试,通过调试软件看有多少数据存放在ESP指向的空间。现代计算机系统进程的内存空间视图如图所示:

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值