학기 중이라 바빠서 라이트 업을 자주 못 썼네요... 슬슬 종강도 다가오고 시간도 남으니 라이트 업 다시 적어보도록 하겠습니다.
일단 이 문제에 접근하기에 앞서 strcmp 가 무엇인지 알아야 합니다. 이 문제를 풀 당시에만 해도 파이썬만 주구장창 공부하던터라 c관련 함수는 잘 몰랐었는데요.
string 해더를 선언해주고, strcmp에 두가지의 문자열을 입력하면 두 문자열의 아스키 코드 값의 차를 -1,0,1 중 하나로 표현해줍니다. 그렇다고 해서 소문자에서 대문자를 빼면 무조건 -1 인가 찾아봤는데 그건 또 아니라고 하더군요..
두 문자열이 같으면 0이 나옵니다.
이렇게 strcmp 의 사용 방법을 알았다면 문제로 들어가봅시다.
일단 입력창이 있고, 입력창은 text 타입이며, password라는 명으로 저장되어 chk을 누르면 제출이 되는 형식입니다.
소스코드를 봅시다.
<?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>";
exit();
이 줄을 보면 건내 받은 password 값이랑 정해져 있는 값이 password 값과 같으면 "축하합니다! 플래그 값은 <b> 하고 뜬다고 하네요..
정해져 있는 password 값이 무엇일까 생각해봤는데, // do not brute force! 브루트 포싱하지말라네요.
이럴 땐 strcmp의 취약점을 사용하면 됩니다. 문자열과 문자열을 비교하는 strcmp에 문자열이 아닌 배열을 입력해주면 0이 반환 됩니다. 뒤에 == 이 아니라 ===을 사용하면 고쳐진다고 하네요.
이런 식으로 password 뒤에 []를 붙혀 배열 꼴로 만들고 제출합니다.
flag 값 이 출력됩니다.
'web_security > wargame.kr' 카테고리의 다른 글
[wargame.kr] 4번 login filtering 문제 풀이 (0) | 2019.01.12 |
---|---|
[webhacking.kr] 4번 문제 풀이 (0) | 2019.01.12 |
[wargame.kr] 3번 flee button 문제 풀이 (0) | 2019.01.10 |
[wargame.kr] 2번 QR CODE PUZZLE 문제 풀이 (0) | 2019.01.09 |
[wargame.kr] 1번 already got 풀이 (0) | 2019.01.08 |