Un PHP valido può essere scritto ed eseguito in codifiche di caratteri non ASCII?

3

Ho trovato un'immagine jpeg su un server che conteneva la stringa <?php . Il server ospita anche un'applicazione scritta in PHP. I contenuti dell'immagine che arrivano dopo la stringa <?php non sono ascii.

Non riesco a trovare nulla nel file che sembra essere un codice PHP valido, eppure non sono disposto ad accettare che la stringa <?php appaia nel file casualmente.

L'immagine jpeg è visualizzabile in Windows, ma mostra chiaramente anomalie visive di circa 1/3 della via verso il basso. Salvando la parte dell'immagine che inizia con <?php come immagine jpeg separata e visualizzandola come un'immagine, si conferma che le anomalie visive iniziano nello stesso punto in cui si verifica la stringa <?php .

Sono ragionevolmente certo che questa immagine contenga PHP dannoso, ma i miei tentativi di rilevare codice PHP eseguibile non sono riusciti.

Modifica

Questa immagine presenta anomalie visive che iniziano nel punto della stringa "<? php" e continuano fino alla fine dell'immagine. Per il test, ho preso un jpeg diverso (noto come sicuro), l'ho aperto in un editor di testo e ho aggiunto la stringa "<? Php" da qualche parte nel mezzo. L'immagine di prova ha zero anomalie visive. Ciò implica che l'immagine in questione non solo è stata alterata maliziosamente per contenere la stringa "<? Php", ma che ci sono state ulteriori modifiche apportate dopo alla stringa "<? Php". Sembra probabile che questa immagine in qualche modo contenga codice PHP eseguibile.

-

Questa immagine può contenere effettivamente PHP eseguibile valido codificato in modo da non essere leggibile all'interno di un editor di testo?

Come posso confermare e / o tradurre il contenuto del file immagine in modo che possa determinare cosa ha fatto il malware?

Modifica

L'immagine è allegata

Diseguitol'immagineprimaèstatamodificata

    
posta Aaron Cicali 20.09.2018 - 03:10
fonte

4 risposte

2

No, il codice PHP è sempre almeno in parte ASCII leggibile.

I tipici metodi di offuscamento sono per decodificare un pezzo di codice ed eseguire quello:

eval(gz_decompress(base64_decode("0Z074L7expJKXs...")));

Ma vedresti comunque un nome di funzione PHP dopo <?php .

    
risposta data 20.09.2018 - 08:53
fonte
0

Il codice php deve essere ASCII.

Qualsiasi cosa al di fuori del può essere binario .

Qualche cosa tra le virgolette all'interno del codice php può essere binario.

È possibile che tu stia guardando il codice php codificato in genere questo ha bisogno di file binari e / o file di licenza aggiuntivi da eseguire.

Potrebbe esserti stato utile (più sicuro?) se avessi incluso uno screenshot del contenuto come mostrato nell'editor in giro per i tag.

    
risposta data 20.09.2018 - 22:40
fonte
0

La risposta selezionata è probabilmente vera che il codice PHP valido è sempre almeno in parte ASCII leggibile, tuttavia ...

Sì, PHP può essere scritto in non-ascii.

Un esempio di PHP UTF-8 può essere trovato qui: link

<?php
$Δ = 1;
++$Δ;
echo $Δ;

Questo codice può essere salvato come UTF-8 ed eseguito con successo. L'output dell'esecuzione di questo script è 2 .

Informazioni aggiuntive

Il codice sopra dimostra che PHP può essere scritto come non-ascii, ma assomiglia ancora al codice PHP valido ... ci sono le terminazioni di riga, i simboli di dollaro per le variabili, echo e istruzioni di assegnazione e un operatore unario.

Il post originale riguardava contenuti specifici non ascii che seguivano un tag di apertura <? php, ma quel codice non somigliava a codice come questo esempio sopra. Invece, sembra essere contenuto di immagine binaria, o forse stringhe esadecimali. La mia attuale comprensione della codifica dei caratteri non mi consente di escludere la possibilità che il codice in questione sia eseguibile, tuttavia sembra improbabile.

Detto questo, se PHP consente ai simboli menzionati ($ =; ++ echo) di essere scritti anche come equivalenti non-ascii, allora è del tutto possibile che esista un codice che non assomigli in alcun modo al PHP riconoscibile. Sarebbe bello se qualcuno con una vasta comprensione della codifica dei caratteri potesse aggiungere a questo post.

    
risposta data 26.10.2018 - 19:01
fonte
0

Could this image indeed contain valid executable PHP that is encoded in a way as to not be readable within a text editor?

Sì. Ma dipende da come verrà usato questo codice. Suppongo che il codice di destinazione dovrebbe iniettare il codice dall'immagine. Nel caso in cui esistesse qualche callback che lo decodificherà prima che possa essere codificato (base64 o qualsiasi altra cosa). In alcuni casi ho trovato il codice che è stato incluso nella visualizzazione raw in questo modo:

<?php 
include(path/to/image);
?>

How can I confirm and/or translate the image file contents so that I may determine what the malware has done?

Potrebbe essere difficile. Devi capire l'exploit. Se utilizzi qualche soluzione opensource puoi provare a trovare alcuni tra i noti problemi di sicurezza.

    
risposta data 29.10.2018 - 19:07
fonte

Leggi altre domande sui tag