{"id":2485,"date":"2016-07-05T02:16:14","date_gmt":"2016-07-05T00:16:14","guid":{"rendered":"https:\/\/0x90r00t.com\/fr\/?p=2485"},"modified":"2016-07-13T01:01:34","modified_gmt":"2016-07-12T23:01:34","slug":"ndh2k16-2016-web-250-sticky-sticky","status":"publish","type":"post","link":"https:\/\/0x90r00t.com\/fr\/2016\/07\/05\/ndh2k16-2016-web-250-sticky-sticky\/","title":{"rendered":"[NDH 2016] [Web 250 \u2013 Sticky Sticky]"},"content":{"rendered":"<h2>Description<\/h2>\n<blockquote><p>Sticky! Sticky!<\/p>\n<p>sticky.wargame.ndh<\/p><\/blockquote>\n<p><!--more--><\/p>\n<h2>Resolution<\/h2>\n<p>Nous arrivons sur\u00a0 une page web sur laquelle nous pouvons nous enregistrer en rentrant un pseudo.<\/p>\n<p>Une fois cette \u00e9tape pass\u00e9e, un message de bienvenue nous est affich\u00e9.<\/p>\n<p>Apr\u00e8s quelques tests, nous nous apercevons qu&rsquo;il est possible d&rsquo;enregistrer n&rsquo;importe quel pseudo, aussi bien admin, root, des caract\u00e8res \u00e9tranges.<br \/>\nA l&rsquo;affichage, ce champ n&rsquo;\u00e9tait pas du tout prot\u00e9g\u00e9, permettant d&rsquo;ins\u00e9rer du HTML ou y ex\u00e9cuter du code rendant possible les attaques de type XSS. Mais ce n&rsquo;\u00e9tait pas la bonne piste pour trouver le flag.<\/p>\n<p>Ensuite, directions les cookies qui sont bien remplis :<\/p>\n<ul>\n<li>validator : contenant par d\u00e9faut validator.wargame.ndh<\/li>\n<li>user_id : un identifiant num\u00e9rique qu&rsquo;il est possible de changer pour tomber sur le compte d&rsquo;un autre utilisateur<\/li>\n<li>resolution : une chaine ressemblant \u00e0 du base64 mais qui ne donne pas grand chose une fois d\u00e9cod\u00e9e<\/li>\n<\/ul>\n<p>En tentant de modifier le cookie validator, peu importe la chaine ins\u00e9r\u00e9e, un message d&rsquo;erreur est affich\u00e9 nous expliquant que la valeur a \u00e9t\u00e9 hijhack\u00e9e et que donc la valeur par d\u00e9faut serait utilis\u00e9e : validator.wargame.ndh:8888.<\/p>\n<p>Tip top, on va tenter de se connecter au validateur alors, histoire de voir comment il nous r\u00e9pond, un coup de requ\u00eate http (fail)&#8230; Les DNS pointent vers un autre r\u00e9seau que celui sur lequel nous sommes, 192.168.0.9, impossible de joindre ou m\u00eame scanner les ports de la machine :(.<\/p>\n<p>Ensuite, un hint nous informe que ce qui semblait \u00eatre un base64 serait en fait un base32. En convertissant le cookie \u00ab\u00a0resolution\u00a0\u00bb, on retrouve bien la m\u00eame adresse ip que celle du validateur.<\/p>\n<p>Un cookie resolution ; un validateur ayant comme valeur un dns ; et si on pouvait mettre notre propre service de r\u00e9solution DNS en changeant l&rsquo;adresse ip encod\u00e9e en base32 du cookie, par un serveur \u00e0 nous ?<\/p>\n<p>Hop ! On y va, nous cr\u00e9ons sur notre bon vieux bind, une zone dns avec une entr\u00e9e pour validator.wargame.ndh qui pointe vers un serveur web, h\u00e9berg\u00e9 chez nous sur le port 8888, comme le validateur \u00ab\u00a0officiel\u00a0\u00bb, puis on tente de s&rsquo;enregistrer de nouveau sur le site du challenge.<\/p>\n<p>L\u00e0 on a un r\u00e9sultat, chaque refresh de page donne lieu \u00e0 une requ\u00eate HTTP GET sur notre machine et chaque demande d&rsquo;enregistrement donne lieu \u00e0 une requ\u00eate POST contenant le login demand\u00e9.<\/p>\n<p>Ahah, c&rsquo;est l\u00e0 que \u00e7a devient moins drole, on a pu usurper l&rsquo;identit\u00e9 du validateur, on peut mettre n&rsquo;importe quel login, mais il doit r\u00e9pondre quoi notre validateur ?<\/p>\n<p>Renvoyer la chaine \u00ab\u00a0true\u00a0\u00bb nous renvoie une 404 cot\u00e9 challenge, des fois pas, au bout de (tr\u00e8s longues) minutes de guess, nous pensons \u00e0 quelque chose de standard, un service, il r\u00e9pondrait avec quel format de nos jours ? Peut-\u00eatre du JSON ? Et avec quoi comme donn\u00e9es ? Peut-\u00eatre un tableau avec les m\u00eames donn\u00e9es que pour l&rsquo;identification, \u00e0 savoir un champ \u00ab\u00a0name\u00a0\u00bb.<\/p>\n<p>Ok, cette fois-ci, plus aucun message d&rsquo;erreur affich\u00e9, on controle le nom de la personne logu\u00e9e gr\u00e2ce au validateur&#8230;<\/p>\n<p>On fait quoi maintenant ? On tente de mettre un nouvel \u00e9l\u00e9ment dans ce tableau du style admin = true ? Bingo !<\/p>\n<p><a href=\"https:\/\/0x90r00t.com\/wp-content\/uploads\/2016\/07\/Screenshot-at-2016-07-03-2119442.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-2486\" src=\"https:\/\/0x90r00t.com\/wp-content\/uploads\/2016\/07\/Screenshot-at-2016-07-03-2119442-1024x456.png\" alt=\"sticky sticky\" width=\"474\" height=\"211\" srcset=\"https:\/\/0x90r00t.com\/wp-content\/uploads\/2016\/07\/Screenshot-at-2016-07-03-2119442-1024x456.png 1024w, https:\/\/0x90r00t.com\/wp-content\/uploads\/2016\/07\/Screenshot-at-2016-07-03-2119442-300x134.png 300w, https:\/\/0x90r00t.com\/wp-content\/uploads\/2016\/07\/Screenshot-at-2016-07-03-2119442-768x342.png 768w, https:\/\/0x90r00t.com\/wp-content\/uploads\/2016\/07\/Screenshot-at-2016-07-03-2119442.png 1594w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/a><\/p>\n<p>Le flag \u00e9tait : ndh2k16_e5f3eb90c4438c1a062125e3f74c2b41<\/p>\n<p>Pour la petite histoire, \u00e0 la fin du wargame, le cr\u00e9ateur de l&rsquo;\u00e9preuve nous a avou\u00e9 que le souci de r\u00e9solution des dns n&rsquo;\u00e9tait pas pr\u00e9vu. A la base nous aurions d\u00fb pouvoir communiquer directement avec le validateur afin de ne pas avoir \u00e0 \u00ab\u00a0deviner\u00a0\u00bb le format de la requ\u00eate \u00e0 renvoyer, rahh, \u00e7a aurait fait une \u00e9preuve sans guess quand m\u00eame \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Description Sticky! Sticky! sticky.wargame.ndh<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[130,35,180],"tags":[],"class_list":["post-2485","post","type-post","status-publish","format-standard","hentry","category-2016-fr","category-ctf-fr","category-nuit-du-hack-wargame"],"_links":{"self":[{"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/posts\/2485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/comments?post=2485"}],"version-history":[{"count":15,"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/posts\/2485\/revisions"}],"predecessor-version":[{"id":2587,"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/posts\/2485\/revisions\/2587"}],"wp:attachment":[{"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/media?parent=2485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/categories?post=2485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/0x90r00t.com\/fr\/wp-json\/wp\/v2\/tags?post=2485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}