elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 434
51  Seguridad Informática / Hacking Ético / Re: Incinera tu sitio WEB! en: 30 Julio 2020, 09:56
Nopues, primero termina de construir el sitio xD solo es un proyecto hecho en Java Spring con un template que no hace nada xD, ni si quiera el buscador funciona.
52  Seguridad Informática / Hacking Ético / Re: Incinera tu sitio WEB! en: 30 Julio 2020, 02:59
Tipo de encryptación.
Se supone que cada petición debe de validar un hash diferente, algo como Tokens CSRF, en cada petición cambia el token y debe de validarse así se evita automatización de peticiones. Corrigeme si estoy mal WHK!

Asi es, ese formulario debiera tener una captcha con un hash de validación único, como recaptcha. En ves de tener que programar todo el formulario de contacto agregandole captchas y demás, sale mucho mas fácil y eficiente poner el correo de contacto ofuscado y que la misma gente envíe el correo desde sus propios clientes.
53  Seguridad Informática / Hacking Ético / Re: Incinera tu sitio WEB! en: 28 Julio 2020, 21:19
Citar
Este sitio web esta hospeado en 260MB la url es https://cleanet.260mb.net
TXT: https://cleanet.260mb.net/hackme.txt

Bien, claramente no podrá crear un registro TXT en su subdominio porque es un hosting por subdominios, asi que no podrá crear el registro. Creo que de todas maneras en estos casos si valdrá un archivo .txt.

El sitio WEB es casi en su totalidad estático y casi no tiene secciones, asi que es muy poco lo que se puede revisar, a demás, es un hosting compartido asi que tampoco se puede hacer mucho a su infraestructura, pero, si tiene un formulario de contacto.

Pude ver dos acciones distintas en el sitio WEB, uno encargado de hacer el envío del mensaje de contacto y otro para cambiar el lenguaje, extrañamente cuando quieres cambiar el lenguaje a un lenguaje inexistente la pagina web se muestra en blanco en ves de arrojar un error o simplemente mostrar un lenguaje por defecto, supongo que efectivamente hay un error pero errors_display está deshabilitado desde php.

El formulario de contacto tiene un problema, actualmente para enviar un correo debes resolver un valor en AES y luego enviarlo a traves de una cookie, muy ingenioso ya que te exije tener habilitado javascript, pero esto no evita bots. La validación del lado de PHP es estática, asi que en la práctica da igual si utilizas el valor de AES del momento o uno que ya haya sido utilizado, el servicio te arroja un estado de "enviado" cada ves que reenvías la misma solicitud utilizando el mismo hash en AES:

Probando sin la cookie:

Código:
ncat --ssl --crlf -v cleanet.260mb.net 443

POST /email.php HTTP/1.1
Host: cleanet.260mb.net
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 36
Origin: https://cleanet.260mb.net
Connection: Close
Referer: https://cleanet.260mb.net/

asunto=test&mensaje=test&anonimo=on

Respuesta del servidor:

Código:
<html><body><script type="text/javascript" src="/aes.js" >
</script><script>function toNumbers(d){var e=[];
d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});
return e}function toHex(){for(var d=[],d=1==arguments.length&&
arguments[0].constructor==Array?arguments[0]:arguments,e="",
f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);
return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),
b=toNumbers("98344c2eee86c3994890592585b49f80"),
c=toNumbers("03b479870acf0ba0ff959ab28fb1dfe9");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+";
 expires=Thu, 31-Dec-37 23:55:55 GMT; path=/";
 location.href="https://cleanet.260mb.net/email.php?i=1";</script>
<noscript>This site requires javascript to work, please enable
javascript in your browser or use a browser with javascript support</noscript>
</body></html>

Probando con una cookie estática múltiples veces:

Código:
ncat --ssl --crlf -v cleanet.260mb.net 443

POST /email.php HTTP/1.1
Host: cleanet.260mb.net
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 36
Origin: https://cleanet.260mb.net
Connection: Close
Referer: https://cleanet.260mb.net/
Cookie: __test=17544cb0f7e91786eec69621b893d683;

