wwwolf's PHP web shell
Ho incontrato spesso problemi usando altre web shell:
- Usano funzionalità sintattiche recenti di PHP non compatibili con la vecchia versione di PHP
in esecuzione su alcuni target.
- Fanno supposizioni errate sull'URL remoto, rompendo l'iniezione di codice PHP o i
parametri GET (non) attesi dal server.
- Spesso mostrano solo il contenuto dell'output standard, scartando stderr.
- Gestiscono male i caratteri speciali nell'output visualizzato (come
<).
- Non consentono il caricamento di file, oppure offrono un metodo non supportato/bloccato dalle
impostazioni del target.
- Richiedono modifiche manuali a seconda che il target esegua
un sistema UNIX-like o Windows.
Ecco il mio tentativo di risolvere questi problemi. A differenza di altre soluzioni,
questa non mira nemmeno lontanamente a diventare un "framework di post-exploitation
completo". Il suo unico obiettivo è fornire un modo stabile e
affidabile per mettere piede sul target, aderendo al principio KISS
il più possibile e rimanendo abbastanza generico da lasciarti costruire ciò che
vuoi da lì, senza intralciarti.

WhiteWinterWolf's PHP web shell:
- L'accesso può essere protetto da password.
- È compatibile sia con sistemi UNIX-like che Windows senza alcuna modifica.
- Tenta di pulire il buffer di output di PHP (cioè di eliminare qualsiasi codice "spazzatura" già
prodotto dall'applicazione attaccata) e di imporre la terminazione dell'esecuzione
del codice PHP per garantire il comportamento più pulito e stabile.
- Il modulo viene inviato come richiesta POST mantenendo esattamente lo stesso URL (inclusi
gli stessi identici parametri GET, nulla aggiunto o rimosso) usato
per accedervi inizialmente. Non viene fatta alcuna supposizione, rendendolo adatto
a tecniche di code injection contorte. Inoltre il server remoto potrebbe non
registrare i dati POST e quindi non registrare i comandi effettivamente eseguiti sul target.
- Vengono applicati valori predefiniti sensati:
- La directory di lavoro corrente è impostata sulla directory di lavoro corrente
effettiva. Questo ha il vantaggio aggiuntivo di indicarti facilmente il
tipo di sistema remoto (
/var/www/html vs. C:\Inetpub\wwwroot).
- L'host di origine per il fetch è impostato sul tuo indirizzo IP così come visto dal
server target.
- Puoi liberamente impostare la directory di lavoro e il valore viene mantenuto tra i comandi.
Viene visualizzato un messaggio di avviso specifico nel caso in cui l'impostazione
open_basedir di PHP
possa limitare la tua capacità di spostarti all'interno del server.
- Ci sono due modi diversi per caricare file sui tuoi target:
- Un classico modulo di caricamento, se le impostazioni PHP remote lo consentono.
- Recupera il file da un host e un URL specifici (di solito un host controllato dall'
attaccante). Questa funzionalità implementa una funzionalità di fetch HTTP molto basilare
che consente di aggirare la limitazione dell'impostazione
url_allow_fopen di PHP. Non
gestisce cose complesse come reindirizzamenti HTTP o autenticazione, ma potrebbe
comunque gestire SSL/TLS anteponendo il nome host di conseguenza
(tls://203.0.113.37).
- Un collegamento
Clear cmd consente di pulire e impostare il focus sul campo di input del comando
in un solo clic. Lo trovo comodo per eseguire rapidamente alcuni
comandi arbitrari sul server, ma questa funzionalità si basa su JavaScript. Se
vuoi evitare JavaScript puoi rimuovere questa singola riga; ciò non
influirà sul resto della web shell, che non usa JavaScript in nessun altro punto.
Questo script applica le impostazioni del modulo nell'ordine indicato:
- Directory di lavoro corrente.
- File da caricare.
- Comando da eseguire.
Questo consente di caricare un file in una determinata directory ed eseguirlo immediatamente in
una singola richiesta HTTP.
Maggiori informazioni sono disponibili nella pagina principale del progetto.
Questo script è fornito solo a scopo di ricerca e valutazione della sicurezza.
Non usarlo per nulla di illegale!