Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
wp2shell-poc — Analisi e implementazione end-to-end della vulnerabilità RCE di WordPress patchata - CVE-2026-60137 e CVE-2026-63030 | Kitploit
Strumenti/GitHubGitHub/colere-sys/wp2shell-poc
Framework di ExploitAnalisi delle VulnerabilitàSfruttamento di Applicazioni WebCTFPenetration TestingApprendimento e FormazioneRed TeamingSviluppo Payload
GitHubcolere-sys/wp2shell-poc

wp2shell-poc

Analisi e implementazione end-to-end della vulnerabilità RCE di WordPress patchata - CVE-2026-60137 e CVE-2026-63030

Vedi Repository
2273 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

plot

Come funziona tutto questo

plot

In cosa questo PoC differisce dagli exploit wp2shell pubblici

Tutti i PoC sfruttano gli stessi due bug - la confusione di route REST batch (CVE-2026-63030) e l'iniezione SQL author__not_in (CVE-2026-60137) - con la stessa forma di batch doppiamente annidato. Ciò che differisce tra loro è il percorso RCE scelto, le precondizioni di ambiente e le impostazioni di sicurezza predefinite. Questo documento dichiara, concretamente, dove si colloca l'implementazione in questo repository in quel panorama.

La versione breve

  1. Funziona dietro una cache degli oggetti persistente. I PoC pubblici basati su UNION usano la forma di iniezione a base popolata: l'implementazione full-chain condivisa da questa discendenza produce lì falsi negativi, e l'unificatore a file singolo elenca "nessuna cache degli oggetti persistente" come precondizione esplicita. La forma killed-base di questo repository mantiene vivo il canale UNION - e quindi l'intero ponte RCE pre-autenticazione - esattamente su quegli host (il comune setup WordPress gestito). Vedi §1.
  2. Sicuro da eseguire contro la produzione di default. check non invia alcun payload SQL se non richiesto; tutto il traffico può portare un tag di attribuzione; tutto ciò che il comando shell scrive sul target viene rimosso automaticamente in seguito. Vedi §3.

Tabella di confronto

CapacitàQuesto repositoryIcex0/wp2shell-pocsergiointel/wp2shell-poc0xsha/wp2shellVariante OUTFILE [4]
Lettura SQLi blind/timing pre-autenticazionesìsìsì (timing)sìsì
Lettura UNION in-band (1 richiesta/valore)sìsì- [1]- [1]-
Lettura basata su errori (EXTRACTVALUE)sìsì---
Il canale UNION sopravvive alla cache degli oggetti persistentesì (killed-base)no - la sonda dà falsi negativi [2]non documentatono - precondizione documentata [3]n/a [5]
RCE pre-autenticazione senza cracksì (ponte SQLi→admin)sì (stesso ponte)sì (origine del ponte)sì (stesso ponte)sì, tramite INTO OUTFILE [5]
Precondizioni aggiuntive per la RCEnessuna oltre all'installazione predefinitanessuna (su host senza cache degli oggetti)nessuna (idem)nessuna (idem)privilegio FILE MySQL + percorso scrivibile dal web condiviso con mysqld
Check non distruttivo / validazione della patchsì (tripletta di marker; nessun payload di default)sìnosì (block_cannot_read)sì (batch di marker)
Tag di attribuzione/User-Agentsì, su tutti i comandinonoflag di trasportono
Pulizia automatica (webshell + admin generato)sìsìnon documentatosolo webshell protetta da tokendropper rimosso [5]
Guida al rilevamento per il blue teamsì, da un'esecuzione in produzionenonomatrice di laboratorio invecenote di mitigazione
Dipendenzesolo stdlibsolo stdlibfile singolosolo stdlib, file singolopacchetto Python ≥3.10

