Samba渗透攻击---Metasploit渗透测试魔鬼训练营

遇到的问题:
进入gdb调试器中后find命令不能用
是使用的BT5的过吗?
望会的同学帮忙解答

一、Samba安全漏洞描述与攻击模块解析

现在的目标是定V公司DMZ区的网关服务器,期望通过渗透攻击,远程获取服务器的控制权。现准备尝试选取著名的Samba chain_reply安全漏洞,对目标系统进行攻击。
Samba服务存在的这个安全漏洞编号为CVE-2010-2063,Samba 3.3.13版本以及之前的服务程序均受影响。
相应的Metasploit渗透攻击模块:“exploit/linux/samba/chain_reply.rb”。

通过阅读chain_reply.rb源代码中对该安全漏洞描述可知,该安全漏洞存在于Samba网络服务程序在处理链式响应数据包时,无法使用一个有效偏移来构造数据包的下一部分。攻击者通过构造这个偏移值来造成程序的内部错误。然后通过覆盖一个函数指针达到劫持控制流执行Shellcode的目的。
在这里插入图片描述

实验环境
攻击机:BT5
靶机:Linux Metasploitable 靶机镜像(模拟定V安全公司网络中的网关服务器,其系统版本为Ubuntu 8.04)
在这里插入图片描述

二、Samba渗透攻击过程

1、尝试利用模块中现有的目标选项进行攻击
步骤1: 在这里插入图片描述:在metasploit中查找攻击Samba的模块:
在这里插入图片描述
确定chain_reply模块路径后,我们使用该模块进行渗透测试:
在这里插入图片描述

步骤2:进行参数的配置
在确定攻击模块后,我们查看与该模块对应兼容的攻击载荷(攻击载荷是渗透攻击成功后促使目标系统运行的一段植入代码,通常作用是为渗透攻击者打开在目标系统上的控制会话连接)
在这里插入图片描述
进行参数配置:
在这里插入图片描述
查看参数配置情况:
在这里插入图片描述

2、搭建与目标系统一致的模拟环境进行调试
步骤1: 利用Linux系统下的GDB调试器来分析该安全漏洞利用过程。
为了简化实验,关闭Ubuntu上的地址随机机制,命令为:
echo 0>/proc/sys/kernel/randomize_va_space
在这里插入图片描述

步骤2: 查找Samba服务进程号,随后将GDB附加到Samba服务进程中,并设置为跟踪子进程。这是由于Linux下的服务程序一般采用主进程监听连接,接收到请求后创建子进程来应答的工作模式,Samba服务也是如此。加载调试器的命令如下所示:
在这里插入图片描述

输入“sudo gdb --pid 5196”
在这里插入图片描述
说明:Follow-fork-mode的用法为:
set follow-fork-mode [parent | child]
Parent:fork之后继续调试父进程,子进程不受影响
Child:fork之后调试子进程,父进程不受影响
因此如果需要调试子进程,在启动gdb后:(gdb)set follow-fork-mode child

步骤3: 接下来,测试段(BT5)启动Metasploit,开始执行渗透,输入命令 “exploit”开始执行:
在这里插入图片描述
在这里插入图片描述

可以看到在BT5虚拟机中返回地址Ret为0xAABBCCDD(如下图,目标为Debugging Target时,Ret值为0xAABBCCDD),说明漏洞被成功触发,即说明渗透端向测试环境发送的数据将会使得模拟环境中的Samba服务程序执行到该地址。
在这里插入图片描述
步骤4: 分析
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

通过上述对debug目标的验证可知,漏洞触发之后程序将执行到Ret处的地址。溢出数据包中,Ret值将重写tc->destructor中的函数指针①。该Ret值纸箱指令jmp ecx,该ecx值指向缓存区③。因此,漏洞触发之后,程序将执行jmp ecx,跳转到缓存区中。另一个参数Offset2用来计算一个跳转距离 ④,生成相应的回跳指令jmp_back⑤,使得程序跳转回缓存区之后再次执行这段跳转指令,从而回到缓存区中构造的原始输入数据⑥,执行其中的Payload。

至此,你已经了解到该漏洞的利用包括两步:
1)利用Ret地址处的指令跳转回缓存区中的jmp_back;
2)执行jmp_back跳转到原始输入数据处的缓存区。

3、修改模块源代码
步骤1: 首先,找到当前环境下漏洞触发之后jmp_back指令和Payload的位置。
通过distance = target[‘Offset2’] - 0x80可计算得到distance=0x1f6c
提示:获取汇编代码对应的机器码可以通过Metasploit提供的工具,/opt/framework3/msf3/tools/nasm_shell.rb,运行脚本后直接输入汇编代码,即可获得机器码。
在这里插入图片描述
所以jmp -0x1f6c机器码为e98fe0ffff,由于是向回跳转,所以距离是负的。
在源代码中标记Shellcode:
在这里插入图片描述
在这里插入图片描述

步骤2: 在渗透测试端加载修改后的源代码,再次攻击模拟环境,设置Target为Debugging Target。
攻击数据包发送之后,服务进程中断在地址0xaabbccdd处,安全漏洞触发时的内存空间布局如下所示:(输入命令“i proc mapping”)
在这里插入图片描述
先查看进程的内存分布情况
在这里插入图片描述
获取到堆内存的地址空间
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/aaqian1/article/details/88936267