写在前面
项目地址 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 updatesudo apt-get install build-essential
安装 git 和下载项目,当然也可以进入官网自行下载并 copy 到 kali 里
apt install gitgit clone https://github.com.cnpmjs.org/DasSecurity-HatLab/AoiAWD.git
安装 inotifywait
mkdir inotifywaitcd inotifywaitwget https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz #下载tar zxf inotify-tools-3.14.tar.gzcd inotify-tools-3.14/./configure && make && make install
可用 man inotifywait 命令查看文档以确定是否安装正确
安装 mongdb 和需要的依赖
sudo apt install mongodb-serversudo apt-get install php7.4-dev php-pearsudo pecl install mongodb
可以直接启动服务
sudo service mongodb startsudo service mongodb status #查看状态
安装会出现提示
You should add "extension=mongodb.so"to php.ini
在/etc/php/cli/phpini
(根据你的php版本和操作系统找到对应的phpini位置)中加上extension=mondb.so
表示启用相关拓展
并且这里需要把 phar.readonly
和 phar.require_hash
关掉(取消相关注释)
构建 Fronted
apt install npm # 安装npmcd AoiAWD # 进入下载的项目cd Frontendnpm installnpm run build
这里 npm 和 node 可能出现版本不兼容的问题,这里使用nvm对 node.js进行管理,分别回退node npm到v12.22.12 6.14.16
可以顺利构建
构建 AoiAWDcore
在 AoiAWD 文件夹中
cd AoiAWDrm -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 start
或
sudo systemctl start mongodb
cd AoiAWDsudomongod./aoiawd.phar
一串 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 权限不足导致的。尝试了下面几条命令(我也不知道哪个生效了)
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
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
- 重新加载 Systemd 配置: 编辑完成后,保存文件并执行以下命令重新加载 Systemd 配置:
sudo systemctl daemon-reload
- 启用 MongoDB 服务: 接下来,使用以下命令启用 MongoDB 服务,这样它就会在系统启动时自动启动:
sudo systemctl enable mongodb
- 启动 MongoDB 服务: 最后,启动 MongoDB 服务,使配置生效:
sudo systemctl start mongodb
- 确保 MongoDB 服务已成功启动:
sudo systemctl status mongodb