view source를 통해 코드를 살펴보자
if 문, md5로 암호화한 문자열 240610708 이 sha1로 암호화한 $input 과 동일하다면 flag를 출력한다.
우선 문자열 240610708을 md5로 인코딩하면 0e46~이 나온다
구글링하다가 매직 해시라는 것에 대해 알게 되었다.
매직 해시란?
-비교 연산을 할 떄 type juggling을 이용해 서로 다른 값이 같은 값으로 인식되도록 하는 것
-특수한 경우 가능: 0e로 시작하는 문자열일 때
-1. 0e 뒤에 모두 숫자일 경우 : float 형태로 인식
-2. 0e 뒤에 문자가 들어갈 경우
Type Juggling?
-PHP는 변수 정의에 명백한 타입 선언을 요구하지 않음
-변수 타입은 auto casting 방식으로 결정됨
auto casting; 숫자 값이 $flag에 할당되었다면 $flag 는 integer 타입, 문자열 값이 할당되었다면 string 타입
string < float < int 순으로 자료형 선호
*Type Casting?
-변수 타입을 강제적으로 바꿔주는 것
참고: https://rootable.tistory.com/entry/%EB%A7%A4%EC%A7%81%ED%95%B4%EC%8B%9CMagic-Hashes
sha 1 암호화 시 0e~ 형식을 갖는 문자열을 찾으면 md5 인코딩 값과 동일하게 인식하여 flag를 출력한다는 것
sha1로 암호화하여 0e 형식을 갖는 것이 10932435112 임을 알 수 있다.
따라서 10932435112 를 입력하면 아래와 같이 flag가 나온다.
'War Game > HackCTF' 카테고리의 다른 글
[HackCTF #5] Guess Me (0) | 2021.11.21 |
---|---|
[HackCTF #7 Login] (0) | 2021.11.07 |
[HackCTF #3] Button (0) | 2021.10.31 |
[HackCTF #2] Hidden (0) | 2021.10.31 |
[HackCTF #1] / (0) | 2021.10.03 |