2043 words
10 minutes
AoiAWD安装部署记录
2024-04-18

写在前面

项目地址 DasSecurity-HatLab/AoiAWD已经是五年前的项目(截止于本文2024年)不一定能在现代的比赛起到作用,本文章作用仅作记录/随笔。在正式比赛前酌情使用。

系统简介#

AoiAWD 分为六个组件,组件间互相配合实现系统的完整功能

MongoDB Server: 日志数据存储数据库
AoiAWD Core: 中心数据处理与插件后端服务器
Frontend: 数据可视化平台前端
Guardian: PWN 行为探针
TapeWorm: Web 行为探针
RoundWorm: 系统进程与文件系统行为探针

MongoDB Server#

用于记录庞大的流量文件的数据库,是整个系统的核心存储。 一般情况下建议和 AoiAWD Core 一起部署在选手自己可控的主机上。
无需额外的配置,Ubuntu 环境下开箱即用,apt安装即可。
Frontend。Vue 编写的 Web 前端,用来浏览日志,产生报警动画等可视化展示。 使用 npm 编译打包。
一般情况下编译后将与 AoiAWD Core 集成为一个可执行文件。
无需单独的运行启动。

AoiAWD Core#

是整个系统运行的核心,负责探针数据收集入库、插件生命周期管理、Web 前端托管服务。

运行 compile.php 即可打包为一个单独的二进制文件,方便携带。
插件需要放到和 aoiawd.phar 同目录下的 plugins 文件夹,Web 端有直接重载插件的按钮,可以实现热更新。
一般情况下可直接无参数运行,如果需要特别的配置,可以增加 - h 参数查看帮助信息。

构建过程#

构建 AoiAWD Core#

安装所需模块 build-essential

sudo apt-get update
sudo apt-get install build-essential

安装 git 和下载项目,当然也可以进入官网自行下载并 copy 到 kali 里

apt install git
git clone https://github.com.cnpmjs.org/DasSecurity-HatLab/AoiAWD.git

安装 inotifywait

mkdir inotifywait
cd inotifywait
wget https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz #下载
tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure && make && make install

可用 man inotifywait 命令查看文档以确定是否安装正确 image.png

安装 mongdb 和需要的依赖

sudo apt install mongodb-serversudo apt-get install php7.4-dev php-pearsudo pecl install mongodb

可以直接启动服务

sudo service mongodb startsudo service mongodb status #查看状态

image.png

安装会出现提示
You should add "extension=mongodb.so"to php.ini
/etc/php/cli/phpini(根据你的php版本和操作系统找到对应的phpini位置)中加上extension=mondb.so表示启用相关拓展 并且这里需要把 phar.readonly phar.require_hash 关掉(取消相关注释) image.png image.png

构建 Fronted#

apt install npm # 安装npm
cd AoiAWD # 进入下载的项目
cd Frontend
npm install
npm run build

这里 npm 和 node 可能出现版本不兼容的问题,这里使用nvm对 node.js进行管理,分别回退node npm到v12.22.12 6.14.16可以顺利构建 image.png

构建 AoiAWDcore#

在 AoiAWD 文件夹中

