Você está na página 1de 6

_ _ _____ _____ ____ _ _

| | | |_ _|_ _| _ \ | |__ ___ __ _ __| | ___ _ __


| |_| | | | | | | |_) | | '_ \ / _ \/ _` |/ _` |/ _ \ '__|
| _ | | | | | | __/ | | | | __/ (_| | (_| | __/ |
|_| |_| |_| |_| |_| |_| |_|\___|\__,_|\__,_|\___|_|

_ _ _ _
(_)_ __ (_) ___ ___| |_(_) ___ _ __
| | '_ \ | |/ _ \/ __| __| |/ _ \| '_ \
| | | | || | __/ (__| |_| | (_) | | | |
|_|_| |_|/ |\___|\___|\__|_|\___/|_| |_|
|__/

Laboratorio

1, Configuracion de escenario

-PHP5

apt-get install php5

-Apache2

apt-get install apache2

-Configuracion

directorio-----/etc/apache2/httpd.conf

#Agregar esta linea al httpd.conf

LoadModule php5_module modules/libphp5.so

#Reiniciar el servidor apache

/etc/init.d/apache2 restart

-Live HTTP headers

#Descargar Add-on

https://addons.mozilla.org/en-US/firefox/addon/3829/

2, Explicacion

Codigo Vulnerable para hacer XSS por medio de inyeccion por Headers, Este
script lo que hace es pedir una solicitud de direccion ip
($_SERVER['REMOTE_ADDR']) , y otra solicitud al identificacion al navegador
que es llamado user Agent ($_SERVER['HTTP_USER_AGENT']), despues de ello lo
que hace es imprimir datos en pantalla.
#Codigo

<?PHP

/*Obtener IP y mostrarla*/

$ip = $_SERVER['REMOTE_ADDR'];

echo 'tu ip es: '. $ip ."<br>";

/*Obtener el User Agent y mostrarlo*/

$host = $_SERVER['HTTP_USER_AGENT'];

echo 'Tu Sistema operativo es: '. $host ."<br>";

?>

Vulnerablidad:

Cuando el scrip recibe el user agent del navegador, lo que hace es asignarlo
como variable llamada $host y luego imprimirla. Cuando hacemos una peticion
GET a la web donde esta este script seria algo asi

Peticion

http://127.0.0.1/ip.php

GET /ip.php HTTP/1.1


Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.1.9) Gecko/20100501
Iceweasel/3.5.9 (like Firefox/3.5.9)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=pejds52nca6edsfecopl75ts5; logged=1

----------------------------------------------------------------------------------

Respuesta

HTTP/1.1 200 OK
Date: Thu, 27 May 2010 08:17:22 GMT
Server: Apache/2.2.15 (Debian)
X-Powered-By: PHP/5.3.2-1
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 160
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html

Como vemos el user agent da el sistema operativo, El navegador. Bueno asi


seria una pequeña comunicación entre cliente y servidor, el fallo esta en el
codigo .php que en la variable $host, dicha variable toma todo el valor del
parametro que va con la peticion del Navegador, entonces como esa variable es
todo lo que esta en User Agent y luego la imprime en pantalla pues seria
sniffear los headers de la comunicación, y modificar el user agent con un
simple scrip o funciones html y el host las adoptaria y las ejecutaria según
el caso.

3, Practica

1 Iniciar el Live HTTP headers (herramientas/ Live HTTP headers)

2. Hacer una peticion GET al host (una peticion GET es equivalente a ingresar
por el navegador y darle enter, el GET lo que hace es leer los recursos de la
pagina que le definamos.

GET /index.html HTTP/1.1


3. Selecionar el bloque de la peticion y respuesta de la comunicación y darle
en repetir.

4. aquí es donde viene la modificacion del User Agent para colocarle el script
o la etiqueta html para poder explotar el fallo, entonces en la ventana que
sale alli podremos modificar la peticion completa si queremos pero solo vamos
a modificar el User Agent.

Modificacion
y le damos repitir y quedara asi..... Antes

y Despues
Como vemos donde esta la variable $host en el ip.php contenia antes el user
Agent Original, pero despues que modificamos ya no esta el valor que antes
tenia.

Host: 127.0.0.1

User-Agent: <h1><img
src=http://images3.wikia.nocookie.net/__cb20070225072817/uncyclopedia/images/8
/81/PWNED!.jpg><h1><h1>XSS Progresive Death </h1>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=baln5g2nca6e2cecopuml75ts5; logged=1

3. Comentarios

Bueno este Bug es algo viejo el fin de este lab es poder aprender el
funcionamiento del HTTP por debajo para poder analizar y realizar este tipo
metodos, el Inyection HTTP headers no esta totalmente obsolto, todavia sirve para
muchas cosas mas, solo es cuestion de tener imaginacion.

4. Links de interes

http://en.wikipedia.org/wiki/List_of_HTTP_headers --- Traduccion Archivo Adjuntos

http://en.wikipedia.org/wiki/HTTP

</Progresive Death>

</charsecurity.blogspot.com>

Você também pode gostar