本次渗透测试靶场环境为《Metasploit渗透测试魔鬼训练营》书中的靶场环境
网络拓扑结构
网络环境配置
vmware虚拟网络编辑器配置
DHCP的结束IP地址应为255,而不是254,因为经过实现发现为254时nmap对网关254的端口扫描会扫不出结果。
网关服务器linux配置
开启数据包路由转发功能
vim /etc/sysctl.conf
配置防火墙实现从内网出去的数据包进行网络地址转换
实现开机自启都配置该命令
kali攻击机配置
OWASP Web服务器配置
kali攻击机浏览器访问www.dvssc.com
成功
后台服务器Win2K3配置
内网客户机winxp配置
连通性测试
内网winxp主机
成功访问网关与服务器区的主机
成功访问网关与服务器区的主机,不能主动访问内网主机
kali攻击机安装GVM
apt update
apt-get update
apt dist-upgrade
apt-get install gvm -y
进行设置 gvm-setup
运行gvm-check-setup检查是否安装完全
启动gvm-start
更新NVT特征库greenbone-feed-sync
注意:第一次安装的时候需要等待很长一段时间让其构建好数据库并部署设施后才能使用
【渗透测试过程】
攻击机为kali处于DMZ区,公司的公开门户网站为www.dvssc.com
【信息搜集】
【对公开网站进行信息收集】
由于是虚拟机环境whois,google信息搜索等都做不了
使用dig和nslookup查看域名解析情况
可以看到该网站得到的IP地址为10.10.10.254我们知道该地址为网关的地址,因此应该不是网站的真实地址
使用traceroute查看拓扑路径
这里可以看到该网站的IP地址为10.10.10.129,该地址才是该网站准确的
使用dir_scanner收集网站目录信息
【对主机端口服务信息搜集】
使用arp_sweep模块发现网段中活跃的主机
除去虚拟网卡可以看到扫描出了三台主机,10.10.10.129,10.10.10.130和10.10.10.254
使用Nmap对发现的主机的操作系统以及其开放的端口服务进行扫描
10.10.10.129
10.10.10.130
10.10.10.254
扫描结果分析
主机 | 操作系统 | 主要开放端口 | 对应服务版本 |
web服务器(10.10.10.129) | Linux 2.6.x (ubuntu 10.04) | FTP(21) | vsftpd 2.2.2 |
SSH(22) | OpenSSH 5.3pl | ||
HTTP(80) | Apache httpd 2.2.14 | ||
netbios-ssn(139) | Samba smbd 3.X | ||
Imap(143) | Courier Imap (released 2008) | ||
netbios-ssn(445) | Samba smbd 3.X | ||
java-object(5001) | Java Object Serializayion | ||
HTTP(8080) | Apache Tomcat/Coyote JSP engine 1.1 | ||
后台服务器(10.10.10.130) | Windows Server 2003 | FTP(21) | Microsoft ftpd |
HTTP(80)(8099) | Microsoft IIS httpd 6.0 | ||
msrpc(135)(1025)(1026)(1030)(1031) | Microsoft Windows RPC | ||
netbios-ssn (139) | Microsoft Windows netbios-ssn | ||
microsoft-ds (445) | Microsoft Windows 2003 or 2008 microsoft-ds | ||
multiling-http(777) | ? | ||
oracle-tns (1521) | Oracle TNS Listener 10.2.0.1.0 (for 32-bit Windows) | ||
HTTP(6002) | SafeNet Sentinel Protection Server 7.3 | ||
afs3-callback(7001) | ? | ||
HTTP(7002) | SafeNet Sentinel Keys License Monitor httpd 1.0 (Java Console) | ||
网关服务器 (10.10.10.254) | Linux 2.6.X (ubuntu 8.04) | FTP(21) | ProFTPD 1.3.1 |
SSH(22) | OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0) | ||
telnet(23) | Linux telnetd | ||
SMTP(25) | Postfix smtpd | ||
domain(53) | ISC BIND 9.4.2 | ||
HTTP(80) | Apache httpd 2.2.8 | ||
netbios-ssn (139)(445) | Samba smbd 3.X | ||
MySQL(3306) | MySQL5.0.51a-3ubuntu5 | ||
PostgreSQL (5432) | PostgreSQL DB 8.3.0 - 8.3.7 | ||
ajp13(8009) | ? | ||
HTTP(8180) | Apache Tomcat/Coyote JSP engine 1.1 |
根据整理出来的信息,对Telnet、SSH、Oracle服务进行针对性扫描。对SSH和FTP服务进行口令嗅探
【对重点服务进行针对性扫描】
对网关服务器(10.10.10.254)的telnet服务进行扫描
得到Telnet Ubuntu 8.04 的用户名为:ametasploitable
对web服务器和网关服务器的SSH服务进行扫描
得到Web服务器为ubuntu 10.04,网关服务器 8.04
对后台服务器(10.10.10.130)的Oracle数据库服务进行扫描
【进行口令嗅探】
暴力破解SSH口令
可以看到破解到了网关服务器的SSH口令,<用户名:密码>,root:ubuntu,user:user,postgres:postgres,msfadmin:msfadmin
使用psnuffle口令嗅探
该模块是通过对网络中的数据包进行监听,监听哪些远程链接协议服务的数据包,如上面列出的FTP、IMAP、POP3、SMB、URL等。该嗅探的成功实施需要有人进行远程连接,这在实际的公司网络中或许很常见,应该是能探查到的,但这里是在虚拟机中进行模拟渗透测试。因此在这里用另一台DMZ主机登陆网关服务器的FTP服务,进行两次连接,第一次输入错误的用户密码,第二次输入成功的
可以看到psnuffle做出了反应,明确得到了用户名密码,也能知道该次连接是否成功。这是因为FTP是以明文方式进行的。如果是像SFTP这种以加密形式传输的就办不到了
【漏洞扫描】
使用GVM进行漏洞扫描
对web服务器10.10.10.129,后台服务器10.10.10.130,网关服务器10.10.10.254扫描
扫描结果
10.10.10.129
10.10.10.130
10.10.10.254
对高危漏洞进行整理
服务器 | 端口 | 高危漏洞 | CVE |
web服务器 (10.10.10.129) | 8080 | Apache Tomcat Manager/Host Manager/Server Status Default/Hardcoded Credentials (HTTP) | CVE-2010-4094 CVE-2009-3548 CVE-2009-4189 CVE-2009-3099 CVE-2009-3843 CVE-2009-4188 CVE-2010-0557 |
80 | Joomla < 3.9.5 Multiple Vulnerabilities | CVE-2019-10945 CVE-2019-10946 CVE-2019-11358 | |
80 | Joomla! Core LDAP Information Disclosure Vulnerability (Nov 2017) | CVE-2017-14596 | |
80 | Joomla! < 3.8.0 LDAP Information Disclosure Vulnerability | CVE-2017-14596 | |
80 | Joomla < 3.8.12 Multiple Vulnerabilities | CVE-2018-15880 CVE-2018-15882 | |
80 | Joomla! < 3.9.7 Multiple Vulnerabilities | CVE-2019-12764 CVE-2019-12765 CVE-2019-12766 | |
80 | Joomla! < 3.9.13 Multiple Vulnerabilities | CVE-2019-18650 CVE-2019-18674 | |
80 | Joomla! < 3.8.13 ACL Violation Vulnerability | CVE-2018-17855 | |
80 | Tiki Wiki CMS Groupware < 17.2 SQL Injection Vulnerability | CVE-2018-20719 | |
80 | Tiki Wiki < 22 Multiple Vulnerabilities | CVE-2020-29254 | |
80 | OrangeHRM <= 4.3.1 RCE Vulnerability | CVE-2019-12839 | |
80 | Tiki Wiki < 24.1 Multiple Vulnerabilities | CVE-2023-22850 CVE-2023-22853 | |
80 | Tiki Wiki CMS Groupware fixedURLData Local File Inclusion Vulnerability | CVE-2016-10143 | |
80 | Tiki Wiki CMS Groupware < 4.2 Multiple Unspecified Vulnerabilities | CVE-2010-1135 CVE-2010-1134 CVE-2010-1133 CVE-2010-1136 | |
80 | Tiki Wiki < 24.2 PHP Object Injection Vulnerability | CVE-2023-22851 |
在Apache Tomcat漏洞中得知可在http://www.dvssc.com:8080/host-manager/html
http://www.dvssc.com:8080/manager/html,http://www.dvssc.com:8080/manager/status
这三个地方使用用户:root,密码:owaspbwa登录Tomcat
服务器 | 端口 | 高危漏洞 | CVE |
后台服务器 (10.10.10.130) | 445 | Vulnerabilities in SMB Could Allow Remote Code Execution (958687) - Remote | CVE-2008-4114 CVE-2008-4834 CVE-2008-4835 |
445 | Microsoft Windows SMB Server NTLM Multiple Vulnerabilities (971468) | CVE-2010-0020 CVE-2010-0021 CVE-2010-0022 CVE-2010-0231 | |
80 | Microsoft Internet Information Services (IIS) End of Life (EOL) Detection | ||
445 | Microsoft Windows SMB Server Multiple Vulnerabilities-Remote (4013389) | CVE-2017-0143 CVE-2017-0144 CVE-2017-0145 CVE-2017-0146 CVE-2017-0147 CVE-2017-0148 |
服务器 | 端口 | 高危漏洞 | CVE |
网关服务器 (10.10.10.254) | 80 | TWiki XSS and Command Execution Vulnerabilities | |
22 | SSH Brute Force Logins With Default Credentials Reporting | CVE-1999-0501 CVE-1999-0502 CVE-1999-0507 CVE-1999-0508 CVE-2020-9473 CVE-2023-1944 CVE-2024-22902 | |
8009 | Apache Tomcat AJP RCE Vulnerability (Ghostcat) | CVE-2020-1938 | |
3632 | DistCC RCE Vulnerability (CVE-2004-2687) | CVE-2004-2687 | |
5432 | PostgreSQL Default Credentials (PostgreSQL Protocol) | ||
80 | Tiki Wiki < 24.1 Multiple Vulnerabilities | CVE-2023-22850 CVE-2023-22853 | |
80 | Tiki Wiki < 22 Multiple Vulnerabilities | CVE-2020-29254 | |
80 | Tiki Wiki CMS Groupware < 17.2 SQL Injection Vulnerability | CVE-2018-20719 | |
21 | FTP Brute Force Logins Reporting | CVE-1999-0501 CVE-1999-0502 CVE-1999-0507 CVE-1999-0508 CVE-2001-1594 CVE-2013-7404 CVE-2017-8218 CVE-2018-19063 CVE-2018-19064 | |
80 | Tiki Wiki CMS Groupware < 4.2 Multiple Unspecified Vulnerabilities | CVE-2010-1135 CVE-2010-1134 CVE-2010-1133 CVE-2010-1136 | |
5432 | SSL/TLS: OpenSSL CCS Man in the Middle Security Bypass Vulnerability | CVE-2014-0224 | |
80 | Tiki Wiki < 24.2 PHP Object Injection Vulnerability | CVE-2023-22851 |
还得到如下信息,可能的用户名密码:
FTP and SSH:It was possible to login with the following credentials <User>:<Password> , msfadmin:msfadmin,postgres:postgres,service:service,user:user
PostgreSQL: It was possible to login as user postgres with password "postgres".
【DMZ区渗透实施】
【对Web服务器进行渗透】
点击网页www.dvssc.com的右上角的SIGNIN,发现进入到一个登录界面。
尝试admin admin结果发现直接进去了
点进Dame Vulnerable Web Application,发现进入了DVWA的后台界面。点击左侧DVWA security 将安全等级调到low。
使用sqlmap进行SQL注入攻击
随后出现告警信息,根据告警信息补充命令
需要为GRT请求或POST请求提供参数
’http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=a&Submit=Submit#‘’
出现302重定向到登录界面,因此提供Cookie保持登录状态。按F12查看网页Cookie
sqlmap -u "http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=a&Submit=Submit#" --cookie="JSESSIONID=0D4AAD047174F9BB879F52FCC4D1F371;PHPSESSID=hbhld9mq5mh86kpk7debh8ot25;security=low"
发现存在bool注入点,基于错误、时延注入点和union注入点。
获取到Web平台,数据库的版本信息
web application technology: PHP 5.3.2, Apache 2.2.14
back-end DBMS: MySQL >= 5.0
逐步进行注入获取数据库数据
探测数据库名称
sqlmap -u "http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=a&Submit=Submit#" --cookie="JSESSIONID=0D4AAD047174F9BB879F52FCC4D1F371;PHPSESSID=hbhld9mq5mh86kpk7debh8ot25;security=low" --dbs
获得数据库名称为:dvwa
探测数据库dvma中的表名
sqlmap -u "http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=a&Submit=Submit#" --cookie="JSESSIONID=0D4AAD047174F9BB879F52FCC4D1F371;PHPSESSID=hbhld9mq5mh86kpk7debh8ot25;security=low" -D dvwa --tables
探测数据库dvma中users表的列名
sqlmap -u "http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=a&Submit=Submit#" --cookie="JSESSIONID=0D4AAD047174F9BB879F52FCC4D1F371;PHPSESSID=hbhld9mq5mh86kpk7debh8ot25;security=low" -D dvwa -T users --columns
使用--dump选项获取数据并拖库
使用sqlmap自带的哈希密码字典对读取到的哈希形式的密码数据进行破译
这样就获取到了Web服务器(10.10.10.129)的www.dvssc.com网站的用户密码数据。
利用上传恶意文件控制web服务器主机
发现还有个可以上传文件的地方
随便上传一个文件后发现回显了存储该文件的相对路径的信息
编写一个PHP payload反弹shell
上传payload到网站上
msf开启监听,等待payload的反向链接
在浏览器上访问上传的payload所在的URL地址,触发PHP脚本使其反弹shell连接回Metasploit。
http://www.dvssc.com/dvwa/hackable/uploads/shell.php
反弹shell连接成功执行命令 uname -a可以看到该web服务器为32位的linux
生成适用于x86 linux 的meterpreter会话恶意程序
上传到web服务器上
打开另一个msf,开启监听本地4445端口用来接收meterpreter会话
在链接好的shell上chmod +x client.elf,并执行该程序
可以看到成功链接上meterpreter 会话
至此成功控制了Web服务器主机,对于web服务器的渗透测试告一段落
【对后台服务器进行渗透】
尝试使用MS17-010进行攻击
在漏洞扫描中有一个名为Microsoft Windows SMB Server Multiple Vulnerabilities-Remote (4013389)的漏洞进过Google查询发现该漏洞就是大名鼎鼎的永恒之蓝MS17-010漏洞。
在msf上搜索ms17-010得到
使用auxiliary/scanner/smb/smb_ms17_010扫描10.10.10.130进一步确认是否有永恒之蓝漏洞
得到后台服务器存在该漏洞,服务器主机为 Windows server 2003 x86
进入exploit/windows/smb/ms17_010_eternalblue查看支持的payload发现都是windows 64位的,并不支持32位的系统,因此使用不了该模块对目标主机进行攻击。
使用exploit/windows/smb/ms17_010_psexec模块对后台服务器10.10.10.130进行攻击
可以看到漏洞利用顺利获得了系统权限也成功上传了payload,成功启动了服务,没能顺利建立meterpreter会话。
还注意到在对10.10.10.130进行端口服务扫描时,其开启了Oracle TNS Listener 10.2.0.1.0 (for 32-bit Windows)服务,从NVD处查询发现存在漏洞NVD - CVE-2009-1979,
出现问题:攻击过程执行成功却没有返回shell,再次执行发现报错,说明之前的攻击应该是有效果的
查看tns_auth_sesskey.rb ,在win2k3metasploitable中使用ollydbg查看oracle汇编
因此可以知道代码的返回地址并没有写错
这里是漏洞利用模块编写buffer的代码,溢出字符串sploit由payload、随机字符、对应版本的返回地址、jmp指令块组成。sploit字符串作为AUTH_SESSKEY的值组成数据包发送出去。有可能是在oracle程序中也有一个AUTH_SESSKEY字符串导致冲突。
在ollydbg中查找字符串AUTH_SESSKEY
查找到三条
可以看到三段指令代码在引用AUTH_SESSKEY后都调用了oracommon10.kpzgkvl,就是oracommon10.dll中的kpzgkvl函数,右键选择follow查看kpzgkvl函数,在该函数起始点F2打下一个断点
F9运行oracle.exe
攻击机运行漏洞利用模块。oracle中断到断点处,按Ctrl+F9运行到函数返回
之后调用的函数的栈为
修改tns_auth_sesskey.rb 生成buffer处代码为
运行后还是不行
试着更换payload 为windows/shell/bind_tcp
运行后成功连上后台服务器
查看服务器主机的关键信息
【对网关服务器进行渗透】
在漏洞扫描时得到存在漏洞DistCC RCE Vulnerability (CVE-2004-2687)
在msf中查找
查看其适合哪些系统
发现其是自动检测目标系统的
执行漏洞利用程序
漏洞利用代码执行时出错
尝试使用别的payload,查看能使用哪些payload
之前搜集端口服务时看到开启了telnet服务尝试使用
payload/cmd/unix/reverse_bash_telnet_ssl
执行成功但会话链接失败
还注意到在漏洞扫描时扫到了有openssl漏洞
尝试使用payload/cmd/unix/reverse_openssl
成功链接上网关服务器。
至此已经成功获得了DMZ区域的三台服务器主机的控制权,对于DMZ区域的渗透测试告一段落,接下来将通过网关服务器主机进军内网
【对内网WinXP主机进行渗透】
前面对网关服务器进行渗透攻击时得到的是普通的command shell,使用use post/multi/manage/shell_to_meterpreter模块将其升级为meterpreter shell。
先将当前会话挂起并查看会话id
使用use post/multi/manage/shell_to_meterpreter模块将该会话进行升级
可以看到会话列表中多了一个meterpreter会话说明成功升级获得了meterpreter shell
进入meterpreter shell,使用命令run get_local_subnets 查看网关服务器链接了哪些子网
arp发现192.168.10.0/24网段有一个主机192.168.10.128
本地设置访问内网192.168.10.0/24的路由,通过攻击会话2进行路由
使用auxiliary/server/socks_proxy开启代理
选择版本 socks5
修改/etc/proxychains4.conf 添加 SOCKS 5 代理配置
使用proxychains nmap -O -sV -sT -Pn 192.168.10.128对在网关服务器arp表中发现的内网主机进行扫描。
主机 | 操作系统 | 主要开放端口 | 对应服务版本 |
内网主机 (192.168.10.128) | Windows XP SP3 | SMTP(25) | Microsoft ESMTP 6.0.2600.5512 |
HTTP(80) | Microsoft IIs httpd 5.1 | ||
msrpc(135) | ? | ||
netbios-ssn(139) | ? | ||
https(443) | ? | ||
microsoft-ds(445) | Microsoft Windows Xp microsoft-ds | ||
multiling-http(777) | ? | ||
msrpc(1025) | Microsoft Windows RPC | ||
X11:2(6002) | ? | ||
afs3-callback(7001) | ? |
使用proxychains运行gvm进行漏洞扫描
创建新用户gvmuser并加入到_gvm用户组,运行命令对192.168.10.128进行漏洞扫描
扫描结果
主机 | 端口 | 高危漏洞 | CVE |
内网主机 (192.168.10.128) | 80 | Microsoft Internet Information Services (IIS) End of Life (EOL) Detection | |
445 | Microsoft Windows SMB Server NTLM Multiple Vulnerabilities (971468) MS10-012 | CVE-2010-0020 CVE-2010-0021 CVE-2010-0022 CVE-2010-0231 | |
445 | Vulnerabilities in SMB Could Allow Remote Code Execution (958687) - Remote MS09-001 | CVE-2008-4114 CVE-2008-4834 CVE-2008-4835 | |
445 | Microsoft Windows SMB Server Multiple Vulnerabilities-Remote (4013389) MS17-010 | CVE-2017-0143 CVE-2017-0144 CVE-2017-0145 CVE-2017-0146 CVE-2017-0147 CVE-2017-0148 | |
80 | Microsoft IIS WebDAV Remote Authentication Bypass Vulnerability | CVE-2009-1535 | |
25 | Microsoft Windows SMTP Server DNS spoofing vulnerability | CVE-2010-1690 CVE-2010-1689 |
首先先尝试一下大名鼎鼎的MS17-010永恒之蓝漏洞
成功连接上meterpreter shell
【后渗透攻击】
【内网主机192.168.10.128】
进入内网主机的meterpreter shell
使用getuid查看,发现已经是system权限。使用sysinfo获取系统信息
使用dumplinks模块获取近期操作和访问记录
使用enum_application模块获取安装软件、安全更新与漏洞补丁
keyscan获取键盘记录,获取该模块开启过程中的键盘记录
开启sniffer嗅探,其功能是对靶机上的指定网卡上的数据进行监听捕获
查看在这段时间捕获到的数据包
使用enum_ie模块获取缓存IE浏览器中的口令
遗憾的是目标主机的IE浏览器等级低于IE7
使用smart_hashdump模块获取系统口令
清除痕迹
【总结与体会】
在本次基于metasploit的渗透测试中,学习使用metasploit,逐渐领略到了渗透测试的魅力,同时也明白metasploit是渗透测试中的一个强大的工具,其模块化与便捷性能让我这个渗透测试小白也能快速上手。
在渗透测试的过程中也遇到了一些困难,比如在安装gvm时,由于第一次安装使用需要初始化PostgreSQL数据库的,这个初始化是软件自动进行的但不会有明确的提示,而其初始化的流程很长耗时很久,这导致我第一次安装使用时因为其没有初始化完毕导致扫描功能使用不了,那时候我还以为是安装出错了,一直搜寻资料寻找解决办法但一直都没能解决,最终是在gvm官方网站的这一讨论帖子 https://forum.greenbone.net/t/no-scap-database-found-please-help-me/15527/21中的一位用户评论找到了答案,通过“tail -f /var/log/gvm/gvmd.log”就可以知道其正在一步一步初始化重建数据库。
在使用metasploit的攻击模块时也不是一帆风顺的,很多时候探测出了有这个漏洞但使用对应的漏洞利用模块却不能成功反弹shell 这可能由多种原因组成,如与系统版本不适应等等,能力强者可以通过在靶机一步一步调试,完善漏洞利用代码,让其兼容不同系统版本。
【参考文献】
- Metasploit渗透测试魔鬼训练营 (诸葛建伟 陈力波 田繁 孙松柏 等)
- Metasploit渗透测试指南(修订版) (David Kennedy 诸葛建伟)