En este segundo capítulo intentaré explicar los desafíos:
1. Guess the new number2. Predict the future
3. Predict the block hash
1. Guess the new number
Problema:
"El número ahora se genera bajo demanda cuando se intenta adivinarlo."El contrato que atacaremos será el siguiente
Datos de lectura:
Ideas para soluciones:
Explicación:
Test a ejecutar:
Conclusión:
Confiar en variables que cambien según el estado de la blockchain no es algo que nos asegure la generación de un valor aleatorio. Para ello existen otras herramientas, como los Oráculos, por ejemplo.
2. Predict the future
Problema:
"Esta vez, debe bloquear su intento por adivinar antes de que se genere el número aleatorio. Para darte una oportunidad deportiva, solo hay diez respuestas posibles. Tenga en cuenta que, de hecho, es posible resolver este desafío sin perder ningún ether."El contrato que atacaremos será el siguiente
Datos de lectura:
Ideas para soluciones:
Explicación:
Test a ejecutar:
Conclusión:
Para este ataque comprendimos cómo funciona un revert y lo explotamos para realizar n intentos. Sin embargo, vale resaltar que el principal problema del contrato víctima recae en la no utilización de un Oráculo, tal y como se lo mencionó en el desafío anterior.
3. Predict the block hash
Problema:
"Adivinar un número de 8 bits es aparentemente demasiado fácil. Esta vez, debe predecir todo el blockhash de 256 bits para un futuro bloque."El contrato que atacaremos será el siguiente
Datos de lectura:
Ideas para soluciones:
Explicación:
Test a ejecutar:
Conclusión:
A lo largo de estos 3 desafíos pudimos comprobar qué tan segura es la generación de números random onchain: 0. Acordate de los Oráculos, para estos escenarios pueden ser grandes amigos.
Con estos 3 desafíos finalizamos el bloque Lottery. ¡Felicitaciones! El próximo bloque se llama Math, y si bien muchas de las vulnerabilidades que veremos en él hoy en día ya fueron arregladas, existen algunos mecanismos interesantes que SÍ pueden ser aún aprovechados por un atacante.
Hasta la próxima, no te alteres.
bengalaQ