티스토리 뷰

728x90
반응형

Web 문제 중에서 제일 점수가 낮은 문제로 hash collision 과 php 비교 연산자(php magic hash) 관련 문제였습니다.

 

문제를 보면 처음엔 md5 hash 와 crc32 hash 값이 서로 일치해야 하고 두 번째엔 crc32 와 md4 가, 세 번째엔 md5와 md4가 일치해야 한다고 합니다.

위 문제를 풀기전에 일단 php magic hash 관련 내용을 찾아보았습니다.

<?php

$a = "0e123456";
$b = "0e888888";

if($a==$b){
	echo "true\n";
}else{
	echo "false\n";
}
?>

위 코드에서 a와 b는 서로 다른 값이지만 php 비교 연산자에서는 두 값이 참이 나옵니다. 정수의 형태로 비교하는 php 비교 연산자는 a의 값을 0 * 10^123456 으로 인식하여 결국 0 값으로 인삭하게 됩니다. 그러므로 두 변수 모두 0 값이므로 true 값이 됩니다.

이런 현상을 이용하여 0e 로 시작하는 hash 결과값을 가진 문자열을 구하면 문제는 풀 수 있었습니다.

해당 관련 문자열은 아래 링크에서 쉽게 참고할 수 있었습니다.

https://github.com/spaze/hashes

 

GitHub - spaze/hashes: Magic hashes – PHP hash "collisions"

Magic hashes – PHP hash "collisions". Contribute to spaze/hashes development by creating an account on GitHub.

github.com

입력 값에 넣고 Run Code 를 누르니 아래와 같이 Flag 값이 나오면서 문제를 풀 수 있었습니다.

728x90
반응형
댓글