본문 바로가기

WebHacking

Dreamhack wargame : File Vulnerability Advanced for linux write-up

728x90

코드 분석

세 가지 엔드포인트로 나눠서 분석 -> /, /file, /admin

첫 번째 코드 부분 -> 그냥 홈화면 같다. 힌트없음

 

/file에서 HTTP GET 요청에 대한 쿼리 문자열에서 path값인 해당 경로의 파일을 열어서 내용을 화면에 출력하는 코드이다.

Path traversal 의도한 문제인 것 같음.


여기서

쿼리문자열(쿼리스트링)이란?

사용자가 입력 데이터를 전달하는 방법으로 url 주소에 어떤 데이터를 파라미터를 통해 서버측에 전달하는 것

  • 정해진 엔드포인트 주소 이후에 ?(물음표)룰 쓰는 것으로 쿼리스트링이 시작
  • parameter = value로 필요한 파라미터의 값
  • 파라미터가 여러개일 경우 &를 붙힌다.

/admin에서 @key_required는 무엇인가? 물어보면 코드 맨 위에 나와있었다.

API 키가 나와있는 것으로 봤을 때 이 값을 얻어오는게 출제자 의도인 것 같다.

API_KEY에 대한 접근 경로는 문제 파일에 나와있었다,

/file?path = ../../var/log/nginx/nginx_access.log를 url에 입력하면

API_KEY값을 알 수 있다.

근데 현재 위치를 알고 싶어서 다음과 같이 실행하였다.

현재 위치는 /app이었다.

명령어를 실행하기 위해서는 API_KEY를 꼭 쿼리문에 작성해야만 실행되는 것 같다.

궁금한것은 못참지


그렇다면 API와 API key는 무엇인가?

API Def.

  • 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘
  • Application Programming Interface의 약자

API Key Def.

  • API 개발자가 API에 대한 액세스를 제어하는데 사용하는 영문, 숫자 등 문자
  • API 키 작동원리
    1. API 서버는 고유한 API 키로 요청자의 신뢰성을 검증
    2. API 키가 허용된 키와 일치하지 않는 경우 서버는 API 호출을 거부하고 거부 메시지를 보냄
    3. API 키가 일치하면 서버가 요청을 처리하고 예상 응답 반환

다시 돌아와서

/admin?API_KEY=d22cb18e86fc9e23996650150461c9f794ad3a4f&cmd=/flag을 하면

플래그를 얻을 수 있다.