出品|博客(ID:moon_flower)
声明
以下内容,来自moon_flower作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。
Potato提权原理
通过各种方法在本地NTLM中继获取SYSTEM令牌,再通过模拟令牌执行命令,通过以上方法提权统称为potato(不管是否基于原potato修改)。就像SQL注入,通过特定SQL语句注入获取特定数据库信息统称为SQL注入,而不管如何编写的SQL语句,是否基于别人的SQL语句修改。
提权条件
1 本地NTLM中继获取SYSTEM令牌
2 SeImpersonatePrivilege特权
测试中任意用户都可以通过本地NTLM中继获取到SYSTEM令牌权限,但是由于USER默认不开户SeImpersonatePrivilege特权,无法模拟令牌创建进程无法执行命令,所以会导致很多Potato提权失败。如下方”Win7管理员提权至SYSTEM“图片上部分就是USER部分的Potato提权失败,下方是管理员权限,而其它环境都是IIS权限。所以为了方便Ladon默认也显示当前用户SeImpersonatePrivilege特权情况。
Rogue Potato
高版本的Windows DCOM解析器不允许OBJREF中的DUALSTRINGARRAY 字段指定端口号,既然这样就在一台远程主机上的135 端口做流量转发,将其转回受害者本机端口,并实现了一个恶意的RPC OXID解析器。OXID解析器是rpcss服务的一部分,在每台支持COM+ 的机器上的135端口上运行 ,它执行两个重要任务:
1.存储连接远程对象所必须的 RPC 字符串绑定,并将它们提供给本地客户机。
2.将 ping 消息发送给本地机器拥有客户端的远程对象,并接收本地机器运行的对象的 ping 消息。(支持 COM+ 垃圾回收机制)
OXID解析器的工作流程如下:
其中客户端就是RPCSS服务,它将尝试连接到我们的恶意OXID解析器。
在正常情况下,客户端的OXID解析序列中的所有请求都经过身份验证后,就会模拟运行我们选择的CLSID对应COM 的用户(SYSTEM)。
土豆系列的攻击就是拦截这个认证过程并窃取令牌。看一下RPC支持的协议,我们伪造的OXID解析器能选择协议序列标识(protocol sequence),也就是说可以选择调用的具体协议。
RPC transport | RPC protocol sequence string |
---|---|
SMB | ncacn_np (see section 2.1.1.2) |
TCP/IP (both IPv4 and IPv6) | ncacn_ip_tcp (see section 2.1.1.1) |
UDP | ncadg_ip_udp (see section 2.1.2.1) |
SPX | ncacn_spx (see section 2.1.1.3) |
IPX | ncadg_ipx (see section 2.1.2.2) |
NetBIOS over IPX | ncacn_nb_ipx (see section 2.1.1.4) |
NetBIOS over TCP | ncacn_nb_tcp (see section 2.1.1.5) |
NetBIOS over NetBEUI | ncacn_nb_nb (see section 2.1.1.6) |
AppleTalk | ncacn_at_dsp (see section 2.1.1.7) |
RPC over HTTP | ncacn_http (see section 2.1.1.8) |
当使用ncacn_ip_tcp的时候,它允许RPC直接通过TCP。我们使用 IRemUnknown2接口运行RPC服务器,并尝试调用RpcImpersonateClient 的SecurityCallback来验证请求。
在resolveoxid2响应中返回ncacn_ip_tcp:loca-lhost[9998],触发RPC服务器的身份验证(但是只有一个标识符)。
综上,如果我们将OXID 解析请求重定向到我们控制下的端口135的远程服务器,并将请求转发到我们的本地 Fake RPC 服务器,我们将仅获得一个匿名登录。如果将OXID解析请求解析到一个假的RPC服务器,那么将会在 IRemUnkown2 查询的时候获得一个系统令牌(但只是个标识令牌)。
但作者后续借鉴了PrintSpoofer 的利用思路,使用了ncacn _ np(向连接的命名管道)。这里选用了 epmapper 管道(和RpcEptMapper服务有关,用于解析RPC接口标识符以传输端点)。
这个服务和rpcss服务共享进程空间,并且都在NETWORK SERVICE帐户下运行,那么如果能在这个进程下模拟该账户,就可以窃取SYSTEM令牌。但是根据协议的设计,即使使用了ncacn_np:localhost[piperoguepotato],也会最终连接到epmapper管道。
到这里已经有些眉目了,遇到的问题和PrintSpoofer 中的一样,同样也可以通过在主机名中插入/实现绕过。如果返回的绑定信息是
ncacn_np:localhost/pipe/roguepotato[pipeepmapper],那么RPCSS就会尝试连接不存在的命名管道roguepotatopipeepmapper,那我们在此管道上进行监听,就能获得SYSTEM权限的模拟令牌了!
工具地址:
https://github.com/antonioCoco/RoguePotato
Ghost potato
为防止用户relay本机,在lsass中添加缓存绕过,如果缓存中有 (Challenge,cifs/B)就会认证失败。然而这个(Challenge,cifs/B)是有时效性的(300s),所有只要等300s再发送type3就可以bypass了。用修改后的impacket
https://shenaniganslabs.io/files/impacket-ghostpotato.zip可以直接打,用法和MS08-068类似。
SweetPotato
集成了前面几种土豆触发NTLM认证的方式,包括:COM,WinRM,Spoolsv,其中WInRM的攻击原理参考:https://decoder.cloud/2019/12/06/we-thought-they-were-potatoes-but-they-were-beans/
大致思路就是当WinRM在当前系统未启用时,攻击者监听本机5985端口,BITS 服务会向 WinRM5985发起 NTLM 认证,
工具地址:https://github.com/CCob/SweetPotato
参考文献
-
https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/
-
https://www.anquanke.com/post/id/254904
-
https://decoder.cloud/2020/05/11/no-more-juicypotato-old-story-welcome-roguepotato/
-
https://xz.aliyun.com/t/7087
-
https://decoder.cloud/2019/12/06/we-thought-they-were-potatoes-but-they-were-beans/
▇ 扫码关注我们 ▇
长白山攻防实验室
学习最新技术知识
原文始发于微信公众号(长白山攻防实验室):Rogue Potato绕过
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论