Metasploit渗透测试实验报告

meta0

一、实验目的
1、模拟灰盒测试对模拟“定V”公司进行渗透测试攻击,最终目的是控制所有服务器及内网客户机,并进行后渗透测试攻击
2、掌握科学的完整的渗透测试方法,本次实验采用PTES标准渗透测试方法,共7个阶段:
(1)前期交互阶段(跳过)
(2)情报搜集阶段
(3)威胁建模阶段
(4)漏洞分析阶段
(5)渗透攻击阶段
(6)后渗透攻击阶段
(7)报告阶段
3、熟练掌握metasploit框架并能灵活运用
4、掌握漏洞挖掘以及漏洞分析的方法,并训练写exp代码及POC的能力
5、通过本次实验了解以后学习的主要方向,了解信息安全专业技能必备的一些知识,比如汇编,操作系统原理等等,并锻炼自学能力。

二、实验环境
(一)目标网络环境拓扑结构
网络拓扑
分析:Back Track5 初始攻击点、OWASP web门户网站服务器、
Win2K3 Metasploit 后台服务器、Linux Metasploit 网关服务器、
WinXP Metasploit 内网客户端主机 、无线访问点

(二)实验环境搭建
1、配置网络环境
需要设置DHCP,对内网ip地址段设为192.168.10.0,将子网ip地址段设置为10.10.10.0
2、配置BT5攻击机环境
下载并安装更新,查看IP地址并试ping通网络,确认无错误后修改hosts文件,以便能以域名方式访问公司的服务器。

遇到问题:bt5的ip地址并不是按DHCP分配到的10.10.10.128,
meta1
解决方法:首先是检查了网络环境的配置,以及bt5虚拟机的网络配置,确认无误后,尝试修改interfaces文件,并重启网卡。修改成功。
meta2meta3meta4

3、配置靶机与分析机环境
按步骤搭建OWASP 靶机、Win2k3 靶机、Linux靶机、Winxp靶机,并检查是否能互相ping通网络,ip地址是否正确,以及能否访问www.dvssc.com,如下图是正常访问成功。
meta5

(三)分析环境搭建
1.下载并安装IDA Pro 分析工具
2.下载并安装OllyDbg动态调试器
3.下载并安装Wireshark软件
三、实验过程
(一)信息搜集阶段
1、目标
尽可能多的搜集“定V”公司的信息以及服务器信息,摸清基本情况,并分析可能存在的漏洞,为下一阶段做准备。
2、搜集过程
a)whois域名注册信息查询
meta6
b)Nslookup与dig域名查询
Nslookup set type=A
Dig @ <待查询的域名>

c)IP2Location 地理位置查询
使用GeoIP查询,或者登陆相关网站进行查询
http://www.cz88.net/
http://www.maxmind.com
d)Google Hacking
使用特定的谷歌搜索语法,可以检索出大量有用的信息
More
e)Traceroute路由追踪
命令:traceroute IP

3、主机探测及端口扫描
a)ping 命令可以获得ip地址以及判断该主机是否活跃
meta7
b)使用msf框架的端口扫描器,例如:arp_sweep udp_sweep
这里使用udp_sweep进行试验,探测到存活两台主机
meta8
c)使用Nmap
这里使用nmap扫描了10.10.10.129主机开放的端口以及主机操作系统的细节,详细如图:
meta9

