War Game/HackCTF

[HackCTF #8] 마법봉

myejinni 2021. 11. 7. 23:15

 

 

 

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