Metasploit => tips, tricks, hashes and tokens

metasploit在渗透测试中经常被用到,实际上这套软件包括了很多工具,这些工具组成了一个完整的攻击框架.

metasploit或许在渗透测试中的每一方面都不能称为最好用的工具,但是这个工具有它自己的方便之处.
这篇文章中,我会演示在一次渗透测试中我们会经历哪些步骤,并且我会故意的只使用metasploit来完成这些工作,以此来显示metasploit的威力所在.
渗透测试中不能仅仅依赖工具,工具经常会出错.
最好亲自试下工具得到的结果,并且尽可能多用几个工具测一下,看下结果是不是相同的.自己手动确认漏洞当然是最好的了,比如说,如果一个工具测出来说可能存在匿名FTP登录,那我们就该试着去登录FTP服务器,看下工具的检测结果是不是正确的.
我习惯使用Backtrack 5R2系统,metasploit和postgresql数据在这个系统上都已经默认安装了.
这次用来演示的攻击目标是192.168.3.0/24这个网段.
好吧,现在开始实际操作.
打开msfconsole,并且检查数据库是否连上木有.

6a0133f264aa62970b016306af9984970d-800wi
先来介绍一下工作空间的概念.在metasploit中工作空间被当作存放信息的逻辑单元.你可以为不同的渗透任务创建不同的工作空间.在不同的工作空间中很容易共享数据.

6a0133f264aa62970b016306af9d51970d-800wi
工作空间中有很多的放数据的表,如hosts,service,vulns,loot和notes.可以手动添加数据到表中,比如可以添加一个主机到hosts表中.

6a0133f264aa62970b016767a305e2970b-800wi
并且一个服务可以手动添加到services表中:

6a0133f264aa62970b0176159880b9970c-800wi
想到自动得到这些表的话,可以用db_nmap.不过你也可以用你喜欢的扫描工具,只要你把扫描结果导出成xml格式的文件,然后就可以把xml格式的文件导入到metasploit的数据库中.导入可以用msfconsole的内置db_import命令;看下面这张图,可以看出很多的工具都被支持:

6a0133f264aa62970b017615988419970c-800wi
我们先来用nmap扫一下:

6a0133f264aa62970b016767a30c59970b-800wi
看一下hosts表,可以看到表中有很多数据了:

6a0133f264aa62970b017615988671970c-800wi
看一下services表,我们可以只显示我们想看到的几列数据:

6a0133f264aa62970b016306afa7ac970d-800wi
因为看到有这么多的windows主机,我们可以使用辅助模块,一个smb版本扫描器:

6a0133f264aa62970b016767a3132f970b-800wi
所以我们需要用set命令指定一个特定的hosts,但是那样的话我们就得一个一个的指定hosts,那不得烦死?所以这里metasploit就有一个很方便的地方,我们可以从services表中得到所有开了445端口的主机,生成一个文件,然后把这个文件当作hosts参数:

6a0133f264aa62970b0176159894ea970c-800wi
smb扫描器扫完以后,我们来看一下services表:

6a0133f264aa62970b017615989974970c-800wi
可以看到很多windows 2003的主机,只有一个主机安装了SP1.我们还可以看到主机的名字和域名是”TEST”.我们可以猜一下TEST-EMEA-DC-01是台域控主机,并且TEST-EMEA-DB-01可能是台数据库服务器.
OK,来看看这台可能的数据库服务器.

6a0133f264aa62970b016767a31b04970b-800wi
可以猜下如果是台数据库服务器,数据库应该是mssql,因为是台windows主机嘛.不过mssql默认的服务端口1433却貌似没打开.那我就要来测试一下到底有没有mssql了:

6a0133f264aa62970b016306afb717970d-800wi
貌似我们扫出来了:

6a0133f264aa62970b016767a31df3970b-800wi
这里,扫描器发现了一个mssql服务,监听在1043端口.mssql服务版本9.00.4035.00,据此可知运行的是Microsoft SQL 2005 SP3.
我们查看一下services表,看下有什么改变:

6a0133f264aa62970b016306afbb0f970d-800wi
services表除了增加1043端口的mssql服务,还增加了一个1433的端口,就是这个端口泄漏了mssql服务的真实端口.
现在,我们既然已经知道主机上有个数据库服务正在运行,而且知道是监听在哪个端口,我们可以再用metasploit暴力破解一下.