asunto=test&mensaje=test&anonimo=on


HTTP/1.1 200 OK
Server: nginx
Date: Tue, 28 Jul 2020 19:00:38 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
Cache-Control: max-age=0
Expires: Tue, 28 Jul 2020 19:00:36 GMT

4
sent
0

Ok, este hash de la cookie la he reutilizado varias veces y el servidor me sigue diciendo que el mensaje ha sido enviado, asi que esto puede provocar un abuso del servicio.

No se sabe exactamente si PHP del lado del servidor hace el envío de un correo o almacena los mensajes en un txt, pero si se envían correos a traves de la función mail() entonces hay un problema serio y es que el envío masivo de correos puede provocar que caigas en listas negras o den de baja tu hosting y termines con tu sitio web abajo.

También intenté verificar si el formulario de correos tiene inyección de cabeceras:

Código:
asunto=test%0a%0cReply-To:%20test@demo.com&mensaje=test%0a%0a.%0a&anonimo=on

Ya que mail() de php adjunta las cabeceras de manera plana separadas por saltos de línea \r\n, pero no se si realmente funcionó porque no puedo hacer que me llegue una copia del correo, asi que podrías validar tu mismo, si realiza el filtrado de saltos de línea o no.

También pude ver un directory listing: https://cleanet.260mb.net/lang/ , esto no causa ningún problema, pero si puede dar problemas serios si tienes algún directorio oculto que no esté protegido, por ejemplo, alguna carpeta donde almacenes los mensajes del formulario de contacto o algún plugin de php de terceros que pueda ser llamado de manera directa, como por ejemplo: https://cleanet.260mb.net/plugins/PHPMailer-master/src/

Saludos.
54  Seguridad Informática / Hacking Ético / Incinera tu sitio WEB! en: 28 Julio 2020, 05:04
Hola a todos!, se me ha ocurrido una buena idea para que todos podamos aprender de seguridad de manera didáctica, real y sin meternos en problemas. La idea es la siguiente:

¿Eres dueño de un sitio WEB?

Haz pasar por el fuego a tu sitio WEB!



Danos la oportunidad de revisar la seguridad de tu sitio entregandonos de manera voluntaria la URL, claramente debes ser el dueño y para asegurarnos de ello debes crear un registro TXT en tu dominio con la palabra "elhacker.net", si lo haces, entonces entre los mismos usuarios del foro le daremos un vistazo a tu sitio web y eso nos permitrá intercambiar ideas y técnicas para aprender mutuamente, y de pasada podrás corregir tus vulnerabilidades antes de que alguien más las encuentre y las aproveche para un ataque real no controlado.


¿Quieres ser el Pentester?

O para los que no conozcan el término: El atacante.



Sólo se pide algo de sentido común, acá la idea no es botar un sitio o hacerle daño, la idea es demostrar una vulnerabilidad, publicarlo en este mismo hilo y demostrar como lo hizo. Asi que:

- No se permiten ataques DOS ni DDOS ni nada que indisponga al sitio WEB.
- No se permite robar información de la base de datos.
- No se deben modificar archivos o datos de la db.
- La vulnerabilidad debe ser comprobable más que teórica.
- Publicar vulnerabilidades reales, nada de que le faltan cabeceras x frame options y basuras similares.
- Solo se debe revisar mientras exista el registro TXT en su dominio.

Cómo revisar si el dominio contiene el registro TXT correcto?: Desde el bash se debe ejecutar:

Código:
$ dig -t txt dominio.com

Si usas windows puedes usar la PowerShell:

Código:
PS> Get-Dns -Name dominio.com -Type TXT


¿Reglas?

Se vale todo, menos afectar la integridad o privacidad del mismo sitio. Esto quiere decir que no solo debemos restringirnos a una revisión web, tambien se vale revisar subdominios, puertos, etc, todo aquello que sirva para poder llegar al sitio WEB en cuestión (si, incluyendo la del proveedor de hosting).


¿Entregables?

