Notice
Recent Posts
Recent Comments
Link
«   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
Tags
more
Archives
Today
Total
관리 메뉴

코딩 공부

<webhacking.kr> old-06 본문

워게임 풀이 연습

<webhacking.kr> old-06

예인📚 2020. 3. 19. 14:13

*공부하면서 풀이과정처럼 쓴 글입니다! 틀린 부분이 많을 수도 있어요!*

 

>view source를 클릭 

1. PHP 

(3) $_GET['view_source']  

여기서 $는 변수, _GET은 GET 방식으로 입력받은 변수를 뜻함. GET 방식은 URL 주소창에 변수값이 표기된다. 

그래서 view source 를 클릭하면 URL이 https://webhacking.kr/challenge/web-06/ 에서 https://webhacking.kr/challenge/web-06/?view_source=1 로 변경된다.

 

(4) if(!$_COOKIE['user'])

여기서 쿠키란 사용자의 정보를 브라우저 안에다 저장을 하는 것이다. 어떤 사이트에 로그인을 하게 되면 사용자 컴퓨터에 쿠키를 저장해 놓고 그 쿠키를 가지고 있는지를 확인하여 회원인지 판단한다. 쿠키의 총용량은 4kb고 더 많은 정보를 저장하려면 데이터베이스를 사용해야 한다. 

$_COOKIE['user'] 는 user라는 이름으로 저장되는 쿠키 변수에 접근한다. 앞에 !는 부정연산자로 true를 false로 false를 true로 바꾼다. 

그러므로 위 코드의 뜻은 user라는 쿠키가 없을시 다음에 오는 코드를 실행하라는 뜻이된다. 

 

(5)(6)  

$val_id="guest";
$val_pw="123qwe";

(4)의 if문이 실행되면, val_id라는 변수는 guest로, $val_pw는 123qwe로 선언한다. ($변수이름 = 초깃값;)

 

