当前位置:首页 > 基于Metasploit利用GHOST漏洞最终版
首先,我们溢出的gethostbyname的基于堆的缓冲区,以及部分覆盖下一个相邻空闲块的大小字段,使之具有稍微更大的尺寸(我们只覆盖3字节的大小;因为,我们不能在32位溢出超过4个字节,或64位机器上8个字节):
|< malloc_chunk |
-----|----------------------|---+--------------------|----- ... | gethostbyname buffer |p|s|f|b|F|B| free chunk | ... -----|----------------------|---+--------------------|----- | X| |------------------------->| overflow
#!cpp
struct malloc_chunk {
INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */ INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */
struct malloc_chunk* fd; /* double links -- used only if free. */ struct malloc_chunk* bk;
/* Only used for large blocks: pointer to next larger size. */
struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */ struct malloc_chunk* bk_nextsize; };
X标记了内存损坏发生的位置。
其结果是,该glibc的malloc管理的空闲块被人工增大,导致内存与另一块Exim 的current_block重叠。而current_block是由Exim的的内部内存分配器管理的。
|< malloc_chunk |< storeblock | |
-----|----------------------|------------------------|---------------+---|-----
... | gethostbyname buffer |p|s|f|b|F|B| free chunk |n|l| current_block | ... -----|----------------------|------------------------|---------------+---|----- | |
|<-------------------------------------->| artificially enlarged free chunk
#!cpp
typedef struct storeblock { struct storeblock *next; size_t length; } storeblock;
然后,我们部分地分配已经释放的空闲块,然后使用任意数据覆盖Exim的current_block的起始部分(“storeblock”结构)。特别是,我们需要覆盖其“next”字段:
|< malloc_chunk |< storeblock | |
-----|----------------------|------------------------|--------+----------|-----
... | gethostbyname buffer |p|s|f|b|F|B| aaaaaaaaaa |n|l| current_block | ... -----|----------------------|------------------------|--------+----------|----- | X |
|<------------------------------->|
这有效地把gethostbyname的缓冲区溢出变成随便往哪儿写东西的问题,因为我们控制了两个指针:Exim分配器会返回的下一块内存块(被劫持“next”指针)和分配的数据(null终止字符串,我们发送Exim的SMTP命令的参数)。
最后,我们用这个随意写的漏洞来覆盖Exim的运行时配置,这个配置是存在堆中的。确切地说,我们覆盖Exim的访问控制列表(ACL),并实现任意代码执行。这要感谢Exim的 \字符串扩展机制。
|< storeblock |
-----|-------------------------------|---------------|-------------------|----- ... | Exim's run-time configuration | ... .. .. ... |n|l| current_block | ... -----|----x--------------------------|---------------|x------------------|----- | |
'<------------------------------------------' hijacked next pointer
#!cpp
|< ACLs >|
-----|----+-----+--------+------+----|---------------|-------------------|----- ... | Exim's run-time configuration | ... .. .. ... | old current_block | ... -----|----+-----+--------+------+----|---------------|-------------------|----- | XXXXXXXX | |<------------------->| new current_block
==============
渗透过程 ==============
1. 渗透环境搭建:KaliLinux与Metasploit
关于KaliLinux,它是Kali Linux是基于Debian的Linux发行版,它里面本来就预装了许多渗透测试软件,可以说是信息安全人士的专用操作系统,其中就有我们要使用的Metasploit。而Metasploit则是一款开源的安全漏洞检测与攻击开发平台,在Security Tools TOP10中排名第五。
首先,请到KaliLinux的官网 https://www.kali.org/downloads/ 下载最新的KaliLinux的iso(最好64位)并进行安装,实际操作都在KaliLinux下进行。安装好KaliLinux后,启动KaliLinux如下:
注意:由于我们主要使用的工具是Metasploit,而当今Metasploit已经可以说在黑客攻防或者说信息安全领域,是一种公认的标准了,绝大部分的漏洞触发工具或者漏洞的利用程序,都是以Metasploit为标准来将漏洞触发工具或者程序开发成一个Metasploit的渗透攻击模块来使用了。
所以在打开KaliLinux之后第一步要做的事情就是对Metasploit进行更新! 更新:直接打开终端,输入命令:msfupdate 即可!
更新过后,先通过终端输入:msfconsole 进入Metasploit,如下图:
打开后要注意的是,看上图红色圈的部分,开是否更新到15年4月2号后者之后 因为GHOST漏洞的利用模块已经在3月末被更新到Metasploit的模块库中了! 更新好后便可进行下一步。
2. 使用Nmap对目标进行端口扫描及服务查点
这里的目标是指一台带有GHOST漏洞而且启动了Exim邮件服务的Linux电脑。 Nmap是目前最流行的端口扫描与服务查点工具,作为Security Tools TOP10中的第
共分享92篇相关文档