4、 服务扫描与查点
输入:search name:_version 可查看所有可用的服务查点模块。
可进一步查询到相应的服务版本信息等内容。
常见的有Telnet服务扫描、ssh服务扫描、oracle服务扫描等等
可以通过开放代理进行扫描以隐藏自己的真实ip,但此方法存在不安全性,所以可以自行架设VPN进行扫描。
命令:use auxiliary/scanner/telnet/telnet_version
use auxiliary/scanner/ssh/ssh_version
use auxiliary/scanner/oracle/tnslsnr_version
5、网络漏洞扫描
(1)openvas(黑盒测试)
遇到的问题:
a)启动openvas scanner时候出现错误:address already in use
解决方法:重新启动BT5虚拟机
b)openvas按本书配置后进行扫描,却扫描不出漏洞
meta10
解决方法:目前还没有解决办法,搜索的解决方法都不可行,有人解释说是bt5的msf中的openvas有bug,然后我尝试用kali机进行扫描,kali的相关命令以及配置,设置均与bt5不同,并成功使用。
(2)Nmap特定漏洞扫描
命令:nmap -P0 –scripr = smb-check-vulns IP
扫描结果如图:
meta11
(3)扫描结果汇总
meta26-1
meta26-2
meta26-3
(二)威胁建模阶段
a)备注:由于威胁建模涉及的东西比较多,所以在这里不做不深入研究,将建模简化为攻击计划,其中运用了威胁建模的一个模型:威胁树

b)攻击计划:通过门户网站www.dvssc.com进行web安全渗透,寻求突破口,拿下网站服务器OWASP Web的shell,紧接着通过信息搜集阶段搜集到的漏洞信息,进行POC编写验证并修改相应的exp代码,利用溢出漏洞拿下后台服务器Win2k3及网关服务器Linux的控制权,最后利用社会工程学或者相应的客户端漏洞,对内网客户机进行渗透,并最终取得控制权。取得控制权后安装后门进行后渗透测试攻击。
c)威胁树:
meta12
(三)漏洞分析阶段
由于只是模拟实验,所以并不需要重新再搭建实验环境进行验证,所以此次攻击是直接进行,并将分析嵌套在攻击实施的过程中,这里仅作相应漏洞的信息搜集及归纳,详细如图:
meta13-1
meta13-2
meta13-3

(四)渗透攻击阶段
(1)web渗透测试
1.目标:OWASP Web网站服务器
2.过程:
a)使用W3AF扫描器漏洞探测(xss跨站脚本)
详细配置及部分扫描结果如图:
meta14-1
meta14-2

遇到的问题:DVWA训练平台的xss以及SQL注入演示都无法得到想要的结果
解决方法:可能原因是要将owasp的安全难度降为低,由于课本说要将其难度调为低,误解了以为要将linux系统难度调为低,其实不是,只是把这个dvwa系统的难度调为低。具体为:DVWA security 将level 设置为low。
b)文件上传漏洞
利用模块对该服务器的后台插件1 flash gallery 的漏洞进行文件上传漏洞攻击,并取得shell
遇到的问题:该模块执行后显示错误如图,并没有返回一个会话
meta15
解决方法:阅读了错误,尝试将method 提交方法改为 GET,尝试无效,详细阅读了exp渗透代码,有两行注释是:
# Arbitrary big number. The payload gets sent as an HTTP
# POST request, so it’s possible this might be smaller (maybe?)
并根据提示的错误,确定了原因是:payload太大,无法利用post上传。
利用搜索引擎阅读了资料,找到了两种解决方法:一种是将payload zip上传后再unzip,另一种是将payload进行改写编码压缩,并修改rb源代码
参考资料:
http://spareclockcycles.org/2011/09/06/flash-gallery-arbitrary-file-upload/
3.小结
a)通过此次web渗透,成功拿到了网站服务器的web控制权,计划第一步成功实施。
b)这里仅是演示了xss跨站脚本以及文件上传漏洞的web安全渗透,由于本次试验主要是内网渗透,这里就不对web过多展开,但由于这部分内容的学习,我了解了基本的web安全知识,并为接下来的学习打下了良好的基础。

(2)网络服务渗透测试
1.目标:Win2K3后台服务器
2.过程:
a)MS08-067漏洞渗透攻击
原理:利用NetpwPathCannonicalize函数在对路径进行规范化时发生的栈缓冲区内存错误进行渗透测试攻击
1.攻击配置:
为了方便下一阶段的测试,这里直接是使用了meterperter 攻击载荷reverse_tcp
meta16-1
meta16-2

