웹 해킹/wargame.kr

wargame.kr 8번 [strcmp]

ii4gsp 2020. 1. 14. 16:28

strcmp 함수를 우회 할 수 있다면 플래그를 얻는다고 한다.

Start를 눌러주자

 

 

 

 

password 입력칸과 밑에 view-source가 있다.

소스코드를 보도록 하자

 

 

 

 

<?php
    require("../lib.php"); // for auth_code function

    $password = sha1(md5(rand().file_get_contents("/var/lib/dummy_file")).rand());

    if (isset($_GET['view-source'])) {
        show_source(__FILE__);
        exit();
    }else if(isset($_POST['password'])){
        sleep(1); // do not brute force!
        if (strcmp($_POST['password'], $password) == 0) {
            echo "Congratulations! Flag is <b>" . auth_code("strcmp") ."</b>";
            exit();
        } else {
            echo "Wrong password..";
        }
    }

?>
<br />
<br />
<form method="POST">
    password : <input type="text" name="password" /> <input type="submit" value="chk">
</form>
<br />
<a href="?view-source">view-source</a>

/var/lib/dummy_file에서 password를 랜덤으로 가져오는데 입력값이 password와 같아야 한다.

strcmp함수는 두 문자열이 같을 때 0을 반환한다.

하지만 strcmp 함수는 문자열과 배열을 비교했을때도 NULL을 반환한다.

즉, 0을 반환한다.

문자열과 배열을 비교하게되면 무조건 0을 반환한다.

 

 

 

 

아래와 같이 배열형태로 바꿔주면 무조건 0을 반환한다.

 

 

 

배열형태로 바꿔주고 아무 값이나 넣어주면 된다.