Como cada mes, hoy traemos un nuevo WriteUp y un nuevo reto para Level_UP! En esta ocasión le toca el turno al reto número 7, identificado en la plataforma como “Blockchain_Tour”. Se trata de un reto con una dificultad de nivel 2 sobre 5 y que nos otorgará una puntuación de 75 puntos si lo logramos superar. ¡Vamos a por ello!
Figura 1: WriteUp del Reto Hacking Web3 "Blockchain Tour"
& Nuevo Reto "Gas Knowledge" en Level_UP!
Si quieres montar tu CTF sobre Web3, Level_UP! es tu entorno Open Source con el que poder hacerlo. Queremos facilitar el aprendizaje, sin necesidad de desplegarlo en local, por lo que utilizaremos alguna testnet y pronto daremos noticias.
Figura 2: Level_Up! en GitHub
Reto: Blockchain Tour
En primer lugar, se puede apreciar que se trata de un contrato bastante simple. Se definen al comienzo algunas variables en el Storage del contracto, también está el constructor del Smart Contract y una función denominada set_flag(flag).
Figura 3: Smart Contract del reto Blockchain Tour
- Una variable privada de tipo string llamada flag.
- Un variable pública de tipo uint llamada blocknumber.
- Una variable pública de tipo address llamada owner.
Además de definir el valor de la flag (que se pasa como parámetro y se guardará en la variable flag del Storage), se define el valor de la variable blocknumber, que tendrá el valor del número de bloque actual. Y aquí es donde debemos fijarnos. Al ser una variable pública podremos acceder a dicho valor.
Figura 4: Acceso a la variable blocknumber desde la consola del navegador
Podemos encontrar el valor en hexadecimal que, si lo pasamos a decimal, obtendremos el valor del bloque donde debemos buscar. En el ejemplo mostrado aparece el valor “0x027e”, que se corresponde con el valor 638. Vamos ahora a revisar que hay en dicho bloque. Para revisar el contenido del bloque podemos hacer uso de la API JSON-RPC que dispone la blockchain, concretamente haciendo una solicitud con método eth_getBlockByNumber:
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber", "params":["0x027e", true],"id":1}' 127.0.0.1:7545
En este caso, como la blockchain se encuentra en un Ganache GUI en la misma máquina, sería posible revisar directamente la GUI para encontrar el bloque de una manera más sencilla aunque este método sólo es válido si tenemos nosotros el acceso al Ganache GUI.
Figura 6: Visualización del bloque en Ganache GUI
En ambos ejemplo nos encontramos que hay una única transacción: 0xcc3abbedd9f63ef1d09c3f1b7a6b978917bc9970d36316c1476d8b23a9f4cca6. Incluso en la petición con cURL nos da la información directamente del input de la transacción, ya que la petición se hizo para que diera el detalle de cada una de las transacciones que se encuentran en el bloque:
0x42e22ff6000000000000000000000000000000000000000000000000000000000000002 00000000000000000000000000000000000000000000000000000000000000027323 23934383936343334313433363136383934303638393337373430313235373131373 138393300000000000000000000000000000000000000000000000000Con esta información, en primer lugar, podemos averiguar el selector de la función. Hago uso de nuestra herramienta Open Source CrazyToolBox y compruebo el selector 0x42e22ff6 con la función selector decoder.
Figura 7: Selector decoder con la herramienta CrazyToolBox
Pero lamentablemente el servicio 4byte.directory no tiene información sobre este selector, por lo que procedo a validar que la función set_flag() se corresponde con dicho selector haciendo uso del selector encoder.
Figura 8: Selector encoder con la herramienta CrazyToolBox
Ahora sí, estamos seguros de que en esos datos es donde debemos buscar nuestra flag. Como en la función get_flag() sólo se pasa un parámetro (la flag) vamos a convertir los datos de hexadecimal a texto (ASCII).
Figura 9: Conversor de hexadecimal a ASCII
¡Lo tenemos! Finalmente, nos queda validar nuestra flag (únicamente los números) interactuando con el contrato base y la función validateFlag() para obtener nuestros puntos, tal y como ya se ha realizado con anterioridad en el resto de retos.
Nuevo reto: Gas Knowledge
Este mes publicamos un nuevo reto relacionado con el gas en Ethereum, donde se repasa este concepto y tendrás que acelerar tus transacciones si quieres superar el reto. Se trata del reto número 17, con un nivel de 2 sobre 5 y que nos dará 75 puntos para sumar al resto de retos que ya tenemos validados. Recuerda reclamar tu NFT en la plataforma cada vez que puedas para demostrar tu nivel, ¿llegarás a ser el gran maestro?
Figura 10: Nuevo reto "Gas Knowledge"
Como siempre, esperamos que sigas disfrutando y aprendiendo con la plataforma Level_UP! y nos vemos el próximo mes con un nuevo reto, que pronto tendréis novedades para jugar en una testnet.
Figura 11: Libro dedicado a "Bitcoin: La tecnología Blockchain y su investigación" de Yaiza Rubio y Félix Brezo |
Más artículos de Web3, Blockchain & SmartContracts
- Blockchain & SmartContracts: Una serie para aprender
- BlockChain & SmartContrats: Primer SmartContract con Solidity
- Blockchain & SmartContracts: Cómo probar y desplegar un SmartContract en Ethereum
- WWW, Web 1.0, Web 2.0, Web 3.0, Web3 y ¿Web 4.0?
- Metaverso, multiverso y las tierras digitales en que vivimos en forma de avatar
- Los Fan Tokens vs. las Criptomonedas y los NFTs: Level 101
- Tokenomics: Las criptomonedas y las "Proof-of-work": Level 101
- Los NFTs y el registro mundial de los dueños de activos digitales en el Metaverso
- BitCoin: Blockchain y su investigación
- BlockChain & SmartContrats: El Internet descentralizado y el almacenamiento off-chain en IPFS
- Reentrancy Attack: Cómo te roban criptomonedas por un bug en tu SmartContract
- BlockChain & SmartContract: Bugs que pueden dejar tu SmartContrat "fuera de juego"
- Blockchain & SmartContracts: Patrones y buenas prácticas de seguridad
- Blockchain & SmartContracts: Herramientas de Auditoría de Seguridad de SmartContracts
- BlockChain & SmartContracts: Ataque de phishing a tx.origin y robo de criptomonedas
- BlockChain & SmartContracts: Ataques de Ice Phishing
- Blockchain & SmartContracts: Herramientas de análisis dinámico
- ZIION: Una distribución Linux para auditar SmartContracts (& BlockChain)
- Dominios Web3 en Etherenum Name Service y la trazabilizad de las transacciones Blockchain
- BlockChain & SmartContracts: Actualizar SmartContracts como los grandes protocolos
- Jumping level up (from) web2 (to) web3: Vulnerabilities & SCAMs - SmartContracts
- 20 millones (Euros) en Tokens de Optimism perdidos por no saber cómo funcionan los Wallets Multifirma
- BlockChain & SmartContracts: Cómo crear una DApp de la Web3 con Python (y Flask)
- Pentesting SmartContracts: From Web2.0 to Web3
- Tokenomics 101: Una explicación con gráficos
- Read-Only Reentrancy Attack: $220k robados y otros +$100M en riesgo
- Como utilizar ChatGPT para encontrar bugs en SmartContracts
- BlockChain & SmartContracts: Nuevas áreas profesionales relacionadas con la Web3
- Las voces de Satoshi: Un canal para estar al día en Web3, Blockchain, Criptos & IA
- BlockChain & SmartContracts: Nuevas áreas profesionales relacionadas con la Web3
- Bit2Me Academy: Una plataforma online para aprender de Web3, BitCoin, Tokenomics o Ethereum con cursos gratuitos
- Level_Up!: Una plataforma para aprender a hacer pentesting en Web3 (SmartContracts & BlockChain ) a través de retos hacking
- Level_Up!: Web3 Security WarGames para los amantes del Challenge Based Learning
- Level_up!: WriteUp del Reto Questions para comenzar el pentesting en la Web3
- Level_Up! Deny_to_me Challenge activado en la plataforma Level_up! de retos hacking Web3
- Level_Up!: WriteUp del Ownership Challenge para hacer pentesting en Web3
- Nuevo reto Hacking Web3 de Level_UP! -> Forensic Ouch!
- Level_Up!: WriteUp del reto "Safeguarding" para hacer pentesting en Web3
- Reto Web3 en Level_Up! "Replay_me": La importancia de una correcta validación de firmas
- Level_Up! Configuración paso a paso de la plataforma de pentesting en Web3
- Level_Up! Consigue tus NFTs mientras cuando supera retos Web3
- Telefónica validará nodos de la cadena BlockChain de Celo
- Latch Web3: Un pestillo de seguridad para SmartContract
- Level_Up!: El WriteUp del reto "Origin" y un nuevo reto "Guess my number"
- CrazyToolBox: Una herramienta multifunción de utilidades Web3
- Level_Up!: El WriteUp del reto "ReLottery" y un nuevo reto de agosto llamado “Pay Me!”
- WriteUp: Reto Overworld y nuevo reto DEX Knowledge disponible en Level_Up!
- WriteUp del Reto Hacking Web3 Blockchain Tour & Nuevo Reto Gas Knowledge en Level_Up!
Happy Hacking!
Autor: Álvaro Núñez-Romero, investigador en el equipo de Ideas Locas. Autor del libro "Arduino para Hackers (& Makers): PoCs and Hacks Just for Fun" y del VBOOK de "Arduino para Hackers (& Makers): PoCs and Hacks Just for Fun"
No hay comentarios:
Publicar un comentario