Metodo PUT en servidor web

Iniciado por TapIt, 9 Noviembre 2012, 12:42 PM

0 Miembros y 1 Visitante están viendo este tema.

TapIt

Muy buenas!

Mi duda es sencilla pero creo que no tengo los conocimientos suficientes para entender lo que está ocurriendo.

Realizo una petición OPTIONS a un servidor y obtengo como respuesta:

Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS


Posteriormente intento utilizar el metodo PUT y obtengo el siguiente mensaje:

HTTP/1.1 403 Prohibido
Date: Fri, 09 Nov 2012 11:38:12 GMT
Server: Apache/2.2.3 (Red Hat)
Content-Length: 973
Connection: close
Content-Type: text/html;charset=utf-8

<html><head><title>Apache Tomcat/5.0.30 - Informe de Error</title><style>

</style> </head><body><h1>Estado HTTP 403 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Informe de estado</p><p><b>mensaje</b> <u></u></p><p><b>descripción</b> <u>El acceso al recurso especificado () ha sido prohibido.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.0.30</h3></body></html>[/move]


Alguien sabe a que se debe esto?

Muchas gracias por antelación. Saludos ;)
Busca y encontrarás...

adastra

 SI el servidor web soporta el método PUT, puedes subir ficheros al servidor, PERO... algunos servidores web no permiten subir ficheros con contenido ejecutable (con extensión .php, asp, jsp, etc.) si intentas subir un fichero con extensión TXT, seguramente te dará 2 código HTTP consecutivos (HTTP 101 y HTTP 201). En dicho fichero puedes poner lo que quieras (contenido ejecutable por ejemplo) y posteriormente puedes utilizar el método COPY o MOVE para renombrar dicho fichero y hacerlo ejecutable.
De todos modos, enseñanos cual es el comando que ejecutas y como lo ejecutas...

TapIt

Hola adastra! En primer lugar muchas gracias por tu respuesta.
Intentaré explicarte como estoy realizando los pasos lo mejor posible.

Para la ejecución de las sentencias estoy utilizando Burp Suite en la que he marcado como target la web que estoy auditando.

Posteriormente he realizado la siguiente sentencia:

OPTIONS /*****/*****/File/ HTTP/1.0

y tengo como respuesta lo siguiente.

HTTP/1.1 200 OK
Date: Sat, 10 Nov 2012 17:23:24 GMT
Server: Apache/2.2.3 (Red Hat)
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
Content-Length: 0
Connection: close
Content-Type: text/plain; charset=UTF-8


Posteriormente he realizado la siguiente sentencia a modo de prueba. (Si lo que he leido es cierto debería crearme un fichero vacío de texto)

PUT /*****/*****/File/miprueba.txt HTTP/1.0


A lo que me devuelve lo siguiente:

Server: Apache/2.2.3 (Red Hat)
Content-Length: 973
Connection: close
Content-Type: text/html;charset=utf-8

<html><head><title>Apache Tomcat/5.0.30 - Informe de Error</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>Estado HTTP 403 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Informe de estado</p><p><b>mensaje</b> <u></u></p><p><b>descripción</b> <u>El acceso al recurso especificado () ha sido prohibido.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.0.30</h3></body></html>


He puesto asteriscos en las carpetas intermedias para no postear las realaes.Si quieres que te indique el servidor sobre el que estoy realizando la auditoría no tengo ningún problema en pasartelo por privado.No tengo intención de defacearlo ni nada, simplemente soy una persona que quiere aprender.

Gracias otra vez! Saludos

Busca y encontrarás...

ameise_1987

#3
intenta escribiendo la peticion completa, agregando las cabeceras comunes de la peticion incluyendo el content-length, ten cuidado con este ya que un caracter de mas o de menos hace la diferencia.

lo otro que puede ser es que la carpeta no tenga permisos de escritura, para encontrar una carpeta que tenga permisos de escriture, utiliza google hacking "site:server.com.ar ( ext:doc | ext:pdf )" , con esto "podrias encontrar una ruta del servidor con permisos de escritura".

