GitFile Explorer (web)

 

이번 문제는 `preg_match()` 함수를 우회하여 `file_get_contents()` 함수로 flag를 획득하는 문제이다.

34번째 줄에 `preg_match()` 함수 안에 정규 표현식을 보면, github|gitlab|gitbucket 문자열은 어디에나 존재하면 된다.

즉, `http://askldjfklasd.github.com` 이런 것이 가능하다. 또한, `m` 이라는 옵션이 붙었는데, 이에 대한 설명은 다음과 같다.

http://www.tcpschool.com/php/php_regularExpression_concept

 

즉, 다음과 같이 개행을 포함하여 전송하게 되면 `m` 옵션으로 인해 http 라는 문자열이 2번째 줄에서 시작하여 `preg_match()` 함수의 정규 표현식을 우회할 수 있게 된다. 단, 아래 결과를 보면 `No such file or directory in ~~` 라는 경고 문구가 출력되는 것을 볼 수 있다.

/?service=asdf%0d%0ahttps%3A%2F%2Fraw.githubusercontent.com&owner=ptr-yudai&repo=ptrlib&branch=master&file=README.md

 

다음과 같이 php wrapper를 이용하여 flag를 획득할 수 있다.

/?service=php://filter/convert.base64-encode/resource=/%0d%0ahttp://github&owner=..&repo=..&branch=..&file=flag.txt

 

 

 

 

'CTF' 카테고리의 다른 글

[WACon 2022] ppower write up  (2) 2022.06.28
[WACon 2022] Kuncɛlan write up  (0) 2022.06.27
zer0pts ctf 2022 GitFile Explorer write up  (0) 2022.03.27
hayyim CTF 2022 writeup  (0) 2022.02.13
[UMass 2021 CTF] write up  (0) 2021.03.29
[DamCTF 2020] write up  (1) 2020.10.12