본문 바로가기
Hacking/DreamHack

[DreamHack]드림핵 File Vulnerability Advanced for linux

by st-og 2024. 1. 5.

 

해당 문제는 리눅스 환경에서 파일 확인 취약점을 사용하여 flag를 획득하는 문제이다.


소스코드

전체 소스 코드

 

위의 코드에서 3개의 페이지를 확인할 수 있다.

/ : index 페이지

/file : 파일을 확인하는 페이지

/admin : 입력받은 명령을 실행하는 페이지

 

문제풀이

문제 접근 방향

해당 문제의 목표는 /admin으로 접근하여 cmd라는 파라미터를 통해 명령을 실행하여  flag 파일을 실행시키는 것이다.

하지만 /admin으로 접근을 하기 위해서는 환경변수에 저장되어 있는 api_key를 알아내야 하는데 이때 /file의 취약점을 이용하여 해당 서비스 내에서 api_key를 찾아낸 후 /admin으로 접근하여 flag를 실행하면 된다.


사이트를 접속하면 아래와 같은 화면을 확인할 수 있다.

인덱스 페이지

@app.route('/', methods=['GET'])
def index():
    return 'API Index'

 

해당 페이지는 인덱스 페이지로 화면에 API index라는 문구를 출력하며 별다른 기능은 없는 페이지이다.

 

아래 그림은 /file 페이지에 접근하였을 때 출력되는 화면이다.

/file 페이지

@app.route('/file', methods=['GET'])
def file():
    path = request.args.get('path', None)
    if path:
        data = open('./files/' + path).read()
        return data
    return 'Error !'

 

/file은 GET 메서드를 사용하여 path라는 파라미터를 통해 값을 입력받고 입력받은 값을 ./files라는 디렉터리에서 찾아

읽어오는 동작을 한다.

만약 파라미터의 값이 없을 경우에는 위의 그림과 같이 화면에 Error ! 를 출력하게 된다.

 

테스트를 위해 files안에 있는 test.txt라는 파일을 읽어오게 하였다.

파일이 존재할 경우 해당 파일을 읽어와 화면에 출력을 한다.

이때 조작된 파일명을 입력할 시 해당 서비스 내의 다른 파일을 확인할 수 있게 된다.

 

아래 그림과 같이 디렉터리가 구성되어 있을 경우에

 

현재 파일이 읽히는 위치는 /app/files/ 이게 된다. 하지만 만약 path파라미터에 ../requirements.txt 라고 입력할 경우

해당 서버는 상위 디렉터리로 이동 후 requirements.txt라는 파일을 읽어 오게 된다.

 

 

우리는 해당 취약점을 이용하여 /admin에 접근할 수 있는 api_key를 확인하면 된다.

 

api_key를 알기 위해서는 nginx의 access_log를 활용하여 알아낼 수 있다.

access_log란 nginx에서 요청이 발생할 때 요청에 대한 로그를 기록하는 파일이며 해당 로그에는 주소, 상태코드, 요청 시간 등 여러 정보를 확인 가능하다.

 

access_log의 위치는 nginx.conf를 통해 확인할 수 있다.

위의 그림을 통해 access_log는 /var/log/nginx/ 에 위치함을 확인하였다.

해당 파일을 확인하면 아래 그림과 같이 로그를 확인할 수 있다.

 

 

해당 로그 내에 /admin으로 접근한 로그가 있으며 API_KEY가 함께 기입되어 있다.

이를 통해 /admin에 접근 가능한 api_key를 확인하였다.

 

해당 api_key를 사용하여 admin페이지에 접근한 후 간단한 명령어를 실행하였다.

 

 

성공적으로 명령어가 실행됨을 확인하였다.

이제 flag가 저장되어 있는 경로로 접근하여 해당 flag파일을 실행하게 되면

 

 

flag를 획득할 수 있다.

'Hacking > DreamHack' 카테고리의 다른 글

[DreamHack] 드림핵 Apache htaccess  (0) 2024.01.20
[DreamHack] 드림핵 out of money  (0) 2024.01.19
[DreamHack] 드림핵 XSS Filtering Bypass  (2) 2023.11.19
[DreamHack] 드림핵 amocafe  (0) 2023.11.17
[DreamHack] 드림핵 random-test  (1) 2023.11.17