jueves, 17 de marzo de 2022

DeFi Hacking #2 - Naive receiver (Damn Vulnerable DeFi)

Bienvenidos otra vez a Who is secure. Hoy vamos a continuar con la serie de DeFi Hacking resolviendo el segundo reto de Damn Vulnerable DeFi, Naive receiver.

Vamos a la web de Damn Vulnerable DeFi para leer cuál es el objetivo de este reto, y como veis, nos indica que tenemos que vaciar el contrato de un usuario que contiene 10 ETH.


Para empezar vamos a revisar el código del contrato.


Volvemos a tener una función flashLoan que parece que vamos a tener que usar para vaciar el contrato.


Esta función está haciendo el préstamo y para ello hace un gasto de una comisión que está declarada como una variable llamada FIXED_FEE con un valor de 1 ETH. Vamos a probar a ejecutarla para ver qué nos devuelve el programa.




Como veis, el error que nos devuelve es que 9000000000000000000 no es 0 ya que la comprobación hecha es si el valor del balance del contrato es cero. Vamos a ejecutar otra vez pero sin llamar a la función para ver qué error nos devuelve.


El error ahora ha cambiado y el número que se ve es la diferencia de 1 ETH, que es lo que no se ha perdido esta vez de la comisión. Si una transacción va a hacer siempre que haya una pérdida de 1 ETH por la comisión, si hacemos 10 transacciones vaciaremos el contrato.




¡Resuelto!

Si quisiesemos podríamos mejorar el exploit para ahorrar líneas haciendo un bucle que repitiese 10 veces la llamada a la función, pero no es necesario.

La mejora que sí he querido hacer al exploit es la mencionada en la última línea del enunciado escrito en la web, resolverlo en una sóla transacción. He estado intentando distintas formas creando un contrato adicional para resolverlo pero no ha funcionado, por lo que aunque marco este reto como completo me quedo con la espinita de resolverlo en una sóla transacción (por lo que puede que algún día vuelva a mostrar este reto con esa solución si lo consigo). Sé que os he fallado como hackerito :(


Esta vez he vuelto muy rápido pero no prometo nada para la próxima (todo sea para poder decir en la siguiente entrada "Hola después de mucho tiempo", como le gusta a Danners xD). Dicho esto, espero que os haya gustado y ayudado y muchas gracias otra vez por estar por aquí.

No hay comentarios:

Publicar un comentario