[Webhacking.kr] 26번 문제풀이


오늘은 "Webhacking" 26번 문제를 풀었다. 이 문제를 풀게 된 계기는 점수 배점도 낮고, 단순히 가운데 정도에 위치해 있기에 풀게 되었다.

("Webhacking"26번)

 

 

26번 문제에 들어가보면 검은색 바탕화면에 달랑 'View-source'만 존재한다.

(26번 문제)

 

 

그래서 'F12' 버튼을 눌러 'html'을 확인해봤지만, 아무것도 발견할 수 없었다.

(html 화면)

 

 

그러면 26번 문제를 풀려면 'view-source'를 확인해봐야 할 것이다. 바로 소스코드를 확인해봤다. 아래의 화면은 문제의 소스코드이다.

(26번 문제의 소스코드)

 

 

소스코드를 한번 해석해보았다.

<?php
  if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
  // id값에 admin이 발견되면 "no"가 출력된다.
  
  $_GET['id'] = urldecode($_GET['id']);
  // id의 값을 'urldecode' 한 값을 id에 넣는다.
  
  if($_GET['id'] == "admin"){ // 만약 id의 값이 'admin' 일 경우 실행한다.
    solve(26);  // 문제해결
  }
?>

 

 

"id"에 'urldecode' 하기 위해 인코딩 한 바이트 값을 넣어주면 되는 것이다. 

즉, 디코딩해서 'admin'이라는 단어를 출력하기 위한 인코딩 값을 넣어주면 되는 것이다.

 

 

소스해석이 끝나서 "id"에 인코딩한 값을 넣어주면 문제가 풀리게 되는데, 중요한 것은 "id"에 값을 어떻게 넣는 가? 였다.

 

 

id에 값 넣는 방법


소스코드를 전부 해석해서 답만 넣으면 끝인 줄 알았지만, 어떻게 넣는 지 모르니 난감했다. 어떻게 문제를 푸는지 고민을 하고 있을 때, 'view-source'를 보고 해결 방안을 찾았다.

 

 

아래의 소스코드도 'view-source'를 "GET"함수로 입력받는 것이다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?>

 

 

소스코드가 들어있는 'URL'을 확인해 보니, 아래의 화면처럼 "?view-source=1" 값을 넣어주면 되는 것이었다.

(GET 함수 이용한 방법)

 

 

그러면 나는 "?id=인코딩한값"을 넣어주면 문제를 풀 수 있다.

 

 

[해결]


id 값에 'URL-decode'을 해서 "admin"이 나오기 위한 인코딩 값은 "%61%64%6d%69%6e"이다. 아래의 'URL-encode 표'를 보면 쉽게 "admin"을 추출할 수 있을 것이다.

("URL-encode" 표)

 

 

그래서 id값에 ''%61%64%6d%69%6e"을 넣었다.

('id'에 %61%64%6d%69%6e 인코딩 값을 넣은 화면)

 

 

문제가 풀릴 줄 알았지만, 돌아오는 것은 답이 아닌 'no!' 였다.

("no!" 출력 화면)

 

 

소스코드를 정확하게 해석해서 문제를 풀었는데, 왜 "no!" 출력 됐는지 의아했다. 그래서 이번에는 인코딩 값을 넣은 것이 아닌 문자 그대로 'admin'을 넣어봤다.

('id'에 admin 문자 넣은 화면)

 

 

결과는 동일하게 'no!' 값이 출력되었다.

("no!" 출력 화면)

 

 

그래서 내 개인적인 생각으로는 브라우저(Browser)에서 자동으로 한번 디코딩을 해주는 것 같다.

다시말해서, 나는 ''%61%64%6d%69%6e"을 php에서 함수(URL-decode)를 통해 "admin" 으로 바뀌는 줄 알았지만,

동으로 ''%61%64%6d%69%6e"을 "admin"으로 바꿔서 함수(URL-decode)는 "admin" 값만 받게 돼 'no!'가 출력되는 것이다.

 

그러면 자동으로 한번 디코딩 해준다면 인코딩을 2번 한 값을 넣어주면 되는 것이다. 아래의 화면처럼 인코딩을 2번 한 값을 넣어주면 문제가 해결되는 것이다.

(두번 인코딩을 'id'에 값을 넣은 화면)

 

 

문제해결!

(문제 해결 화면)

 

문제해결!!

(문제 해결 문제)

 

 

 

[문제 풀이 도움]


인코딩을 두번하기 위해서는 사이트의 힘을 빌렸다.

아래의 사이트는 URL 인코딩, 디코딩을 자동으로 해주는 사이트이다!

https://www.convertstring.com/ko/EncodeDecode/UrlEncode

 

