공부/웹해킹 (Web hacking)

[드림핵 | 웹해킹] LEVEL 1: [wargame.kr] strcmp

eunjuu 2023. 11. 8. 23:04
728x90

👾 문제 설명

if you can bypass the strcmp function, you get the flag.

 

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

 

📎 https://dreamhack.io/wargame/challenges/328

 

[wargame.kr] strcmp

Description if you can bypass the strcmp function, you get the flag.

dreamhack.io


 

접속 정보에 "서버 생성하기"를 눌러서 링크에 접속한다. 

 

이런 페이지가 등장한다. view-source를 눌러보자.

 

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

    $password = sha1(md5(rand().rand().rand()).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>" . $FLAG ."</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>

 

strcmp 함수

두 개의 문자열을 비교하고, 두 문자열이 동일하면 0을 반환하며, 첫 번째 문자열이 두 번째 문자열보다 사전적으로 뒤에 있으면 양수를 반환하고, 첫 번째 문자열이 두 번째 문자열보다 사전적으로 앞에 있으면 음수를 반환합니다.

 

if (strcmp($_POST['password'], $password) == 0)

 

strcmp(문자열, 배열) 시에 NULL을 반환하여 느슨한 비교(==)를 했을 경우 인증이 우회가 됩니다.

 

strcmp()의 인자 값으로 배열을 넣는 경우 NULL 값이 반환

 

 

<input type=”text” name=”password[]”> == $0

 

개발자도구 들어가서 코드를 이렇게 수정한다.

 

 

password에 아무거나 넣어주었다.

 

 

 

728x90