{"id":76,"date":"2008-01-23T03:17:36","date_gmt":"2008-01-23T02:17:36","guid":{"rendered":"https:\/\/blogs.ua.es\/jgaliana\/2008\/01\/23\/parche-para-el-modulo-http-de-thc-hydra-error-manejando-los-codigos-de-respuesta-http\/"},"modified":"2008-04-14T00:21:38","modified_gmt":"2008-04-13T22:21:38","slug":"parche-para-el-modulo-http-de-thc-hydra-error-manejando-los-codigos-de-respuesta-http","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/jgaliana\/2008\/01\/23\/parche-para-el-modulo-http-de-thc-hydra-error-manejando-los-codigos-de-respuesta-http\/","title":{"rendered":"Parche para el m\u00f3dulo http de THC-Hydra: error manejando los c\u00f3digos de respuesta HTTP"},"content":{"rendered":"<p><a href=\"http:\/\/freeworld.thc.org\/thc-hydra\/\"><strong>THC-Hydra<\/strong><\/a> es una conocid\u00edsima herramienta de pentest, la cual ocupa el puesto 15 en el ranking &#8216;top 100 de herramientas de seguridad de red&#8217; de <a href=\"http:\/\/insecure.org\">insecure.org<\/a>, y es parte de nessus (la herramienta de an\u00e1lisis de vulnerabilidades de mayor renombre del mundo UNIX).<br \/>\nPermite realizar ataques de diccionario por red soportando m\u00e1s de 30 protocolos, con el fin de comprobar la seguridad de nuestros servicios.<\/p>\n<p>Como comentan en su p\u00e1gina:<\/p>\n<p>&#8220;<strong>Number one of the biggest security holes are passwords<\/strong>, as every password security study shows. Hydra is a parallized login cracker which supports numerous protocols to attack. New modules are easy to add, beside that, it is flexible and very fast.&#8221;<\/p>\n<p>El n\u00famero uno de los grandes agujeros de seguridad son las contrase\u00f1as, como muestra cada estudio de seguridad de contrase\u00f1as. Hydra es un crackeador de login paralelizado que soporta numerosos protocolos de ataque. A\u00f1adir nuevos modulos es sencillo, ademas que, es flexible y muy r\u00e1pido.<\/p>\n<p>&#8220;This tool is a proof of concept code, to give researchers and security consultants the possiblity to show how easy it would be to gain unauthorized access from remote to a system.&#8221;<\/p>\n<p><strong>Esta herramienta es un c\u00f3digo de prueba de concepto, para dar a los investigadores y consultores de seguridad la posibilidad de mostrar lo f\u00e1cil que ser\u00eda obtener acceso no autorizado a un sistema remoto<\/strong><\/p>\n<p>Hace unos d\u00edas estuve probando el m\u00f3dulo hydra-http, uno de los m\u00f3dulos de THC-Hydra en su \u00faltima versi\u00f3n (la 5.4) referente al protocolo http, y me d\u00ed cuenta que no funcionaba como yo esperaba en determinadas situaciones.<\/p>\n<p>En concreto, da falsos positivos debido a que <strong>no parsea correctamente los c\u00f3digos de estado del protocolo http devueltos por el servidor<\/strong> al realizar las consultas para saber si un usuario es v\u00e1lido en el servidor http o no. Es decir, hay casos en los cuales el usuario es valido pero THC-Hydra no nos informa de ello.<\/p>\n<p>Pongamos un escenario en el cual sabemos que existe un directorio protegido con autenticaci\u00f3n, por ejemplo \/protected\/ en el c\u00faal no existe index.html ni ninguna p\u00e1gina por defecto (los usuarios leg\u00edtimos acceden mediante la uri \/protected\/path_desconocido), nosotros pasar\u00edamos al thc-hydra como par\u00e1metros la direcci\u00f3n del servidor, el usuario y el password (o las listas de estos), as\u00ed como el path que queremos comprobar (en nuestro caso \/protected\/).<\/p>\n<p>La herramienta se pondr\u00e1 en funcionamiento, y realizar\u00e1 una petici\u00f3n a \/protected\/, si el usuario NO es v\u00e1lido el c\u00f3digo de estado que devuelve el servidor ser\u00e1 401 (Authentication Requiered), sin embargo si el usuario es correcto, al no existir un index.html ni similares el c\u00f3digo de retorno ser\u00e1 403 (Forbidden), pero debido a un fallo en el manejo de los c\u00f3digo de estado http devuetos no nos informar\u00e1 que el usuario es correcto. El mismo error sucede con c\u00f3digos como 404 (Not found), ya que hydra-http busca el c\u00f3digo de respuesta http 200 (Correcto) o 301 (Redirect).<\/p>\n<p><strong>He escrito un parche que corrige este bug<\/strong>, aqui lo teneis:<\/p>\n<blockquote><p>&#8212; hydra-http_orig.c\t2007-12-31 14:51:42.000000000 +0100<br \/>\n+++ hydra-http.c\t2007-12-31 15:50:29.000000000 +0100<br \/>\n@@ -53,7 +53,7 @@<br \/>\n*\/<\/p>\n<p>ptr = ((char *) index(buf, &#8216; &#8216;)) + 1;<br \/>\n&#8211;  if (ptr != NULL &amp;&amp; (*ptr == &#8216;2&#8217; || strncmp(ptr, &#8220;301&#8221;, 3) == 0)) {<br \/>\n+  if (ptr != NULL &amp;&amp; (*ptr == &#8216;2&#8217; || *ptr== &#8216;3&#8217; || strncmp(ptr, &#8220;403&#8221;, 3) == 0 || strncmp(ptr, &#8220;404&#8221;, 3) == 0)) {<br \/>\nhydra_report_found_host(port, ip, &#8220;www&#8221;, fp);<br \/>\nhydra_completed_pair_found();<br \/>\n} else {<\/p><\/blockquote>\n<p><strong>para aplicarlo simplemente entrar en el directorio de THC-Hydra 5.4  y patch -p0 &lt; hydra-http.patch<br \/>\nseguidamente compilar de nuevo.<\/strong><\/p>\n<p>Un ejemplo pr\u00e1ctico:<\/p>\n<p>Supongamos que sabemos que existe un recurso protegido llamado \/protected\/ (pero no tiene un fichero por defecto):<\/p>\n<p>Petici\u00f3n sin usuario:<\/p>\n<blockquote><p> user@host:~$ wget http:\/\/server\/protected\/ 2&gt;&amp;1 |grep HTTP<br \/>\nPetici\u00f3n HTTP enviada, esperando respuesta&#8230; 401 Authorization Required<\/p><\/blockquote>\n<p>Petici\u00f3n con un usuario v\u00e1lido:<\/p>\n<blockquote><p> user@host:~$ wget &#8211;http-user=user &#8211;http-password=password  http:\/\/server\/protected\/ 2&gt;&amp;1 |grep HTTP<br \/>\nPetici\u00f3n HTTP enviada, esperando respuesta&#8230; 403 Forbidden<\/p><\/blockquote>\n<p>entonces correriamos el hydra, (para simplificar el ejemplo usare solo un usuario\/password):<\/p>\n<blockquote><p> user@host:~\/hydra-5.4-src$ .\/hydra server http-head -l user -p password -m \/protected\/<br \/>\nHydra v5.4 (c) 2006 by van Hauser \/ THC &#8211; use allowed only for legal purposes.<br \/>\nHydra (http:\/\/www.thc.org) starting at 2007-12-31 16:00:09<br \/>\n[DATA] 1 tasks, 1 servers, 1 login tries (l:1\/p:1), ~1 tries per task<br \/>\n[DATA] attacking service http-head on port 80<br \/>\n[STATUS] attack finished for server (waiting for childs to finish)<br \/>\nHydra (http:\/\/www.thc.org) finished at 2007-12-31 16:00:10<\/p><\/blockquote>\n<p>No encuentra que el usuario sea v\u00e1lido, aunque si lo es!<\/p>\n<p>Sin embargo, aplicamos el parche<\/p>\n<blockquote><p> user@host:~\/hydra-5.4-src$ patch -p0&lt;hydra-http.patch<br \/>\npatching file hydra-http.c<\/p><\/blockquote>\n<blockquote><p> \/* recompilamos *\/<br \/>\nuser@host:~hydra-5.4-src$ make clean &amp;&amp; .\/configure &amp;&amp; make<\/p><\/blockquote>\n<p>ejecutamos de nuevo con los mismos par\u00e1metros:<\/p>\n<blockquote><p> user@host~\/hydra-5.4-src$ .\/hydra server http-head -l user -p password -m \/protected\/<br \/>\nHydra v5.4 (c) 2006 by van Hauser \/ THC &#8211; use allowed only for legal purposes.<br \/>\nHydra (http:\/\/www.thc.org) starting at 2007-12-31 16:01:08<br \/>\n[DATA] 1 tasks, 1 servers, 1 login tries (l:1\/p:1), ~1 tries per task<br \/>\n[DATA] attacking service http-head on port 80<br \/>\n[STATUS] attack finished for server (waiting for childs to finish)<br \/>\n<strong> [80][www] host: server   login: user password: password<\/strong><br \/>\nHydra (http:\/\/www.thc.org ) finished at 2007-12-31 16:01:09<\/p><\/blockquote>\n<p>bingo! ahora s\u00ed lo encontro!, simplemente era un problema manejando los c\u00f3digos del protocolo HTTP (buscaba el c\u00f3digo 200 o 301). Pero en este caso el c\u00f3digo devuelto es 403 (forbidden) y tambi\u00e9n indica que el usuario es v\u00e1lido (al igual que si hubiera sido 404 (not found).<\/p>\n<p><strong>ACTUALIZACI\u00d3N: <\/strong><a href=\"http:\/\/lists.grok.org.uk\/pipermail\/full-disclosure\/2008-January\/059905.html\">Link en ingl\u00e9s: Patch for the THC-Hydra 5.4 error handling http response codes<\/a>.<\/p>\n<p>Saludos<\/p>\n","protected":false},"excerpt":{"rendered":"<p>THC-Hydra es una conocid\u00edsima herramienta de pentest, la cual ocupa el puesto 15 en el ranking &#8216;top 100 de herramientas de seguridad de red&#8217; de insecure.org, y es parte de nessus (la herramienta de an\u00e1lisis de vulnerabilidades de mayor renombre del mundo UNIX). Permite realizar ataques de diccionario por red soportando m\u00e1s de 30 protocolos, [&hellip;]<\/p>\n","protected":false},"author":139,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[488,427],"tags":[8035,804,839,8034,8031],"class_list":["post-76","post","type-post","status-publish","format-standard","hentry","category-seguridad","category-sysadmin","tag-boletin-de-seguridad","tag-parche","tag-pentest","tag-seguridad","tag-sysadmin"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/users\/139"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/comments?post=76"}],"version-history":[{"count":0,"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/posts\/76\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/media?parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/categories?post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/jgaliana\/wp-json\/wp\/v2\/tags?post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}