2.渗透结果:
返回了一个session,从而可以进行后渗透测试攻击,且取得了控制权。
meta16-3
3.漏洞分析:
a)栈溢出漏洞POC验证代码如图(验证代码植入):
meta17
b)栈溢出漏洞原理解析:在进行函数调用时,程序会将返回地址压入栈中,而执行完函数代码之后,则会通过ret指令从栈中弹出返回地址,装载到EIP指令寄存器中,由于此种冯诺依曼体系本质上的缺陷。导致当写入数据覆盖返回地址时,就会造成栈溢出,从而可以跳转到任意地址执行任意代码。
c)验证演示:本次POC里verify_password 中的缓冲区为44个字节,我们通过对password.txt文件的构造,写入44个字节的数据,那么第45个字节的“/0”字符将覆盖authenticated(判断标志)低字节的1,从而突破密码限制。演示如下:
(1)随意向password.txt输入任意数据:
meta18-1
(2)正常返回结果:
meta18-2
(3)特意向password.txt构造溢出数据:
meta18-3
(4)异常返回结果:
meta18-4

d)Ollydbg动态逆向分析调试
用odg加载poc代码的PE文件,并比较分析相应栈堆前后变化情况,如图(左边是覆盖前,右边是覆盖后):
meta19-1meta19-2
问题:这里的0012FB1C的值是00000001,并非是想要的00000000。原因有可能是0012FB1C并不是authenticated的地址。
解决:通过IDA分析,找到比较函数的汇编语句(jz short loc_401133)对应地址(0040111E),然后在odg相应地址设置断点,由状态栏找到比较的地址。
meta19-3
meta19-4

可见正确的判断地址为:0012FF7Cmeta19-5
显然是正确的00000000
4.小结
此处使用ODG 、IDA两种工具进行漏洞分析,详细地解释了MS08-067主要的模拟栈溢出原理,当然ms08-067的主要漏洞函数是NetpwPathCannonicalize(),分析原理大致相同。
通过使用MS08-067漏洞的渗透攻击成功完成了攻击计划的第二步,拿下了win2k3后台服务器的控制权。
参考资料:《0day安全:软件漏洞分析技术》

(3)Linux系统服务渗透测试
1.目标:Linux 网关服务器
2.原理:Samba网络服务程序在处理链式响应数据包时,无法使用一个有效的偏移来构造数据包的下一部分,攻击者通过构造这个偏移值来造成程序的内存错误,然后通过覆盖一个函数指针达到劫持控制流执行shellcode的目的。
3.过程:
a)尝试攻击
meta20
问题:显然没有返回想要的结果,没有任何回应
尝试解决:原因可能是入口函数地址出现错误。阅读exp代码,并在BT5上使用GDB进行调试
由于对linux操作系统不熟悉,通过大量的尝试以及试验,可最后我并没有找到相应的入口地址。也有可能是该虚拟机不存在该漏洞。
这里尝试使用Samba服务的另一个漏洞usermap_script进行渗透攻击,成功返回session。
meta20-1
4.小结
a)成功取得了linux 网关服务器的shell控制权
b)由于对gdb的操作不懂,以及linux操作系统学习不够,操作linux漏洞分析时难度极大,希望接下来能进一步深入学习相关的知识,当然这里我也是尝试了调试并试图寻找入口地址,但由于实际的环境跟书本上的描述根本不一样,导致最终无法成功实施。
参考资料:
http://cs.baylor.edu/~donahoo/tools/gdb/tutorial.html
http://www.cs.swarthmore.edu/~newhall/unixhelp/howto_gdb.html
(4)客户端渗透攻击以及社会工程学
1.目标:内网客户机
2.利用原理:由于IE7客户端在对象释放时,被释放的对象在内存中的数据被后来其他对象的函数非法使用而导致产生漏洞。
结合社会工程学,引诱内网客户机打开木马文件
3.过程:
a)配置并尝试攻击
meta21-1
遇到的问题:由于xp客户机的ie客户端并不是版本7,所以并没有成功实施
解决:升级浏览器至ie7
问题:攻击成功但是升级ie7后攻击仍然不能正常返回一个会话
meta21-2
原因:可能的原因应该是漏洞溢出的主要函数入口地址错误,通过漏洞分析寻求正确的入口地址,并修改相应的源代码。
(五)后渗透测试阶段
1.利用前面的漏洞,设置payload为meterpreter/reverse_tcp将返回一个meterpreter的后门会话。
(命令:sessions -l 列出存活的会话)
(命令:sessions -i ID号 进入该会话)