URL 인코딩 - 온라인 URL 인코더

 

www.convertstring.com

 

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

'공부 > Webhacking' 카테고리의 다른 글

[Webhacking.kr] 24번 문제풀이  (6) 2020.03.10
[webhacking.kr] 6번 문제풀이  (4) 2020.03.04
[Webhacking.kr] 1번 문제풀이  (2) 2020.03.03

[Webhacking.kr] 1번 문제풀이

Webhacking 문제를 처음 들어가면 아래와 같은 화면이다. 처음에 보이는 화면은 'level : 1'과 'view-source' 밖에 없다. 1번 문제에서 특이한 점은 링크로 연결되어 있는 'view-source'를 클릭해보기로 했다.

(1번 문제 화면)

'view-source'를 들어가보면 아래와 같은 소스코드를 볼 수 있다.

('view-source' 소스코드)

 

php로 구성되어있는 해당 소스코드는 php구문을 잘 모르지만 알고 있는 선에서 해석해보기로 했다. 

 

(첫번째 문장)

php 아래에 있는 부분에서 첫번째 문장인 is_numeric()은 숫자형 데이터 값인 경우 'true'를 반환하고, 숫자형 데이터 값이 아닌 경우 'false'를 반환하는 함수이다. 그래서 Cookie 값을 숫자를 넣어야지만 문제를 풀 수 있을 것 같았다. 

 

(두번째 문장)

두번째 세번째 문장에서는 Cookie 값에 'user_lv' 값이 6보다 크거나 같을 경우 'user_lv'값을 1을 반환하고, 5보다 큰 값을 넣을 때 문제가 해결된다는 것을 알 수 있다. 

 

(세번째 문장)

마지막 문장에서는 level 옆에 있는 값은 Cookie에서 'user_lv' 값을 넣어준 값을 출력해주는 것을 알 수 있다.

그래서 나는 Cookie 값에 'user_lv'에 4,5,6 이라는 값을 넣어보기로 했다.

(Cookie에서 'user_lv'에다가 4를 넣었을 때)

'user_lv'에 4를 넣었을 때, level 옆 값이 4로 바뀌는 것을 알 수 있다.

 

(Cookie에서 'user_lv'에다가 5를 넣었을 때)

'user_lv'에 5를 넣었을 때, level 옆 값이 5로 바뀌는 것을 알 수 있다.

 

(Cookie에서 'user_lv'에다가 6를 넣었을 때)

'user_lv'에 6를 넣었을 때, level 옆 값이 1로 바뀌는 것을 알 수 있다. 왜냐하면 php 첫번째 문장에서 'user_lv' 값에 6을 넣을 시 'user_lv' 값이 1로 바뀌도록 소스 코드가 짜여있기 때문이다.

 

소스코드에서 5보다 큰 값을 넣었을 때, 문제가 해결된다고 했는 데, 정수로는 문제가 풀리지 않았다. 그래서 Cookie 값에 5.1이라는 실수 값을 넣었더니 아래의 화면처럼 200point를 얻으면서 문제가 해결됐다.

(문제 해결 화면)

 

 

[해결방안]

[webhacking] 1번 문제를 풀기 위해서는 Cookie 값을 임의로 설정 할 수 있는 툴을 이용해야한다. 나는 크롬에서 사용할 수 있는 "Edit This Cookie" 툴을 이용했다. 아래의 링크를 통해 Cookie 툴을 다운받아서 설치 할 수 있다.

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

 

EditThisCookie

EditThisCookie는 쿠키 관리자입니다. 이것을 이용하여 쿠키를 추가하고, 삭제하고, 편집하고, 찾고, 보호하거나 막을 수 있습니다!

chrome.google.com

해당 툴을 다운받으면 쿠키 모양의 아이콘이 크롬 오른쪽 위에 생성이 된다. 아래의 화면 처럼 쿠키 모양의 아이콘이 생성된 것을 확인 할 수 있다.

(Cookie 아이콘 생성 화면)

처음에 문제를 해결할 때 'user_lv' 값에 정수값만 넣는 것을 생각했다. 하지만 해당 문제는 실수의 범위까지 생각하게끔 만들었다. 단순하게 생각해서 문제를 풀었던 나에게 좋은 경험을 안겨주었다. 다음에 문제를 풀때 넓은 방면에서 접근해서 풀어야겠다.

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

'공부 > Webhacking' 카테고리의 다른 글

[Webhacking.kr] 24번 문제풀이  (6) 2020.03.10
[Webhacking.kr] 26번 문제풀이  (6) 2020.03.08
[webhacking.kr] 6번 문제풀이  (4) 2020.03.04

+ Recent posts