cd AoiAWD
rm -r src/public/*
cp -r ../Frontend/dist/* src/public/ #复制静态资源
php compile.php

执行成功后可以得到 aoiawd.phar,用于 web 端启动

构建 TapeWorm#

cd TapeWormphp compile.php

构建成功后得到 tapeworm.phar探针

构建 Guardian#

cd Guardianphp compile.php

构建成功后得到 guardian.phar探针

构建 RoundWorm#

cd RoundWormmake

构建成功会得到 roundworm探针

食用方法#

启动 AoiAWD#

如果前面没有启动 MongoDB 的话现在启动
sudo service mongodb startsudo systemctl start mongodb

cd AoiAWDsudo
mongod
./aoiawd.phar

image.png

一串 Token 用于 web 端登录,
默认 1337 是 web 访问端口,8023 为探针接收端口
加入参数可以修改端口
AoiAWD: Data Visualization Tool & Main Server

Usage: ./aoiawd.phar [OPTIONS]
-w [URI] HTTP server bind URI. Default: tcp://0.0.0.0:1337
-l [URI] Log recoard server bind URI. Default: tcp://0.0.0.0:8023
-m [URI] MongoDB server URI. Default: mongodb://127.0.0.1:27017
-t [STRING] Access token. Default: [RANDOM]
-h This help info

Guardian#

一个二进制 PWN 的影子外壳,其原理是包裹在 PWN 题目外侧,在每次被启动的时候透明记录 STDIN 与 STDOUT 的流量,并快照 PWN 程序的内存结构 (/proc/????/mem) 上传回 AoiAWD Core。

  • 在项目目录运行 compile.php 将会编译影子壳程序和捆绑程序: guardian.phar,一般是在选手电脑上进行捆绑后将生成文件上传到靶机。
  • 直接运行捆绑程序会输出帮助文本,其中比较重要的一些参数是:
    • -i: 输入需要套壳的 PWN 题目程序路径
    • -s: 输入可以从靶机访问到探针上线地址的 URL,比如说 192.168.???.???:8023
Guardian: AoiAWD ELF PWNMonitor ToolUsage: ./guardian.phar [PATH]
-i [PATH] Original ELF.
-o [PATH] Path of patched ELF. Default: {$OriginalELF}.guardianed
-s [URI] Log recoard server URI. Default: 127.0.0.1:8023
-h This help info

TapeWorm#

一个 PHP Web 的影子外壳,其原理是自动注入到所有 PHP 文件的头部,支持输入输出流量的抓取与上报,同时具有处理输出数据的能力,实现输出内容篡改。

  • 程序内部的代码已经实现了单实例启动,即便是层层 include 了多次,也只会运行最先触发的影子外壳。所以不用担心复杂的题目影响性能。
  • 自动注入程序会智能识别面向对象的文件 (包含 namespace 关键字),和直接面向过程的 PHP 文件,一般情况下不会造成语法错误。
  • 自动注入程序会识别已经被注入的脚本并加以跳过,所以多次反复无脑对 web 根目录运行注入程序并不会造成什么太大的问题。
  • 运行 compile.php 就可以生成自动注入程序,一般情况下可以上传到靶机上直接对 web 根目录进行注入,或者在选手电脑上注入好之后再上传到靶机上。
  • 一时注入一时爽,忘记备份宕机慌
  • 直接运行注入程序会显示帮助文本,其中比较重要的一些参数是:
    • -d: 需要注入外壳的 web 根目录,会从此目录递归感染所有的 PHP 文件。
    • -s: 输入可以从靶机访问到探针上线地址的 URL,比如说 192.168.???.???:8023。
TapeWorm: AoiAWD PHP WebMonitor ToolUsage: ./tapeworm.phar [PATH]
-d [PATH] WebMonitor inject dir.
-s [URI] Log recoard server URI. Default: 127.0.0.1:8023
-f [PATH] Inject file path. Default: {$dir}
-h This help info

RoundWorm#

一个监控文件系统和进程的系统行为监视器,其原理是扫描 /proc 文件夹获取当前正在运行的所有进程的信息,以及利用 Linux 系统的 inotify 功能对指定文件夹的敏感文件操作进行全面的记录。

  • 直接运行 make 就可以编译生成
  • 一般来讲该程序在靶机上运行,选手电脑上没必要执行这玩意。
  • 添加 - h 参数即可看到帮助文档,其中比较重要的一些参数是:
    • -d: 后台运行,你当然不想关掉 ssh 的时候就把探针也给关了。
    • -s: 输入可以从靶机访问到探针上线地址的 IP,比如说 192.168.???.???。
    • -w: 需要监控文件变化的路径,如果有多个路径使用’;’分割,比如: -w “/tmp;/var/www/html”
RoundWorm: AoiAWD Filesystem & Process Monitor ToolUsage: ./roundworm [OPTIONS] -d Running in daemon mode. -s [HOST] AoiAWD Probe IP. Default: 127.0.0.1 -p [PORT] AoiAWD Probe PORT. Default: 8023 -w [PATH] Inotify watch dir, ';' as divider. Default: /tmp -i [MSECOND] Process watch interval. Default: 100 -h This help info

关于本地运行时踩到的坑#

1. 运行后没反应#

我这里测试平台是 web 端架设在 kali,TapeWorm 注入 ubuntu 的 apache2 php,访问测试没反应可以查看 apache 的错误报告
我这里的问题是 apache 权限不足导致的。尝试了下面几条命令(我也不知道哪个生效了) image.png

chown www-data:www-data /home/tomato/TapeWorm.661e2ef90ad6d.phpchmod 644 /home/tomato/TapeWorm.661e2ef90ad6d.phpchmod +x /homechmod +x /home/tomato

2. 忘了开 mongodb#

systemctl start mongodb

image.png

3. 防止笨蛋忘了开服务#

鉴于上一条贴一个自启动 mongodb 的配置方法
需要创建一个 Systemd 服务配置文件来描述 MongoDB 的启动参数和行为。在 /etc/systemd/system 目录下创建一个新文件,命名为 mongodb.service,并编辑该文件,添加以下内容:

[Unit]Description=MongoDB Database ServerAfter=network.target [Service]User=mongodbGroup=mongodbExecStart=/usr/bin/mongod --config /etc/mongod.confExecReload=/bin/kill -HUP $MAINPIDRestart=alwaysPrivateTmp=true [Install]WantedBy=multi-user.target
  1. 重新加载 Systemd 配置: 编辑完成后,保存文件并执行以下命令重新加载 Systemd 配置:
    sudo systemctl daemon-reload
  2. 启用 MongoDB 服务: 接下来,使用以下命令启用 MongoDB 服务,这样它就会在系统启动时自动启动:
    sudo systemctl enable mongodb
  3. 启动 MongoDB 服务: 最后,启动 MongoDB 服务,使配置生效:
    sudo systemctl start mongodb
  4. 确保 MongoDB 服务已成功启动:
    sudo systemctl status mongodb
AoiAWD安装部署记录
https://kmk.moe/posts/ctfs/aoiawd/
Author
DakoWang
Published at
2024-04-18
License
CC BY 4.0