문제
풀이
flag 값이 나오기 위해서는 md5로 숫자 240610708 값을 암호화한 값과 sha1으로 입력값을 암호화한 값이 같으면 플래그가 출력된다.
이때 해시 값이 같다고 되는 경우로는 "매직 해시(Magic Hash)"를 이용한다.
밑에서 자세히 살펴보겠지만, 간단하게
Magic Hash란? 비교 연산을 할 때, type juggling을 이용하여 서로 다른 값이 같은 값으로 인식되도록 하는 특수한 동작이다.
www.whitehatsec.com/blog/magic-hashes/
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을 진행하지 않아 매직 해시가 통하지 않는다.
참고
rootable.tistory.com/entry/%EB%A7%A4%EC%A7%81%ED%95%B4%EC%8B%9CMagic-Hashes
'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 |