Differenza tra php, php e phP? [chiuso]

-5

Mi sono imbattuto in una sfida per ctf in cui il caricamento di file php è stato limitato ma phpp e phP non lo erano. In quali altri formati è possibile caricare php e qual è la differenza?

    
posta Aayush 15.07.2018 - 12:47
fonte

3 risposte

0

Bene, ho anche notato questo comportamento. Come @schroeder menzionato nei commenti all'inizio, pensavo anche che avesse a che fare con la funzione di upload ma poi ho deciso di provare alcuni test. Quindi per esempio se abbiamo un file php chiamato test.php e contiene il seguente codice:

<?php echo shell_exec('whoami'); ?>

Se proviamo ad eseguirlo con php test.php ( supponendo che php sia installato ), verrà eseguito con successo. Ora il la parte strana è che se cambiamo l'estensione funziona ancora. Ecco un POC che modifica automaticamente l'estensione e prova ad eseguire il file:

#!/bin/bash

# file with some possible extensions...
declare -a extensions=("test.phP" "test.PHp" "test.asdfphp" "test" "test.txt")

tmp='test.php'
for ext in "${extensions[@]}";do
    echo -e "Renaming file to $ext and try to execute it..."
    mv $tmp $ext; php $ext
    tmp=$ext
done

Quindi tutte quelle estensioni di file sono eseguite correttamente. I risultati dello script sopra sono:

Renaming file to test.phP and try to execute it...
username
Renaming file to test.PHp and try to execute it...
username
Renaming file to test.asdfphp and try to execute it...
username
Renaming file to test and try to execute it...
username
Renaming file to test.txt and try to execute it...
username

Ora anche se rimuoviamo la parola chiave php dal tag <?php in test.php file, o anche rimuoviamo l'ultimo tag di chiusura ?> lo script è ancora valido codice php (come @AndrolGenhald ha puntualizzato correttamente nei commenti a causa di Tag brevi PHP ) e verranno comunque eseguiti correttamente. Quindi suppongo che php controlli il file e se è un contenuto php valido sarà eseguito. Anche se ho cercato e non ho trovato la mia ipotesi documentata, quindi se qualcuno sa che l'assunzione di cui sopra è effettivamente corretta, per favore pubblica un link:)

    
risposta data 15.07.2018 - 14:55
fonte
2

Come una solita sfida CTF, l'idea è che qualcuno abbia creato qualcosa, ma c'è una vulnerabilità in esso. Il tuo obiettivo è ottenere il flag e, dato che puoi caricare un file, probabilmente devi eseguire il codice sul server (in modo che possa elencare i file nella directory e leggere il file flag).

Se puoi caricare <?php echo 'ls'; in example.php sul server, il server probabilmente eseguirà il file quando apri l'URL. Apparentemente, qualcuno ha cercato di impedire agli utenti di caricare file con l'estensione .php . Ma come hai notato, un file che termina con .phP va bene. Il programmatore probabilmente ha fatto qualcosa del genere:

if (substr_count($filename, ".php") != 0){ reject upload; }

Quindi non puoi caricare .php file ... ma al server web non interessa se si chiama .php o .PHP o .phP : la sua configurazione dice solo che qualcosa che termina in .php (maiuscole e minuscole) dovrebbe essere eseguito come se fosse un codice PHP. L'estensione è solo una parte del nome del file, quindi i contenuti sono sempre gli stessi, solo il nome è diverso. Se ne hai voglia, puoi inserire il codice PHP in un file chiamato example.aayush e configurare Apache o Nginx per eseguire .aayush file come codice PHP. E poiché sono tipicamente insensibili alle maiuscole e minuscole, puoi anche eseguire .Aayush file allo stesso modo.

Spero che questo aiuti a risolvere la sfida!

Oppure, se vuoi sapere come risolvere questa vulnerabilità, vedi le domande taggate: .

    
risposta data 15.07.2018 - 21:51
fonte
0

What other formats can PHP be uploaded in?

Supponendo che si intenda l'estensione del file e non il formato, qualsiasi estensione di file che sia consentita dal codice di caricamento e identificata come script PHP dalla configurazione del server PHP (Apache httpd's PHP module o PHP-FPM) può essere eseguibile. Ad esempio, se il server è configurato per eseguire *.php* file, i file che terminano in .php , .php7 e normalmente quelli non validi come .phpp possono essere eseguiti.

    
risposta data 15.07.2018 - 20:37
fonte

Leggi altre domande sui tag