3번째 시도,, level 25 문제 바로 소스코드 확인들어가자..

 

코드를 보면 REQUEST_URI를 parse_url함수를 통해서 parse 한 뒤 qurey에 flag 값이 들어가면 die메시지가 출력된다.

 

각 함수의 특징들을 살펴보자.

1.parse_url()은 host, port, user, path, query 등의 값을 반환하는 함수

2.parse_str()은 이름=값(query)의 형태로 만들어주는 함수

3.stripos()는 문자열을 찾는 함수 

 

자세한 내용은 아래 참고 url을 통해서 확인 가능!

 

정상적으로 parse_url 함수가 사용 될 경우 query문에 flag 문자열이 들어가게 되므로 die메시지가 출력되게 된다.

URL: /index.php?page=flag
Array ( [path] => index.php [query] => page=flag )

 

비정상적인 우회(///를 사용) 할 경우는 //이후 다음에 나올 / 전에 문자열이 존재해야 host로 파싱하는데 그사이 문자열이 존재하지 않기 떄문에 NULL값이 들어가게 되고 false로 결과값을 리턴하게 된다.

URL: ///index.php?page=flag
Array ( [path] => NULL [query] => NULL )

 

그렇게 ///(triple slash)를 사용하게 되면 query에 flag문자가 들어가지 않게 되어 flag 값을 얻을 수 있다.

flag 값은 WEBSEC{How_am_I_supposed_to_parse_uri_when_everything_is_so_broooken} 

 


참고

https://www.php.net/manual/en/function.parse-url.php

https://pistolwest.github.io

'워게임 > Websec.fr' 카테고리의 다른 글

[websec.fr] babysteps - Level 04  (0) 2021.07.18
[websec.fr] easy - Level 08  (0) 2021.07.14
[websec.fr] easy - Level 02  (0) 2021.07.11
[websec.fr] babysteps - Level 17  (0) 2021.07.04
[websec.fr] babysteps - Level 01  (0) 2021.07.03
복사했습니다!