(7) for($i=0;$i<20;$i++){

for문은 (초기식; 조건식; 변화식)으로 이루어지고 따라오는 {} 안에 반복할 코드가 들어간다. 위에는 변수 i가 0에서 19까지 (20보다 하나 작은 정수) 하나씩 더하면서 반복된다. 따라서 위 for문은 0~19, 20번 반복된다. 

 

(8)(9)

$val_id=base64_encode($val_id);
$val_pw=base64_encode($val_pw);

base64_encode()는 PHP에 내장된 함수이고 데이터를 MIME base64로 부호화하는 것이다 (encode). MIME이란 Multiple Internet Mail Extensions 이다. 따라서 val_id라는 변수에 base64로 해당 변수를 인코딩을 한 값을 넣는다. val_pw에도 똑같이 적용된다. 

(7)의 for문이 20번 반복되기에 위에 코드는 20번 암호화된다.

 

(11) $val_id=str_replace("1","!",$val_id);

str_replace는 문자를 변환할때 사용되는 함수이다. str_replace("찾을 문자", "변경할 문자", "해당하는 문자열");로 사용된다. 위에 코드는 val_id 문자열에 있는 모든 '1'들을 '!'로 변환한다. (27)까지 똑같이 적용된다. 

 

(29) Setcookie("user",$val_id,time()+86400,"/challenge/web-06/");

Setcookie는 쿠키값을 설정한다. setcookie(쿠키명, 쿠키값, 만료시간, 경로, 도메인, 보안, httponly);

 

  • 쿠키명(필수) : 설정 될 쿠키 이름을 결정함
  • 쿠키값(선택) : 쿠키 이름에 입력될 값
  • 만료시간(선택) : Default 값은 0이며 쿠키가 유지될 시간을 설정
  • 경로(선택) : 경로를 지정할 경우 특정 위치와 하위 경로에서만 사용가능하도록 설정됨
  • 슬러쉬(/) : 슬러쉬 기호를 값으로 입력할 경우 전체 경로에서 사용됨을 의미
  • 도메인(선택) : 사용될 도메인을 지정가능함. 서브도메인 입력시 해당 서브도메인만 사용가능
  • 보안(선택) : 보안 프로토콜인 https에서만 사용가능하도록 설정함
  • httponly : HTTP에서만 사용가능하도록 하여(서버단 언어로만...) 스크립트에 의한 쿠키 접근을 허용안하게 함.

따라서 위 코드는 user라는 쿠키에 val_id의 값을 입력해서 86400초동안 (1일) 쿠키가 유지되게 하고 /challenge/web-06/ 하위 경로에서만 사용할 수 있도록 설정한다. (30)에도 똑같이 적용된다. 

 

(31) echo("<meta http-equiv=refresh content=0>");

PHP 문서안에 HTML 태그를 포함시키려면 echo 함수를 이용한다. echo 는 이후의 내용을 출력하는 역할을 하기에 echo 의 인자로 HTML 태그를 포함시킴으로서 HTML 태그를 표현 할 수 있게 된다. 

HTML의 meta 태그는 웹 서버와 브라우저간에 상호 교환되는 정보를 정의한다. http-equiz="refresh"는 특정 시간 후 자동으로 웹 페이지를 새로고침한다. 뒤에 나오는 content 는 그 특정 기간을 설정한다. 위 코드에서는 0이므로 바로 새로고침한다. 

 

(44)(45) 

$decode_id=$_COOKIE['user'];
$decode_pw=$_COOKIE['password'];

decode_id라는 변수를 user라는 이름을 가진 쿠키로 초기화하고 decode_pw라는 변수를 password라는 이름을 가진 쿠키로 설정한다.

 

(47~63) 

(11~27)처럼 변환한다. 

 

(65~68) 

for문을 이용해 전에 인코딩한 문자열을 다시 디코딩한다. 

 

(70) echo("<hr><a href=./?view_source=1 style=color:yellow;>view-source</a><br><br>");

<hr>은 html 태그로 가로줄이다. 

<a>는 anchor의 약자로 하이퍼링크를 걸어주는 태그고 href 뒤에 오는 링크로 이동하게 한다. 위 코드에서 href는 ./?view_source=1이다. <br>은 줄바꿈 태그이다.

따라서 이 코드는 노랑색 글씨로 쓰여진 view-source에 링크를 걸어 클릭 시 ./?view_source=1로 이동하게 한다. 

 

(71) echo("ID : $decode_id<br>PW : $decode_pw<hr>");

디코딩된 ID와 PW를 화면에 출력한다. 

 

(73) if($decode_id=="admin" && $decode_pw=="nimda"){

&&은 AND 연산자로 앞과 뒤에 나오는 연산이 모두 참일때만 실행되게 한다. 위에 코드는 decode_id 변수가 admin이고 decode_pw 변수가 nimda 일때 다음 코드를 실행한다. 

 

2. 문제 풀이

마지막에 나온 코드를 보면 decode_id가 admin이고 decode_pw가 nimda일때 문제를 풀었다고 나온다.

(29~30)을 보면 user라는 이름의 쿠키에 val_id라는 변수의 값을, password라는 이름의 쿠키에 val_pw 변수의 값을 입력한다. EditThisCookie (크롬 확장프로그램)으로 봤을때 user와 password에 입력된 값은 코딩에 따라 인코딩된 val_id와 val_pw 변수라는 것을 알 수 있다. 따라서 admin과 nimda를 동일한 방식으로 인코딩하여 EditThisCookie에 넣으면 문제가 해결된다. 

 

 

reference 

쿠키 정의- https://www.everdevel.com/PHP/cookie/

 

everdevel

웹 입문 사이트 에버디벨 - HTML, CSS, JavaScript, jQuery, MySQL ,PHP를 다룹니다.

www.everdevel.com

쿠키 사용 - https://webisfree.com/2015-03-02/[php]-%EC%BF%A0%ED%82%A4-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-setcookie()

 

[PHP] 쿠키 설정하기, setcookie()

php에서 쿠키를 설정 및 사용하는 방법에 대하여 알아볼려합니다.

webisfree.com

PHP와 HTML - https://devist.tistory.com/59

 

HTML 과 PHP 함께 사용하기.

PHP 는 PHP 이고 HTML 은 HTML 인데... 이 둘을 함께 사용하려면 어떻게 해야 할까? PHP는 ASP, JSP와 같은 스크립트 형태의 언어이기 때문에 HTML 태그에 내장되는 형태로 사용이 된다. PHP를 선언하는 태그를 HT..

devist.tistory.com

Meta refresh - https://en.wikipedia.org/wiki/Meta_refresh

 

Meta refresh - Wikipedia

Meta refresh is a method of instructing a web browser to automatically refresh the current web page or frame after a given time interval, using an HTML meta element with the http-equiv parameter set to "refresh" and a content parameter giving the time inte

en.wikipedia.org

 

'워게임 풀이 연습' 카테고리의 다른 글

<SQL Injection Attack> 01. SQL 인젝션 활용  (0) 2020.05.01
<webhacking.kr> old-16  (0) 2020.03.28
<webhacking.kr> old-14  (0) 2020.03.27