https://dreamhack.io/wargame/challenges/417
소스 코드 분석
key_required
- GET 메서드로 {API_KEY} 값을 받아 기존의 API_KEY 값과 동일해야 함.
/file
- GET 메서드로 {path} 값을 받아 ‘./files/{path}’ 경로의 파일을 읽고 출력함.
/admin
- GET 메서드로 {cmd} 값을 받아 해당 커맨드를 실행.
- 단, key_required의 API_KEY 검증을 통과해야 함.
풀이
/file에서 입력 값에 대해 어떠한 검증도 하고 있지 않으므로 path traversal 취약점이 발생한다. 그렇기 때문에 ‘./files/{path}’가 아니더라도 다른 경로의 파일을 읽을 수 있다.

중요한 것은 API_KEY 값인데, 내가 사용한 방법은 주어진 문제 파일에서 nginx.conf가 괜히 주어진 게 아니라 생각했고 /admin 페이지에 대한 요청 중 성공한 로그가 있을 듯하여 로그 파일을 열어봤다. 예상대로, API_KEY의 값을 획득할 수 있었다.

획득한 API_KEY 값으로 /admin에서 /flag 파일을 실행하여 flag 값을 획득하면 문제는 해결된다.

이 밖에도 다른 분들의 풀이를 보고 확인한 방법들
/proc/self/environ
해당 파일은 현재 프로세스의 환경 변수를 확인할 수 있는 파일이다.
https://sonseungha.tistory.com/412

/home/user/.bash_history
해당 파일은 사용자 계정의 사용한 커맨드 목록을 저장하는 파일이다.
