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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Foros Generales
| |-+  Dudas Generales (Moderador: engel lex)
| | |-+  Qué resultados obtienes al ejecutar este código?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Qué resultados obtienes al ejecutar este código?  (Leído 3,657 veces)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Qué resultados obtienes al ejecutar este código?
« en: 4 Octubre 2019, 12:17 pm »

Estaba pensando en nuevos métodos de device fingerprinting y se me ocurrió saturar el stack de llamadas.

1)Cual es el número más grande que se te muestra al final del documento?

2)Se muestra el mismo número en distintos navegadores?

3)Siempre se repite el mismo resultado de forma consistente en el mismo navegador?

Código
  1. <html>
  2. <body>
  3. /*Pon etiqueta script*/
  4.  
  5. var i =0;
  6. stack();
  7.  
  8. function stack()
  9. {
  10. ++i;
  11. document.write(i+" ");
  12. return overflow();
  13. }
  14.  
  15. function overflow()
  16. {
  17. return stack();
  18. }
  19. /*Pon etiqueta /script */
  20. </body>
  21. </html>

A ver que resultados obtiene cada uno.
Yo con Android con un smartphone gama baja en Samsung Browser obtengo 10505 iteraciones hasta que se llena el stack.

No tengo ahora mismo más dispositivos disponibles. A ver que resultados obteneis vosotros y si podemos sacar conclusiones en base a ellos de si es un método que pueda ser útil para hacer fingerprint.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.605


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #1 en: 4 Octubre 2019, 12:54 pm »

Normalmente ese script es dificil que sea ejecutado en navegadores modernos primeramente porque javascript es estrictamente lineal en ordenes de instrucciones, por ejemplo, en la segunda línea de código donde ejecutas stack() debería arrojar una excepción debido a que este aun no está definido, a demás los navegadores como google chrome y mozilla firefox detectan ese desbordamiento de pila.

Va a depender de la capacidad de hardware de cada dispositivo en el hipotético caso de que si logre ser ejecutado y evada cualquier mecanismo heurístico, el problema no se encuentra en el valor autoincrementado de i, sino de la pila de llamadas recursivas entre la función stack() y callback() ya que ninguna finaliza al ser llamada por la otra ya que no es una ejecución asíncrona provocando un desbordamiento de pila. Esto es muy común que suceda en otros lenguajes pero es controlado por el heap size o el paralelismo en el caso de Java y Python.

En algunos navegadores simplemente no podrás ejecutar nada después de esta función y todo script se detendría asi que tampoco podrás comprobar el resultado de tu test a menos que exista una interacción manual por parte del usuario como el envío del contador en un form pero habría que hacer colapsar su pestaña en uso de recursos.

Hay maneras mucho mas efectivas para saber que navegador está utilizando el usuario jajajaja y no hablo de su user agent por cabeceras del request sino a traves de librerías y el mismo estandar de javascript:

https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
https://developer.mozilla.org/en-US/docs/Web/API/Window/navigator

Saludos.


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #2 en: 4 Octubre 2019, 13:52 pm »

Normalmente ese script es dificil que sea ejecutado en navegadores modernos primeramente porque javascript es estrictamente lineal en ordenes de instrucciones, por ejemplo, en la segunda línea de código donde ejecutas stack() debería arrojar una excepción debido a que este aun no está definido, a demás los navegadores como google chrome y mozilla firefox detectan ese desbordamiento de pila.

Va a depender de la capacidad de hardware de cada dispositivo en el hipotético caso de que si logre ser ejecutado y evada cualquier mecanismo heurístico, el problema no se encuentra en el valor autoincrementado de i, sino de la pila de llamadas recursivas entre la función stack() y callback() ya que ninguna finaliza al ser llamada por la otra ya que no es una ejecución asíncrona provocando un desbordamiento de pila. Esto es muy común que suceda en otros lenguajes pero es controlado por el heap size o el paralelismo en el caso de Java y Python.

