[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

+ Recent posts