6a0133f264aa62970b01761598a54c970c-800wi
设置好RPORT参数,并且设置密码和用户名相同:

6a0133f264aa62970b01761598a7bc970c-800wi
运行完后,成功找到密码:

6a0133f264aa62970b016767a32a06970b-800wi
OK,现在我们知道了密码.那么这个可是我们的第一个凭证.我们不妨来看看creds表:

6a0133f264aa62970b016767a32c2d970b-800wi
exploit:

6a0133f264aa62970b016306afc80a970d-800wi
我们已经知道用户名,密码和端口号了:

6a0133f264aa62970b016306afc8c9970d-800wi
获得一个meterpreter shell:

6a0133f264aa62970b01761598b1fd970c-800wi
将这次会话放到后台.我们看下会话,可以看到有一个会话:

6a0133f264aa62970b01761598b2f1970c-800wi
现在来看看怎么用post exploit模块来进一步渗透.
我们用smart_hashdump来查看hashes.设置好SESSION和GETSYSTEM参数:

6a0133f264aa62970b01761598b41f970c-800wi
然后运行:

6a0133f264aa62970b01761598b56c970c-800wi
OK,现在loot表中有一些数据了.
smart_hashdump获得了SYSTEM权限后,可以得到两个hashes.看起来administrator帐号和RID为500的localadmin一样.所以Administrator是一个假的帐号.
现在来看下loot表:

6a0133f264aa62970b01761598b725970c-800wi
看下creds表,发现已经有三条记录了:

6a0133f264aa62970b01761598ba68970c-800wi
我们来看下localadmin帐号的密码在其他系统是否可以登录:

6a0133f264aa62970b016306afd2ec970d-800wi
首先,我们添加从service表中添加hosts:

6a0133f264aa62970b016306afd474970d-800wi
因此,我们不是在破解hash,而是简单地传递hash.我们把USER_AS_PASS和BLANK_PASSWORDS设置成false:

6a0133f264aa62970b016306afd669970d-800wi
我们可以看到登录成功了很多:

6a0133f264aa62970b01761598bf8f970c-800wi
更多的凭证在creds表中了:

6a0133f264aa62970b016306afd809970d-800wi
现在我们有了windows系统的本地用户密码.我们可以用psexec exploit,但是那样的话,我们得一个接一个地做.在这个psexec exploit中,只有RHOST参数,没有RHOSTS参数,所以也不能用services表生成一个hosts文件.所以我们需要另一种自动化的方法-resource脚本.
感谢互联网上的各种资源,我收集到了这段脚本.修改这段脚本,很轻松地可以添加更多地模块:

6a0133f264aa62970b016767a341e1970b-800wi
现在我们需要执行psexec.不过我们不能直接地执行这段脚本,因为默认的PAYLOAD是windows/meterpreter/reverse_tcp,问题是反弹型的shell不能都连到同一个端口吧,所以这里我们要把PAYLOAD改成 windows/meterpreter/bind_tcp:

6a0133f264aa62970b01761598c558970c-800wi
然后运行resource脚本:

6a0133f264aa62970b01761598c73a970c-800wi
现在我们就有9个会话了:

6a0133f264aa62970b016306afdeb0970d-800wi
现在我们需要得到更多的hashes,虽然可以手工地进入每一个会话,然后得到hashes.但是我们需要自动化啊.我们可以用一个credential collector模块.这个模块会收集hashes,并且很重要的是它会清理好痕迹和找到domain tokens.不过这个模块还是需要自己动手对每一个session操作以此,除非我们再写一个resource脚本.

6a0133f264aa62970b016306afe149970d-800wi
开始收集hashes和tockens:

6a0133f264aa62970b01761598cb61970c-800wi
会话5和会话6貌似有一些不一样的domain tokens:

6a0133f264aa62970b01761598ccbb970c-800wi
我们可以使用这些token,这样我们对整个域就有管理员权限了:

6a0133f264aa62970b016767a34ab0970b-800wi
好了,我已经演示完了metasploit中的一些组件的用法.
Happy Metasploiting…

与metasploit相关的文章推荐:

具体命令与参数:《Meterpreter初探

攻防实战:《Metasploitable 2 漏洞演练系统使用指南(上)

【via@spiderlabs