웹 해킹/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을 반환한다.
배열형태로 바꿔주고 아무 값이나 넣어주면 된다.