해킹 (4) 썸네일형 리스트형 uint 자료형의 허점을 노린 스마트컨트랙트 해킹 uint 자료형의 허점을 노린 스마트컨트랙트 해킹 [요약] 내가 다른 사람에게 돈을 입금하려면 나의 은행 잔고는 당연히 입금하려는 돈 보다 많아야한다. 동일한 의도로 타겟 스마트컨트랙트 내에 내가 보내려는 토큰이 나의 토큰 잔고 보다 많을 경우 전송을 할 수 있게 만든 코드가 있다. uint의 특성인 언더플로우를 이용해서 나의 토큰 잔고가 보내려는 토큰보다 적더라도 전송이 실행되도록 해킹해보고 이를 통해 스마트컨트랙트 코드 작성시 uint 자료형 변수의 특징과 보안 취약점을 알아보자. 타겟 스마트컨트랙트 'Token' 전체 코드 pragma solidity 0.6.0; contract Token { mapping(address => uint) balances; uint public num; constru.. 스마트컨트랙트 홀짝 해킹 #3 스마트컨트랙트 해킹 테스트 #3 [요약] 블록넘버의 홀수, 짝수를 맞추면 승리하는 스마트컨트랙트를 반드시 이길 수 있도록 해킹해보자. 해킹 타켓 스마트컨트랙트 "Test11" pragma solidity 0.8.6; contract Test11 { mapping(address => uint) public txCount; mapping(address => uint) public win; function gamble(bool _answer) public { uint blockNum = block.number; bool answer; if(blockNum % 2 == 1){ answer = true; } else if (blockNum % 2 == 0) { answer = false; } txCount[msg.. 스마트컨트랙트에서 코인 훔치기 #2 스마트컨트랙트에서 코인 훔치기 #2 [요약] 잔고가 일정 범위 이상이어야 인출할 수 있는 스마트컨트랙트가 있다. 현재 스마트컨트랙트의 잔고는 0.5 eth 인출 조건은 잔고가 1.0 eth 이상이 되어야 하는데 이 스마트컨트랙트에는 메타마스크로는 이더리움을 전송할 수 없다. 이 스마트 컨트랙트의 이더를 인출해보자. 타켓 스마트컨트랙트 코드 pragma solidity 0.8.6; contract Test7 { constructor() payable { } function withdraw() public { require(address(this).balance >= 1 ether); payable(msg.sender).transfer(address(this).balance); } } 스마트 컨트랙트 Tes.. 스마트컨트랙트에서 코인을 훔쳐보자 스마트컨트랙트에서 코인을 훔쳐보자 [요약] 이더리움을 받을 수 있는 간단한 스마트컨트랙트를 작성하고 취약점을 발견하여 스마트컨트랙트 내에 있는 이더리움을 탈취한다. 사례1 [Test1] Full Script pragma solidity 0.8.6; contract Test1 { uint nonce; constructor(uint _nonce) payable { nonce = _nonce; } function getNonce() public view returns (uint) { return nonce; } function withdraw(uint _nonce) public { require(nonce == _nonce); payable(msg.sender).transfer(address(this).bal.. 이전 1 다음