[1] Solo timing/blind come canale di lettura; la primitiva UNION del finto post esiste all'interno del ponte ma non è esposta come oracolo di estrazione. [2] La sonda di disponibilità ingenua (0) UNION SELECT …) viene silenziosamente scartata durante l'idratazione della cache degli oggetti, available() restituisce false e l'intero ponte pre-autenticazione si interrompe - vedi §1. [3] Il README del progetto stesso elenca "nessuna cache degli oggetti persistente (Redis/Memcached)" tra le Precondizioni. [4] Variante pubblica rispecchiata su Sploitus (link sotto): lettura blind più un dropper INTO OUTFILE come passo RCE, usando un carrier di categorie per_page=-1. [5] Il percorso RCE OUTFILE non dipende dal rendering del finto post, quindi le cache degli oggetti non lo bloccano - a bloccarlo sono il privilegio MySQL FILE e una directory scrivibile condivisa. L'hosting gestito non concede quasi mai FILE all'utente DB di WordPress, e secure_file_priv è comunemente impostato.

1. Il problema della cache degli oggetti (il vero elemento distintivo)

La primitiva UNION del finto post dipende da come WP_Query restituisce le righe:

  • Modalità riga intera - la SQL restituisce intere righe di wp_posts; una riga iniettata con UNION diventa direttamente un WP_Post. Il falso viene renderizzato.
  • Modalità suddivisa (solo ID) - la SQL restituisce solo gli ID, e ogni ID viene idratato successivamente tramite la cache degli oggetti (persistente) / il database. L'ID della riga falsificata non esiste, quindi l'idratazione lo scarta silenziosamente. Nessun errore, nessun post falsificato.

Su host con cache degli oggetti persistente, un set di base popolato spinge WP_Query in modalità suddivisa. La sonda standard usata dai PoC pubblici -

0) UNION SELECT <forged row> -- -
  • lascia il set di base popolato (post_author NOT IN (0) corrisponde a ogni riga), quindi dietro una cache degli oggetti la riga falsificata evapora: la sonda di disponibilità dà un falso negativo, available() restituisce false e l'intero ponte pre-autenticazione viene segnalato come "morto" su un host che in realtà è pienamente sfruttabile. L'unificatore pubblico documenta lo stesso confine elencando "nessuna cache degli oggetti persistente" come precondizione rigida.

Questo repository invece svuota il set di base:

1) AND 1=0 UNION ALL SELECT <forged row> -- -

Con zero righe di base, la riga falsificata è l'unica riga; la query resta in modalità riga intera; nessuna lookup di idratazione viene mai eseguita. Una singola parola chiave iniettata (AND 1=0) è l'intera differenza tra "canale UNION morto" e "RCE pre-autenticazione completa" su host con cache degli oggetti - che sono la maggioranza degli ambienti di produzione WordPress gestiti. La diagnosi, la matrice di sondaggio (per_page × forma di iniezione).

Nota sull'ambito: il canale di lettura blind/timing non è sensibile alla cache degli oggetti (contare le righe in SQL non coinvolge l'idratazione del finto post), quindi la lettura blind di ogni PoC funziona ovunque. Ciò che la cache degli oggetti uccide negli altri PoC è specificamente la parte dipendente da UNION: l'estrazione in-band e il ponte SQLi→admin.

Una seconda lezione correlata documentata nel case study: quando entrambi i canali funzionano, considera la lettura UNION in-band come autorevole - l'oracolo timing in produzione ha prodotto bit flippati in condizioni di jitter su un valore che la lettura in-band ha risolto senza ambiguità.

2. Scelta del percorso RCE

Esistono tre percorsi RCE pre-autenticazione nei PoC pubblici:

PercorsoUsato daPrecondizioni aggiuntive
Ponte SQLi→admin (forgiare righe oEmbed/changeset/nav → POST /wp/v2/users → login → upload plugin)questo repository, sergiointel (origine), Icex0, 0xshanessuna oltre a un'installazione predefinita
Dropper INTO OUTFILE (scrive un file PHP tramite SQLi, lo recupera per ottenere una shell)variante OUTFILE [4]privilegio MySQL FILE, secure_file_priv che lo consente e una directory scrivibile da mysqld e servita dal web server
Recupero hash → crack → login (dump di user_pass, crack offline, poi upload del plugin)tutti (come fallback)l'hash bcrypt deve effettivamente craccarsi ($wp$2y$, hashcat -m 35500) - lento, spesso mai
Scarica lo strumento