En algunos navegadores simplemente no podrás ejecutar nada después de esta función y todo script se detendría asi que tampoco podrás comprobar el resultado de tu test a menos que exista una interacción manual por parte del usuario como el envío del contador en un form pero habría que hacer colapsar su pestaña en uso de recursos.

Hay maneras mucho mas efectivas para saber que navegador está utilizando el usuario jajajaja y no hablo de su user agent por cabeceras del request sino a traves de librerías y el mismo estandar de javascript:

https://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
https://developer.mozilla.org/en-US/docs/Web/API/Window/navigator

Saludos.
En javascript si se pueden declarar variables y funciones después de utilizarlas.
Cita de: Eloquent javascript
3rd edition Marijn Haverbeke
Código
  1. console.log("The future says:", future());
  2. function future() {
  3. return "You'll never have flying cars";
  4. }
The preceding code works, even though the function is defined below the code
that uses it. Function declarations are not part of the regular top-to-bottom
flow of control. They are conceptually moved to the top of their scope and can
be used by all the code in that scope. This is sometimes useful because it offers
the freedom to order code in a way that seems meaningful, without worrying
about having to define all functions before they are used.

Por lo que leí y como comentas algunos navegadores muestran valores. Mientras no se llena el stack el código funciona, asique puedo enviar los valores de i a PHP.

Es más por curiosidad de si funcionaría y como.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #3 en: 4 Octubre 2019, 16:15 pm »

Normalmente ese script es dificil que sea ejecutado en navegadores modernos primeramente porque javascript es estrictamente lineal en ordenes de instrucciones, por ejemplo, en la segunda línea de código donde ejecutas stack() debería arrojar una excepción debido a que este aun no está definido, a demás los navegadores como google chrome y mozilla firefox detectan ese desbordamiento de pila.

javascript hace hoisting de las declaraciones de las funciones.

Código
  1. hola();
  2. function hola(){ console.log('hola'); }

Lo que hace el runtime de javascript es lo mismo que si haces:

Código
  1. function hola(){ console.log('hola'); }
  2. hola();

Incluso dentro de funciones, esto funciona:

Código
  1. (function(){
  2.    hola();
  3.    function hola(){ console.log('hola'); }
  4. }());

O en cualquier cuerpo de bloques ({}) también. Es el mismo comportamiento con variables var:

Código
  1. 'use strict';
  2. test = 'hola';
  3. var test;

Donde no hay hoisting es con cosas como let, const y class.

No necesitas estar usando document.write en cada loop...

Código
  1. var i=0;
  2. try { stack(); } catch(e){ document.write(i); };
  3.  
  4. function stack()
  5. {
  6. ++i;
  7. return overflow();
  8. }
  9.  
  10. function overflow()
  11. {
  12. return stack();
  13. }

Eso si el navegador lo maneja como un error normal.
En línea

animanegra

Desconectado Desconectado

Mensajes: 287



Ver Perfil
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #4 en: 4 Octubre 2019, 16:43 pm »

En mi caso, cambia cada vez, no devuelve algo consistente. Habría que mirar si en media...
Código:
try{stack();}catch(e){console.log(i);}
196419 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
397489 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
598559 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
799629 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
1000699 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
1201769 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
1402839 debugger eval code:1:31
undefined
Saludos
En línea


42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.
MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #5 en: 4 Octubre 2019, 17:12 pm »

En mi caso, cambia cada vez, no devuelve algo consistente. Habría que mirar si en media...
Código:
try{stack();}catch(e){console.log(i);}
196419 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
397489 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
598559 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
799629 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
1000699 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
1201769 debugger eval code:1:31
undefined
try{stack();}catch(e){console.log(i);}
1402839 debugger eval code:1:31
undefined
Saludos

Bueno, la variable obviamente se incrementa una y otra vez si no la localizas, necesitas restablecer i a 0. En mi chrome el valor es constante. En Firefox, el valor cambia un poco.

