🚩CTF
zer0pts ctf 2022 GitFile Explorer write up
Universe7202
2022. 3. 27. 20:21
GitFile Explorer (web)
이번 문제는 `preg_match()` 함수를 우회하여 `file_get_contents()` 함수로 flag를 획득하는 문제이다.
34번째 줄에 `preg_match()` 함수 안에 정규 표현식을 보면, github|gitlab|gitbucket 문자열은 어디에나 존재하면 된다.
즉, `http://askldjfklasd.github.com` 이런 것이 가능하다. 또한, `m` 이라는 옵션이 붙었는데, 이에 대한 설명은 다음과 같다.
즉, 다음과 같이 개행을 포함하여 전송하게 되면 `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