En anteriores posts, hemos presentado todos los retos que tiene Level_UP! y algunos writeups de estos. En esta ocasión, vamos a hablar sobre cómo instalar y configurar la plataforma Level_UP! de retos Web3 desarrollada por el equipo de Ideas Locas, para que puedas comenzar a aprender sobre pentesting en Web3 y enfrentarte a los 11 retos que actualmente posee.
Figura 1: Level_Up! Configuración paso a paso de la plataforma de pentesting en Web3
Como ya sabrás, Level_UP! tiene su código disponible en GitHub como proyecto de código abierto. Por lo tanto, el primer paso para comenzar es descargar el repositorio en tu equipo.
Figura 2: Level_Up! en GitHub
Para hacer este proceso, lo único que necesitamos es hacer un Git clone del proyecto en nuestro sistema y listo, ya habremos acabado la primera fase.
También, vamos a instalar Ganache, que es una herramienta de desarrollo Blockchain que permite simular y desplegar redes Ethereum localmente para propósitos de pruebas y desarrollo.
Existen dos formas de utilizar Ganache, mediante CLI o GUI. En este artículo, lo haremos utilizando el entorno gráfico, pero si prefieres utilizar Ganache mediante CLI te aconsejo que visites su página de npm.js donde indican todos los detalles para usar este simulador de Ethereum desde una terminal.Figura 4: Ganache en npm.js
Una vez que hayas instalado Ganache, se abrirá una ventana que mostrará dos opciones. Para comenzar rápidamente, simplemente haz clic en “QUICKSTART”. Esta opción configurará una red Blockchain local de forma rápida y automática, además de generar 10 cuentas con un saldo de 100 ETH para interactuar con la Blockchain. Por cada cuenta, podrás obtener su clave privada y dirección, las cuales serán útiles en los siguientes pasos.
Figura 5: Cadena de Blockchain local
A continuación, será necesario crear en la raíz del proyecto de Level_UP! un fichero denominado “.env” donde configuraremos las siguientes variables:
- FILE_BYTECODES_PATH: La ruta del archivo “bytecode.json” que contiene los bytecodes de los SmartContracts.
- FILE_ABI_PATH: La ruta del archivo “abi.json” que contiene los ABI (Application Binary Interface) de los SmartContracts.
- FILE_DATA_PATH: La ruta del archivo “data.json” que contiene los datos necesarios para la interacción con los SmartContracts.
- FILE_CONTRACT_ADDRESS: La ruta del archivo “contract-address.json” que contiene las direcciones de los SmartContracts desplegados en la Blockchain.
- NETWORK: La URL de la red Blockchain a la que se conectará el proyecto, por defecto, “http://127.0.0.1:7545” para una Blockchain local de desarrollo como Ganache.
- NETWORK_NAME: El nombre de la red Blockchain, en este caso “ganache-gui”.
- CHAIN_ID: El ID de la cadena Blockchain a la que se conectará el proyecto, por defecto, “1337” para una blockchain local de desarrollo como Ganache.
- ADDRESS_OWNER: La dirección del propietario del contrato, que se debe reemplazar con una dirección de cuenta válida en la blockchain desplegada.
- PRIVATE_KEY: La clave privada asociada a la dirección del propietario del contrato, que se debe reemplazar con la clave privada correspondiente a la cuenta seleccionada.
- LEVEL_BASE: El nivel base para el juego, por defecto, 1000.
Figura 6: Valores de nuestro entorno
Para obtener estos valores, haz clic sobre el icono de la llave en una de las 10 cuentas generadas por Ganache. Esto desplegará un modal con la información necesaria para Level_UP!
Figura 7: Variables en Ganache
La plataforma Level_UP! utiliza un framework de Python denominado Flask. También es recomendable el uso de entornos Python virtualizados, como pipenv o virtualenv, para evitar posibles conflictos con otras librerías y versiones ya instaladas en el equipo.
Figura 8: Libros de Python para Pentesters y Hacking con Python de Daniel Echeverri publicados en 0xWord. |
En Ideas Locas hacemos uso de pipenv, y será la herramienta que se utilizará en este artículo.
Mediante el comando “pipenv install” crearás un entorno virtual con pipenv que instalará las dependencias del proyecto especificadas en el archivo “Pipfile” (se recomienda el uso de Python 3.9 o 3.10).
Una vez que las dependencias se hayan instalado correctamente, activa el entorno virtual con el comando “pipenv shell”. Esto te llevará al entorno virtual recién creado, donde podrás ejecutar los comandos necesarios para iniciar Level_UP! Ahora, ya puedes arrancar la plataforma ejecutando el comando “flask run”. Este comando iniciará el servidor Flask y la plataforma Level_UP! estará disponible en la dirección proporcionada en la salida de la terminal (por defecto, http://127.0.0.1:5000/).
Figura 10: flask run
Mencionar que Level_UP! también se encuentra “dockerizado”. Esto significa que, si lo prefieres, puedes utilizar docker-compose para levantar tanto una Blockchain en Ganache como la plataforma, usando únicamente el comando “docker-compose up”.
Por último, si accedes a la dirección donde está corriendo Level_UP! desde tu navegador, podrás ver que para poder interactuar con la DApp es necesario utilizar Metamask o algún wallet similar. Metamask es una billetera de criptomonedas en forma de extensión de navegador que permite a los usuarios interactuar con aplicaciones descentralizadas en la Blockchain de Ethereum, aunque también podremos agregar nuestras propias Blockchains como la de Ganache.
Figura 11: Docker de Level_Up!
Por último, si accedes a la dirección donde está corriendo Level_UP! desde tu navegador, podrás ver que para poder interactuar con la DApp es necesario utilizar Metamask o algún wallet similar. Metamask es una billetera de criptomonedas en forma de extensión de navegador que permite a los usuarios interactuar con aplicaciones descentralizadas en la Blockchain de Ethereum, aunque también podremos agregar nuestras propias Blockchains como la de Ganache.
Para ello, procedemos a agregar una nueva red en Metamask. Debes hacer clic en el menú desplegable de las redes y elegir "Agregar red". A continuación, debes hacer clic sobre la opción “Agregar red manualmente” e ingresar el nombre de la red, la URL, el identificador de cadena (por defecto, 1337) y el símbolo del Token (ETH). Una vez que hayas completado todos los campos, haz clic en "Guardar" y la nueva red se agregará a tu lista de redes en Metamask.
Y eso es todo lo que necesitas hacer para desplegar Level_UP! en tu propia máquina. En el vídeo anterior, te dejamos un resumen en menos de dos minutos de todo este proceso. Os animamos a que si probáis Level_UP! y encontráis algún fallo nos lo hagáis saber vía nuestro buzón público en https://MyPublicInbox.com/IdeasLocas. Esperamos que disfrutéis del nuevo reto y que sigáis sumando puntos de conocimiento en Web3 y la seguridad de ésta.
Figura 14: 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
Saludos,
Autor: Javier Álvarez Páramo (Intership en IdeasLocas)
Hola, gracias por compartir he estado tratando de desplegar el proyecto pero casi al final me da un error con el archivo contract-address.json el mismo debe contener las address de ganache solamente o la salida inicial con todo?
ResponderEliminar