RottenPotatoNG的加糖版本,带点汁水,即另一个本地权限提升工具,从Windows服务账户到NT AUTHORITY\SYSTEM
RottenPotatoNG及其变种利用基于BITS 服务的权限提升链,该服务在127.0.0.1:6666上具有MiTM监听器,并且当你拥有SeImpersonate或SeAssignPrimaryToken权限时。在一次Windows构建审查中,我们发现一个设置,其中BITS被故意禁用,端口6666被占用。
我们决定将RottenPotatoNG武器化:向Juicy Potato打个招呼。
关于理论,请参见Rotten Potato - 从服务账户到SYSTEM的权限提升并跟随链接和参考资料。
我们发现,除了BITS之外,还有几个COM服务器可以被滥用。它们只需要:
IMarshal接口经过一些测试,我们在多个Windows版本上获取并测试了广泛的有趣的CLSID列表。
JuicyPotato允许你:
目标CLSID
选择你想要的任何CLSID。这里你可以找到按操作系统组织的列表。
COM监听端口
定义你偏好的COM监听端口(代替编组硬编码的6666)
COM监听IP地址
将服务器绑定到任何IP
进程创建模式
根据被模拟用户的权限,你可以选择:
CreateProcessWithToken(需要SeImpersonate)CreateProcessAsUser(需要SeAssignPrimaryToken)both要启动的进程
如果利用成功,启动一个可执行文件或脚本
进程参数
自定义启动的进程参数
RPC服务器地址
为了隐蔽方式,你可以认证到外部RPC服务器
RPC服务器端口
如果你想认证到外部服务器且防火墙阻止了端口135...
测试模式
主要用于测试目的,例如测试CLSID。它会创建DCOM并打印令牌的用户。参见这里进行测试
T:\>JuicyPotato.exe
JuicyPotato v0.1
Mandatory args:
-t createprocess call: <t> CreateProcessWithTokenW, <u> CreateProcessAsUser, <*> try both
-p <program>: program to launch
-l <port>: COM server listen port
Optional args:
-m <ip>: COM server listen address (default 127.0.0.1)
-a <argument>: command line argument to pass to program (default NULL)
-k <ip>: RPC server ip address (default 127.0.0.1)
-n <port>: RPC server listen port (default 135)
-c <{clsid}>: CLSID (default BITS:{4991d34b-80a1-4291-83b6-3328366b9097})
-z only test CLSID and print token's user

如果用户拥有SeImpersonate或SeAssignPrimaryToken权限,那么你就是SYSTEM。
几乎不可能阻止所有这些COM服务器的滥用。你可以考虑通过DCOMCNFG修改这些对象的权限,但祝你好运,这将是具有挑战性的。
实际的解决方案是保护在* SERVICE账户下运行的敏感账户和应用程序。停止DCOM当然会抑制此利用,但可能对底层操作系统产生严重影响。
自动构建可用。二进制文件可以从这里的Artifacts部分下载。
也可在BlackArch获得。