2.基本命令汇总
a)background 将Meterperter终端隐藏在后台
b)shell 获取系统控制台的shell(ctrl+alt+z返回)
c)screenshot 截取系统当前界面
d)irb 与Ruby终端进行交互,直接调用MSF 封装好的函数
e)quit 推出
部分命令演示截图:
meta22-1
3.文件系统命令汇总
a)cat 查看文件内容(这里好像只能用绝对路径)
b)getwd 获得目标机上当前的工作目录
c)upload 上传文件或文件夹到目标机器
d)download 从目标机下载文件或者文件夹
e)edit 调用vi编辑器,对目标机上的文件进行编辑
f)search 对目标机上的文件进行搜索
部分命令演示截图:
meta22-2
上传成功:
meta22-3
4.网络命令汇总
a)ipconfig 查看接口信息
b)portfwd 进行端口转发
c)route 显示目标机的路由信息
部分命令演示截图:
meta22-4
meta22-5
meta22-6

问题:这里是显示连接失败。可能的原因是目标机没有开放3389端口
解决方法:检查目标机开放的端口,重新设置新端口,测试成功
5.系统命令汇总
a)ps 获得目标主机上正在运行的进程信息
b)Migrate 可以将meterperter会话从一个进程移植到另一个进程的内存空间中(一般都是移植到系统服务进程中)
c)Execute 可以在目标机上执行文件
d)Getpid 获得当前会话所在进程的PID值
e)Kill 杀死指定的PID进程
f)Getuid 获得运行meterpreter会话的用户名,从而查看当前会话具有的权限
g)Sysinfo 用于得到目标系统的一些信息
h)Shutdown 用于关闭目标主机
部分命令演示截图:
meta23

6.利用后渗透攻击模块实现:植入后门,权限提升,信息窃取,内网扩展等
植入后门模块演示:
meta24

7.自己编写的简单Ruby后渗透模块
本来是要获取系统的主要信息,但由于能力有限,这里仅是获取系统时间。希望能进一步学习。
meta25

四、实验总结
通过本次实验,我熟悉了MSF框架的基本操作,学会使用IDA、ODG工具进行简单的漏洞分析,并自学了Ruby和32位汇编的基础知识,了解到需要先行学习的基础课程,比如Linux,操作系统原理等,希望进一步深入学习。
在使用ruby来编写自己的渗透模块时,明显感觉基础不够扎实,接下来要深入学习ruby语言,并阅读相关的exp代码,提升自己编程能力。
本次实验的大部分问题及难题,利用Google等搜索资料,大部分也是解决了,但仍有一部分是没有解决的,希望在深入学习后,能进一步理解及解决未解决的问题。
对于内网渗透掌握了基本的流程。但对于漏洞挖掘以及漏洞分析的能力还需进一步提高,特别是FUZZ测试的内容仍需进一步掌握。
本次实验在web渗透,社会工程学,移动环境渗透方面仅是简单的涉猎,希望有时间精力的话,能进一步深入学习这方面的知识

实验参考资料为:
《Metasploit渗透测试魔鬼训练营》
《0day安全:软件漏洞分析技术》
《Programming Ruby – The Pragmatic Programmer’s Guide》
https://www.exploit-db.com/
http://cve.scap.org.cn/

本文属原创,转载请注明tasfa.cn 如有问题请联系管理员root@tasfa.cn

发表评论

电子邮件地址不会被公开。

You must enable javascript to see captcha here!