본문 바로가기

Hack The Box CBBH

CBBH - Web Attacks[Bypassing Basic Authentication]

HTTP Verb Tampering 취약점을 악용하는 방법은 비교적 간단한 프로세스이다. 웹 서버와 웹 애플리케이션이 각 HTTP Method를 어떻게 처리하는지 확인하기 위해 다른 HTTP Method를 시도해보면 된다. 많은 자동화된 취약점 스캔 도구는 보안 설정이 취약한 서버 구성으로 인한 HTTP Verb Tampering 취약점을 식별할 수 있지만, 보안이 취약한 코딩 방식으로 인한 HTTP Verb Tampering은 놓칠 수 있다.

보안 설정으로 인한 취약점은 인증 페이지를 우회하면 쉽게 식별할 수 있지만, 코딩으로 인한 취약점은 능동적인 테스트가 필요하다.


Identify

해당 웹 사이트는 파일 관리 웹 애플리케이션이다. 여기에서 파일 이름을 입력하고 엔터를 눌러 새 파일을 추가할 수 있다.

만약 빨간색 리셋 버튼을 클릭하면 모든 파일을 삭제하려고 하면, 이 기능은 인증된 사용자만 접근할 수 있도록 제한되어 있다. 이는 HTTP Basic Auth 프롬프트로 확인할 수 있다.

만약 취소하게 되면 자격 증명이 없으므로, 401 Unauthorized 페이지가 표시된다.

이제 HTTP Verb Tampering 공격을 사용해 이를 우회하려 한다. 이를 위해서는 어떤 페이지들이 인증에 의해 제한되는지를 파악해야 한다. 리셋 버튼을 클릭하고, HTTP 요청을 검사하거나 버튼을 클릭한 후 이동하는 URL을 살펴보면, 요청이 /admin/reset.php 로 이동하는 것을 확인할 수 있다.

그렇다면 /admin 디렉터리 전체가 인증된 사용자만 접근할 수 있는지, 아니면 /admin/reset.php 만 제한되는지를 확인해야 한다. 그래서 /admin 디렉터리에 접근해보면 다시 로그인을 요구하는 프롬프트가 표시된다. 즉, /admin 디렉터리 전체가 인증을 요구하는 것을 알 수 있다.

 


Exploit

이제 HTTP Verb Tampering 공격을 진행하기 위해, 웹 애플리케이션에서 사용하는 HTTP Method를 파악해야 한다. Burp Suite를 통해 요청을 확인해보면

GET 요청을 사용하고 있고, POST 요청을 보내보고 웹 페이지가 해당 요청을 허용하는지 확인할 수 있다. 이를 위해 Burp에서 Change Request Method를 선택해서 변경해보면

여전히 로그인 프롬프트가 나타나며 자격 증명을 제공하지 않으면 401 Unauthorized 페이지가 표시된다. 즉, 웹 서버에서 GET과 POST 요청 모두 인증을 요구하는 것을 확인할 수 있다.

Method HEAD는 GET과 같지만 응답 본문을 반환하지 않는다. 만약 HEAD가 성공하면 출력은 안되더라도, 파일 리셋 기능은 그대로 실행될 수 있다.

우선 서버가 HEAD 요청을 허용하는지 확인하기 위해 OPTIONS 요청을 보내고 허용된 HTTP 메서드를 확인해본다.

해당 사이트에 curl -i -X OPTIONS http://SERVER:IP 로 보내게 되면 Allow Headers를 확인할 수 없었는데, 이를 HTB 포럼에서는 PHP가 OPTIONS 요청을 처리하지 못하는 것일 가능성이 높아서 index.html 을 사용하니 Allow 헤더를 확인할 수 있었다.

결과에서 볼 수 있듯, Allow: POST, OPTIONS, HEAD, GET이 표시가 되므로 HEAD 요청을 허용한다는 것을 알 수 있다. 이제 /admin/reset.php 요청을 HEAD Method를 통해 보내면 어떻게 처리하는지 확인해보려 한다.

해당 요청을 확인해보면 401 Unauthorized 페이지를 확인할 수 있다. 401 Unauthorized로 확인이 되므로 HEAD Method 대신 OPTIONS를 사용해서 다시 확인해보면

401대신 200이 출력된 것을 확인할 수 있다. 이제 파일 관리 웹 사이트로 돌아가면 모든 파일이 삭제된 것을 확인할 수 있다. 즉, 관리자 접근 권한이나 자격 증명 없이 리셋 기능을 실행한 것이다.