본문 바로가기 - [Ethernaut] 33. Magic Animal Carousel Hacking Magic Animal Carousel의 비트 마스킹과 스토리지 압축 구조를 해석하고, 동물 등록과 이름 변경 로직의 허점을 이용해 규칙을 깨는 공격을 구현한다.
- [Ethernaut] 35. Elliptic Token Hacking Elliptic Token의 잘못 구현된 ECDSA 검증과 도메인 분리 결함을 추적하고, 위조 서명으로 permit 권한을 얻어 토큰을 탈취하는 과정을 설명한다.
- [Ethernaut] 34. Bet House Hacking Ethernaut Bet House의 토큰 발행 제한과 출금 순서 문제를 분석하고, 컨트랙트 호출과 재진입을 이용해 필요한 토큰을 확보하는 공격 과정을 구현한다.
- [Ethernaut] 32. Impersonator Hacking ECDSA 서명 가변성으로 이미 사용된 서명을 변형해 컨트롤러를 영 주소로 바꾸고, 누구나 잠금을 열 수 있게 만드는 공격 과정을 풀이한다.
- Web3OJ 문제 풀이를 위한 Foundry 템플릿 Foundry Solidity 온라인 저지 Web3OJ의 문제를 Foundry로 풀 수 있는 템플릿을 소개하고, 빠른 테스트와 실행 등 프레임워크의 장점을 설명한다.
- Ethernaut 문제 풀이 및 키워드 정리 Hacking Ethernaut 각 단계의 풀이 링크와 핵심 취약점 키워드를 한곳에 모았다. 재진입, 스토리지 배치, 프록시, 타입 변환 등 단계별 학습 주제를 빠르게 찾을 수 있다.
- [Ethernaut] 30. HigherOrder Hacking Solidity 0.8 이전 ABI 디코더가 비정상 calldata를 허용하는 특성을 분석한다. uint8 범위를 넘는 값을 저장해 HigherOrder 조건을 달성한다.
- [Ethernaut] 31. Stake Hacking Stake 컨트랙트의 저수준 WETH 전송 결과 미검증과 출금 회계 오류를 분석하고, 네 가지 완료 조건을 충족하는 공격 과정을 단계별로 구현한다.
- Foundry 프로젝트에서 Hardhat 같이 사용하기 Foundry 기존 Foundry 프로젝트에 Hardhat을 추가하거나 그 반대로 구성할 때 필요한 플러그인 설치, 소스 경로 연동, 빌드 설정을 안내한다.
- OpenZeppelin Governor 이해하기 OpenZeppelin Wizard로 거버넌스와 투표 토큰을 구성하고, Foundry 테스트로 제안 생성부터 투표와 실행까지의 흐름을 검증한다.
- [Damn Vulnerable DeFi] Climber Hacking ClimberVault와 Timelock의 실행 순서 취약점을 이용해 권한을 탈취하고 UUPS 구현체를 교체해 자금을 인출하는 공격 과정을 분석한다.
- [Damn Vulnerable DeFi] Backdoor Hacking Gnosis Safe 프록시 생성 과정의 delegatecall을 악용해 수혜자 지갑에 토큰 승인 권한을 심고, 등록 보상금을 회수하는 공격을 다룬다.
- [Damn Vulnerable DeFi] Free Rider Hacking 일괄 구매에서 결제액을 중복 계산하고 판매 대금을 구매자에게 돌려주는 NFT 마켓의 결함을 플래시 스왑과 결합해 공략하는 과정을 설명한다.
- [Damn Vulnerable DeFi] Puppet V2 Hacking Uniswap V2의 준비금 비율을 그대로 오라클로 쓸 때 가격 조작이 반복되는 이유와, WETH 담보로 렌딩 풀을 비우는 공격을 다룬다.
- [Damn Vulnerable DeFi] Puppet Hacking Uniswap V1의 즉시 변하는 현물 가격을 조작해 담보 요구량을 낮추고 렌딩 풀의 토큰을 빌리는 공격과 TWAP 기반 개선안을 설명한다.
- [Damn Vulnerable DeFi] Compromised Hacking 노출된 두 오라클 운영자의 비밀키를 복원해 NFT 가격의 중앙값을 조작하고, 낮게 사서 높게 팔아 거래소 자금을 빼내는 과정을 다룬다.
- [Damn Vulnerable DeFi] Selfie Hacking 플래시 론으로 과반의 거버넌스 토큰을 확보해 스냅샷과 악성 작업을 등록하고, 지연 실행으로 렌딩 풀 자금을 탈취하는 과정을 설명한다.
- [Damn Vulnerable DeFi] The Rewarder Hacking 플래시 론으로 보상 스냅샷의 지분을 순간적으로 늘려 보상 토큰을 가로채는 원리와, 민팅·보상 처리 순서를 바꾸는 대응책을 다룬다.
- [Ethernaut] 24. Puzzle Wallet Hacking 프록시와 구현체의 스토리지 충돌, delegatecall의 동작을 이용해 지갑 소유권과 관리자 권한을 탈취하는 과정을 설명한다.
- [Ethernaut] 26. DoubleEntryPoint Hacking 레거시 토큰의 이중 진입점으로 보호 대상 토큰을 우회 인출하는 취약점을 추적하고, Forta 탐지 봇으로 전송을 차단하는 과정을 다룬다.
- [Foundry] .env 파일 사용하지 마세요 Foundry 평문 환경 파일과 명령 기록에 프라이빗 키를 남길 때의 위험을 짚고, Foundry의 암호화 키스토어로 계정을 관리하고 배포하는 방법을 안내한다.
- [Ethernaut] 25. Motorbike Hacking UUPS 프록시의 구현 컨트랙트가 초기화되지 않은 점을 이용해 소유권을 얻고, 업그레이드와 위임 호출로 엔진을 무력화하는 과정을 추적한다.
- [Damn Vulnerable DeFi] Truster, Side Entrance Hacking Truster의 임의 호출 권한과 Side Entrance의 재진입 가능한 예치 구조를 악용해 자금을 탈취하고, 각 취약점의 방어 방식을 제시한다.
- [Uniswap] V2 FlashSwap 예제 DeFi Uniswap V2 페어의 콜백으로 자산을 빌린 뒤 같은 토큰이나 상대 토큰으로 상환하는 플래시 스왑을 구현하고 수수료 차이를 검증한다.
- [Uniswap] V2 Oracle 예제 DeFi Uniswap V2의 누적 가격으로 시간 가중 평균 가격을 계산하는 오라클을 구현하고, 주기적 갱신과 토큰 견적 과정을 테스트한다.
- [Damn Vulnerable DeFi] Unstoppable, Naive Receiver Hacking Unstoppable의 풀 잔액 불일치와 Naive Receiver의 고정 수수료 구조를 이용해 플래시론을 중단시키고 자금을 소진하는 공격을 구현한다.
- [Uniswap] V2 Router DeFi Uniswap V2 Router01의 인터페이스와 WETH 역할을 짚고, 유동성 추가·제거와 정확한 입력·출력 기준의 스왑 함수 동작을 해설한다.
- Inline Assembly를 사용해 ERC-20 구현하기 & Inline Assembly 활용하기 Foundry 인라인 어셈블리로 ERC-20을 구현해 가스 비용을 비교하고, 문자열 저장과 조회, 이벤트 로그, 커스텀 오류를 다루는 방법을 설명한다.
- [Ethernaut] 18. MagicNumber Hacking 초기화 코드와 런타임 코드의 구조를 구분하고, 호출 시 42를 반환하는 초소형 컨트랙트를 EVM 바이트코드로 직접 작성해 배포한다.
- [Ethernaut] 29. Switch Hacking ABI로 인코딩된 호출 데이터의 오프셋을 조작해 함수 선택자 검사를 우회하고, Switch 컨트랙트의 상태를 바꾸는 공격 과정을 설명한다.
- [Ethernaut] 28. Gatekeeper Three Hacking 오타로 노출된 생성자와 스토리지에 남은 비밀번호, 이더 전송 실패 조건을 차례로 이용해 세 관문을 통과하고 진입자 주소를 바꾸는 과정을 설명한다.
- [Uniswap] V2 Core 보충 자료 - 백서 읽기 DeFi 유니스왑 V2 백서를 바탕으로 112비트 고정소수점과 타임스탬프 설계를 설명한다. 프로토콜 수수료 계산과 최소 유동성 발행 이유도 다룬다.
- [Ethernaut] 27. Good Samaritan Hacking 수신 컨트랙트가 동일한 커스텀 에러를 반환하도록 속여 지갑의 잔액 전송 분기를 실행한다. 외부 호출의 오류를 식별자로만 처리할 때의 위험도 설명한다.
- [Ethernaut] 23. Dex Two Hacking 교환 대상 토큰을 검증하지 않는 허점을 이용해 임의의 토큰으로 가격을 조작한다. 적은 수량의 공격 토큰으로 두 준비금을 모두 빼내는 과정을 다룬다.
- [Ethernaut] 22. Dex Hacking 풀의 현재 잔액 비율만으로 교환 가격을 계산하는 결함을 이용해 스왑을 반복하고 한쪽 토큰을 고갈시킨다. 조작 가능한 가격 산식의 위험을 짚는다.
- [Ethernaut] 21. Shop Hacking view 함수가 다른 컨트랙트의 상태를 읽을 수 있다는 점을 이용해 호출 시점마다 다른 가격을 반환한다. pure 함수로 의존 범위를 제한하는 방안도 다룬다.
- [Ethernaut] 20. Denial Hacking 제한 없이 가스를 전달하는 call과 재진입을 결합해 출금 함수의 가스를 소진시킨다. 외부 호출 결과 확인과 상태 변경 순서의 중요성도 짚는다.
- [Uniswap] V2 Core - UniswapV2Pair DeFi 유동성 풀의 토큰 보유량 추적과 상수곱 가격 결정 원리를 설명한다. 유동성 공급의 필요성과 위험을 바탕으로 페어 컨트랙트 구현을 해설한다.
- [Uniswap] V2 Core - UniswapV2Factory DeFi 팩토리 컨트랙트의 상태와 접근 제어, 토큰 페어 생성 절차를 코드와 테스트로 검증한다. CREATE와 CREATE2의 주소 결정 방식도 비교한다.
- [Ethernaut] 19. Alien Codex Hacking 동적 배열의 길이 언더플로우로 전체 스토리지에 접근한 뒤, 배열 원소가 저장될 슬롯을 계산해 소유자 값을 덮어쓰는 원리를 설명한다.
- [Uniswap] V2 Core - UniswapV2ERC20 DeFi ERC-2612 permit이 서명으로 토큰 사용 권한을 갱신하는 구조를 설명한다. 도메인 구분자와 논스, 만료 및 서명 재사용 방지 로직을 테스트한다.
- [Ethernaut] 17. Recovery Hacking 팩토리가 생성한 컨트랙트 주소를 블록 탐색기와 RLP 인코딩으로 찾는 방법을 비교하고, selfdestruct로 잠긴 이더를 회수하는 과정을 다룬다.
- [Ethernaut] 16. Preservation Hacking delegatecall이 호출자의 스토리지 문맥에서 실행되는 특성을 이용해 라이브러리 주소를 바꾸고, 공격 컨트랙트로 소유권을 탈취하는 과정을 설명한다.
- [Ethernaut] 15. Naught Coin Hacking ERC20의 approve와 transferFrom을 이용해 transfer에만 적용된 시간 잠금을 우회하고, 표준 기능에 덧붙인 제한 로직의 허점을 설명한다.
- [Ethernaut] 14. Gatekeeper Two Hacking 생성자 실행 중인 컨트랙트의 코드 크기가 0인 특성과 XOR 연산을 이용해 Gatekeeper의 세 조건을 우회하는 방법을 설명한다.
- [Ethernaut] 13. Gatekeeper One Hacking 컨트랙트 호출 구조, 잔여 가스 무차별 대입, 정수 타입 캐스팅으로 Gatekeeper의 세 조건을 통과하는 공격 과정을 단계별로 설명한다.
- [Ethernaut] 12. Privacy Hacking 솔리디티 스토리지의 슬롯 배치와 바이트 타입 캐스팅 방식을 이용해 private 배열 값을 복원하고 컨트랙트의 잠금을 해제한다.
- [Ethernaut] 11. Elevator Hacking 호출할 때마다 다른 값을 반환하는 인터페이스 구현으로 Elevator 상태를 조작하고, 외부 구현을 신뢰한 설계와 함수 책임의 문제를 설명한다.
- [Ethernaut] 10. Re-entrancy Hacking 외부 호출 전에 잔액을 차감하지 않는 취약점을 재진입 공격으로 공략하고, 검사·상태 변경·외부 호출 순서로 방어하는 원칙을 설명한다.
- [Ethernaut] 9. King Hacking 이더 전송을 거부하는 컨트랙트로 King 게임의 왕권 교체를 막고, 외부 주소로 transfer를 호출하는 로직이 서비스 거부로 이어지는 원리를 다룬다.
- [Ethernaut] 8. Vault Hacking 이더리움 컨트랙트의 스토리지 슬롯에서 private 비밀번호를 찾아 금고를 해제하며, 퍼블릭 블록체인에서 비밀값을 다루는 한계를 설명한다.
- [Ethernaut] 7. Force Hacking 이더리움 컨트랙트의 수신 함수 유무와 관계없이 selfdestruct로 이더를 강제 전송하는 원리와 잔액 기반 조건문의 위험을 설명한다.
- [Ethernaut] 6. Delegation Hacking 함수 선택자를 담은 calldata와 delegatecall을 이용해 소유권을 탈취하고, 호출 컨텍스트와 스토리지 슬롯 배치가 결과에 미치는 영향을 분석한다.
- [Ethernaut] 5. Token Hacking 구버전 Solidity의 정수 언더플로를 이용해 보유량보다 많은 토큰 전송을 통과시키고, 최신 버전의 산술 검사와 차이를 설명한다.
- [Ethernaut] 4. Telephone Hacking tx.origin과 msg.sender가 다르게 평가되는 호출 구조를 이용해 Telephone 컨트랙트의 소유권을 바꾸고, 인증에 생기는 위험을 설명한다.
- [Ethernaut] 3. CoinFlip Hacking 블록 해시를 난수처럼 사용한 코인 뒤집기의 예측 가능성을 설명하고, 같은 블록 값을 쓰는 공격 컨트랙트로 연속 승리를 만드는 과정을 다룬다.
- [Ethernaut] 2. Fallout Hacking 구버전 Solidity에서 컨트랙트명과 같은 함수가 생성자로 취급되던 규칙을 짚고, 철자 오류로 노출된 소유권 탈취 과정을 재현한다.
- [Ethernaut] 1. Fallback Hacking fallback과 receive 함수의 호출 조건을 실험하고, 소액 기여 뒤 소유권을 탈취해 컨트랙트 잔액을 인출하는 취약점을 풀이한다.
- [Ethernaut] 0. Hello Ethernaut Hacking Ethernaut 입문 레벨에서 네트워크와 인스턴스를 준비하고, 브라우저 콘솔로 컨트랙트 메서드를 호출해 인증하는 과정을 안내한다.
- [Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 7. standard json input을 사용해 배포한 컨트랙트 검증 Polygon Mumbai에 배포한 컨트랙트의 표준 JSON 입력과 생성자 인수를 구성해 Polygonscan API로 소스 코드를 검증한다.
- [Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 6. 메타데이터를 사용한 standard json input 생성 솔리디티 컨트랙트 메타데이터에서 컴파일 설정과 소스 정보를 추출해 검증용 표준 JSON 입력 파일을 생성하고 결과를 테스트한다.
- [Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 5. 이벤트 구독 geth의 웹소켓 연결로 배포된 토큰 컨트랙트의 전송 이벤트를 구독하고, 발생한 이벤트를 Go 채널에서 실시간으로 수신해 처리한다.
- [Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 4. 배포된 스마트 컨트랙트와 상호작용 Go와 geth로 배포된 토큰 컨트랙트의 전송 함수를 호출하고, 이벤트 로그와 수신 주소 잔액을 확인하며 트랜잭션 실패 사례를 다룬다.
- [Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 3. 생성된 Go 코드로 스마트 컨트랙트 배포 배포 시리즈의 세 번째 단계로, 로컬 테스트넷과 환경 변수를 준비하고 RPC 연결·키 파싱·서명자 생성을 거쳐 Go 코드로 컨트랙트를 배포한다.
- [Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 2. 스마트 컨트랙트로 Go 코드 생성 배포 시리즈의 두 번째 단계로, ERC20 컨트랙트를 컴파일해 ABI와 바이너리를 만들고 abigen으로 배포 가능한 Go 바인딩을 생성한다.
- [Solidity+Go] geth로 스마트 컨트랙트 배포하기 - 1. 초기 구성 geth로 컨트랙트를 배포하는 시리즈의 첫 단계로, Solidity 컴파일러와 abigen을 설치하고 Go·Node 프로젝트와 의존성을 구성한다.
- Foundry 테스트 작성하기 Foundry Solidity로 Foundry 테스트를 작성하는 구조와 실행 규칙을 다루며, 설정 함수, 실패 검증, 함수 이름 관례, 공통 설정 공유 방법을 설명한다.
- Foundry 프로젝트 살펴보기 Foundry Foundry 프로젝트의 생성·빌드·테스트 명령과 디렉터리 구조를 익히고, Git 서브모듈 기반 의존성 설치와 경로 재매핑 방법을 설명한다.
- Foundry 설치 Foundry 스마트 컨트랙트 개발 도구인 Foundry의 컴파일, 테스트, 배포 기능을 소개한다. 바이너리, Foundryup, 소스 빌드와 도커를 이용한 설치법을 다룬다.
- [Solidity] 재진입 공격 예방 기법 외부 호출 전에 검사와 상태 변경을 마치는 Checks Effects Interactions 패턴과 뮤텍스로 재진입 공격을 차단하는 방법을 다룬다.
- [Solidity] 재진입 공격 (Reentrancy Attack) 취약한 출금 함수에 공격 컨트랙트가 반복 진입해 자금을 탈취하는 과정을 따라가며, 외부 호출과 상태 변경 순서가 만드는 위험을 설명한다.
- [Trouble Shooting] invalid opcode while deploying 최신 Solidity로 컴파일한 컨트랙트를 ganache-cli에 배포할 때 생기는 invalid opcode의 원인을 찾고 Ganache 전환 절차를 제시한다.
- Most Significant Bit Solidity에서 이분 탐색과 비트 연산으로 정수의 최상위 비트와 최하위 비트 위치를 찾는 함수의 구현 방식과 동작 원리를 다룬다.