一个用于红队和渗透测试的交互式命令提示符。自动通过SOCKS4/5代理经由 proxychains 推送命令。可选的 Cobalt Strike 集成可从团队服务器拉取 Beacon 的 SOCKS4/5 代理。活动自动记录到本地 CSV 文件以及(若已配置)Cobalt Strike 团队服务器。
请注意,由于 RedShell 底层使用 proxychains,仅 TCP 流量会被代理。
RedShell 运行在 Python > 3.8 上。
安装依赖:
pip3 install -r requirements.txt
安装 proxychains-ng (https://github.com/rofl0r/proxychains-ng):
apt install proxychains4
RedShell 不再依赖 Cobalt Strike。但如果您使用了 Cobalt Strike 集成,CS 客户端必须与 RedShell 安装在同一主机上。同时请确保 agscript 包装器可执行:
chmod +x agscript.sh
启动 RedShell:
$python3 redshell.py
____ _______ __ ____
/ __ \___ ____/ / ___// /_ ___ / / /
/ /_/ / _ \/ __ /\__ \/ __ \/ _ \/ / /
/ _, _/ __/ /_/ /___/ / / / / __/ / /
/_/ |_|\___/\__,_//____/_/ /_/\___/_/_/
日志写入:/home/user/.redshell/redshell_2022_08_22_13_00_13.csv
redshell >
显示帮助:
redshell > help
Documented commands (use 'help -v' for verbose/'help <topic>' for details):
===========================================================================
beacon_exec cs_connect cs_status help pwd socks
cd cs_disconnect cs_use_pivot history quit
config cs_load_config exec log set
context cs_pivots exit proxy_exec shell
设置选项:
redshell> set 选项 值
RedShell 会自动记录通过 beacon_exec、proxy_exec、exec 或 log 命令产生的活动。日志在启动时自动初始化,日志文件写入到 ~/.redshell。
若要记录到 Cobalt Strike,请连接到团队服务器、选择一个跳板,然后使用 beacon_exec 命令。
RedShell 使用 proxychains-ng 和一个自定义的 proxychains 配置文件。配置文件的修改和命令代理会即时处理。
要通过 Cobalt Strike 代理,请连接到团队服务器、选择一个跳板,然后使用 beacon_exec 命令。详情请参考 Cobalt Strike 章节。
可以使用 socks 命令设置自定义的 SOCKS 版本 4 或 5 代理。
redshell > socks -h
usage: socks [-h] [-u SOCKS5_USER] [-p SOCKS5_PASS] {socks4,socks5} ip_address socks_port
Use a custom socks4/5 server
positional arguments:
{socks4,socks5}
ip_address
socks_port
options:
-h, --help show this help message and exit
-u SOCKS5_USER
-p SOCKS5_PASS
RedShell 会在选择 SOCKS 代理(使用 socks 或 cs_use_pivot 命令)时自动验证连接和认证(如果适用)。可以使用以下命令禁用此功能:set check_socks false
RedShell 的上下文是活动日志的关键部分。上下文允许您设置在目标网络中执行活动的源主机的视角(在活动日志中)。以下上下文属性可以包含在活动日志中:IP 地址、DNS 名称、NetBIOS 名称、用户名和进程 ID。只有 IP 地址是必需的。
关于上下文的说明:
使用 socks 命令设置 socks 代理后,使用 context 命令添加上下文细节。
RedShell> context -h
usage: context [-h] [-d DNSNAME] [-n NETBIOSNAME] [-u USERNAME] [-p PID] ip_address
Set a custom context (Source IP/DNS/NetBIOS/User/PID) for logging
positional arguments:
ip_address Source IP Address
optional arguments:
-h, --help show this help message and exit
-d DNSNAME, --dnsname DNSNAME
DNS Name
-n NETBIOSNAME, --netbiosname NETBIOSNAME
NetBIOS Name
-u USERNAME, --username USERNAME
User Name
-p PID, --pid PID Process ID
如果您在使用团队服务器上的跳板,上下文值会根据 Beacon 自动设置。
命令提示符会自动更新上下文变量(user@host)。
以下 RedShell 命令会被记录到活动日志中:
beacon_exec - 通过 Beacon socks 代理执行命令,并同时记录到团队服务器。proxy_exec - 通过自定义 socks 代理执行命令,并同时记录到本地文件。exec - 执行命令并记录到本地文件。log - 向本地文件添加手动日志条目。
设置 Cobalt Strike 连接选项:
redshell > set cs_host 127.0.0.1
redshell > set cs_port 50050
redshell > set cs_user somedude
连接到团队服务器(将提示输入团队服务器密码):
redshell > cs_connect
示例:

或者从配置文件加载。注意:团队服务器密码不会从配置文件中读取。RedShell 会提示输入团队服务器密码,然后自动连接。
$ cat config.txt
cs_host=127.0.0.1
cs_port=12345
cs_user=somedude
cs_directory=/path/to/cobaltstrike/install
redshell > cs_load_config config.txt
显示可用的代理跳板:
redshell > cs_pivots
示例:

选择一个代理跳板(注意:只有在建立与团队服务器的连接后才能设置):
redshell > cs_use_pivot 2
SOCKS5 pivot requires authentication.
Enter SOCKS5 user: username
Enter SOCKS5 password:
检查 Cobalt Strike 状态:
redshell > cs_status
示例:

通过 Beacon socks 代理执行命令。这些命令可以在当前用户上下文中运行,也可以通过 sudo 运行。命令中指定 'proxychains' 是可选的。所有命令都会被强制通过 proxychains。MITRE ATT&CK 技术 ID 是可选的。
redshell > beacon_exec -h
usage: beacon_exec [-h] [-t TTP] ...
Execute a command through beacon socks proxy and simultaneously log it to the teamserver.
positional arguments:
command Command to execute through the proxy and log.
optional arguments:
-h, --help show this help message and exit
-t TTP, --ttp TTP MITRE ATT&CK Tactic IDs. Comma delimited to specify multiple.
example:
beacon_exec -t T1550.002,T1003.002 cme smb 192.168.1.1 --local-auth -u Administrator -H C713B1D611657D0687A568122193F230 --sam
示例:

关于 RedShell 和 CS 安装目录选项的说明——脚本需要知道自己和 Cobalt Strike 的位置。 如果出现问题,请确保正确设置了目录:
redshell > set redshell_directory /opt/redshell
redshell > set cs_directory /opt/cobaltstrike
关于 *exec 命令中使用的密码的说明:密码中的特殊字符可能会被解释为 shell 元字符,从而导致命令失败。解决方法是:设置密码选项,然后在命令中使用 '$password'。示例:
redshell > set password Test12345
password - was: ''
now: 'Test12345'
redshell > beacon_exec cme smb 192.168.1.14 --local-auth -u administrator -p $password --shares
RedShell 包含用于导航文件系统的命令:
redshell > cd /opt/redshell/
redshell > pwd
/opt/redshell
其他命令可以通过 shell 命令或 '!' 快捷方式运行:
redshell > shell date
Mon 29 Jul 2019 05:33:02 PM MDT
redshell > !date
Mon 29 Jul 2019 05:33:03 PM MDT
命令会被跟踪并可通过 history 命令访问:
redshell > history
1 load_config config.txt
2 status
3 help
RedShell 还支持 Tab 补全和通过 Ctrl + L 清屏。
Datetime,IP Address,DNS Name,NetBIOS Name,User,PID,Activity,TTPs
2021/09/21 14:22:32 +0000,192.168.56.106,,WINDEV,USER,7312,[PROXY] cme smb 192.168.56.105,
说明:
本项目基于 Apache 2.0 开源许可证的条款进行许可。请参阅 LICENSE 获取完整条款。