通过 Python 脚本使用 PsExec
通常,在 Windows 机器上使用 PsExec 是为了管理目的,但在大多数黑客攻击场景中,您会使用像 Kali Linux 这样的操作系统。
Kali 有许多有用的内置工具。例如,Impacket 是一套非常有用的工具,它有自己的 PsExec 版本。
如果您使用的是 Kali Linux,则 Impacket 无需设置。它已安装好您的 PATH 中的所有工具。
远程计算机的远程控制语法是:
impacket-psexec USERNAME@IP_ADDRESS
在我们的例子中,这是:
impacket-psexec damon@192.168.237.249
Impacket 还具有一项功能,允许您使用用户的哈希值(而不是密码)远程访问其他计算机。这在黑客攻击中非常有用,因为您不一定能在找到用户的 NTLM 哈希值后破解它。
语法如下:
impacket-psexec <USERNAME@IP_ADDRESS> -hashes <NTLM_HASH>
在我们的示例中,命令是:
impacket-psexec damon@192.168.237.249 -hashes 00000000000000000000000000000000:820D6348890893116880101307197052
再次,一旦登录,就可以执行该用户可用的任何命令。
通常,在 Windows 机器上使用 PsExec 是为了管理目的,但在大多数黑客攻击场景中,您会使用像 Kali Linux 这样的操作系统。
Kali 有许多有用的内置工具。例如,Impacket 是一套非常有用的工具,它有自己的 PsExec 版本。
如果您使用的是 Kali Linux,则 Impacket 无需设置。它已安装好您的 PATH 中的所有工具。
远程计算机的远程控制语法是:
impacket-psexec USERNAME@IP_ADDRESS
在我们的例子中,这是:
impacket-psexec damon@192.168.237.249
Impacket 还具有一项功能,允许您使用用户的哈希值(而不是密码)远程访问其他计算机。这在黑客攻击中非常有用,因为您不一定能在找到用户的 NTLM 哈希值后破解它。
语法如下:
impacket-psexec <USERNAME@IP_ADDRESS> -hashes <NTLM_HASH>
在我们的示例中,命令是:
impacket-psexec damon@192.168.237.249 -hashes 00000000000000000000000000000000:820D6348890893116880101307197052
再次,一旦登录,就可以执行该用户可用的任何命令。
从 HTTP 服务器下载文件:Curl、Wget 和 Bash
Linux 机器上下载文件最常用的两个工具是curl和wget。
但是,还有许多其他二进制文件可用于下载文件。因此,作为附加内容,我们还将了解如何使用bash下载文件。
使用 Curl 下载文件
Curl 是一个非常强大的工具,可用于与 Web 服务器交互。它通常在 Web 应用程序渗透测试期间使用;但是,它也可以用于从 Web 服务器快速下载文件
将脚本或可执行文件下载到受害机器后,添加执行权限来运行它非常重要
chmod 755 ./linpeas.sh
看到全部 0 表示文件实际上并未下载,但我们可以看到它仍在运行。这是因为它正在被下载并直接在内存中执行
Linux 机器上下载文件最常用的两个工具是curl和wget。
但是,还有许多其他二进制文件可用于下载文件。因此,作为附加内容,我们还将了解如何使用bash下载文件。
使用 Curl 下载文件
Curl 是一个非常强大的工具,可用于与 Web 服务器交互。它通常在 Web 应用程序渗透测试期间使用;但是,它也可以用于从 Web 服务器快速下载文件
将脚本或可执行文件下载到受害机器后,添加执行权限来运行它非常重要
chmod 755 ./linpeas.sh
看到全部 0 表示文件实际上并未下载,但我们可以看到它仍在运行。这是因为它正在被下载并直接在内存中执行
入侵 Jenkins 服务器获取反向 Shell
对于此示例,我们有端口 8080 可以使用,因此让我们枚举代理 Web 服务。
我们可以通过打开浏览器并导航到 127.0.0.1:8080 与该服务进行交互
然后我们就可以看到 Jenkins 登录页面了!
Jenkins 是一个开源自动化服务器,它使世界各地的开发人员能够可靠地构建、测试和部署他们的软件。
我们需要在这里找到登录凭据。默认用户名是“admin”,密码是随机生成的字符串,可以在 Jenkins 日志中找到。但是,当管理员设置服务器时,这些会发生变化。为此,我们可以测试一些常用凭据并希望进入。
常见的凭证包括 admin:admin;admin:password 等。但是在攻击这些类型的服务器时,另一个好方法是使用服务名称作为用户/密码组合,在本例中为 jenkins:jenkins。
测试上述所有用户/密码组合,我们设法使用jenkins:jenkins进入,并看到 Jenkins 仪表板!
要获取反向 shell,我们需要检查是否安装了 Groovy 插件,这是一个脚本控制台,可以执行 Java 可以执行的几乎所有操作,包括:在 Jenkins 控制器和代理上创建子进程并执行任意命令。换句话说,在托管此服务的主机(受害者)上执行命令。
对于此示例,我们有端口 8080 可以使用,因此让我们枚举代理 Web 服务。
我们可以通过打开浏览器并导航到 127.0.0.1:8080 与该服务进行交互
然后我们就可以看到 Jenkins 登录页面了!
Jenkins 是一个开源自动化服务器,它使世界各地的开发人员能够可靠地构建、测试和部署他们的软件。
我们需要在这里找到登录凭据。默认用户名是“admin”,密码是随机生成的字符串,可以在 Jenkins 日志中找到。但是,当管理员设置服务器时,这些会发生变化。为此,我们可以测试一些常用凭据并希望进入。
常见的凭证包括 admin:admin;admin:password 等。但是在攻击这些类型的服务器时,另一个好方法是使用服务名称作为用户/密码组合,在本例中为 jenkins:jenkins。
测试上述所有用户/密码组合,我们设法使用jenkins:jenkins进入,并看到 Jenkins 仪表板!
要获取反向 shell,我们需要检查是否安装了 Groovy 插件,这是一个脚本控制台,可以执行 Java 可以执行的几乎所有操作,包括:在 Jenkins 控制器和代理上创建子进程并执行任意命令。换句话说,在托管此服务的主机(受害者)上执行命令。
不安全的GUI应用程序——Windows权限提升
我们首先在桌面上找到要执行的应用程序的快捷方式。执行后,我们将检查正在运行的进程,发现该应用程序正在以管理员身份运行。然后,我们将从该应用程序中脱离出来,进入管理员 shell。作为额外奖励,我们还将查看另一个可以以类似方式滥用的 GUI 应用程序,名为hhupd.exe。
可以配置 Windows 应用程序,以便用户被授予以管理员权限运行某个 GUI 应用程序的权限。当程序需要提升权限才能执行其某些功能时,这通常是必要的。
查找以管理员身份运行的应用程序
由于本文中的示例需要 GUI,因此假设在初始枚举期间,我们找到了用户bob的凭据,并且 RDP 在端口 3389 上打开。我们将 2 + 2 放在一起,然后使用xfreerdp登录。
我们可以通过执行该程序,然后使用tasklist命令或检查任务管理器检查正在运行的进程来测试该程序是否以管理员权限运行。
我们首先在桌面上找到要执行的应用程序的快捷方式。执行后,我们将检查正在运行的进程,发现该应用程序正在以管理员身份运行。然后,我们将从该应用程序中脱离出来,进入管理员 shell。作为额外奖励,我们还将查看另一个可以以类似方式滥用的 GUI 应用程序,名为hhupd.exe。
可以配置 Windows 应用程序,以便用户被授予以管理员权限运行某个 GUI 应用程序的权限。当程序需要提升权限才能执行其某些功能时,这通常是必要的。
查找以管理员身份运行的应用程序
由于本文中的示例需要 GUI,因此假设在初始枚举期间,我们找到了用户bob的凭据,并且 RDP 在端口 3389 上打开。我们将 2 + 2 放在一起,然后使用xfreerdp登录。
我们可以通过执行该程序,然后使用tasklist命令或检查任务管理器检查正在运行的进程来测试该程序是否以管理员权限运行。
CVE-2019-1388 – hhupd.exe
Windows 证书对话框 (hhupd.exe) 中存在权限提升漏洞,允许攻击将权限提升至 SYSTEM,已记录为 CVE-2019-1388。
hhupd.exe 被称为 HTML Help 1.32 Update,由 Microsoft Corporation 开发。
此 CVE 影响许多 Windows 版本,包括 Windows 7、8、10 至 1903 版本以及服务器 2008 – 2019 至 1903 版本
现在我们要做的就是单击“页面”按钮,然后单击“另存为”.
在 Windows 10 上,有一个齿轮图标取代了“页面”选项卡。
就像我们之前看到的 Procmon 突破一样,我们只需要在 TOP 搜索栏中输入“cmd.exe”,它就会突破 IE 并产生一个 SYSTEM shell。
Windows 证书对话框 (hhupd.exe) 中存在权限提升漏洞,允许攻击将权限提升至 SYSTEM,已记录为 CVE-2019-1388。
hhupd.exe 被称为 HTML Help 1.32 Update,由 Microsoft Corporation 开发。
此 CVE 影响许多 Windows 版本,包括 Windows 7、8、10 至 1903 版本以及服务器 2008 – 2019 至 1903 版本
现在我们要做的就是单击“页面”按钮,然后单击“另存为”.
在 Windows 10 上,有一个齿轮图标取代了“页面”选项卡。
就像我们之前看到的 Procmon 突破一样,我们只需要在 TOP 搜索栏中输入“cmd.exe”,它就会突破 IE 并产生一个 SYSTEM shell。
利用 CVE-2021-1675.ps1 漏洞利用打印后台处理程序
在机器上获得了 PS1 脚本,就可以将其复制到当前 HTTP 服务器运行的同一目录中。这将允许直接下载到目标的内存中。
有了工作目录中的 PowerShell 脚本,我们现在可以使用以下echo命令将以下函数附加到脚本的底部:echo Invoke-Nightmare -DriverName '"Xerox" -NewUser "pwnt" -NewPassword "Password123"' >> CVE-2021-1675.ps1
此命令将创建一个名为pwnt 的新用户,密码为Password123,然后脚本会将该用户添加到本地管理员组。
在脚本底部硬编码命令将允许它在使用 IEX 将脚本下载到内存时自动执行。
使用net user命令可以确认当前不存在名为“pwnt”的用户。
脚本执行后,从输出中可以看到漏洞利用程序创建了一个恶意 DLL,该 DLL 创建了指定的用户,然后将其添加到本地管理员组。然后,漏洞利用程序清理并删除该 DLL.
看到 RDP 已打开,可以使用xfreerdp通过 RDP 进入受害者机器,然后使用“以管理员身份运行”打开 cmd 提示符以启用我们的所有权限。
在机器上获得了 PS1 脚本,就可以将其复制到当前 HTTP 服务器运行的同一目录中。这将允许直接下载到目标的内存中。
有了工作目录中的 PowerShell 脚本,我们现在可以使用以下echo命令将以下函数附加到脚本的底部:echo Invoke-Nightmare -DriverName '"Xerox" -NewUser "pwnt" -NewPassword "Password123"' >> CVE-2021-1675.ps1
此命令将创建一个名为pwnt 的新用户,密码为Password123,然后脚本会将该用户添加到本地管理员组。
在脚本底部硬编码命令将允许它在使用 IEX 将脚本下载到内存时自动执行。
使用net user命令可以确认当前不存在名为“pwnt”的用户。
脚本执行后,从输出中可以看到漏洞利用程序创建了一个恶意 DLL,该 DLL 创建了指定的用户,然后将其添加到本地管理员组。然后,漏洞利用程序清理并删除该 DLL.
看到 RDP 已打开,可以使用xfreerdp通过 RDP 进入受害者机器,然后使用“以管理员身份运行”打开 cmd 提示符以启用我们的所有权限。
使用 Bloodhound 枚举“support”帐户
由于无法以该用户身份在 DC 上获得立足点,因此可以使用 bloodhound.py 远程提取域中的所有权利和关系。
我使用以下命令执行了 bloodhound.py,在我的工作目录中创建了 4 个 JSON 文件,这些文件可以输入到 Bloodhound 的 GUI 中。
确认创建了四个 JSON 文件后,可以启动neo4j和bloodhound控制台并将其加载到图形系统中。
进入 Bloodhound 仪表板后,我将四个 JSON 文件上传到 UI。
上传后,可以利用“分析”选项卡下的预建查询来查找有关域的信息,查询是“到达高价值目标的最短路径”查询,它转储了大量信息。
显示了有关已经枚举(组)的svc_backup帐户的信息;
在“出站控制权限”>“一级对象控制”下,我发现当前用户有一个特别有趣的权限。“support”帐户可以更改audit2020帐户的密码。
由于无法以该用户身份在 DC 上获得立足点,因此可以使用 bloodhound.py 远程提取域中的所有权利和关系。
我使用以下命令执行了 bloodhound.py,在我的工作目录中创建了 4 个 JSON 文件,这些文件可以输入到 Bloodhound 的 GUI 中。
确认创建了四个 JSON 文件后,可以启动neo4j和bloodhound控制台并将其加载到图形系统中。
进入 Bloodhound 仪表板后,我将四个 JSON 文件上传到 UI。
上传后,可以利用“分析”选项卡下的预建查询来查找有关域的信息,查询是“到达高价值目标的最短路径”查询,它转储了大量信息。
显示了有关已经枚举(组)的svc_backup帐户的信息;
在“出站控制权限”>“一级对象控制”下,我发现当前用户有一个特别有趣的权限。“support”帐户可以更改audit2020帐户的密码。
通过 RDP 实现持久系统访问
为了通过 RDP 建立持久性,将使用rdesktop立即跳转到 SYSTEM shell,而无需输入凭据!为此,将利用名为utilman.exe的内置工具作为建立持久后门的手段。
需要更改 HKLM 注册表项或 C:\Windows\System32 中的 utilman.exe,因此我们需要提升权限来设置我们的持久性。
此时,utilman 已设置好,当单击“轻松访问”时,它会生成一个 SYSTEM shell;但是,我们还需要进行一项配置,以便我们可以通过 RDP 获取 Windows 的登录屏幕。
可以使用rdesktop进入 Windows 的登录屏幕,但前提是计算机已禁用“要求计算机使用网络级别身份验证进行连接”,而现代 Windows 计算机上默认启用此功能。
可以绕过这个问题并通过注册表禁用网络级别的身份验证,这允许我们连接到 RDP 而无需提供用户/密码组合进行“预身份验证”。
现在,所需的注册表项已被修改,以使此攻击起作用,我们可以使用以下命令使用rdesktop获取 SYSTEM shell权限
为了通过 RDP 建立持久性,将使用rdesktop立即跳转到 SYSTEM shell,而无需输入凭据!为此,将利用名为utilman.exe的内置工具作为建立持久后门的手段。
需要更改 HKLM 注册表项或 C:\Windows\System32 中的 utilman.exe,因此我们需要提升权限来设置我们的持久性。
此时,utilman 已设置好,当单击“轻松访问”时,它会生成一个 SYSTEM shell;但是,我们还需要进行一项配置,以便我们可以通过 RDP 获取 Windows 的登录屏幕。
可以使用rdesktop进入 Windows 的登录屏幕,但前提是计算机已禁用“要求计算机使用网络级别身份验证进行连接”,而现代 Windows 计算机上默认启用此功能。
可以绕过这个问题并通过注册表禁用网络级别的身份验证,这允许我们连接到 RDP 而无需提供用户/密码组合进行“预身份验证”。
现在,所需的注册表项已被修改,以使此攻击起作用,我们可以使用以下命令使用rdesktop获取 SYSTEM shell权限
使用 PsExec 成为本地系统帐户
如果您是使用 Specops Deploy 的管理员,您可能有过以下经历:当您在本地计算机上尝试部署应用程序时,可以毫无问题地部署它,但当您尝试部署它时,似乎无法让它工作。这篇博客文章可能会对您的问题有所启发。
使用 Specops Deploy 部署应用程序时,本地系统是执行安装的帐户。为了确保您的应用程序以与 Specops Deploy App 完全相同的方式安装,您需要充当本地系统帐户。为此,我推荐使用 Sysinternals 的一款名为PsExec.exe的小工具
从 PsTools解压内容并将 PsExec.exe 复制到 C:\Windows\System32
以管理员身份打开命令提示符并输入以下命令:
PsExec.exe -s -i cmd.exe
复制
通过使用 PsExec.exe,您将在系统上下文中打开新的命令提示符,并且执行所有操作的帐户将是本地系统帐户。这是 Specops Deploy App 在安装应用程序时使用的相同帐户。
如果您是使用 Specops Deploy 的管理员,您可能有过以下经历:当您在本地计算机上尝试部署应用程序时,可以毫无问题地部署它,但当您尝试部署它时,似乎无法让它工作。这篇博客文章可能会对您的问题有所启发。
使用 Specops Deploy 部署应用程序时,本地系统是执行安装的帐户。为了确保您的应用程序以与 Specops Deploy App 完全相同的方式安装,您需要充当本地系统帐户。为此,我推荐使用 Sysinternals 的一款名为PsExec.exe的小工具
从 PsTools解压内容并将 PsExec.exe 复制到 C:\Windows\System32
以管理员身份打开命令提示符并输入以下命令:
PsExec.exe -s -i cmd.exe
复制
通过使用 PsExec.exe,您将在系统上下文中打开新的命令提示符,并且执行所有操作的帐户将是本地系统帐户。这是 Specops Deploy App 在安装应用程序时使用的相同帐户。