
wp2shell-Hestia-Scanner — Updated!
# HestiaCP 서버용 읽기 전용 WordPress 보안 스캐너 호스팅된 모든 사이트에서 wp2shell 침해 지표(CVE-2026-63030 / CVE-2026-60137)를 탐지합니다 — 사용자별 이메일 보고서, 정상 WordPress와의 핵심 파일 비교, PHP/JS/htaccess/이미지 분석, Claude API를 통한 선택적 AI 평가 기능을 제공합니다.
🛡️ wp2shell-Hestia-Scanner
HestiaCP 서버용 읽기 전용 WordPress 보안 스캐너.
호스팅된 모든 사이트에서 wp2shell 침해 지표를 탐지합니다 — 클라이언트별 이메일 보고서, 코어 파일 diff, SHA256 웹셸 탐지, 위험 점수, 선택적 AI 평가 포함.
⚠️ 안전한 버전: WordPress 6.8.6 / 6.9.5 / 7.0.2 이상.
이 스크립트는 아무것도 수정하지 않습니다 — 전체 과정이 읽기 전용입니다.
🇬🇧 English
wp2shell이란 무엇인가요?
wp2shell은 2026년 7월 17일에 공개된 WordPress 코어의 사전 인증 원격 코드 실행(RCE) 체인입니다. 기본 설치에 대한 단일 익명 HTTP 요청만으로도 악성 관리자 계정을 생성하고 서버에서 임의 코드를 실행할 수 있습니다.
이 체인은 다음을 결합합니다:
- CVE-2026-60137 —
WP_Query의author__not_in매개변수의 SQL 인젝션 - CVE-2026-63030 — REST API
/wp-json/batch/v1엔드포인트의 라우트 혼동
침해된 사이트에는 로그인 접두사 wp2_와 이메일 @wp2shell.invalid을 가진 악성 관리자가 나타납니다.
자세한 정보: https://wp2shell.com
저장소 내용
| 파일 | 용도 |
|---|---|
wp2shell-scan.sh | 빠른 서버 전체 IoC 스캐너 — 색상 구분 터미널 출력, 사이트별 위험 점수, /root/에 자동 저장되는 보고서 |
wp2shell-report-per-user.sh | 전체 스캐너 — HestiaCP 사용자별 이메일 보고서, 코어 파일 diff, SHA256 웹셸 탐지, AI 평가, 위험 점수 |
known_shells.sha256 | 알려진 웹셸 해시 데이터베이스(SHA256) — 실행 시 자동으로 가져옴 |
스캐너가 확인하는 항목
데이터베이스 / 사용자 확인
| 확인 항목 | 심각도 |
|---|---|
| WordPress 버전 vs. 안전한 버전 | HIGH / OK |
wp2_ 접두사 또는 @wp2shell.invalid 이메일을 가진 계정 | CRITICAL |
| 공개(15/07/2026) 이후 생성된 관리자 | MEDIUM |
| 사용자 ID 시퀀스의 공백(삭제된 악성 관리자 흔적) | MEDIUM |
고아가 된 wp_usermeta 행 | MEDIUM |
오염된 oembed_cache / customize_changeset 행 | CRITICAL |
변조된 WP 옵션(upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
코어 파일 무결성
| 확인 항목 | 심각도 |
|---|---|
wp.org 대비 wp core verify-checksums | HIGH |
깨끗한 다운로드 코어 대비 줄 단위 diff -U5 | CRITICAL / HIGH / OK |
| 깨끗한 코어에 없는 추가 파일(콘텐츠 및 메타데이터 표시) | CRITICAL / HIGH |
파일 분석
| 확인 항목 | 심각도 |
|---|---|
uploads/ 내 PHP 파일 | CRITICAL |
추가 PHP 확장자(.php7 .phtml .phar .php5) | HIGH |
| 알려진 웹셸 데이터베이스와 SHA256 일치(WSO, FilesMan, b374k, p0wny…) | CRITICAL |
SINCE_DATE 이후 수정된 PHP 그리고 의심스러운 패턴 일치 — 일치하는 줄 인라인 표시 | CRITICAL / HIGH |
| 의심스러운 패턴이 있지만 최근에 수정되지 않은 PHP | LOW |
SINCE_DATE 이후 수정되고 난독화 패턴과 일치하는 JS/HTML | MEDIUM |
| 외부 C2/데이터 유출 URL(pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
위험한 .htaccess 지시문(AddType, auto_prepend_file, 외부 RewriteRule) | HIGH |
SINCE_DATE 이후 수정된 .htaccess | MEDIUM |
PHP 페이로드가 포함된 폴리글롯 이미지(.jpg/.png 내 <?php…) | CRITICAL |
노출된 백업/설정 파일(wp-config.php.bak, *.sql…) | MEDIUM |
지속성(Persistence)
| 확인 항목 | 심각도 |
|---|---|
curl/wget/php/base64가 포함된 사용자 crontab 항목 | HIGH |
| 사이트 경로를 참조하는 시스템 cron 파일 | MEDIUM |
위험 점수
각 사이트는 모든 발견 항목의 세부 내역과 함께 0–100 위험 점수를 받습니다:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| 점수 | 라벨 |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
요구 사항
- HestiaCP가 실행 중인 Linux 서버
- bash 4.0+
- **WP-CLI**가
wp로 전역 설치 root액세스sendmail(이메일 보고서용)python3(AI 평가 JSON 처리용)curl,sha256sum,file,strings,unzip
WP-CLI 설치(누락된 경우)
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
원라이너 설치 및 실행
빠른 IoC 스캔
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
클라이언트별 이메일 보고서가 포함된 전체 스캔
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
참고: 전체 스캐너는 시작 시 대화형 질문(AI 평가, 보고서 저장, 날짜 기준)을 합니다. 먼저 다운로드한 후 실행하면 프롬프트가 올바르게 작동합니다.
사용법
wp2shell-scan.sh — 빠른 서버 전체 스캔
sudo bash wp2shell-scan.sh
/home/*/web/*/public_html/ 아래의 모든 WordPress 설치를 찾아 모든 검사를 실행하고, 색상 구분 출력을 터미널에 표시하며, 전체 보고서를 /root/wp2shell-report-YYYYMMDD-HHMMSS.txt에 저장합니다.
시작 시 선택적 사용자 지정 날짜 기준을 묻습니다(기본값: 2026-07-15).
wp2shell-report-per-user.sh — 이메일 보고서가 포함된 전체 스캔
sudo bash wp2shell-report-per-user.sh
시작 시 세 가지 질문:
[AI EVALUATION] Use AI evaluation for ambiguous files? [y/N]
[SAVE REPORT] Save a full report file for later review? [y/N]
[DATE THRESHOLD] Use a different date? Leave blank to keep default [YYYY-MM-DD]:
항상 DRY_RUN=1로 시작하세요(기본값) — 이메일은 화면에 미리 보기로 표시되며 전송되지 않습니다. 출력이 올바른지 확인한 후에만 DRY_RUN=0으로 변경하세요.
설정
wp2shell-scan.sh
| 변수 | 기본값 | 설명 |
|---|---|---|
WEB_ROOT | /home | HestiaCP 웹 루트 |
SINCE_DATE | 2026-07-15 | "최근 수정됨" 기준 |
WP | wp | WP-CLI 경로 |
wp2shell-report-per-user.sh
| 변수 | 기본값 | 설명 |
|---|---|---|
DRY_RUN | 1 | 1 = 미리 보기 전용, 0 = 이메일 전송 |
SEND_ONLY_IF_ISSUES | 0 | 1 = 사이트가 깨끗하면 이메일 건너뜀 |
SINCE_DATE | 2026-07-15 | "최근 수정됨" 기준 |
MAIL_FROM | security@<hostname> | 봉투 발신자 |
CORE_CACHE | /root/wp2shell-cores | 깨끗한 코어 캐시 디렉터리 |
ANTHROPIC_API_KEY | (비어 있음) | AI 평가용 Claude API 키 |
AI 평가(선택 사항)
패턴만으로 분류할 수 없는 모호한 diff의 경우, 스캐너는 diff를 Claude API(claude-sonnet-4-6)로 보내고 DANGER, SUSPICIOUS, REVIEW 또는 OK 판정을 한 문장 설명과 함께 반환합니다. AI는 회색 지대에서만 사용됩니다 — 명확한 경우는 API 호출 없이 즉시 분류됩니다.
스크립트에서 키를 설정하거나 실행 전에 내보내세요:
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
API 키: https://console.anthropic.com — claude.ai 구독과는 별개입니다.
API 키가 없으신가요? 브라우저 분석기를 사용하세요
스캔 출력을 Claude.ai의 wp2shell Report Analyzer 아티팩트에 붙여넣으세요 — 자체 키 없이 브라우저에서 동일한 AI 평가를 수행합니다.
출력 형식
심각도 수준
| 라벨 | 색상 | 의미 |
|---|---|---|
[CRITICAL] | 🔴 굵은 빨간색 | 활성 침해 지표 — 즉시 조치 |
[HIGH] | 🔴 빨간색 | 강력한 지표 — 긴급 검토 |
[MEDIUM] | 🟡 노란색 | 의심스러움 — 조사 필요 |
[LOW] | 🔵 파란색 | 낮은 우선순위 — 오탐 가능성 높음 |
[INFO] | ⚫ 회색 | 정보 제공용 |
[OK] | 🟢 녹색 | 깨끗함 / 정상 |
코어 diff 예시
┌─ MODIFIED: wp-includes/load.php
│ [CRITICAL] Assessment (patterns): executable/obfuscated pattern in added lines
│ +20 Core file modified with dangerous pattern
│
│ ORIGINAL: /root/wp2shell-cores/7.0.2-el/wp-includes/load.php
│ SITE: /home/user/web/example.gr/public_html/wp-includes/load.php
│ @@ -212,5 +212,6 @@
│ - $loaded = true;
│ + $loaded = true;
│ + eval(base64_decode('aGVsbG8='));
└──────────────────────────────────────
참고 사항
- 스캐너는 아무것도 수정하지 않습니다. 운영 중인 프로덕션 서버에서 안전하게 실행할 수 있습니다.
- WordPress를 패치된 버전으로 업데이트하면 취약점은 해결되지만 이미 침해된 사이트는 정리되지 않습니다. 지표가 발견되면 깨끗한 백업에서 복원하세요.
CORE_CACHE디렉터리(/root/wp2shell-cores/)는 스캔 간에 재사용됩니다. 새로 다운로드하려면 삭제하세요.known_shells.sha256해시 데이터베이스는 하루에 한 번 자동으로 새로 고쳐집니다.
라이선스
GPL-3.0 — LICENSE 참조
크레딧
wp2shell 공개(2026년 7월)에 대응하여 **BytesPulse**가 개발했습니다.
CVE 정보: https://wp2shell.com
🇬🇷 Ελληνικά
Τι είναι το wp2shell;
Το wp2shell είναι μια αλυσίδα εκμετάλλευσης απομακρυσμένης εκτέλεσης κώδικα (RCE) στον πυρήνα του WordPress, που αποκαλύφθηκε στις 17 Ιουλίου 2026. Ένα μόνο ανώνυμο HTTP αίτημα σε μια προεπιλεγμένη εγκατάσταση αρκεί για τη δημιουργία διαχειριστή και την εκτέλεση αυθαίρετου κώδικα στον server.
Η αλυσίδα συνδυάζει:
- CVE-2026-60137 — SQL injection στην παράμετρο
author__not_inτουWP_Query - CVE-2026-63030 — Route confusion στο REST API
/wp-json/batch/v1
Τα παραβιασμένα sites εμφανίζουν λογαριασμό διαχειριστή με πρόθεμα wp2_ και email @wp2shell.invalid.
Περισσότερες πληροφορίες: https://wp2shell.com
Περιεχόμενα
| Αρχείο | Σκοπός |
|---|---|
wp2shell-scan.sh | Γρήγορος σαρωτής IoC — έγχρωμη έξοδος στο terminal, risk score ανά site, αυτόματη αποθήκευση report στο /root/ |
wp2shell-report-per-user.sh | Πλήρης σαρωτής — email αναφορές ανά HestiaCP user, diff πυρήνα, SHA256 ανίχνευση webshells, AI αξιολόγηση, risk score |
known_shells.sha256 | Βάση δεδομένων SHA256 γνωστών webshells — κατεβαίνει αυτόματα κατά την εκτέλεση |
Τι ελέγχει
Βάση δεδομένων / Χρήστες
| Έλεγχος | Σοβαρότητα |
|---|---|
| Έκδοση WordPress vs. ασφαλείς εκδόσεις | HIGH / OK |
Λογαριασμοί με πρόθεμα wp2_ ή email @wp2shell.invalid | CRITICAL |
| Διαχειριστές που δημιουργήθηκαν μετά την αποκάλυψη (15/07/2026) | MEDIUM |
| Κενά στην ακολουθία user-ID (ίχνη διαγραμμένου rogue admin) | MEDIUM |
Orphaned wp_usermeta rows | MEDIUM |
Δηλητηριασμένα oembed_cache / customize_changeset rows | CRITICAL |
Αλλοιωμένες WP επιλογές (upload_path, auto_prepend_file, siteurl) | CRITICAL / HIGH |
Ακεραιότητα αρχείων πυρήνα
| Έλεγχος | Σοβαρότητα |
|---|---|
wp core verify-checksums vs. wp.org | HIGH |
Γραμμή-γραμμή diff -U5 έναντι καθαρού πυρήνα | CRITICAL / HIGH / OK |
| Επιπλέον αρχεία που δεν υπάρχουν στον καθαρό πυρήνα | CRITICAL / HIGH |
Ανάλυση αρχείων
| Έλεγχος | Σοβαρότητα |
|---|---|
PHP αρχεία στο uploads/ | CRITICAL |
Επιπλέον PHP extensions (.php7 .phtml .phar .php5) | HIGH |
| SHA256 αντιστοίχιση με γνωστά webshells (WSO, FilesMan, b374k, p0wny…) | CRITICAL |
PHP που τροποποιήθηκε μετά το SINCE_DATE ΚΑΙ περιέχει ύποπτο pattern — με την ακριβή γραμμή | CRITICAL / HIGH |
| PHP με ύποπτα patterns που ΔΕΝ τροποποιήθηκε πρόσφατα | LOW |
JS/HTML τροποποιημένα μετά το SINCE_DATE με obfuscation patterns | MEDIUM |
| Εξωτερικές C2/εξαγωγή δεδομένων URLs (pastebin, ngrok, Discord webhooks, bit.ly…) | CRITICAL |
Επικίνδυνα directives σε .htaccess | HIGH |
.htaccess τροποποιημένο μετά το SINCE_DATE | MEDIUM |
| Polyglot εικόνες με PHP payload | CRITICAL |
| Εκτεθειμένα backup/config αρχεία | MEDIUM |
Persistence
| Έλεγχος | Σοβαρότητα |
|---|---|
Crontab χρήστη με curl/wget/php/base64 | HIGH |
| System cron αρχεία που αναφέρουν το path του site | MEDIUM |
Risk Score
Κάθε site λαμβάνει βαθμολογία 0–100 με ανάλυση κάθε ευρήματος:
+------------------------------------------+
| RISK SCORE: 96/100 COMPROMISED |
+------------------------------------------+
+40 wp2shell fingerprint account
+30 PHP file(s) inside uploads/
+20 Vulnerable WordPress version
+6 Core checksum failure
| Βαθμολογία | Κατηγορία |
|---|---|
| 0–20 | Probably Clean |
| 21–40 | Low Risk |
| 41–60 | Medium Risk |
| 61–80 | High Risk |
| 81+ | COMPROMISED |
Απαιτήσεις
- Linux server με HestiaCP
- bash 4.0+
- WP-CLI εγκατεστημένο ως
wp - Πρόσβαση
root sendmail(για αποστολή email)python3(για AI αξιολόγηση)curl,sha256sum,file,strings,unzip
Εγκατάσταση WP-CLI (αν λείπει)
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar && sudo mv wp-cli.phar /usr/local/bin/wp
Εγκατάσταση με μία εντολή
Γρήγορος σαρωτής IoC
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-scan.sh | sudo bash
Πλήρης σαρωτής με email αναφορές
curl -fsSL https://raw.githubusercontent.com/BytesPulse-OE/wp2shell-Hestia-Scanner/main/wp2shell-report-per-user.sh \
-o wp2shell-report-per-user.sh && sudo bash wp2shell-report-per-user.sh
Χρήση
wp2shell-scan.sh
sudo bash wp2shell-scan.sh
Βρίσκει αυτόματα όλα τα WordPress installs κάτω από /home/*/web/*/public_html/, εκτελεί όλους τους ελέγχους, τυπώνει έγχρωμη έξοδο στο terminal και αποθηκεύει πλήρες report στο /root/.
wp2shell-report-per-user.sh
sudo bash wp2shell-report-per-user.sh
Κατά την εκκίνηση ρωτά τρία πράγματα:
[AI EVALUATION] Χρήση AI αξιολόγησης για αμφίβολα αρχεία; [y/N]
[SAVE REPORT] Αποθήκευση πλήρους report σε αρχείο; [y/N]
[DATE THRESHOLD] Διαφορετική ημερομηνία; Αφήστε κενό για default [YYYY-MM-DD]:
Ξεκινήστε πάντα με DRY_RUN=1 (default) — τα emails εμφανίζονται στην οθόνη, δεν στέλνονται. Αλλάξτε σε DRY_RUN=0 μόνο αφού επιβεβαιώσετε ότι η έξοδος είναι σωστή.
Ρυθμίσεις
wp2shell-scan.sh
| Μεταβλητή | Default | Περιγραφή |
|---|---|---|
WEB_ROOT | /home | Root φάκελος HestiaCP |
SINCE_DATE | 2026-07-15 | Κατώφλι "πρόσφατα τροποποιημένων" |
WP | wp | Διαδρομή WP-CLI |
wp2shell-report-per-user.sh
| Μεταβλητή | Default | Περιγραφή |
|---|---|---|
DRY_RUN | 1 | 1 = μόνο preview, 0 = αποστολή emails |
SEND_ONLY_IF_ISSUES | 0 | 1 = email μόνο αν βρεθεί κάτι |
SINCE_DATE | 2026-07-15 | Κατώφλι "πρόσφατα τροποποιημένων" |
MAIL_FROM | security@<hostname> | Sender email |
CORE_CACHE | /root/wp2shell-cores | Cache καθαρών πυρήνων |
ANTHROPIC_API_KEY | (κενό) | Claude API key για AI αξιολόγηση |
AI Αξιολόγηση (προαιρετική)
Για αμφίβολα diffs που τα patterns δεν μπορούν να ταξινομήσουν, ο σαρωτής στέλνει το diff στο Claude API (claude-sonnet-4-6) και επιστρέφει ετυμηγορία: DANGER, SUSPICIOUS, REVIEW, ή OK με μία πρόταση εξήγηση. Το AI χρησιμοποιείται μόνο στη γκρίζα ζώνη.
export ANTHROPIC_API_KEY='sk-ant-api03-...'
sudo -E bash wp2shell-report-per-user.sh
API keys: https://console.anthropic.com — ξεχωριστό από τη συνδρομή claude.ai.
Χωρίς API key; Χρησιμοποιήστε τον browser analyzer
Κάντε paste το output του scan στο wp2shell Report Analyzer artifact στο Claude.ai — εκτελεί την ίδια AI αξιολόγηση απευθείας στον browser.
Σημειώσεις
- Ο σαρωτής δεν τροποποιεί τίποτα. Ασφαλής εκτέλεση σε live production servers.
- Η ενημέρωση του WordPress στην patched έκδοση κλείνει την ευπάθεια αλλά δεν καθαρίζει ένα ήδη παραβιασμένο site. Αν βρεθούν indicators, επαναφέρετε από καθαρό backup.
- Ο φάκελος
CORE_CACHE(/root/wp2shell-cores/) επαναχρησιμοποιείται μεταξύ scans. Διαγράψτε τον για αναγκαστική επαναλήψη. - Η βάση
known_shells.sha256ανανεώνεται αυτόματα μία φορά ανά 24 ώρες.
Άδεια
GPL-3.0 — δείτε LICENSE
Credits
Αναπτύχθηκε από την BytesPulse σε απόκριση της αποκάλυψης wp2shell (Ιούλιος 2026).
Πληροφορίες CVE: https://wp2shell.com