Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
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
211 mese 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.
  • 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 -

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

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

    Questo repository implementa il ponte: non richiede privilegi di database oltre a quelli che WordPress ha già, funziona quando i livelli DB e web non condividono nulla e non lascia alcun file dietro di sé su cui il percorso basato sul privilegio FILE possa dipendere. Il compromesso è la complessità - il ponte è un grafo di post avvelenati di sette righe - che è esattamente il punto in cui il falso negativo della cache degli oggetti di §1 nascondeva il percorso.

    3. Impostazioni di sicurezza predefinite per l'uso autorizzato

    Progettato per essere eseguito contro sistemi in produzione sotto autorizzazione, non solo laboratori:

    • check è non distruttivo di default - fingerprint passiva più un batch benigno di marker; nessun payload SQL viene inviato a meno che non venga fornito --confirm-sqli. Dopo la patch, la tripletta di marker che scompare funge anche da validazione della correzione.
    • Tag di attribuzione - --user-agent su ogni comando così che tutto il traffico di exploit sia identificabile nei log (una regola pratica degli engagement che gli strumenti pubblici non applicano di default).
    • Pulizia automatica - la webshell è bloccata da token su un percorso randomizzato e si rimuove da sola; un amministratore creato tramite il ponte viene eliminato successivamente con i suoi contenuti riassegnati all'account admin preso in prestito. Il fallimento della pulizia viene segnalato chiaramente, non ignorato.
    • Contabilità delle richieste - ogni comando stampa quante richieste ha inviato.

    4. Cosa questo repository non sostiene

    • Nessuna nuova vulnerabilità. Entrambi i bug sono le CVE divulgate pubblicamente; la forma di batch doppiamente annidato, il sink author_exclude → author__not_in, la primitiva UNION del finto WP_Post e il concetto di customizer-bridge sono tutte tecniche pubbliche (discendenza riconosciuta sotto).
    • Nessuna nuova primitiva di sfruttamento. Il delta rispetto al panorama pubblico è: la correzione killed-base per la cache degli oggetti con evidenze di produzione, le impostazioni predefinite sicure per la produzione e la documentazione del rilevamento - robustezza e sicurezza operativa, non novità di tecnica.
    • Le stringhe IoC sono arbitrarie. I prefissi di login, gli slug dei plugin, i marker di shell e i valori User-Agent differiscono tra ogni variante e per ogni esecuzione;

    Riferimenti

    • Icex0/wp2shell-poc - implementazione full-chain condivisa dalla discendenza di questo repository - https://github.com/Icex0/wp2shell-poc
    • sergiointel/wp2shell-poc - primo PoC pubblico; origine della tecnica di creazione admin senza crack - https://github.com/sergiointel/wp2shell-poc
    • 0xsha/wp2shell - unificatore a file singolo di sei PoC pubblici, con lab Docker e una matrice versione×DB (documenta la precondizione della cache degli oggetti) - https://github.com/0xsha/wp2shell
    • Variante OUTFILE (lettura blind + dropper INTO OUTFILE), rispecchiata su Sploitus - https://sploitus.com/exploit?id=7CD079AD-E27B-5C54-A696-60635BFDB241
    • Elenco curato di PoC e checker pubblici (per i difensori) - https://www.cyberkendra.com/2026/07/wp2shell-guide.html
    • GHSA-ff9f-jf42-662q / GHSA-fpp7-x2x2-2mjf; annuncio di rilascio di WordPress 7.0.2 - vedi i riferimenti in README.md.
    Scarica lo strumento