여러분 안녕하세요. 세이버입니다.
2019년 9월 webhacking.kr의 사이트 운영자분이 바뀌면서 몇 가지 문제들과 UI가 변화되었습니다.
오랜만에 문제를 풀기 위해 들어가 봤는데 사이트가 팔린 줄 알았습니다.
검은색 바탕의 사이트가 더 간지 났는데 말이죠...
사이트가 변화된 만큼 새로운 마음으로 다시 한번 문제를 풀어보고자 다시 1번 문제부터 풀어보았습니다.
1번 문제는 과거의 문제와 같은 유형이니 기존의 강의를 보고 오셔도 푸실 수 있습니다.
Webhacking.kr 문제풀이_Part2_1번 문제 : https://poci.tistory.com/47
1. 문제 파악하기
1번 문제를 클릭합니다.
옆에 php 마크가 있는 걸로 보아 php와 관련된 문제인 거 같습니다.
1번을 클릭하면 아래와 같이 검은 화면에
-----------------------
level : 1
view-source
이렇게 쓰인 게 전부입니다.
view-source가 하이퍼링크가 되어있는 거처럼 보여서 마우스를 가져다대니 클릭 아이콘으로 바뀌길래 클릭해봤습니다.
그랬더니 페이지의 소스가 쓰인 창으로 넘어갔습니다.
<?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']>=6) $_COOKIE['user_lv']=1; if($_COOKIE['user_lv']>5) solve(1); echo "<br>level : {$_COOKIE['user_lv']}"; ?> <br> <a href=./?view-source=1>view-source</a> </body> </html>
이런 소스코드입니다.
이 소스코드를 분석해야 문제를 풀 수 있을 거 같습니다.
2. 소스코드 분석하기
php 부분이 중요해 보이니 따로 설명드리겠습니다.
<?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>"); } ?>
이 코드에서 중요한 건
if(!$_COOKIE['user_lv']){
SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
echo("<meta http-equiv=refresh content=0>");
}
이 부분입니다.
user_lv는 쿠키의 이름, 1은 쿠키의 값, time()+86400*30는 만료시간, /challenge/web-01/는 쿠키의 경로를 의미합니다.
즉, user_Iv라는 이름의 쿠키가 없으면 user_lv라는 이름을 가진 쿠키에 1을 넣어서 만들라는 의미입니다.
쿠키가 무엇인지에 대한 설명은 아래 링크에서 확인하실 수 있습니다.
쿠키란 무엇인가? : https://poci.tistory.com/48
다음에 나오는 php 코드는 아래와 같습니다.
<?php if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1; if($_COOKIE['user_lv']>=6) $_COOKIE['user_lv']=1; if($_COOKIE['user_lv']>5) solve(1); echo "<br>level : {$_COOKIE['user_lv']}"; ?>
이 코드를 한 줄씩 해석하면
if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1;
-> 만약 user_lv 쿠키의 값이 숫자형이 아니라면, user_lv 쿠키에 1을 넣어라
if($_COOKIE['user_lv']>=6) $_COOKIE['user_lv']=1;
-> 만약 user_lv 쿠키의 값이 6 이상이면, user_lv 쿠키에 1을 넣어라
if($_COOKIE['user_lv']>5) solve(1);
-> 만약 user_lv 쿠키의 값이 5 초과면, solve(1)을 실행해라
즉, user_lv 쿠킷값이 무슨 수로 바뀌든 다시 1로 바뀌지만, 5초과면 해결된다고 해석할 수 있습니다.
그러나 6 이상이면 다시 1로 바뀌게 됩니다.
5 초과면 해결되고, 6 이상이면 다시 1로 된다는 것은 5와 6 사이의 소수점으로 변경하면 해결된다는 의미입니다.
3. 쿠킷값 변조하기
쿠킷값을 변조하려면 변조 프로그램이 있어야 합니다.
저는 크롬에서 지원하는 EditThisCookie를 사용했습니다. 아래 링크에서 다운로드하실 수 있습니다.
다운로드가 완료되면 크롬 검색창 오른쪽에 쿠키 아이콘이 생깁니다.
쿠키 아이콘을 클릭하여 EditThisCookie를 사용해 쿠킷값을 바꿀 수 있습니다.
쿠킷값 부분에 1이라고 쓰여있습니다. 저부분에 5와 6 사이의 소수점을 입력해줍니다.
쿠킷값을 변경한 다음에 새로고침을 해주면 다음과 같은 창이 뜨게 됩니다.
1번 문제가 풀렸다는 창과 함께 스코어를 획득하였습니다.
이번 강의는 여기까지입니다.
오늘도 수고하셨습니다.
정리
- view-source를 클릭해서 php 코드가 적힌 창으로 이동
- php 코드를 해석
- EditThisCookie를 이용하여 쿠킷값을 변조
강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.
궁금하신 점이나 질문은 댓글이나 메일 남겨주세요.
'Write Up > webhacking.kr_old' 카테고리의 다른 글
Webhacking.kr Challenge(old)_5번문제 (2) | 2020.01.13 |
---|---|
Webhacking.kr Challenge(old)_4번문제 (10) | 2019.12.05 |
Webhacking.kr Challenge(old)_3번문제 (0) | 2019.11.30 |
Webhacking.kr Challenge(old)_2번문제_part2 (0) | 2019.11.24 |
Webhacking.kr Challenge(old)_2번문제_part1 (13) | 2019.11.20 |