2023. 10. 17. 16:47ㆍ웹해킹/Webhacking.kr
웹 개발을 지속적으로 공부를 하면서 웹보안에도 신경을 써야한다는걸 뒤늦게 알아서
webhacking 으로 웹보안 공부를 하기로 했다.
1번
<?php
include "../../config.php";
if($_GET['view-source'] == 1){ view_source(); }
if(!$_COOKIE['user_lv']){
SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
echo("<meta http-equiv=refresh content=0>");
}
?>
<html>
<head>
<title>Challenge 1</title>
</head>
<body bgcolor=black>
<center>
<br><br><br><br><br>
<font color=white>
---------------------<br>
<?php
if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1;
if($_COOKIE['user_lv']>=4) $_COOKIE['user_lv']=1;
if($_COOKIE['user_lv']>3) solve(1);
echo "<br>level : {$_COOKIE['user_lv']}";
?>
<br>
<a href=./?view-source=1>view-source</a>
</body>
</html>
위코드는 메인화면에 view-source링크를 클릭하면 볼 수 있는 코드다.
php언어에 대해서 잘 몰랐기에 천천히 코드를 분석하면서 문제를 풀었다.
첫번째 php는
만약 view-source가 1이면 view_source를 실행시키고
만약 COOKIE가 없다면(?) user_lv을 설정하는데 값은 1로 한다.
두번째 php는
만약 user_lv이 숫자가 아니면 user_lv을 1로 설정
만약 user_lv이 4이상이면 user_lv을 1로 설정
만약 user_lv이 3이상이면 user_lv을 1로 설정
여기서 주목해야되는 점은 user_lv이다.
코드를 분석하면서 user_lv이 1로 안만들면 문제를 풀 수 있을 것 같았다.
3 < user_lv <= 4 인 것이다.
그래서 4를 넣어봤지만 되지 않아서 3.5를 넣었더니 문제가 풀렸다.
코드를 수정해야되는줄 알았지만 chrome에 cookie 값을 설정할 수 가 있다!
chrome 개발자도구를 키고 Application에 Cookies를 들어가면
name이 user_lv이 있는데 Value를 3.5로 만들었다.
Enter를 하고 페이지에서 새로고침을 하면!
완료!
문제를 푸느라 되게 이것저것 만져봤지만 잘 안됬다.
3시간동안 문제를 푸느라 힘들었지만 그래도 문제를 풀어서
좋았다.