Inizia a inviare un semplice file PHP con un comando che non richiede output, ma ti consente di determinare se è stato eseguito o meno.
Basta eseguire due volte la RFI e inviare da netcat:
<?php /* do nothing */ ?>
e
<?php sleep(10); ?>
Se il secondo comando ha il sito web che restituisce la pagina in un tempo di 10 secondi più lungo rispetto al primo tentativo, allora l'RFI è potenzialmente funzionante. Tutto ciò che può fare resta ancora da vedere.
Se i due comandi ritornano nello stesso tempo, non c'è una pausa di dieci secondi in più, quindi il codice PHP che hai inviato è chiaramente non eseguito , quindi inviare una shell inversa ha poco senso.
I passaggi successivi riguardano l'invio di qualcosa che tenta di mostrare nella pagina di destinazione.
ob_end_clean();
print "OK";
die();
potrebbe funzionare. Inoltre, prova a stabilire quale sistema stai esaminando (ad esempio: Ubuntu 12.04-LTS). Questo ti dirà a cosa prestare attenzione, ad es. AppArmor o SELinux o permessi speciali. Provare a ottenere un phpinfo()
sarebbe buono, per accertare se alcune funzioni sono state disabilitate, per esempio.
Vai da questo a un guscio inverso completo. Lungo la strada probabilmente scoprirai perché la shell inversa non funziona, e con un po 'di esperienza dovresti essere in grado di farlo funzionare di nuovo, distribuire qualcos'altro o concludere che non ci sia una vera vulnerabilità.
Una possibilità da prendere in considerazione sarebbe quella di utilizzare l'RFI per creare una seconda RFI che sia più semplice da sfruttare, se il primo script attaccato è ancora in grado di scrivere file su disco in posizioni accessibili (e sfruttabili).
Ma ...
Si noti che hai incluso "evilcode.txt" e lo script ha richiesto "evilcode.php.txt". Questa non è una semplice append (sarebbe stata "evilcode.txt.php").
Ciò che sembra accadere è che la pagina ottiene il nome base del file, quindi aggiunge ".php.txt", che sembra indicare un piano al lavoro. Non è .php, non è .txt - è .php.txt, come se l'autore volesse contrassegnarlo come PHP, ma allo stesso tempo non PHP.
È possibile che legga troppo in un'estensione semplice. Ma è anche possibile che l'RFI, pur essendo un'inclusione di file remota, non esegua immediatamente il codice, ma in realtà fa qualcosa del tipo:
// Load page from URL request
$code = file_get_contents($_GET['page']);
if (0 !== strpos($code, '<?php//SQUEAMISH OSSIFRAGE')) {
// This is not our code! DANGER WILL ROBINSON!
mailAdministratorAndRecordBreakinAttempt();
} else {
// The code contains the secret word. It's legit.
$result = eval($code);
}
Quanto sopra sembra essere una RFI sfruttabile, ma a meno che tu non conosca la parola segreta, semplicemente non funzionerà. D'altra parte, potresti essere in grado di ottenerlo leggendo una delle pagine remote, ora che sai come
si ottiene il vero nome locale.
Speriamo che quelle pagine non siano bloccate dall'IP e da cui le richieda
in qualsiasi altro luogo, ma l'indirizzo del server non determina l'attivazione di un avviso.