본문 바로가기

Webhacking.kr

[Webhacking.kr] Challenge 26

Challenge 26

 

문제에 접속하면 view-source 가 있다

 

이를 한번 눌러보자

 

 

<?php
  if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
  $_GET['id'] = urldecode($_GET['id']);
  if($_GET['id'] == "admin"){
    solve(26);
  }
?>

 

소스코드를 보니 처음 보는 함수가 있다.

 

이를 한번 알아보자

 

preg_match : 특정 문자열이 패턴에 부합하는지 검사하는 함수

preg_match('/검사할 문자/', '입력한 문자')

 

preg_match란 쉽게 말해 입력한 문자에서 특정 문자가 있는지를 찾고싶을 때 사용하는 함수이다.

 

<?php
$my_name = "j4zzCh0rd";
if (preg_match("/z/", $my_name)
{
	echo "There is a 'z'";
}

?>

 

이를 예시코드로 쉽게 알아보자.

 

먼저 변수 my_name 에는 이름을 저장하고

 

preg_match 함수로 이름에 z 가 있는지 체크해

 

있다면 "There is a 'z' "를 출력하는 코드를 실행시켜보자

 

잘 나온다!

 

이런식으로 쓰이는 함수가 preg_match 이다

 

다시 문제로 돌아와서

 

<?php
  if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
  $_GET['id'] = urldecode($_GET['id']);
  if($_GET['id'] == "admin"){
    solve(26);
  }
?>

 

id 값에 admin이 들어있으면 no!를 출력하는걸로 보아 바로 값을 넣으면 안될것같다.

 

그런데 바로 아래 코드를 보니 id를 한번 디코드하는걸 볼 수 있다.

 

그렇다면 admin을 인코딩해 넣으면 자동으로 디코드가 되어

 

문제를 해결할 수 있을 것 같다.

 

더보기

$_GET[ 'id' ] 란?

 

get 방식으로, 키와 해당 값을 url에 담아 다음 페이지로 전달하는 방식이다.

 

입력 예시)

https://j4zzch0rd.php?id=admin&pw=admin

 

admin을 인코딩하려는 순간

 

 

??

 

admin이 그대로 나오는것을 볼 수 있다.

 

이때부터 어떻게 하지 고민을 계속 하던 와중에..

 

url 인코딩이 어떤 방식으로 되는지를 찾아보았다.

 

https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%84%BC%ED%8A%B8_%EC%9D%B8%EC%BD%94%EB%94%A9

 

퍼센트 인코딩 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 퍼센트 인코딩(percent-encoding)은 URL에 문자를 표현하는 문자 인코딩 방법이다. 이 방법에 따르면 알파벳이나 숫자 등 몇몇 문자를 제외한 값은 옥텟 단위로 묶어

ko.wikipedia.org

 

요약하자면 % 뒤에 16진수 값을 넣어 문자를 치환하는것같다.

 

그리고 문자는 보통 인코딩을 하지 않아 위에서 admin이 치환이 안되는거였다.

 

admin을 검사하는 코드이니 앞에 a만 %61로 바꾸면 풀 수 있을것 같다.

 

 

이렇게 작성하고 엔터를 누르면

 

 

안된다!

 

.

..

 

뭐가 문제일까..

 

그렇게 다시 url을 보는데

 

 

??

 

아까 우리가 바꾼 %61이 a로 다시 바뀐것을 알 수 있다.

 

잘은 모르겠지만 아마 한번 인코딩을 하고 검사하는것같다..

 

그렇다면 인코딩을 2번 해서 넣어보면..?

 

 

 

문제 해결 :)

 


이번 문제는 중간에 막혀서 좀 힘들었네요..

 

그래도 해결하니 힘든 마음은 사라지고 문제를 풀었다는 기쁨만 남네요 ㅎㅎ

 

여러분들도 어떤 어려운 문제가 있더라도 포기하지말고 나아갔으면 좋겠습니다

 

"이 또한 지나가리라" - 랜터 윌슨 스미스

 

 

 

 

 

 

'Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] Challenge 39  (0) 2024.10.11
[Webhacking.kr] Challenge 12  (0) 2024.10.10
[Webhacking.kr] Challenge 6  (0) 2024.10.06
[Webhacking.kr] Challenge 17  (0) 2024.10.06
[Webhacking.kr] Challenge 16  (0) 2024.10.06