.hta文件的后渗透利用(绕过PowerShell的限制模式)
当我在一个测试项目中,我有一个SOE和一个域帐户,我通常想使用PowerShell Empire这样的工具远程控制SOE并运行我的所有其他渗透工具。但是当客户端拥有强大的安全措施时,在SOE上获得最初的立足点可能会很困难。在这些情况下,我发现hta文件非常有用。这篇博客文章将展示一些有趣的方法,帮助你了解如何在渗透中使用hta文件。
应用白名单绕过
“hta”代表“HTML应用程序”,除了使用mshta.exe运行外,它与普通的HTML页面基本相同并且支持其他的脚本语言。mshta.exe是在windows自带的应用程序,通常在应用程序的白名单中。所以,我们可以使用其他的脚本语言(特别是vb sc ript)做很多有趣的事情。
假设您处于一个无法访问命令行或PowerShell的环境中,您想做一些简单的事情,比如ping一台电脑。您可以使用包含以下内容的hta文件:
<sc ript LANGUAGE="vb sc ript">
Set cmd = Createob ject("Wsc ript.Shell")
cmd.run("ping 1.1.1.1")
</sc ript>
上面的hta文件不是很完美…你可以看到命令在另一个窗口中打开运行,并且在它完成后立即消失,使得读取其输出变得困难。我们可以通过捕获命令的输出并在HTML应用程序中显示以下内容来更好地实现这一点:
以上程序代码地址:https://github.com/jpginc/pentesting-hta/blob/master/exec.hta
这个hta文件使用“Wsc ript.Shell”运行命令,与使用cmd不同。所以内建的函数,如dir无法运行,而且也不能执行复合命令(例如ping 1.1.1.1 && pause),所以让我们继续尝试。
使用.hta运行PowerShell或c
要运行PowerShell命令。我们可以使用c#的管道类。要在锁定的系统上运行任意的c#命令,我们将使用我在NOTSOSECURE的高级基础设施黑客课程中学到的技术。我们可以使用InstallUtil.exe(内置的windows程序),用于在卸载任意可执行文件。此外,我们将使用另一个内置在window程序csc.exe,来编译任意c#代码。手工一步步完成以上操作是一种痛苦,而且很难记住,所以我们使用.hta来打包所有的步骤。完成后的hta文件将执行以下步骤:
1.写一些c#代码到一个文件,c#包含一个卸载钩子
2.使用csc.exe将步骤1中的c#代码编译为.exe
3.编写你需要运行的PowerShell命令到文件中。c#卸载钩子将读取这些命令并在管道中执行它们
4.uninstallUtil.exe将在第2步的exe上使用Wsc ript.Shell对象执行命令
5.在HTML应用程序中显示uninstallUtil的输出。
这个完整代码可以在这里找到:https://github.com/jpginc/pentesting-hta/blob/master/powershell.hta
值得一提的是,通过c#管道运行PowerShell绕过了限制模式。所以你可以使用powershell.hta运行某些渗透测试工具,否则会被阻塞;-)
隐藏hta
我通常不需要隐藏,但如果你需要,你可以在一个隐藏窗口运行hta,payload下:
<sc ript LANGUAGE="vb sc ript">
set a = Createob ject("Wsc ript.Shell")
visible = false
a.run "mshta.exe ""file:///evil.hta""", visible
window.close()
</sc ript>
虽然不会有可见的窗口,但是mshta.exe的进程将出现在任务管理器中,这在任务管理器看起来应该像一个疼痛的大拇指一样突出…
非文件化hta
您甚至根本不需要hta文件!mshta.exe能解析ja vasc ript,因此您可以使用类似于下面的命令来运行渗透工具,而且不需要在磁盘上运行文件。
mshta.exe ja vasc ript:“<language=vb sc ript>createob ject(\"Wsc ript.Shell\").run(\"calc \")\r\nclose()</sc ript>
持久性
在Windows 10(以及Windows Server 2016)中,Windows在关闭计算机之前会重新启动一些正在运行的应用程序。下次登录系统时,它会自动运行这些应用程序。可以通过在系统关闭之前向run-once注册表键写入一个实体来实现这一点。
mshta.exe是可以利用这个特性的程序之一。你可以滥用这个来让windows为你保驾护航!不幸的是,Windows无法恢复使用Wsc ript.Shell脚本的mshta,这样您就不能轻松地执行隐式持久化(即运行您的mshta)。但是它确实可以与ja vasc ript URI一起工作,所以您可以实现某种隐形的无文件持久性(run-once注册表键只在系统启动和用户登录之间出现)。
我希望这对你们渗透测试有所帮助。关注我的推特,寻找更多有趣的不为人知的东西@JPG1nc
原文链接:https://www.bleepingcomputer.com/news/security/virtualbox-zero-day-vulnerability-details-and-exploit-are-publicly-available/