LEVEL 1: File Vulnerability Advanced for linux

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}’가 아니더라도 다른 경로의 파일을 읽을 수 있다.

/etc/passwd


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

/var/log/nginx/nginx_access.log


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

/admin?API_KEY=d22cb18e86fc9e23996650150461c9f794ad3a4f&cmd=/flag


이 밖에도 다른 분들의 풀이를 보고 확인한 방법들


/proc/self/environ

해당 파일은 현재 프로세스의 환경 변수를 확인할 수 있는 파일이다.
https://sonseungha.tistory.com/412


/home/user/.bash_history

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

Published by