




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Metasploit利用GHOST漏洞获得远程Exim邮件服务器SHELL v 分析阶段1. GHOST漏洞分析及其条件限制2. 如何利用受GHOST漏洞影响的Exim服务的原理v 实际操作阶段1. 渗透环境搭建:KaliLinux与Metasploit2. 使用Nmap对目标进行端口扫描及服务查点3. 快速检查被渗透目标是否存在ghost漏洞4. 使用Metasploit加载GHOST漏洞攻击模块进行远程入侵,获得远程主机shell=分析开始= GHOST漏洞分析及其条件限制GHOST漏洞是2015年1月27号公布的Linux底层漏洞,国际编号为CVE-2015-0235,存在于GNU C库(glibc)中,受影响的Linux发现版本有:Debian 7 (wheezy),Red Hat Enterprise,Linux 6 & 7,CentOS 6 & 7,Ubuntu 12.04等。存在漏洞的函数_nss_hostname_digits_dots()由glibc的非重入版本的文件:nss/getXXbyYY.c,以及重入版本:nss/getXXbyYY_r.c提供。然而,这个函数的调用是由#ifdef HANDLE_DIGITS_DOTS来定义的,这个宏定义只在这几个文件有:- inet/gethstbynm.c- inet/gethstbynm2.c- inet/gethstbynm_r.c- inet/gethstbynm2_r.c- nscd/gethstbynm3_r.c以上这些文件实现gethostbyname*()函数族,因此也只有它们会调用_nss_hostname_digits_dots(),并且可能触发它的缓冲区溢出。该函数的作用是:“如果主机名是IPv4/IPv6地址,就跳过费时的DNS查找”。glibc-2.17的代码如下: 35 int 36 _nss_hostname_digits_dots (const char *name, struct hostent *resbuf, 37 char *buffer, size_t *buffer_size, 38 size_t buflen, struct hostent *result, 39 enum nss_status *status, int af, int *h_errnop) 40 . 57 if (isdigit (name0) | isxdigit (name0) | name0 = :) 58 59 const char *cp; 60 char *hostname; 61 typedef unsigned char host_addr_t16; 62 host_addr_t *host_addr; 63 typedef char *host_addr_list_t2; 64 host_addr_list_t *h_addr_ptrs; 65 char *h_alias_ptr; 66 size_t size_needed; . 85 size_needed = (sizeof (*host_addr) 86 + sizeof (*h_addr_ptrs) + strlen (name) + 1); 87 88 if (buffer_size = NULL) 89 90 if (buflen size_needed) 91 . 95 goto done; 96 97 98 else if (buffer_size != NULL & *buffer_size 0;148 149 if (! ok)150 .154 goto done;155 156157 resbuf-h_name = strcpy (hostname, name);.194 goto done;195 196197 if (!isdigit (*cp) & *cp != .)198 break;199 200 .Ln 85-86计算所需的缓冲区大小size_needed来存储三个不同的实体: HOST_ADDR,h_addr_ptrs和name(hostname) 。Ln 88-117 确保缓冲区足够大:Ln 88-97对应于函数重入的情况,Ln 98-117为非重入的情况。Ln 121-125处理存储四个不同实体的指针地址,HOST_ADDR,h_addr_ptrs,h_alias_ptr ,和hostname。 计算size_needed时,漏掉了一个sizeof( * h_alias_ptr ) - 也即一个char指针的大小。因此, strcpy的( )所在的Ln157应该可以让我们写过缓冲区的末尾,至多(取决于函数strlen(name)和对齐) 4个字节 (32位),或8个字节(64位).为了在行157触发溢出,主机名参数必须符合下列要求:- 它的第一个字符必须是数字(Ln 127) 。- 它的最后一个字符不能是点 “.”(Ln 135 ) 。- 它必须只包含数字和点(Ln 197 ) (我们称之为“数字和点”的要求) 。- 它必须足够长以溢出缓冲区。例如,非重入的gethostbyname *()函数最开始就会通过调用malloc (1024)来分配自己的缓冲区 (申请 “1 KB”) 。- 它必须成功地解析为IPv4地址。也即它必须通过INET_ATON()函数的检测! 如何利用受GHOST漏洞影响的Exim服务的原理:在本节中,我们将介绍如何对Exim SMTP邮件服务器实现远程执行代码,绕过NX保护和glibc的malloc强化。首先,我们溢出的gethostbyname的基于堆的缓冲区,以及部分覆盖下一个相邻空闲块的大小字段,使之具有稍微更大的尺寸(我们只覆盖3字节的大小;因为,我们不能在32位溢出超过4个字节,或64位机器上8个字节):| overflow #!cpp structmalloc_chunk INTERNAL_SIZE_Tprev_size;/*Sizeofpreviouschunk(iffree).*/ INTERNAL_SIZE_Tsize;/*Sizeinbytes,includingoverhead.*/ structmalloc_chunk*fd;/*doublelinks-usedonlyiffree.*/ structmalloc_chunk*bk; /*Onlyusedforlargeblocks:pointertonextlargersize.*/ structmalloc_chunk*fd_nextsize;/*doublelinks-usedonlyiffree.*/ structmalloc_chunk*bk_nextsize; ;X标记了内存损坏发生的位置。其结果是,该glibc的malloc管理的空闲块被人工增大,导致内存与另一块Exim 的current_block重叠。而current_block是由Exim的的内部内存分配器管理的。|malloc_chunk|storeblock| -|-|-|-+-|- .|gethostbynamebuffer|p|s|f|b|F|B|freechunk|n|l|current_block|. -|-|-|-+-|- | | artificiallyenlargedfreechunk #!cpp typedefstructstoreblock structstoreblock*next; size_tlength; storeblock;然后,我们部分地分配已经释放的空闲块,然后使用任意数据覆盖Exim的current_block的起始部分(“storeblock”结构)。特别是,我们需要覆盖其“next”字段:|malloc_chunk|storeblock| -|-|-|-+-|- .|gethostbynamebuffer|p|s|f|b|F|B|aaaaaaaaaa|n|l|current_block|. -|-|-|-+-|- |X| |这有效地把gethostbyname的缓冲区溢出变成随便往哪儿写东西的问题,因为我们控制了两个指针:Exim分配器会返回的下一块内存块(被劫持“next”指针)和分配的数据(null终止字符串,我们发送Exim的SMTP命令的参数)。最后,我们用这个随意写的漏洞来覆盖Exim的运行时配置,这个配置是存在堆中的。确切地说,我们覆盖Exim的访问控制列表(ACL),并实现任意代码执行。这要感谢Exim的 $run 字符串扩展机制。|storeblock| -|-|-|-|- .|Eximsrun-timeconfiguration|.|n|l|current_block|. -|-x-|-|x-|- | - hijackednextpointer #!cpp | -|-+-+-+-+-|-|-|- .|Eximsrun-timeconfiguration|.|oldcurrent_block|. -|-+-+-+-+-|-|-|- |XXXXXXXX| | newcurrent_block=渗透过程=1. 渗透环境搭建:KaliLinux与Metasploit关于KaliLinux,它是Kali Linux是基于Debian的Linux发行版,它里面本来就预装了许多渗透测试软件,可以说是信息安全人士的专用操作系统,其中就有我们要使用的Metasploit。而Metasploit则是一款开源的安全漏洞检测与攻击开发平台,在Security Tools TOP10中排名第五。首先,请到KaliLinux的官网 /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中的第四名,虽然已经集成在Metasploit中,但在KaliLinux下也可直接在终端下使用。在终端下输入:nmap -sS -sV -Pn xxx.xxx.xxx.xxx(xxx.xxx.xxx.xxx为目标IP,-sS为使用TCP SYN扫描,避免被IDS等设备记录,-sV扫描服务的版本,-Pn为不发送ICMP echo请求,防止被记录)这三个选项,缺一不可!如下图:(其中30是我这里的目标机器)通过Nmap的端口与服务扫描可得知目标已开放了 SMTP 25号端口,且Exim为4.80;注意:从Nmap的信息需判断是否满足如下所有条件:1. Exim版本:4.774.80 (其中4.80为最常见的稳定版本)2. SMTP 25号端口必须开启,且使用进程为Exim若上面条件全部满足,则进行下一环节。3.快速检查被渗透目标是否存在ghost漏洞注意!:这一环节为可选环节,主要是为了若有很多个目标需要测试是否能利用,那可以用此方法可以提高判断目标能否利用的速度,但是此方法有可能会被对方防火墙记录,所以建议尽量跳过,因为其实最后一环节“使用Metasploit加载GHOST漏洞攻击模块进行远程入侵”本身就具有目标漏洞是否可利用的能力,而且隐蔽性更高,只是速度稍微慢一些。 在终端下输入: python-cprint0*$(0x500-16*1-2*8-1-8) 如下图:然后将输出的那一堆0选中,右键-复制,注意不要复制多余的空白行!然后再在终端下: telnet xxx.xxx.xxx.xxx 25 (xxx.xxx.xxx.xxx为目标IP)连接上目标的SMTP 25端口后,输入: HELO “刚才复制的那一堆0”,如下图:一般第一次都会返回550 HELO argument does not match calling host 这样的找不到该主机的正常的错误提示。继续将HELO 0000000000000. 复制并粘贴再按回车继续向目标放送SMTP的HELO请求,多发几次。目标的Exim服务在多次找不到我们输入的“ 00000000000.” 该主机之后,便会发起将该“0000000000.”地址进行DNS反解的动作,而正是DNS反解这一动作,便会触发存在的GHOST漏洞,造成内存溢出,并发生段错误,当前的SMTP连接会被强行终止,并返回“连接被外界因素终止”的异常信息, 如下图:目标主机出现自身的段错误,这样一来,便可确认目标确实存在GHOST漏洞,或者说GHOST漏洞的补丁未打上。而同时,也证明了目标的Exim服务器开启了helo_try_verify_hosts或helo_verify_hosts选项,因为我们的漏洞的利用,就是基于Exim服务器的HELO的认证功能!如下图:4.使用Metasploit加载GHOST漏洞攻击模块进行远程入侵通过终端输入:msfconsole (进入Metasploit)进入msf后,输入: search exim (搜索与exim有关的模块,如下图:) 其中 /linux/smtp/exim_gethostbyname_bof 模块为我们所需继续输入: use /linux/smtp/exim_gethostbyname_bof (使用这个模块,如图:)继续输入: show options (查看exim_gethostbyname_bof模块的选项)由上图可见,只要是Current Setting为空且Required为yes的选项,都需要我们去配置!输入: set RHOST xxx.xxx.xxx.xxx(xx.xx.xxx.xxx为目标主机) 输入:set SENDER_HOST_ADDRESS xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx为你自己)注意!:由于模块与漏洞的条件限制,这里的SENDER_HOST_ADDRESS即你自己IP,需要是一个具有反解DNS的IP,也即必须是对方目标能够通过DNS反解查得到的IP,由于我这是在内网中测试,解决办法是,直接在目标机器上修改 /etc/hosts来填入我的攻击机的DNS信息,如下图:修改完后通过PING命令可验证域名与IP的配对是否生效如果是在真实的公网中要进行攻击的话,简单来说就是攻
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 球蛋白结构与功能解析-洞察及研究
- 中班健康城市小卫士课件
- 2025年度海洋工程安装与维修服务合同
- 2025版白灰产品绿色包装设计与环保材料供应合同
- 2025安装施工安全协议书-风力发电项目专用
- 中班下学期家长助教课件
- 初中生地会考试题及答案
- 中期考试后家长会课件
- 非医务人员健康科普指南
- 保健员操作考试题及答案
- 中小学家长会期中期末家长会253
- 驱动电机与电机控制器
- 2024年便携式储能行业分析报告
- 医联体协议书(2024版)
- 2023年全国职业院校技能大赛-中药传统技能赛项规程
- 11 《爱莲说》对比阅读-2024-2025中考语文文言文阅读专项训练(含答案)
- 动物园野生动物驯养繁殖或驯养观赏可行性研究报告
- 煤矿开掘技术操作规程
- 2023年上海市长宁区高三年级下册二模英语试卷含详解
- 肺功能进修总结汇报
- GB/T 3428-2024架空导线用镀锌钢线
评论
0/150
提交评论