{"id":1136,"date":"2023-08-30T12:27:34","date_gmt":"2023-08-30T10:27:34","guid":{"rendered":"https:\/\/www.fabriziogiancola.eu\/?p=1136"},"modified":"2023-09-01T15:05:36","modified_gmt":"2023-09-01T13:05:36","slug":"directory-traversal","status":"publish","type":"post","link":"https:\/\/www.fabriziogiancola.eu\/index.php\/2023\/08\/30\/directory-traversal\/","title":{"rendered":"Directory traversal"},"content":{"rendered":"\n<p class=\"has-medium-font-size\">PortSwigger Academy \u2013 Directory traversal<\/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. Consiglio di iscriversi alla piattaforma, seguire le lezioni e soprattutto svolgere e completare i lab \ud83d\ude42<\/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>Directory traversal<\/strong><\/p>\n\n\n\n<p>In questa sezione spiegheremo cos\u2019\u00e8 il \u201c<em>directory traversal<\/em>\u201d o \u201c<em>path traversal<\/em>\u201d, descriveremo come eseguire attacchi di directory traversal e aggirare gli ostacoli comuni e spiegheremo come prevenire tali vulnerabilit\u00e0.<\/p>\n\n\n\n<figure class=\"wp-block-image is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/fqCG01sOg89Gx6jzDiwprq1HsHhmZUuYQgf4w_vEapvOJcmbAHqum58w6keTpnsnmwaSeqrpYHYSbM9R8BBR76bX6YQmidqOf5jzZK1hnhwyp-_Tk9bu5UL3l1ifSaS2Vb6SDR9zfMGkiqx5nqYPzQU\" alt=\"\" style=\"width:630px;height:359px\" width=\"630\" height=\"359\"\/><\/figure>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Cos\u2019\u00e8 il directory traversal?<\/strong><\/p>\n\n\n\n<p>L\u2019attraversamento delle directory \u201c<em>directory traversal<\/em>\u201d (noto anche come attraversamento del percorso dei file \u201c<em>path traversal<\/em>\u201d) \u00e8 una vulnerabilit\u00e0 della sicurezza Web che consente a un utente malintenzionato di leggere file arbitrari sul server su cui \u00e8 in esecuzione un\u2019applicazione. Ci\u00f2 potrebbe includere codice e dati dell\u2019applicazione, credenziali per sistemi back-end e file sensibili del sistema operativo. In alcuni casi, un utente malintenzionato potrebbe essere in grado di scrivere su file arbitrari sul server, consentendogli di modificare i dati o il comportamento dell\u2019applicazione e, infine, di assumere il pieno controllo del server.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Lettura di file arbitrari tramite directory traversal<\/strong><\/p>\n\n\n\n<p>Considera un\u2019applicazione per lo shopping che visualizza immagini di articoli in vendita. Le immagini vengono caricate tramite codice HTML come il seguente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>&lt;img src=\"\/loadImage?filename=218.png\"&gt;<\/em><\/code><\/pre>\n\n\n\n<p>L\u2019URL <em>loadImage<\/em> accetta un parametro <em>filename<\/em> e restituisce il contenuto del file specificato. I file immagine stessi sono archiviati su disco nella posizione <em>\/var\/www\/images\/<\/em>. Per restituire un\u2019immagine, l\u2019applicazione aggiunge il <em>filename<\/em> richiesto a questa directory di base e utilizza un\u2019API del file system per leggere il contenuto del file. Nel caso precedente, l\u2019applicazione legge dal seguente percorso:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/var\/www\/images\/218.png<\/em><\/code><\/pre>\n\n\n\n<p>L\u2019applicazione non implementa difese contro gli attacchi di directory traversal, quindi un utente malintenzionato pu\u00f2 richiedere il seguente URL per recuperare un file arbitrario dal file system del server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>https:\/\/insecure-website.com\/loadImage?filename=..\/..\/..\/etc\/passwd<\/em><\/code><\/pre>\n\n\n\n<p>Ci\u00f2 fa s\u00ec che l\u2019applicazione legga dal seguente percorso di file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/var\/www\/images\/..\/..\/..\/etc\/passwd<\/em><\/code><\/pre>\n\n\n\n<p>La sequenza <em>..\/<\/em> \u00e8 valida all\u2019interno di un percorso di file e significa salire di un livello nella struttura delle directory. Le tre sequenze <em>..\/<\/em> consecutive salgono da <em>\/var\/www\/images\/<\/em> alla root del filesystem, e quindi il file che viene effettivamente letto \u00e8:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>\/etc\/passwd<\/em><\/code><\/pre>\n\n\n\n<p>Sui sistemi operativi basati su Unix, questo \u00e8 un file standard contenente i dettagli degli utenti registrati sul server.<\/p>\n\n\n\n<p>Su Windows, sia <em>..\/<\/em> che <em>..\\<\/em> sono sequenze di directory traversal valide e un attacco equivalente per recuperare un file del sistema operativo standard sarebbe:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>https:\/\/insecure-website.com\/loadImage?filename=..\\..\\..\\windows\\win.ini<\/em><\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/file-path-traversal\/lab-simple\" target=\"_blank\" rel=\"noreferrer noopener\">Lab: File path traversal, simple case<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Ostacoli comuni allo sfruttamento delle vulnerabilit\u00e0 del file path traversal<\/strong><\/p>\n\n\n\n<p>Molte applicazioni che inseriscono l\u2019input dell\u2019utente nei percorsi dei file implementano una sorta di difesa contro gli attacchi di path traversal e questi possono spesso essere aggirati.<\/p>\n\n\n\n<p>Se un\u2019applicazione rimuove o blocca le sequenze di directory traversal dal nome file fornito dall\u2019utente, potrebbe essere possibile aggirare la difesa utilizzando una variet\u00e0 di tecniche.<\/p>\n\n\n\n<p>Potresti essere in grado di utilizzare un percorso assoluto dalla radice del filesystem, come <em>filename=\/etc\/passwd<\/em>, per fare riferimento direttamente a un file senza utilizzare alcuna sequenza trasversale.<\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/file-path-traversal\/lab-absolute-path-bypass\" target=\"_blank\" rel=\"noreferrer noopener\">Lab: File path traversal, traversal sequences blocked with absolute path bypass<\/a><\/p>\n\n\n\n<p>Potresti essere in grado di utilizzare sequenze di attraversamento nidificate, come <em>&#8230;.\/\/<\/em> o <em>&#8230;.\\\/<\/em>, che torneranno a sequenze di attraversamento semplici quando la sequenza interna viene rimossa.<\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/file-path-traversal\/lab-sequences-stripped-non-recursively\" target=\"_blank\" rel=\"noreferrer noopener\">Lab: File path traversal, traversal sequences stripped non-recursively<\/a><\/p>\n\n\n\n<p>In alcuni contesti, ad esempio in un percorso URL o nel parametro del <em>filename<\/em> di una richiesta <em>multipart\/form-data<\/em>, i server Web potrebbero eliminare qualsiasi sequenza di attraversamento della directory prima di passare l\u2019input all\u2019applicazione. A volte \u00e8 possibile ignorare questo tipo di sanificazione mediante la codifica dell\u2019URL, o anche la doppia codifica dell\u2019URL, i caratteri <em>..\/<\/em>, risultando rispettivamente in <em>%2e%2e%2f<\/em> o <em>%252e%252e%252f<\/em>. Anche varie codifiche non standard, come <em>..%c0%af<\/em> o <em>..%ef%bc%8f<\/em>, possono funzionare allo stesso modo.<\/p>\n\n\n\n<p>Per gli utenti di <a href=\"https:\/\/portswigger.net\/burp\/pro\" target=\"_blank\" rel=\"noreferrer noopener\">Burp Suite Professional<\/a>, Burp Intruder fornisce un elenco di payload predefinito (<strong>Fuzzing &#8211; path traversal<\/strong>), che contiene una variet\u00e0 di sequenze di percorso trasversale codificate che puoi provare.<\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/file-path-traversal\/lab-superfluous-url-decode\" target=\"_blank\" rel=\"noreferrer noopener\">Lab: File path traversal, traversal sequences stripped with superfluous URL-decode<\/a><\/p>\n\n\n\n<p>Se un\u2019applicazione richiede che il nome file fornito dall\u2019utente inizi con la cartella di base prevista, ad esempio <em>\/var\/www\/images<\/em>, potrebbe essere possibile includere la cartella di base richiesta seguita da sequenze di attraversamento adeguate. Per esempio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>filename=\/var\/www\/images\/..\/..\/..\/etc\/passwd<\/em><\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/file-path-traversal\/lab-validate-start-of-path\" target=\"_blank\" rel=\"noreferrer noopener\">Lab: File path traversal, validation of start of path<\/a><\/p>\n\n\n\n<p>Se un\u2019applicazione richiede che il nome file fornito dall\u2019utente termini con un\u2019estensione di file prevista, ad esempio <em>.png<\/em>, potrebbe essere possibile utilizzare un byte null per terminare in modo efficace il percorso del file prima dell\u2019estensione richiesta. Per esempio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>filename=..\/..\/..\/etc\/passwd%00.png<\/em><\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/web-security\/file-path-traversal\/lab-validate-file-extension-null-byte-bypass\" target=\"_blank\" rel=\"noreferrer noopener\">Lab: File path traversal, validation of file extension with null byte bypass<\/a><\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Come prevenire un attacco directory traversal<\/strong><\/p>\n\n\n\n<p>Il modo pi\u00f9 efficace per prevenire le vulnerabilit\u00e0 legate al file path traversal \u00e8 evitare del tutto di passare l\u2019input fornito dall\u2019utente alle API del filesystem. Molte funzioni dell\u2019applicazione che eseguono questa operazione possono essere riscritte per fornire lo stesso comportamento in modo pi\u00f9 sicuro.<\/p>\n\n\n\n<p>Se si ritiene inevitabile passare l\u2019input fornito dall\u2019utente alle API del filesystem, \u00e8 necessario utilizzare insieme due livelli di difesa per prevenire gli attacchi:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L\u2019applicazione dovrebbe convalidare l\u2019input dell\u2019utente prima di elaborarlo. Idealmente, la convalida dovrebbe essere confrontata con una whitelist di valori consentiti. Se ci\u00f2 non \u00e8 possibile per la funzionalit\u00e0 richiesta, la convalida dovrebbe verificare che l\u2019input contenga solo contenuti consentiti, ad esempio caratteri puramente alfanumerici.<\/li>\n\n\n\n<li>Dopo aver convalidato l\u2019input fornito, l\u2019applicazione dovrebbe aggiungere l\u2019input alla directory di base e utilizzare un\u2019API del file system della piattaforma per canonizzare il percorso. Dovrebbe verificare che il percorso canonizzato inizi con la directory di base prevista.<\/li>\n<\/ul>\n\n\n\n<p>Di seguito \u00e8 riportato un esempio di un semplice codice Java per convalidare il percorso canonico di un file in base all\u2019input dell\u2019utente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em>File file = new File(BASE_DIRECTORY, userInput);\nif (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {\n\t\/\/ process file\n}<\/em><\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Per saperne di pi\u00f9<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/portswigger.net\/burp\/vulnerability-scanner\" target=\"_blank\" rel=\"noreferrer noopener\">Find directory traversal vulnerabilities using Burp Suite&#8217;s web vulnerability scanner<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>PortSwigger Academy \u2013 Directory traversal Continua il percorso di apprendimento suggerito da \u201cPortSwigger Academy\u201d. Consiglio di iscriversi alla piattaforma, seguire le lezioni e soprattutto svolgere e completare i lab \ud83d\ude42 Directory traversal In questa sezione spiegheremo cos\u2019\u00e8 il \u201cdirectory traversal\u201d o \u201cpath traversal\u201d, descriveremo come eseguire attacchi di directory traversal e aggirare gli ostacoli comuni &hellip; <a href=\"https:\/\/www.fabriziogiancola.eu\/index.php\/2023\/08\/30\/directory-traversal\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;Directory traversal&#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":14,"footnotes":""},"categories":[5,15],"tags":[],"class_list":["post-1136","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\/1136","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=1136"}],"version-history":[{"count":4,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1136\/revisions"}],"predecessor-version":[{"id":1161,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/posts\/1136\/revisions\/1161"}],"wp:attachment":[{"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/categories?post=1136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabriziogiancola.eu\/index.php\/wp-json\/wp\/v2\/tags?post=1136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}