-
Wargame.kr type confusionWebHacking/Wargame.kr 2018. 2. 25. 06:401234567891011121314151617181920212223242526272829303132333435363738<?phpif (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;}?><html><head><script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script><script src="./util.js"></script></head><body><form onsubmit="return submit_check(this);"><input type="text" name="key" /><input type="submit" value="check" /></form><a href="./?view-source">view-source</a></body></html>
cs 이번 문제는 JSON문제다
{'key':'0'}을 넣게 되면 JSON decode를 해주면 key='0'이 된다.
우리가 비교하게 되는 $key는 문자열이다.
우리가 넣는 JSON은 문자열을 넣어도 되고 숫자를 넣어도 된다.
그리고 비교는 ==를 쓴다.
느낌이 온다 .. "0SECRET_FLAG" == 0을 비교하면 문자열 맨 앞에 있는 숫자와 비교를 하기 때문에 True가 될 것 이다.
{"key":0}을 넣으면 이상하게 안 된다.. 내가 쓰는 웹 서버에서는 잘 되던데 ..
그래서 조금 야매?를 써서 풀기로 하였다.
우리는 JSON값을 보내면 submit_check함수가 호출된다.
이곳에서 JSON디코드 된 값을 submit(값)을 넣어서 호출하는데
submit(0)을 넣어주면 내가 넣을려 했던 숫자 0이 제대로 들어갈 것 이다.
'WebHacking > Wargame.kr' 카테고리의 다른 글
Wargame.kr SimpleBoard (0) 2018.02.26 Wargame.kr tmitter (0) 2018.02.25 Wargame.kr strcmp (0) 2018.02.25 Wargame.kr md5 password (0) 2018.02.25 Wargame.kr md5 compare (0) 2018.02.25