Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.


이번에 가져온 문제는 SCTF 2018 예선에서 나왔던 문제인 BankRobber 입니다.

국내에서 흔하게 볼 수 없는 솔리디티 문제로, 코드의 취약한 부분을 패치하는게 문제였습니다.

대회당시에는 저 문제만 잡고있었지만, 솔리디티 알못이였던 관계로 못풀었습니다.. ㅇㅁㅇ


저도 최근에 이더리움을 접하면서 공식문서를 읽어봤는데 보안 패치에 관한 내용이 있어서 참고를 하니 쉽게 풀 수 있었습니다.

The Dao와 같은 구조적인 취약점이 아니라면 (사실 The Dao도 재진입 공격에 가깝습니다)

저기 언급된 보안문제 이외에는 크게 생길 문제가없습니다.


그래서 코드를 읽다보니 multiTransfer 함수에서 인티저 오버플로우가 터지고, 

Deliver 함수에서는 msg.sender 대신 tx.orgin을 써야한다. (스마트 컨트렉트 발신자만 사용가능한 함수로써 정의)


그리고  Withdraw 함수에서 돈을 보내고 잔고를 확인하는 취약점이 있어서 그 두가지의 순서를 바꿔줘야한다. (재진입)

마지막으로 Donate 함수에서 잔고를 확인하지 않고 실행하는 취약점이있다.


위 4가지를 고친 후 서버에 입력하면 플래그를 뿜뿜 해준다고한다.