Web 200 – FileHosting

이 문제는 LFI(Local File Inclusion)을 이용한 문제다. 목표는 Flag.txt를 열어보는 것.

파일의 경로가 file/Flag.txt여서 URL에 file/Flag.txt를 치고 들어가보지만 404. 실제 경로는 다르다는 것을 알았다.

링크가 걸린 파일들의 링크를 살펴보면 base64를 볼 수가 있다. 이들을 각각 디코딩 해보면 Flag.txt, Hello.txt로 나온다.

URL에 포함되어 있는 Base64

그렇다면 현재 download.php의 작업 경로는 file 폴더일 것이다. Flag.txt를 다운받기 위해선 download.php가 무엇을 하는지 알아볼 필요가 있다. 그렇다면 download.php를 어떻게 다운할까?

download.php의 위치는 file 폴더의 상위 폴더에 있다고 가정하고 ../download.php를 base64로 인코딩한다. Li4vZG93bmxvYWQucGhw라는 값이 나오게 된다.

이 인코딩한 값을 URL의 f에다가 집어넣고 엔터를 누르면 성공적으로 download.php를 다운받게 된다!

download.php의 Source code

다운로드한 코드를 살펴보면 Flag.txt를 다운로드 하기 위해선 adm1n_k3y라는 GET의 존재를 필요로 한다.

다시 돌아가서 Flag.txt의 URL 뒤에 &adm1n_k3y를 붙여주고 다운로드를 시도하면 Flag.txt가 다운로드 된다.

h4ctf{d0wnlo4d_php_f1le}

(여담으로 Write-up을 작성하면서 생각난건데, download.php에 있는 소스를 보고 you_cant_access_this_folder_by_guessing/Flag.txt로 접근해서 다운로드 해도 된다는걸 깨달았다. 뭐 그거나 그거나..)