WriteUp del Reto Hacking Web3 “Snippet Delegated” & Nuevo Reto “Send to me” en Level_Up!
En esta ocasión partimos de dos contratos diferentes: un primer contrato que tiene una serie de funciones, y un segundo contrato que importa estas funciones para su uso.
Para conseguir el flag de este contrato, si observamos la función getFlag(), nos damos cuenta de que necesitamos ser el owner y, además, hay un valor llamado power que debe ser igual a 9. Debemos encontrar, en primer lugar, como hacernos owner del contrato y, a continuación, como llegar a obtener 9 en el valor de power.
Como se ha comentado con anterioridad, se va a trabajar con la función delegatecall(). Si nos fijamos, el contrato hace uso de está función en la función llamada execution_function().
Se puede revisar el contrato functions y ver que opciones tenemos disponibles. Rápidamente podemos encontrar varias funciones que van a jugar con los valores de power y stamina y recordamos que una condición para obtener el flag es que power tenga el valor de 9.
Además, también encontramos una función llamada setOwner() que establece el propietario del contrato con el valor msg.sender. Con esto confirmamos que debemos interactuar con este contrato para conseguir los requisitos para conseguir la flag.
Comenzamos por llamar a la función setOwner(). Para ello debemos averiguar el selector de la función para pasarlo como el parámetro _data de la función execution_function(), que a su vez se pasará como parámetro de la función delegatecall().
Para ello, hacemos uso de nuestra herramienta Open Source CrazyToolBox. En el apartado “Function selector encode”, indicamos el nombre de la función setOwner() y nos devuelve el selector 0x40caae06. Llamamos a execution_function:
Tras esto, podemos verificar que hemos conseguido ser el propietario del contrato llamando a contract.owner(). También podemos llamar a la función getFlag() y nos encontramos con que pasamos el primer requisito (ser el owner) pero no el segundo. Todavía nos queda conseguir poder para obtener el valor de la flag.
Tenemos que llegar al valor 9 en power. La función addPower() nos sumará 5 al valor de poder. Además, contamos con las funciones addStamina() y delStamina(), que sumarán o restarán 1 al valor de stamina. Por último, también tenemos la función addStaminaToPower() que suma el valor de la stamina al valor que tiene poder.
- addPower() -> Power pasa de valer 0 a valer 5
- delStamina() -> Stamina pasa de valer 6 a valer 5
- delStamina() -> Stamina pasa de valer 5 a valer 4
- addStaminaToPower() -> Power pasa de valer 5 a valer 9 (le suma el valor 4 de stamina)
Para hacer las llamadas a través de delegatecall hay que volver a calcular el selector de las funciones:
- addPower() -> 0x51f2e64a
- addStamina() -> 0x1659544c
- delStamina() -> 0x9499443a
- addStaminaToPower() -> 0xcf5e9734
Por último, debemos traernos el valor de power haciendo una llamada a getPower(), con el selector 0x49a4e50d.
Ahora sí, podemos hacer la llamada al contrato para conseguir la flag y pasar a validarla en el contrato base y la función validateFlag() ya conocida de otros retos.
Ya podemos visitar el apartado de player para ver el reto completado y los 200 puntos obtenidos.
Nuevo reto: Send to me
Como cada mes, la publicación de un nuevo WriteUp! viene acompañado de un nuevo reto. En esta ocasión, parece un contrato sencillo a simple vista. Únicamente hay que encontrar la manera de mandar fondos a un contrato que no está preparado para la recepción de fondo. ¿Encontrarás la manera de hacerte con la flag?
Figura 12: Libro dedicado a “Bitcoin: La tecnología Blockchain y su investigación” de Yaiza Rubio y Félix Brezo |
Seguiremos resolviendo retos y creando nuevos retos para el aprendizaje en seguridad en Web3 y recuerda que si quieres aprender de estas tecnologías, tienes Bit2Me Academy, que es una plataforma online para aprender de Web3, BitCoin, Tokenomics o Ethereum con cursos gratuitos además del libro dedicado a “Bitcoin: La tecnología Blockchain y su investigación” de Yaiza Rubio y Félix Brezo que seguro que te ayudan a ponerte las pilas.
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!
- WriteUp del Reto Hacking Web3 “Snippet Delegated” & Nuevo Reto “Send to me” en Level_Up!
Powered by WPeMatico