Vamos, esto es un foro, el que quiera puede publicar sus hallazgos en un simple post o puede hacer un pdf a modo de informe, todo dependerá de quien lo haga, acá no hay un "esperable" o un "entregable", eso depende de cada uno.

De todas maneras, si se recomienda poder dar posibles soluciones por cada vulnerabilidad que encuentre (dentro de lo posible).




Vamos, esto es bien fácil, si tienes un sitio WEB permítenos que le demos un vistazo, eso es todo y los que lo revisemos podremos aplicar técnicas reales sobre sistemas reales. Muchas veces nos encontramos con CTF que no reflejan la realidad o solo debes estar adivinando cosas, la idea es poder ganar experiencia real en sistemas reales con vulnerabilidades reales.

Alguien se apunta?, solo basta con entregar su URL y agregar el registro TXT, si el dominio no tiene el registro TXT entonces abtenerse de revisarlo porque puede que realmente no sea el dueño del sitio WEB.
55  Seguridad Informática / Hacking Ético / Re: Se puede hackear una camara de seguridad? en: 28 Julio 2020, 04:29
Pues claro que se puede, pero hackear es un término demasiado ámplio, todo depende de que quieras hacer exactamente. Una cámara de seguridad puede estar construida de muchas maneras, algunas mas hackeables que otras, todo dependerá del caso, es como decir que si puedes hackear un movil, el tema es que version de movil es, que sistema tiene, que quieres hacer con el movil, etc.

Las camaras pueden ser análogas o digitales, pueden ser solo transportadora de datos o integrar software como las camaras wifi, si por ejemplo quieres saber si un video puede ser interceptado o poder ver lo que la cámara ve, dependerá del modelo, del software, etc etc. Por ejemplo:

Si es análogo necesitarás cortar los cables, decodificar la señal con algún PCB y conectarlo a algún sistema de video análogo.

Si es digital tendrías que interceptar el cable de red y hacer un switch a modo de repetidor e intentar capturar paquetes tcp y decodificar, ver que protocolo usa, saber si es plano o usa ssl, etc.

Si es remoto tendrías que llegar a su red, conectarte a su red con su clave y luego intentar acceder al software, pero para eso necesitas encontrar alguna vulnerabilidad en su sistema de red y no todas las camaras usan el mismo sistema.

Si está dentro de una red al igual que tu entonces es mas facil porque ya puedes llegar directamente al software, pero es dificil que logres llegar a un mismo segmento de red que una camara, normalmente están separadas o protegidas por zonas. Para llegar tendrias que vulnerar la red primero.

Hay otras cámaras que están expuestas directamente a internet y puedes llegar a ellas simplemente escribiendo su dirección ip, pero esto ya es un problema de instalación del usuario. Sitios que recopilan esto hay por montones: http://www.insecam.org/

La gran pregunta es... que quieres hacer realmente con estas cámaras, que buscas o cual es tu finalidad, si solo quieres entretención viendo videos de camaras entonces hay muchos sitios por internet para ello.

Saludos.
56  Programación / Java / Re: Iniciandome en Java en: 28 Julio 2020, 03:58
Intentar leer un .jar es como intentar leer un binario compilado de c, puedes hacerle reversing y todo pero nunca tendrás el código original.

Los archivos .jar son semicompilados, igual que un paquete semicompilado de .net, realmente no es una compilación a bajo nivel donde puedas inyectar todo a la memoria o hacer que la CPU lo interprete desde el kernel, los .jar son distintos, necesitan de una máquina virtual que los cargue, los interprete y los ejecute.

Asi que, no podrás leer y modificar el archivo jar a menos que lo descompiles e intentes crear un compilado nuevo. Debes buscar los fuentes .java, los .class realmente son objetos binarios semicompilados, como los archivos .a cuando compilas en c.

Dale un vistazo a esto:

http://java-decompiler.github.io/
https://github.com/linchanggui/dex2jar-2.0

Saludos.
57  Programación / Desarrollo Web / Re: [Pregunta]: agregar un elemento span donde se use dicha función.. en: 28 Julio 2020, 03:52
Pues facil,

Código:
document.write('<span>' + payload + '</span>');

