Hack the box의 Machine 중 Backend 문제를 해결하는 과정을 기록
생성된 머신에 대한 포트 스캐닝 결과는 아래와 같다.
22/TCP : OpenSSH
80/TCP : unicorn
대상의 HTTP로 접근하니 API서버로 확인된다.
FFUF로 디렉터리 스캔을하니 docs, api가 확인됐으며, docs에 접근시 인증에러가 발생하며 api 접근 시 v1 엔드포인트가 발견된다.
"/api/v1/" 에 접근 시 'user', 'admin' 엔드포인트가 발견된다.
"/api/v1/user"에 접근 시 "Not Found"가 출력되며, "/api/v1/admin"에 접근 시 "Not authenticated"가 출력된다.
user 엔드포인트를 스캐닝하니 아래와 같이 넘버로 이루어진 인덱스로 user를 구분하는것으로 추정된다.
"/api/v1/user"를 계속 스캐닝하던 중 POST 메소드를 이용해 "/api/v1/user/login" 경로로 접근이 가능했다.
여러 스캐닝 과정을 거쳐 "/api/v1/user" 아래 'login', 'signup' 엔드포인트가 더 존재했으며, signup api에서는 POST로 JSON데이터를 넘겨 회원가입이 가능했다. (파라미터 이름은 에러 메세지에서 확인할 수 있었음😘)
회원 가입은 어찌저찌 성공했지만 로그인이 문제다. 동일하게 Content-Type을 application/json으로 지정하고 아래와 같이 로그인을 시도해도 '422 Unprocessable Entity' 에러가 발생한다.
422 에러에 대해서 찾아보니 클라이언트에서 전송한 Content-Type을 이해할 수 없다는 에러로 해석된다🙄
아니 그러면 어떤 Content-Type을 지정해야되는지 막막하던 중 curl을 통해 login api 접근 시 로그인이 되는 것이였다.
curl로 전송된 HTTP Request를 확인해보니 application/x-www-urlencoded
라는 Content-Type이 사용됐다. 이를 Burp에도 적용하니 로그인이 가능했으며, 'access_token'을 부여받을 수 있었다.