Pages

Ads 468x60px

jueves, 14 de julio de 2016

Hacking desde 0. Hoy, command injection (parte 2, intermedio)


Si en la entrada anterior vimos como podíamos inyectar comandos en la máquina DVWA en el nivel fácil, hoy vamos a realizar lo mismo pero sobre el nivel medio.

Empecemos viendo algo que no se vio en la entrada del otro día, y es el código PHP de la parte de "command injection" y que puedes ver pulsando en el botón "view code" abajo a la derecha. En el nivel fácil, se puede apreciar (en la siguiente imagen) que no había ningún filtro que nos impidiese la inyección.


En cambio, si nos fijamos en el código del nivel medio, podemos ver que si hay un filtro. Antes de mostrar el código, vamos a intentar realizar la prueba, ya que si vemos el código ya sabemos que es lo que está filtrando.

Vamos a probar lo mismo que realizamos con el nivel bajo.


Al intentar hacer 127.0.0.1 ; cat /etc/passwd vemos que no ocurre nada, y es que como decía hay un filtro que nos impide ejecutar la inyección.

Pensemos antes de nada. ¿Que otras formas tenemos en linux de concatenar una consulta? Conocemos el punto y coma ";" que lo que hace es ejecutar los comandos uno después del otro (por eso en la entrada anterior veíamos primero el ping a la IP 127.0.0.1 y después podíamos ver el contenido de passwd). Podríamos probar con && como hacemos por ejemplo cuando queremos hacer update y upgrade en la misma línea.

     apt-get update && apt-get upgrade




Pero vemos que nuevamente no nos aparece nada. Está claro que el comando && también lo está filtrando. Veamos que más conocemos. ¿Que hacemos cuando queremos buscar, por ejemplo, en el history un comando especifico? ¿Usamos esto verdad?

     history |grep comando

Es decir, usamos la tubería o pipe "|" para llevar a cabo el comando. Probemos de nuevo.


Pues parece que ha funcionado. Veamos ahora el código del ejercicio a ver que ocurría.


Si nos fijamos en la imagen anterior, podemos ver la parte de código de la "blacklist" que nos estaba limitando.

// Set blacklist
    
$substitutions = array(
        
'&&' => '',
        
';'  => '',
    ); 

Estaba sustituyendo el ";" que usamos en el nivel bajo, y el &&, por lo que no podíamos pasar la prueba.

Os recomiendo que leáis sobre PHP ya que es un lenguaje bastante extendido y os va a ayudar a saber lo que sucede. También podéis intentar resolver el nivel alto vosotros mismos. Eso si, no miréis el código hasta que lo saquéis, o hasta que os deis por vencidos. Si lo miráis dese el principio, pierde la gracia.


Roberto García (@1GbDeInfo)
Creative Commons Licence
1Gb De informacion by Roberto García Amoriz is licensed under a Creative Commons Attribution-NonCommercial 3.0 Unported License.
Based on a work at http://www.1gbdeinformacion.com/.
Permissions beyond the scope of this license may be available at http://www.1gbdeinformacion.com/.

Perfil profesional en Linkedin

 
Blogger Templates