KnightCTF 2022 Find Pass Code - 2 write-up

조승현·2022년 1월 25일
0

이제부터는 50점짜리가 아닌 150점짜리 문제이다. 그런데 난이도는 그리 높지 않았다. 같이 풀어보자.

문제 첫화면이다. pass code - 1과 똑같다. 코드를 살펴보자.

1번 문제와 연결되어있는듯하다. 1번문제에서 ?source=asdf를 했을때 php 코드가 출력되었으므로 해본다.

1번문제와는 상당히 다른 코드이다. 코드를 해석해보자.

  1. old pass code가 주어진다.
  2. pass code를 post 방식으로 전달받는다. 단 array형태가 아니어야한다.
  3. 또한 old pass code 값들중에 같은 값이 있으면 안된다.
  4. 만약 pass code값 == md5(pass code값) 이면 flag 획득

이거보고 딱 깨달았다. wargame.kr인가 거기서 풀었던 매직해시 문제이다. 이 취약점에 대해 설명을 좀 하자면 md5와의 비교연산이 '==='이 아닌 '=='일때 발생하는 취약점으로 어떤 값 a가 있을때 md5(a)가 0eXXXXXX 형태일때 0 == md5(a) 가 참이 된다.
즉 여기 문제에서는 md5(0eXXXX) = 0eXXXXX이면 문제가 해결된다는 말이다. 매직해시 값은 github에 굉장히 많이 널려있다. 알고보니 맨 처음 주어진 old pass code에 값들도 매직해시값이었다. 저 값을 제외하고 다른 값을 찾아보자. 나는 0e1137126905 값을 찾았다. post 방식으로 pass_code=0e1137126905 로 넘겨주면

solved!

출제자가 다 한국인들인가...? 왜 다 문제가 wargame.kr, webhacking.kr에서 본거같지?

profile
Inha University / CTF Web Player / Team Riot of Noob

0개의 댓글