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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
wp2shell — PoC di RCE pre-autenticazione per il core di WordPress — combina CVE-2026-63030 (desync route-confusion REST /batch/v1) con CVE-2026-60137 (SQLi author__not_in) per ottenere una shell non autenticata. Solo test autorizzati. | Kitploit
Strumenti/GitHubGitHub/mcipekci/wp2shell
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPost-ExploitSicurezza WebPenetration TestingCommand and ControlRed TeamingSviluppo Payload
GitHub
158252 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
mcipekci/wp2shell

wp2shell

PoC di RCE pre-autenticazione per il core di WordPress — combina CVE-2026-63030 (desync route-confusion REST /batch/v1) con CVE-2026-60137 (SQLi author__not_in) per ottenere una shell non autenticata. Solo test autorizzati.

Vedi Repository

wp2shell — RCE pre-auth nel core di WordPress

PoC di RCE non autenticata nel core di WordPress che combina CVE-2026-63030 + CVE-2026-60137. Solo test autorizzati.

wp2shell.py è una proof of concept a file singolo, basata solo sulla libreria standard, che incatena due vulnerabilità del core di WordPress in esecuzione remota di codice non autenticata:

CVEComponenteBug
CVE-2026-63030handler REST /batch/v1desync da confusione di route — il batch handler perde la sincronizzazione tra la sua tabella handler e la sua tabella validation quando il path di una sub-request non viene parsato, quindi una sub-request viene instradata tramite un handler per cui non è mai stata validata.
CVE-2026-60137WP_QuerySQL injection scalare — il valore author__not_in viene incollato direttamente nell'SQL, quindi una stringa che lo raggiunge è iniettabile.

Nessuna delle due è RCE da sola. Il desync è il vettore (fa passare di nascosto una stringa dell'attaccante in una query che non dovrebbe mai raggiungere); l'iniezione è la primitive. Insieme danno a un attaccante pre-auth un oracle completo di lettura/scrittura SQL e, da lì, una shell funzionante.

⚠️ Solo test autorizzati. Questo exploit colpisce installazioni WordPress live. Usalo solo contro sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta al test.


Versioni interessate

Vulnerabili: 6.8.0–6.8.5, 6.9.0–6.9.4, 7.0.0–7.0.1 Corrette: 6.8.6, 6.9.5, 7.0.2 (e successive) Segnalate da Adam Kues (Assetnote / Searchlight Cyber); la SQLi è stata attribuita anche a TF1T, dtro, haongo.

Solo la 6.9.0–7.0.1 è in grado di eseguire RCE. Sulla serie 6.8.x il desync scatta ancora, ma il ramo che dovrebbe disallineare l'handler incontra invece un fatal WP_Error::get_method() — quindi la 6.8.x è un denial-of-service / crash, non una shell. Il tool lo rileva e ti dice quale primitive è disponibile.


Come funziona la catena

L'exploit è costruito a strati; ognuno è un ponte verso il successivo.

  1. Desync (CVE-2026-63030). Una richiesta batch ne annida una seconda. Una sub-request trasporta un path deliberatamente malformato (http://:, che wp_parse_url() rifiuta). Nella 6.9.0+ il parse fallito fa sì che le tabelle handler e validation si disallineino di una voce, quindi la successiva sub-request viene eseguita con un handler per cui non è mai stata validata — la collection pubblica dei post.

  2. Iniezione (CVE-2026-60137). Quella chiamata instradata erroneamente raggiunge WP_Query con un author__not_in controllato dall'attaccante. Un UNION ALL SELECT lì non legge le righe — le fabbrica, permettendoci di forgiare post arbitrari nel risultato della query.

  3. Ponte SQL → scrittura. I post fabbricati trasportano markup [embed]. WordPress li risolve diligentemente e li mette in cache come vere righe di post-meta oembed_cache — trasformando un'iniezione di sola lettura in una primitive di scrittura arbitraria.

  4. Pivot dei privilegi. Usando quel ponte di scrittura forgiamo (a) un changeset del customizer creato come il vero amministratore e (b) un post request auto-referenziale. Insieme costringono WordPress a rieseguire la propria pipeline di request come quell'admin — una finestra appena abbastanza lunga perché una chiamata POST /wp/v2/users in coda crei un nuovo amministratore.

  5. Shell. Accedi come nuovo admin, carica un plugin, esegui il comando. L'account, la sua meta, le righe oembed e la webshell vengono tutti ripuliti in seguito — non rimane alcuna impronta persistente.

Oracle di estrazione

Per il lato di lettura (--dump, risoluzione del prefisso, ID in cache) il tool seleziona automaticamente l'oracle più veloce che funziona e si ferma al primo risultato:

  1. union — UNION in-band: il post_title della riga forgiata trasporta |||HEX(value)|||, che viene riflesso tale e quale nel body della risposta /wp/v2/posts. Legge un intero valore (di qualsiasi lunghezza) in una sola richiesta. Se UNION viene riflesso, gli oracle booleani non vengono mai sondati.
  2. bool — oracle booleano X-WP-Total: l'header X-WP-Total della sub-risposta confusa è count>0 per true / 0 per false. Un bit per richiesta (bisezione).
  3. time — SLEEP() basato sul tempo: il fallback quando il body viene rimosso e la risposta è un 500 (es. un fatal post-dispatch di un mu-plugin di caching). Funziona anche su target che vanno in crash a ogni chiamata REST.

--dump usa GROUP_CONCAT per estrarre l'intero set di credenziali in un colpo solo quando UNION è disponibile.


Installazione

Nessuna. Solo libreria standard Python 3.7+ — niente pip install.

chmod +x wp2shell.py

Utilizzo

# 1. Is it vulnerable? (no injection, no writes, no account created)
./wp2shell.py http://target --check

# 2. Read-only credential dump — FIRST administrator + option secrets
./wp2shell.py http://target --dump

#    …every administrator
./wp2shell.py http://target --dump all

# 3. Full RCE — create a temp admin, run a command, clean up
./wp2shell.py http://target --exec "id; uname -a"

Ricognizione di sola lettura (nessuna creazione di admin, bypassa la 2FA)

./wp2shell.py http://target --user-list          # full user table (logins/emails/roles)
./wp2shell.py http://target --content            # every post type at status=any (private/draft)
./wp2shell.py http://target --content full        #   …including each item's raw body

Scansione di più host

./wp2shell.py -f targets.txt --check --target-threads 8

Opzioni

FlagScopo
url / -f FILEtarget singolo, oppure un file di target (un URL per riga)
--checksolo verifica della vulnerabilità — nessuna iniezione, scrittura o account
--dump [all]dump dell'hash + segreti del primo admin; all = ogni admin
--exec CMDcrea un admin temporaneo → esegui CMD → ripulisci
--user-listlettura in-band elevata dell'intera tabella utenti (nessun login, bypassa la 2FA)
--content [full]lettura elevata di ogni post type a status=any; full aggiunge i body
--oracle {auto,union,bool,time}forza un oracle di estrazione (default auto)
--prefix PFXforza il prefisso delle tabelle invece della risoluzione automatica
--impersonate UIDimpersona questo user id invece del primo admin
--threads Nprobe di estrazione concorrenti all'interno di un target (default 5)
--target-threads Nscansiona N target da -f in concorrenza (default 1)
--proxy URLinstrada tramite un proxy (es. Burp http://127.0.0.1:8080)
--timeout SECtimeout per richiesta (default 30)
--verbose / -vdump delle sub-risposte batch grezze (debug)

Evasione di WAF / hardening

Scarica lo strumento