Portswigger-Method-based access control can be circumvented

problem link

풀이

이 문제에서는 부분적으로 HTTP 요청 메소드를 기반으로 액세스 컨트롤을 한다. administrator:admin 계정을 제공하며 이를 이용해 admin 페이지에 접근할 수 있다. 문제를 풀려면 wiener:peter 계정으로 로그인한 뒤, 결함이 있는 액세스 제어를 이용하여 관리자로 권한을 상승해야 한다.

administrator 계정으로 로그인하면 위와 같이 유저의 권한을 조절할 수 있다. administrator로 로그인하여 wiener의 권한을 상승시키면 admin 페이지에 접근할 수 있지만, 이는 문제의 조건(wiener가 권한이 없는 상태로 admin 페이지에 접근하여 스스로를 관리자로 승격)에 맞지 않아 풀리지 않는다.

administrator에서 자격을 상승시키고 패킷을 잡아보았다. username으로 자격을 바꿀 대상을 지정하고 upgrade 또는 downgrade 한다. 이 패킷을 Repeater에 보낸다.

다른 브라우저 또는 다른 컨테이너를 이용하여 wiener로 로그인한 세션을 생성한다. Repeater에 넣은 패킷의 세션 쿠키를 wiener의 것으로 변경한다. 캡처한 패킷은 POST 메소드 사용했는데, 이를 PUT으로 변경한다. 마지막으로 username을 wiener, action을 upgrade로 설정하여 보낸다.

패킷을 보내면 wiener의 권한이 상승되어 문제가 풀린다.

이 취약점은 POST에 대해서는 액세스 컨트롤을 하지만 대체 메소드인 PUT에 대해서는 액세스 컨트롤을 하지 않아 발생하였다. 메소드에 대한 액세스 컨트롤을 하려면 비슷한 일을 하는 다른 메소드도 함께 컨트롤을 해야 한다.


tags: writeup, access control vulnerability, wstg-athz-02, wstg-athz-03, wstg-conf-06, web hacking