
이것은 스마트 계약 보안에 관심이 있는 사람들이 안전한 환경에서 다양한 문제를 악용할 수 있도록 설계된, 의도적으로 취약하게 만든 스마트 계약 Truffle 배포입니다.
카지노의 다양한 게임에서 행운(또는 실력)을 시험해 멋진 토큰과 상품을 획득하세요!
현재 개발 중이므로 지금은 게임 수가 실망스러울 수 있지만, 앞으로 더 많은 게임이 추가될 예정이며, 그동안 악용할 거리가 많습니다.
의존성 설치
sudo apt install npmsudo npm install -g truffle ganache-cli./start_challenge.sh를 실행하여 testrpc를 시작하고, 카지노를 로컬 테스트넷에 배포하고, 다른 플레이어 시뮬레이션을 시작하세요
contracts/ 디렉터리의 코드를 검토하여 취약점을 찾으세요
가능한 한 많은 CasinoTokens를 획득하기 위한 개념 증명(PoC) 스크립트를 만드세요! (막히면 exec/simuilated-users/ 디렉터리의 시뮬레이션 사용자 스크립트를 참고하여 계약과 상호작용하는 방법을 파악하세요)
GOATlib/GOATConfig.js의 라이브러리를 사용하여 모든 호출에 GOATConfig.accounts.attacker를 사용할 수 있습니다. testrpc 환경이므로 실제 소유자 계정과 다른 플레이어 계정에 접근할 수 있다는 것을 알고 있으며, 계정을 순환하며 transfer를 호출하는 스크립트는 그다지 인상적이지 않습니다.GOATlib/: 다양한 JavaScript 파일에서 사용하는 코드가 포함된 라이브러리.build/: Truffle이 프로젝트를 컴파일할 때 생성하는 디렉터리. 컴파일된 바이트코드와 배포된 계약의 주소를 포함하여 프로젝트의 모든 계약에 대한 정보가 포함되어 있습니다.contracts/: 스마트 계약 코드.exec/simulated-users/: 다양한 게임을 플레이하는 시뮬레이션 도박꾼을 제어하는 스크립트.exec/examples: 익스플로잇을 구축할 때 참조할 수 있는 예제 스크립트.migrations/: 배포를 위해 truffle이 실행하는 스크립트. 알파벳 순서로 실행되며 계약이 어떻게 초기화되고 서로 어떻게 연결되는지에 대한 통찰력을 제공할 수 있습니다.GOATCasino의 모든 게임은 CasinoToken.sol 파일에 정의된 ERC20 호환 토큰을 사용합니다.
CasinoToken은 토큰의 표준 기능 대부분을 구현하기 위해 널리 사용되는 zeppelin 계약을 활용합니다.
CasinoExchange.sol에 정의된 계약을 사용하여 이더와 교환으로 CasinoTokens를 사고팔 수 있습니다.
Faucet.sol 파일은 사용자당 한 번 사용하여 게임을 시험해 볼 수 있는 무료 CasinoTokens를 제공받을 수 있는 계약을 정의합니다.
Vault.sol 계약은 소유자가 접근할 수 있도록 자금의 준비금을 보유합니다. 볼트의 자금은 동일한 비율로 나뉘어 각각 별도의 접근 제어 방식으로 보호되므로, 한 가지 방식이 충분하지 않은 것으로 판명되더라도 자금을 더 잘 보호할 수 있습니다.
마지막으로, 현재 카지노에 있는 유일한 게임은 복권입니다.
사용자는 0부터 255까지의 숫자로 티켓을 구매할 수 있습니다.
매분 사용자가 checkWin 함수를 트리거하여 당첨 티켓 번호를 생성하고, 승자에게 상금(하우스 수수료를 제외한 금액)을 지급한 후, 구매된 티켓을 초기화하여 새 라운드를 시작할 수 있습니다.
당첨 티켓을 구매한 사람이 없으면, 새 당첨 티켓이 선택되기 전에 라운드가 1분 더 구매를 계속 진행합니다.