write-ups/solveme.safflower.kr

Hash collision write up

2018. 3. 4. 00:22

<?php
    error_reporting
(0);
    require 
__DIR__.'/lib.php';

    if(isset(
$_GET['foo'], $_GET['bar'])){

        if(
strlen($_GET['foo']) > 30 || strlen($_GET['bar']) > 30){
            die(
'Too long');
        }

        if(
$_GET['foo'] === $_GET['bar']){
            die(
'Same value');
        }

        if(
hash('sha512'$_GET['foo']) !== hash('sha512'$_GET['bar'])){
            die(
'Different hash');
        }

        echo 
$flag'<hr>';
    }

    
highlight_file(__FILE__);


이 프로그램을 만든 개발자는 사용자로부터 foo 라는 값과 bar 라는 값 두 개를 받습니다. 


첫 번째 분기문에서 foo 의 값과 bar의 값이 같은지 확인합니다. 

두 번째 분기문에서는 사용자로부터 받은 foo와 bar를 각각 sha512로 해시처리하여 비교하고 만약 다르다면 Different hash 를 출력하고 프로그램을 종료합니다. 


 사실 이 문제를 푸는 방법은 간단합니다. 


 개발자는 사용자가 foo와 bar에 각각 문자열을 입력하리라 예상하고 있습니다. 하지만, 우리가 해당 프로그램에 입력할 수 있는 것은 Array도 있습니다. 항상 취약점이라는 것은 개발자가 예상한 사용자의 입력 집합이 사용자가 입력할 수 있는 입력 집합보다 작을 때 터지는 것입니다.




 hash 함수에 모두 Array가 들어가면 둘 다 똑같이 오류를 내뿜습니다. 그리고 php interactive shell에서 확인해보면 다음은 참이라는 것을 확인할 수 있습니다. 



그리고 플래그를 얻습니다. 





'write-ups > solveme.safflower.kr' 카테고리의 다른 글

URL filtering write up  (1) 2018.03.04
Hell JS write up  (0) 2018.03.04
thirty six write up  (0) 2018.02.27
Give me a link write up  (0) 2018.02.26
solveme.safflower.kr bad compare write up  (0) 2017.11.16