Cuando llames a esa función el DOM escribirá en la misma posición desde donde es llamado, asi que si lo escribes dentro de una división entonces verás su contenido ahi mismo.

Si necesitas escribir la etiqueta de manera dinámica después de toda la carga del DOM (lo cual es lo más recomendado) debes utilizar los selectores https://developer.mozilla.org/es/docs/Web/API/Document/querySelector .

Debes recordar que agregar elementos llamando desde javascript antes de la finalización de la carga del DOM es una mala práctica debido a que el HTML debe ser totalmente independiente a la aplicación de javascript, asi que tu código debiera realmente ir a buscar cada nodo por su id y luego manipularlo a conveniencia. Si no usas ningún framework client side como ReactJS puedes usar jQuery.

Saludos.
58  Programación / Desarrollo Web / Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript? en: 3 Julio 2020, 07:47
Mira, hice una función, aver que opinas:

Código
  1. <?php
  2.  
  3. function parse($string){
  4.  
  5.    // Listado de etiquetas y propiedades permitidas
  6.    $availables = array(
  7.        // [etiqueta], [propiedades,]
  8.        'p'     => array('style', 'class', 'id'),
  9.        'a'     => array('href',  'style', 'class', 'id', 'title'),
  10.        'span'  => array('style', 'class'),
  11.        'b'     => array('style', 'class'),
  12.        'i'     => array('style', 'class'),
  13.        's'     => array('style', 'class'),
  14.        'table' => array('style', 'class', 'id', 'rows', 'cols', 'width'),
  15.        'thead' => array(),
  16.        'tbody' => array(),
  17.        'tr'    => array(),
  18.        'td'    => array(),
  19.        'div'   => array('style', 'class', 'id'),
  20.        'ul'    => array('style', 'class', 'id'),
  21.        'li'    => array('style', 'class')
  22.    );
  23.  
  24.    try
  25.    {
  26.        $dom = new DOMDocument();
  27.        @$dom->loadHTML('
  28.            <html>
  29.                <body>
  30.                    <div>'.$string.'</div>
  31.                </body>
  32.            </html>
  33.        ');
  34.        $string = null; // Libera la memoria
  35.    }
  36.    catch(Exception $e)
  37.    {
  38.        // Contenido corrupto, etiquetas sin cerrar,
  39.        // intento de XSS, etc.
  40.        return '';
  41.    }
  42.  
  43.    $id = 0;
  44.    foreach($dom->getElementsByTagNameNS('', '*') as $tag)
  45.    {
  46.        $id++;
  47.        if($id < 4)
  48.        {
  49.            continue;
  50.        }
  51.  
  52.        if(!in_array($tag->nodeName, array_keys($availables)))
  53.        {
  54.            // Etiqueta no permitida
  55.            $escaped = $dom->createTextNode(htmlspecialchars(
  56.                $dom->saveHTML($tag),
  57.                ENT_QUOTES
  58.            ));
  59.            $tag->parentNode->replaceChild($escaped, $tag);
  60.        }
  61.        else
  62.        {
  63.            // Etiqueta permitida
  64.  
  65.            // Busca todos los atributos de la etiqueta
  66.            foreach($tag->attributes as $attribute)
  67.            {
  68.                // Propiedad no permitida?
  69.                if(!in_array(
  70.                    strtolower($attribute->name),
  71.                    $availables[strtolower($tag->nodeName)]
  72.                ))
  73.                {
  74.                    // Elimina el atributo no permitido
  75.                    $tag->removeAttribute($attribute->name);
  76.                }
  77.            }
  78.        }
  79.    }
  80.  
  81.    return trim(substr($dom->saveHTML(
  82.        $dom->getElementsByTagName('body')[0]->childNodes[1]
  83.    ), 5, -6));
  84. }
  85.  
  86. echo parse('
  87.    <ul>
  88.        <li><a onclick="alert(0)" style="color:red;"
  89.               href="http://google.com/">http://google.com/</a></li>
  90.        <li>http://google.com/</li>
  91.        <li><script>alert(0)//http://google.com/</script></li>
  92.        <li><b>http://google.com/</b></li>
  93.    </ul>
  94. ');

Código:
   <ul>
        <li><a style="color:red;" href="http://google.com/">http://google.com/</a></li>
        <li>http://google.com/</li>
        <li>&amp;lt;script&amp;gt;alert(0)//http://google.com/&amp;lt;/script&amp;gt;</li>
        <li><b>http://google.com/</b></li>
    </ul>

Si el usuario ingresa caracteres no permitidos o etiquetas falsas o etiquetas mal formadas o sin cerrar, etc arrojará una excepción y retornará un contendo en blanco, asi que desde el código final dices que si el input está en blanco entonces el usuario debe volver a ingresar el texto.

Claramente esto funciona para habilitar etiquetas HTML y sólo sirve si el navegador ya envía el contenido en este formato, quiere decir que el usuario tendrá que ingresar su mensaje en un editor thml reducido así como wordpress, por ejemplo usando ckeditor. Así ya no necesitarás transformar las urls a enlaces, simplemente haces que el sitio web desde el lado del input ya integre formato html, o si no, también sirve para sanitizar tus conversiones de enlace con expresión regular y habilitar únicamente a los enlaces, pero sería un tanto redundante, en ves de eso es mejor que el input ya venga con los enlaces construidos por el mismo usuario o creados por javascript.

Saludos.
59  Programación / Desarrollo Web / Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript? en: 3 Julio 2020, 06:31
Citar
¿Y si el enlace va entre paréntesis sin espaciado?

De eso se encarga el RFC y la expresión regular, una url no puede comenzar con parentesis pero si terminar en el, por eso en github, wikipedia, wordpress y demás cuando pones una url en parentesis suelen incluir el cierre de parentesis unicamente y eso es normal.

Citar
Supongo se podria arreglar añadiendo una lista de dominios

Da igual si el dominio está repetido, terminarás pisando uno sobre el otro porque el string que vas a procesar siempre será el mismo y este ya contendrá encierre de etiquetas <a>.

Citar
Pero tendrías el mismo problema

No porque haces una pila y procesas palabra por palabra, nunca vuelves a procesar la misma palabra dos veces.
60  Programación / Desarrollo Web / Re: [Pregunta]: ¿Como puedo hacer esto equivalente con javascript? en: 2 Julio 2020, 00:12
#!drvy , intenta convertir esto con tu función en php:

Citar

Citar
Test. <a href="<a href="http://google.com/" target="_blank">http://google.com/</a>" target="_blank"><a href="http://google.com/" target="_blank">http://google.com/</a></a> y <a href="<a href="http://google.com/" target="_blank">http://google.com/</a>" target="_blank"><a href="http://google.com/" target="_blank">http://google.com/</a></a> test.

Tu función es recursiva y no respeta las posiciones de cada match, reemplaza los enlaces según el valor de la expresión encontrada independiente si hay más de una o no.

Hay maneras mas eficientes como por ejemplo la de https://stackoverflow.com/questions/1960461/convert-plain-text-urls-into-html-hyperlinks-in-php

Código
  1. $url = '@(http(s)?)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@';
  2. $string = preg_replace($url, '<a href="http$2://$4" target="_blank" title="$0">$0</a>', $string);
  3. echo $string;

Pero en mi caso para estar totalmente seguro y evitar el uso excesivo de memoria al intentar parsear textos muy grandes sobre el motor de expresión regular y evitar vulnerabilidades (porque el ejemplo que puse de stackoverlow tiene xss) lo que haría sería ir en busca de todos los espacios en blanco, ponerle coordenadas en bytes y luego procesar cada texto completo y validar si es un enlace, y si lo es entonces reemplazar, para ello utilizaría un buffer principal donde se vaya acumulando el resultado y eliminando el original, como una pila pero de bytes. No usaría explode() porque eso podría generar arrays demasiado grandes.

De todas maneras el xss se puede evitar si escapas todo el string antes de crear los enlaces con htmlspecialchars y ENT_QUOTES.
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 434
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines