文章前言
Octopus是基于python开发的一款可操作的C2服务器,可以通过HTTP/S控制Octopus powershell代理,其主要目的是要在任何红队行动之前使用,而不是开始与您的整个作战武库和基础设施接触,您可以在开始实际的红队行动之前先使用Octopus攻击目标并收集信息
Octopus在与C2通信时被设计为隐秘且隐蔽的,因为它在Powershell代理与C2服务器之间的加密通道默认使用AES-256,您还可以通过为您的域提供有效的证书并配置Octopus C2服务器以使用它来选择使用SSL/TLS
功能特性
Octopus具有许多功能,可让您在部署实际需要的军械库、工具和技术之前了解可能会涉及到的点有哪些,例如:
下载文件
执行系统命令
通过HTTP/S控制代理
加载外部Powershell模块
在C2和代理之间使用加密的通道(AES-256)
使用不起眼的技术执行命令并传输结果
为每个目标创建自定义侦听器和多个侦听器
生成不同类型的有效载荷
支持Powershell 2.0或更高版本的所有Windows版本
在不触摸powershell.exe进程的情况下运行Octopus Windows可执行代理
创建自定义配置文件
从端点自动收集信息(端点态势感知)功能
工具安装
获取项目并安装第三方依赖:
git clone https://github.com/mhaskar/Octopus.git
sudo pip3 install -r requirements.txt
同时,您还需要安装mono,以确保可以编译C#源代码而不会出现问题:
apt install mono-devel
之后启用即可:
工具使用
Octopus的使用非常简单,你只需要启动一个侦听器并根据该侦听器的信息生成代理即可。
同时您可以根据需要来生成任意数量的侦听器,然后可以开始与连接到它们的代理进行交互。
Profile设置
在开始使用Octopus之前,您必须设置一个URL处理配置文件,该配置文件将控制C2的行为和功能,因为Octopus是基于HTTP的C2,因此它依赖于URL来处理连接并确保URL不会用作URL。当前攻击网络中的签名或IoC,可以轻松自定义URL并根据需要重命名。
配置文件设置当前仅支持URL处理,但是在接下来的一些更新中,您将能够控制其他选项,例如标题,html模板等。
profile.py文件包含许多关键变量:
file_receiver_url:处理文件下载
report_url:处理ESA报告
command_send_url:处理将发送到目标的命令
command_receiver_url:处理将在目标上执行的命令
first_ping_url:处理来自目标的第一个连接
server_response_header:此标头将在每个响应中显示
例如:
#!/usr/bin/python2.7
# this is the web listener profile for Octopus C2
# you can customize your profile to handle a specific URL to communicate with the agent
# TODO : add the ability to customize the request headers
# handling the file downloading
# Ex : /anything
# Ex : /anything.php
file_reciever_url = "/messages"
# handling the report generation
# Ex : /anything
# Ex : /anything.php
report_url = "/calls"
# command sending to agent (store the command will be executed on a host)
# leave <hostname> as it with the same format
# Ex : /profile/<hostname>
# Ex : /messages/<hostname>
# Ex : /bills/<hostname>
command_send_url = "/view/<hostname>"
# handling the executed command
# Ex : /anything
# Ex : /anything.php
command_receiver_url = "/bills"
# handling the first connection from the agent
# Ex : /anything
# Ex : /anything.php
first_ping_url = "/login"
# will return in every response as Server header
server_response_header = "nginx"
# will return white page that includes HTA script
mshta_url="/hta"
代理和侦听器将配置为使用此配置文件相互通信,接下来,我们需要知道如何创建一个监听器
监听器
章鱼有两个主要的侦听器:" http侦听器"和"https侦听器",这两个侦听器的选项基本相同
HTTP监听器
listen_http 该命令使用以下参数启动:
BindIP:侦听器将使用的IP地址
BindPort:要监听的端口
主机名:您将用于与之通信的主机名
时间间隔:代理在检查命令之前将等待的秒数
URL:承载有效负载的页面的名称(例如:index.php)
Listener_name:要使用的侦听器名称
您还可以通过运行以下listen_http命令来查看示例:
我们可以使用以下命令启动侦听器:
listen_http 0.0.0.0 8080 192.168.174.131 5 index.php operation1
之后将返回以下结果:
侦听器已成功启动,我们可以使用以下listeners命令查看所有侦听器:
HTTPS监听器
要创建HTTPS监听器,可以使用如下listen_https命令查看使用说明:
由于这里没有证书文件,所以我也就不做演示了,具体操作可参考Example,listen_https命令有以下参数:
BindIP:这是侦听器将使用的IP地址
BindPort:您要监听的端口
主机名:将用于请求来自的有效负载
间隔:代理检查命令之前等待的秒数
URL页面:名称将包含有效负载
Listener_name:要使用的侦听器名称
certficate_path:有效ssl证书的路径(letesencrypt证书被称为fullchain.pem)
key_path:ssl证书的有效密钥的路径(letesencrypt证书称为key.pem)
PS:这里需要提供与所使用域关联的有效SSL证书
代理生成
Powershell Oneliner
要为监听器operation1生成代理,我们可以使用以下命令:
generate_powershell operation1
之后在目标机上执行powshell命令,上线:
执行完命令之后powshell将会消失,不会留下任意窗口,隐匿效果较好~
同时,你会在Octopus中收到一个shell,之后使用list查看连接信息:
之后我们可以使用interact命令与主机进行交互,如下所示:
之后你还可以使用help命令列出所有可用命令:
同时,如果要直接指向系统命令,我们可以直接键入命令,然后根据创建监听器时设置的间隔检查时间等待结果
这种情况下,命令已加密,然后发送给代理客户端,之后客户端将解密该命令并执行该命令,代理客户端之后会对结果进行加密,最后再次将其发送该C2进行解密,并显示结果
同时我们还可以使用report命令来获取ESA信息,ESA模块代表“端点态势感知”,它可以帮助攻击者获取有关端点和基础架构的一些额外信息,例如:
OS的构建是什么?
他们正在使用哪种AV/EDR?
他们启用了Sysmon吗?
他们正在使用哪个SIEM收集器?
以及其他一些信息
您可以通过将外部Powershell模块放在modules
目录中,然后执行来加载它load module.ps1,
还可以通过执行以下modules
命令来列出modules目录中的所有模块:
同时您可以使用Octopus从目标计算机上下载文件,只需执行“ download file_path”即可下载文件
HTA oneliner
要为listener1生成HTA oneliner,operation1
我们可以使用以下命令:
generate_hta operation1
我们将得到以下结果:
请注意,您可以/hta
使用profile.py
EXE代理
要为监听器生成EXE代理,operation1
我们可以使用以下命令
generate_exe operation1 /home/HackTools/RedTeam/Octopus/file.exe
之后我们在window 10中运行该文件
之后使用list查看session,至于其他的交互之类的和上面一致,这里就不多做介绍了~
文末小结
个人觉得这里也可以被用于社工钓鱼,有兴趣的可以再研究一下,笔者后期有时间也会再深入进行分析与研究,扩展该工具的使用~
·推 荐 阅 读·