令牌(
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
等)有这个权限,大多数用户级的账户没有这个权限。
支持版本
1 | Windows 7、8、10、2008、2012 |
检查是否具有 Selmpersonate
权限,但是我计算机内是没有的
1 | whoami / priv |
出现这种特权才代表存在
# 漏洞利用
如果得到机器 shell
经过上面检测操作,发现具有 SeImpersonatePrivilege
权限这个必备条件后,首先列出可用令牌,会输出两种类型的令牌,存在模拟令牌就可以利用土豆程序快速模拟用户令牌来实现权限提升
Delegation Tokens
(委派令牌)是指可以被传递给其他进程的令牌Impersonation Tokens
(模拟令牌)是指可以用于模拟其他用户身份的令牌
1 | use incognito // 加载MSF获取令牌扩展 |
存在令牌后这个时候要把土豆程序上传到受害者磁盘下,如果前期已经有了 Webshell
那么自然是可以直接在远控工具内上传,也可以选择利用 MSF
上传,不选择上传路径会跟木马在同一个目录里,我这里是桌面上传的位置也是桌面,选择了路径那么就是指定路径
1 | // 将本地的土豆程序potato.exe 上传到目标 |
上传完成 MSF
命令去执行土豆提权程序,这里也是成功运行了这个进程,运行成功后查看令牌观察是否模拟成功
1 | // execute" 是Meterpreter命令,用于在目标系统上执行命令或可执行文件 |
生成令牌快速使用可以提权达到
1 | // 查看令牌,在Impersonation 成功的话最后一行模拟到system的令牌 |
# 多汁土豆
多汁土豆 GitHub 地址
烂土豆提权 Juicypotato 原理和利用 - 青澜 Cyan
提权小神器 - JuicyPotato 多种应用场景详解 - J0o1ey
多汁土豆 (JuicyPotato) 的提权使用
# 漏洞原理
1 | 1. 我们本地账户权限为普通用户,但是以System权限加载COM请求,认证NTLM,不出意外认证失败 |
# Juicy Potato
实现流程
# 漏洞利用
利用前提是本地账户具有 SeImpersonate
或 SeAssignPrimaryToken
权限,必须二者有一种或者同时具备根据命令查看,不同权限工具命令参数不同,均不存在则无法提权
判断权限
1 | whoami /all |
用户具有上述权限可以做到
- 本地管理员组成员和本地服务帐户
- 由服务控制管理器启动的服务
COM
基础结构启动的并配置为在特定帐户下运行的COM
服务器
判断端口
判断发起认证的 RPC
[1] 判断是否还是 135
如果被修改需要再次指定, Juicy Potato
支持任意本地端口
1 | netstat -abno // 列出系统上所有的网络连接信息,包括本地地址、外部地址、状态、PID(进程ID)以及应用程序的名称 |
选择可用 ** CLSID
**[2]/ 端口
根据被提权机器操作系统选择对应的 CLSID
作为标识符,例如测试系统 Server2012,
选择 CLSID {8BC3F05E-D86B-11D0-A075-00C04FB68820}
, 使用对应的权限创建进程监听一个未被占用的端口进行提权
CLSID 参考列表
土豆文件上传根据上文上传命令即可,或者 Webshell
上传;执行成功即获取一个 system
权限 shell
后续就是打开任务管理器,关闭 explore
任务,再开启 explore
任务即可得到一个 system 权限的桌面
1 | // 配置CLSID和端口后最终参数如下 端口-l指定 clsid-c指定 |
# 漏洞防范
- 阻止攻击者获得
SeImpersonate
或者SeAssignPrimaryToken
权限 - 即使打好系统补丁
- 升级到最新的
windows
系统