목록전체 글 (166)
Pwnstar
난이도 총 5단계에서 4단계 짜리 문제여서 겁을 좀 먹었는데 좀 많이 쉽다. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Privacy { bool public locked = true; uint256 public ID = block.timestamp; uint8 private flattening = 10; uint8 private denomination = 255; uint16 private awkwardness = uint16(block.timestamp); bytes32[3] private data; constructor(bytes32[3] memory _data) { data = _data; } function unlock(b..
음 되게 쉬운 문제다 일단 코드부터// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface Building { function isLastFloor(uint) external returns (bool); } contract Elevator { bool public top; uint public floor; function goTo(uint _floor) public { Building building = Building(msg.sender); if (! building.isLastFloor(_floor)) { floor = _floor; top = building.isLastFloor(floor); } } } 보면 Building interfa..
컨트랙트의 모든 재산을 훔치는 것이 레벨의 목표이다. 신뢰할 수 없는 계약이 예상치 못한 곳에서 코드를 실행할 수 있다고 한다.Fallback 메서드Throw/revert 버블링다른 컨트랙트로 공격 이런 것들이 도움될 수 있다고 한다.재진입 공격은 좀 유명한 취약점이라 일단 공부를 좀 하고 문제를 풀어보았다. 재진입 공격은 트랜잭션이 끝나기 전에 재진입해 이더를 탈취하는 공격이다.문제 코드를 보면서 이해해보자 // SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import 'openzeppelin-contracts-06/math/SafeMath.sol'; contract Reentrance { using SafeMath for uint256; mappin..
설명을 요약하자면 prize보다 큰 값의 ether를 전송하면 king이 될 수 있고, 이전의 왕은 이더를 받게 된다.submit instance를 하면 레벨이 kingship을 돌려받을 건데, 이걸 우회하면 문제를 풀 수 있다고 한다. 코드// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract King { address king; uint public prize; address public owner; constructor() payable { owner = msg.sender; king = msg.sender; prize = msg.value; } receive() external payable { require(msg.value >= pr..
Vault(금고)인데, 역대급으로 쉬운 문제였다. 이건 뭐 도움말도 없음. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Vault { bool public locked; bytes32 private password; constructor(bytes32 _password) { locked = true; password = _password; } function unlock(bytes32 _password) public { if (password == _password) { locked = false; } } } 코드는 이렇게 되어 있는데, 혹시 뭐 변수의 값을 확인할 수 있는 게 있지 않을까? 싶어서 검색해봤는데, getStorageA..
이번엔 contract의 ownership을 차지하는 것이 목표가 아니고, contract의 balance를 0보다 크게 만들면 된다고 한다. 도움이 될 만한걸로는Fallback 메서드다른 컨트랙트로 공격하기Beyond the console section을 보기 뭐 이렇게 있는데, beyond the console 부분은 이전에 coin flip 문제 풀 때에도 나왔던 부분인데, remix IDE 등을 사용하여 컨트랙트와 상호작용하는 방법이다. 문제 코드를 보자// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Force {/* MEOW ? /\_/\ / ____/ o o \ /~____ =ø= / (______)__m_m) */} 이게 코..
문제풀 때 도움이 되는 것으로는delegatecall이 작동하는 방식, on-chain 라이브러리에 사용되는 방식, 실행범위에 미치는 영향.Fallback 메서드메서드 ids? Delegatecalldelegatecall에 대한 정보는 Mastering Ethereum이라는 책에서 찾았다. 💡CALL과 DELEGATECALL 연산코드는 이더리움 개발자가 코드를 모듈화할 수 있게 하는데 유용하다. 컨트랙트에 대한 표준 외부 메시지 호출은 CALL 연산코드에 의해 처리되므로 코드가 외부 컨트랙트/함수의 컨텍스트에서 실행된다. 대상 주소에서 실행 코드가 호출 컨트랙트의 컨텍스트에서 실행되는 것을 제외하고 DELEGATECALL 연산코드는 거의 같으며, msg.sender와 msg.value는 변경되지 않는다...
토큰 컨트랙트를 해킹하라고 한다.20개의 토큰을 가지고 시작하는데, 가급적 많은 추가 토큰들을 획득하면 되는 것 같다.odometer가 뭔지 알면 도움이 된다고한다. odometer의 사전적 의미는 주행계라고 나와있는데, 자전거 또는 자동차가 주행한 마일 수를 기록하는 장치이다.근데 이게 이더리움 플랫폼이나, solidity 언어에서 무엇을 의미하는 지는 찾지 못했다. 그래서 혹시 인공지능이 답을 알까 싶어 chatGPT에 물어봤는데, 음…. 뭐, 그렇다고 한다. 근데 얘가 항상 정확한 정보만 주는것도 아니기에 그냥 대충 보고 다시 구글링을 해봤는데, 도움이 될 만한 블로그를 발견했다. How to Secure Your Smart Contracts: 6 Solidity Vulnerabilities and..