26번을 풀어보도록 하죠.

https://webhacking.kr/

 

Webhacking.kr

Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte

webhacking.kr


뭐 없습니다.

코드도 간단합니다.

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

id 값에서 admin이 존재한다면 no! 를 출력하고 php를 끝낸다고 합니다.

근데 admin이 id에 들어가야 문제가 풀리네요.

 

그래서 먼저 admin을 16진수로 변환해서 입력해봤습니다.

%61%64%6d%69%6e

https://webhacking.kr/challenge/web-11/?d=%61%64%6d%69%6e

이렇게 말이죠.

슬프게도 admin이 그대로 입력된것처럼 인식하네요.

 

이제 코드를 자세히 한번 봅시다.

urldecode를 한번 해주네요? 이 부분이 취약점인것 같습니다.

admin을 urlencode 해줘보겠습니다.

...

해봤는데 그냥 admin이 나오네요.

 

이번에는 16진수로 변환한 것을 urlencode 해보겠습니다.

...

%2561%2564%256d%2569%256e

 

이렇게 바뀝니다.

이제 이걸 넣으면 풀릴것 같습니다.

 

 

 

해결했습니다 ㅎ

 

이번 문제에서 알아낸 것은 기본적으로 %형식으로 된 문자는 url에서 한 번 디코딩해서 인식한다는 것입니다. 그렇기 때문에 한번 인코딩 한 값으로는 문제를 해결할 수 없었습니다. 

'Hacking-기초 > [WEB] Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 18번[100]  (0) 2020.04.29
Webhacking.kr 6번 [100]  (0) 2020.04.29
Webhacking.kr 24번 [100]  (0) 2020.04.28
Webhacking.kr 17번 [100]  (0) 2020.04.28
Webhacking.kr 16번 [100]  (0) 2020.04.28

+ Recent posts