it 공부 일기 - 워게임 ctf 풀이 및 언어 강좌모음

hackctf 마법봉 문제 풀이 본문

ctf.j0n9hyun.xyz

hackctf 마법봉 문제 풀이

kimtong 2021. 1. 13. 14:36

한번 들어가보면 이렇게 나와아 마법봉이랑 해쉬에 마법을 부여하면 그 어떤 것도 뜷릴지어니.. 라고 나와있는것을 볼 수 있다.

 

일단 View Soruce 라는게 있는데 한번 버튼을 눌러보면

 

이렇게 간단한 소스코드가 나와있을것을 볼 수 있다.

먼저

이 조건에 만족해야지만 flag가 나오는것일텐데 $input 는 클라이언트가 직접 입력을 하면은 되는것이다.

 

해당 문제는 매직해쉬를 이용하여 푸는 문제이다

php 의 경우 == 비교 연산자는 

www.php.net/manual/en/language.operators.comparison.php

 

PHP: Comparison Operators - Manual

When you want to know if two arrays contain the same values, regardless of the values' order, you cannot use "==" or "===".  In other words: To answer that question, use: A related, but more strict problem, is if you need to ensure that two arrays contain

www.php.net

 

이 링크와 같이

== 로 사용하는 경우에 만약 숫자 문자열이면 비교할때 숫자로 비교를 하게된다는것이다.

 

md5("240610708") 를 실행시켜보면

0e462097431906509019562988736854이라는 값이 나오게 된다.

매직해시라는 취약점의 경우 

php 의 비교 연산자를 이용하여 0e... 과 같은 형태로 나오게되면서 서로 일치한 값이 나오게 되버리는것이다.

 

만약 

if("0e315312523" == "0e124")

이렇게 비교한다 해도 == 는 숫자로 변환이 가능하면 숫자로 비교를 하게 된다.

그러면 해당 hackctf를 살펴보면

 

sha1($input)

이런식으로 우리가 입력하는거를 sha1 방식으로 해시하게 되므로 

sha1 magic hash

이런식으로 구글링을 하면

10932435112 이라는 값을 넣으면 sha1 해시할때 0e07766915004133176347055865026311692244

이런식으로 나오게된다는것이다.

 

이제 파악은 다 했으니 원래 페이지로 돌아가여

이렇게 제출하면

플래그가 나오는것을 볼 수 있다.

HackCTF{magic_makes_everything_possible}

'ctf.j0n9hyun.xyz' 카테고리의 다른 글

hackctf Guess me 문제 풀이  (0) 2021.01.11
hackctf Login 문제 풀이  (1) 2021.01.11
hackctf web / 문제 풀이  (0) 2020.12.12
hackctf Button 문제 풀이  (0) 2020.12.12
hackctf 보물 문제 풀이  (0) 2020.12.12