por ultimo aqui habia un proyecto que te facilitaba el trabajo aplicando fuerza bruta a las rutas.
http://foro.elhacker.net/nivel_web/crawler_put_analizer_primera_beta_python-t349847.0.html


EDIT: lo ultimo que se me olvidaba, aparte de ser permitido el metodo PUT debe ser PUBLICO.
firma retirada por insultar/cachondearse de (anelkaos) del staff.

TapIt

Gracias por tu respuesta ameise_1987!

Bueno por partes, he probado a generar la peticion tal y como me comentabas de esta forma.

PUT /****/*****/File/miprueba.txt HTTP/1.1
Host: www.*****.es
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
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
Proxy-Connection: keep-alive
Cookie: usercode=; passwd=; __utma=168011234.1689716079.1352471299.1352564320.1352567111.6; __utmz=168011234.1352471399.1.2.utmccn=(organic)|utmcsr=google|utmctr=|utmcmd=organic; JSESSIONID=E2DB0504E635CBD1B3CBDB184624B934; __utmc=168011234
DNT: 1
Cache-Control: max-age=0
Content-Length: 0


Lo que he hecho simplemente ha sido generar una petición con el navegador, hacerla pasar por Burp y cambiarla para generear una petición PUT en lugar de GET. También le he añadido la cabecera Content-Length: 0 ya que el fichero que estoy intentando subir está vacío.(Si he leido bien en internet, esa cabecera corresponde al numero de Bytes enviados al servidor)

La respuesta ha sido la misma.

Por otra parte respecto a la busqueda de directorios que comentabas es una tarea bastante sencilla. La página no está protegida frente a esto y los indexa todos. He realizado la prueba en directorios tales como /doc /img /apps y otros varios pero nada...

Hay muchos directorios indexados en la web asique seguire probando con otros.Voy por buen camino? Content-Lenght es lo que yo creo que es? Si quisiera añadir codigo a miprueba.txt simplemente debería añadirlo al final de la petición no?

Siento la chapa. Muchisimas gracias!
Busca y encontrarás...

ameise_1987

content-length  es la cantidad de caracteres del archivo, pero insisto que aparte de estar permitido el metodo PUT debe ser PUBLICO.

:rolleyes:
firma retirada por insultar/cachondearse de (anelkaos) del staff.

TapIt

Pues nada supongo que el método PUT será privado y es por eso que no puedo subir archivos =( jajaja. Muchisimas gracias a los 2 por vuestra ayuda
Busca y encontrarás...

adastra

 Vale, intenta lo siguiente.
Desde Burp selecciona la pestaña "repeater", en realidad no necesitas interceptar nada, solamente hacer una petición HTTP PUT, no es necesario capturar ninguna petición.
Desde la pestaña "repeater" en host, pones la dirección IP o el nombre de dominio del objetivo y en port el puerto del servidor (intenta poniendo tanto IP como dominio para probar).
En el área de texto pones esto:






PUT /test.txt HTTP/1.1
Host: x.x.x.x


Esto es una prueba


Donde x.x.x.x es la dirección IP. Luego le das al botón "go".


En la pestaña inferior te aparecerá la respuesta del servidor. No es necesario que especifiques el Content-Length ya que Burp lo calcula automáticamente al hacer la petición.



TapIt

Hola adastra, lo que tu me comentas era el modo en el que yo estaba realizando las peticiones al servidor. De todas formas he probado a hacerlo como tu comentabas (con la ip, sin content-length... etc) y sigue saliendo el mismo error.

Sinceramente creo que al hacer la petición OPTIONS me esta dando un falso positivo y PUT está deshabilitado porque sino no me lo explico.

Pero bueno no pasa nada, el tiempo que llevo pegandome con esto he conseguido aprender a utilizar Burp, a entender mejor el sistema de cabeceras del protocolo HTTP y alguna cosillas más asique nada, a seguir auditando. Me da rabia porque yo creo que la web es muy explotable, pero todavía me falta conocimiento... :)

Saludoss y gracias!
Busca y encontrarás...

ksian

¿Y cómo te das cuenta que un metodo es publico?