티스토리 뷰



페이지의 소스를 확인해보자.


<?
if(!$_COOKIE[user_lv])
{
SetCookie("user_lv","1");
echo("<meta http-equiv=refresh content=0>");
}
?>

<head>
<title>Challenge 1</title>
</head>

<center>
<br><br><br><br><br>
<font color=white>
---------------------<br>
<?

$password="????";

if(eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;

if($_COOKIE[user_lv]>=6) $_COOKIE[user_lv]=1;

if($_COOKIE[user_lv]>5) @solve();

echo("<br>level : $_COOKIE[user_lv]");

?>
<br>
<pre>
<a onclick=location.href='index.phps'>----- index.phps -----</a>


쿠키 데이터를 이리저리 비교하는 걸로 보아 쿠키 값 변조 문제인 것 같다.


2번째 줄에서 클라이언트의 user_lv 쿠키가 없을 경우, 값을 1로 해 새로 만들어준다.

21번째 줄에서는 user_lv 쿠키 값을 정규식으로 체크해 1~9까지의 값이 아니면 1값을 만들어주고 있다.

eregi 함수 >> http://php.net/manual/en/function.eregi.php


23번째 줄 부터

user_lv 쿠키값이 5 초과이거나, 6미만인 경우에만 문제를 풀이한 것으로 처리하고 있다.

(23번째에서 5보다 작거나 같을 경우, 25번째에서 6이상일 경우 쿠키값을 1로 초기화한다)


쿠키 값을 조작하는것이 이 문제의 핵심인데, 

웹 프록시를 이용해 중간에 Request 값을 가로채 쿠키 값을 변경할 수 도 있지만, 이 방법은 나중에 후술하고,

먼저 Chrome의 부가 기능을 이용해 쉽게 쿠키를 조작해 보자. 필자는 EditThisCookie 를 사용했다.


1. 검색창에 EditThisCookie 입력 후 Chrome 웹 스토어로 이동. 또는...

https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?hl=ko


2. 


CHROME에 추가 -> 확장 프로그램 추가를 눌러 설치해준다.

기다리면 지원 창이 하나 열리고, 상단바 오른쪽에 쿠키 모양 버튼이 생긴다.


다시 1번문제 화면으로 돌아가서 쿠키 버튼을 눌러 보자.




PHPSESSID는 webhacking.kr 서버와의 세션값이니까 건들지 말고...

user_lv 값이 1인것을 볼수 있다. 처음에 페이지를 열었을 때는 이 쿠키 값이 없었을 테니까..

한번 페이지를 열고 난 후 서버쪽의 코드에 따라 user_lv 가 1로 생성되어 있는게 맞겠다.


그러면 아까 추측했던데로, 1값을 5와 6사이 (ex > 5.5) 로 설정하고 밑에 체크 표시를 눌러 적용해준다.

이렇게 클라이언트 쪽에서 현재 자신의 쿠키 값을 변조하게 되었다.


바뀐 값으로 페이지를 새로고침하면, 서버에서는 이전에 설정해준 값 1이 아닌 변조된 쿠키 값 5.5를 받게 되고, 

@solve() 함수를 실행 할 것이다.




'Web - Security > * webhacking.kr' 카테고리의 다른 글

[webhacking.kr] 6번 문제 - 100p  (0) 2016.04.15
[webhacking.kr] 5번 문제 - 300p  (0) 2016.04.15
[webhacking.kr] 4번 문제 - 150p  (0) 2016.04.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함