-
Wargame.kr type_confusion문제카테고리 없음 2018. 4. 12. 01:14반응형
이 문제를 보고 나서 전에 무슨문제였더라... 하튼 wargame.kr을 풀면서 ==연산자의 취약점이 있다는것을 직감적으로 느꼇다.
그래서 바로 검색했다.
역시나 바로 나왔다. 여기서 이용하는 규칙은 다음에 참고되있다.
http://php.net/manual/kr/types.comparisons.php
여기서는 ""안에 들어가 있는 문자와 0또는 TRUE 와 비교했을떄 결과가 TRUE가 나온
다는것을 알 수있다. 따라서 우리가 비교하는 것도
<?php
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
if (isset($_POST['json'])) {
usleep(500000);
require("../lib.php"); // include for auth_code function.
$json = json_decode($_POST['json']);
$key = gen_key();
if ($json->key == $key) {
$ret = ["code" => true, "flag" => auth_code("type confusion")];
} else {
$ret = ["code" => false];
}
die(json_encode($ret));
}
function gen_key(){
$key = uniqid("welcome to wargame.kr!_", true);
$key = sha1($key);
return $key;
}
?>소스가 이러하니 0또는 TRUE를 넣어주면 값이 참이 될것이라는것을 알 수 있다.
0을 넣었을때도
true를 넣었을때도 FLAG가 잘 나온다.
추가적으로 ->연산자는 클래스 안의 것을 표현할때 사용하고 =>는 배열에서의 초기화인것 같다(?)
반응형