Código
  1. {
  2.  var i = 0;
  3.  try { (function stack(){ i++; stack();})(); } catch(e) { console.log(i); }
  4. }
  5.  
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #6 en: 4 Octubre 2019, 17:34 pm »

Samsung browser está basado en chromium. Es muy pronto para decirlo pero la tendencia parece que en navegadores con chromium el espacio para el stack es fijo? Y en mozilla una aproximación?

Son interesantes los resultados.
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #7 en: 4 Octubre 2019, 17:36 pm »

Saludos,

Código
  1. <html>
  2.  <body>
  3.    <&#8204;&#8204;scr&#8204;&#8204;ipt>
  4.      var i = 0;
  5.      stack();
  6.      function stack() {
  7.        ++i;
  8.        document.write(i + " ");
  9.        return overflow();
  10.      }
  11.      function overflow() {
  12.        return stack();
  13.      }
  14.    </scr&#8204;&#8204;ipt>
  15.  </body>
  16. </html>

Citar
Google Chrome 76.0.3809.100 (Build oficial) (64 bits)

Uncaught RangeError: Maximum call stack size exceeded
    at overflow (strman.html:11)
    at stack (strman.html:9)
    at overflow (strman.html:12)
    at stack (strman.html:9)
    at overflow (strman.html:12)
    at stack (strman.html:9)
    at overflow (strman.html:12)
    at stack (strman.html:9)
    at overflow (strman.html:12)
    at stack (strman.html:9)

- Mínimo número: 1
- Máximo número: 6985
- Valor de incremento constante: +1
En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.399


Turn off the red ligth


Ver Perfil WWW
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #8 en: 4 Octubre 2019, 17:43 pm »

Saludos,

Código
  1. <html>
  2.  <body>
  3.    <&#8204;&#8204;scr&#8204;&#8204;ipt>
  4.      var i = 0;
  5.      stack();
  6.      function stack() {
  7.        ++i;
  8.        document.write(i + " ");
  9.        return overflow();
  10.      }
  11.      function overflow() {
  12.        return stack();
  13.      }
  14.    </scr&#8204;&#8204;ipt>
  15.  </body>
  16. </html>

- Mínimo número: 1
- Máximo número: 6985
- Valor de incremento constante: +1
Qué hardware utilizaste?
En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.156



Ver Perfil
Re: Qué resultados obtienes al ejecutar este código?
« Respuesta #9 en: 4 Octubre 2019, 19:11 pm »

Máx.: 6985
https://www.pccomponentes.com/lenovo-y50-70-intel-core-i7-4700hq-12gb-1tb-gtx860m-15-6-

---

- Ahora lo he probado en otro PC, este es un:

Google Chrome   76.0.3809.100 (Build oficial) (64 bits) (cohort: Stable)
Procesador: https://ark.intel.com/content/www/es/es/ark/products/80817/intel-core-i5-4460-processor-6m-cache-up-to-3-40-ghz.html
MotherBoard: https://www.gigabyte.com/Motherboard/GA-Z97P-D3-rev-11#ov
Ram: 4 + 4 GB DDR3 a 1333MHz

-- Los resultados fueron idénticos a los anteriores excepto que el Máx. subió un punto :xD:

Máx.: 6986
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda para ejecutar este código
Programación General
chauder92 0 1,995 Último mensaje 28 Enero 2015, 19:46 pm
por chauder92
ayuda con este codigo de python sumar incrementos de resultados print
Scripting
GEORGEFRT 3 2,494 Último mensaje 18 Abril 2015, 01:34 am
por Br1ant
Así consiguió este estudiante ejecutar código en servidores del gobierno de EEUU
Noticias
wolfbcn 0 1,259 Último mensaje 15 Junio 2016, 14:37 pm
por wolfbcn
Problema al ejecutar este código
Programación C/C++
TheFlash 0 1,664 Último mensaje 3 Enero 2017, 14:07 pm
por TheFlash
Ejecutar este código de Python en Visual Studio
Scripting
Meta 3 3,201 Último mensaje 28 Agosto 2017, 14:32 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines