Cyber Attack - Easy
Last updated
Last updated
Pasamos el siguiente reto del ctf, y subimos una dificultad a Easy. Así que vamos a proceder a ver el código a ver si encontramos algo.
Viendo el código podemos ver que la aplicación no tiene mucho código, vemos que contiene un index.php el cual tiene dos botones para dos ataques diferentes, uno llamado attack-ip
y otro attack-domain
.
También nos damos cuenta de que desactiva el botón para el script de attack-ip si no estás accediendo desde el localhost.
Revisando la configuración del apache podemos ver que no nos deja acceder al endpoint /cgi-bin/attack-ip
Luego podemos revisar el código de los scripts, primero domain-attack
que es al que tenemos acceso.
Vemos que el script en python que recibe los parámetros name
y target
por get, el target lo pasa por un filtro y ejecuta un ping a el target si pasa el filtro. Mirando el script se nos ocurre directamente la idea de hacer un Command injection en el target si conseguimos bypassear el filtro. Pero vamos a revisar el otro script ip-attack
.
Vemos que este script hace basicamente lo mismo pero filtrando la ip con la funcion ip_address
, si conseguimos bypassearlo podremos hacer una inyeccion de comandos.
Ya que vamos subiendo el nivel de los retos voy a dar cosas como saber utilizar el bupsuite y conocimientos por hecho. Mirando detenidamente la regex vemos que no podremos inyectar comandos.
Así que probando payalods al final nos topamos con uno el cual nos deja realizar requests a la url que queramos poniendo un target invalido y metiendo el payload en el parámetro name, ya que va a ser el parámetro que se nos va a devolver en el header.
Como vemos hemos podido realizar una request al endpoint interno con este SSRF, ahora necesitamos encontrar la forma de bypassear el filtro de la librería de ip_address
. Buscando y buscando al final probé un google dork que me devolvió un post de un writeup donde mencionaba como se podría eludir esta protección para inyectar comandos.
Google Dork:
Nos da como poder inyectar payloads: ::1%<Payload>
Asi que con esto podemos preparar la injeccion del comando:
Hacemos una peticion a /flag.txt
y pwned.
Viendo el php me di cuenta de que los parámetros result y error que se reciben por get, se muestran en el html sin sanitizarse de ninguna manera provocando un xss.
Payload: <img src=x onerror="alert(1)">
Sabiendo que no podemos bypassear el filtro, tenemos que intentar poder hacer requests desde el localhost para poder utilizar el script attack-ip
. Buscando por internet nos encontramos este blog que se hizo muy famoso sobre Confusion Attacks en Apache, mirando nos topamos con el apartado el cual nos habla de como abusar de esta técnica en un script del cgi-bin
para hacer un ssrf, justo lo que necesitamos para acceder al script de attack-ip.
Nos encontramos con este writeup: