Information Security ˗ˋˏ ♡ ˎˊ˗

Security/WebHacking

[HackCTF Web] 마법봉 (매직해시 취약점)

토오쓰 2019. 11. 28. 19:44

문제

풀이

 

flag 값이 나오기 위해서는 md5로 숫자 240610708 값을 암호화한 값과 sha1으로 입력값을 암호화한 값이 같으면 플래그가 출력된다.

이때 해시 값이 같다고 되는 경우로는 "매직 해시(Magic Hash)"를 이용한다.

 

밑에서 자세히 살펴보겠지만, 간단하게

Magic Hash란? 비교 연산을 할 때, type juggling을 이용하여 서로 다른 값이 같은 값으로 인식되도록 하는 특수한 동작이다.

 

www.whitehatsec.com/blog/magic-hashes/

 

Magic Hashes | WhiteHat Security

For more than the last decade, PHP programmers have been wrestling with the equals-equals (==) operator.

www.whitehatsec.com

Magic Hash 링크를 참고하여, md5 결괏값과 같은 sha1의 hash 값을 알 수 있다.

 

알게 된 지식

Magic Hash(매직 해시)

- 비교 연산을 할 때 Type Juggling을 이용하여 서로 다른 값이 같은 값으로 인식되도록 하는 특수한 동작이다.

- 특수한 경우인 '0e'로 시작하는 문자열에 뒤에가 모두 숫자일 경우에는 PHP 상에서 float 형태로 인식한다.

 

Type Juggling

- 변수를 정의하지 않아도 타입을 자동으로 설정한다(=auto casting)

- PHP는 변수 정의에 명백한 타입 선언을 요구하지 않는다.

 

특수 숫자 포맷

- 16진수: 0xC (10진수 값으로 12)

- 8진수: 0c11 (10진수 값으로 9)

- 지수: 3e2 (10진수 값으로 300)

 

Magic Hash(매직 해시) 취약점

- PHP에서 비교 연산자(==)는 자료형에 상관없이 값만 비교하기 때문에, 두 값이 0으로 바뀌고 비교 결과가 참이 된다.

- PHP에서 비교 연산자(==)는 자료형의 상관없이 값만 비교하기 때문에 취약할 수 있다. 

- 시용하기 위해서는 되도록 ===연산자(자료형 + 값 비교)를 사용하는 것을 권장한다.

=> Type Juggling을 진행하지 않아 매직 해시가 통하지 않는다.

 

 

참고

duwjdtn11.tistory.com/357

 

HackCTF - 마법봉

HackCTF - 마법봉 HackCTF의 마법봉문제이다. 바로 문제를 풀어보도록 하자. 문제풀이 문제 설명에 기재되어진 URL을 타고 들어가면 위와 같은 웹 페이지를 확인할 수 있다. 해쉬에 마법을 부여하면

duwjdtn11.tistory.com

rootable.tistory.com/entry/%EB%A7%A4%EC%A7%81%ED%95%B4%EC%8B%9CMagic-Hashes

 

매직해시(Magic Hashes) 취약점

* 매직해시(Magic Hashes)란 ?  - 비교 연산을 할 때 Type Juggling을 이용하여 서로 다른 값이 같은 값으로 인식되도록 하는 특수한 동작  - 항상 가능한 것이 아니라 특수한 경우('0e'로 시작하는 문자

rootable.tistory.com

 

'Security > WebHacking' 카테고리의 다른 글

[WebGoat] Stored XSS Attacks 정의 및 문제 풀이  (0) 2020.09.09
[WebGoat] WebGoat7.1 설치 및 실행  (0) 2020.08.26
[HackCTF Web] Login (SQL Injection)  (426) 2019.11.28
[HackCTF Web] Read File  (437) 2019.11.28
[HackCTF Web] Guess me  (414) 2019.11.28