Normaltic CTF - Auth 5~8

심야·2023년 7월 13일
0

Auth 5

로그인한 뒤, 공지사항에 게시글을 작성하려 했으나 게시글 작성 버튼이 없다.

작성된 게시글 페이지와 게시글 목록 페이지 URL 에 일정한 패턴이 있다. 글쓰기 페이지의 URLnotice_write.php 로 추측된다. 만약에 글쓰기 페이지에서 권한 검증을 하지 않는다면 글쓰기에 성공할 것이다.

notice_list.php 요청을 인터셉트 해 notice_write.php 로 수정하여 요청하였다.

권한 검증을 하지 않기 때문에 성공적으로 글쓰기 페이지에 접근하였다.

글을 작성 후 create 버튼을 클릭해 FLAG를 획득하였다.

Auth 6

게시판에 접속해 “flag 임시 저장” 글을 읽으려 했으나 권한이 없다는 알림이 발생한다.

읽기 권한이 없어 글을 읽을 수 없지만 수정 페이지에서 권한 검증을 안 한다면 글을 읽을 수 있다. notice_read.php 요청을 인터셉트 해 notice_update.php 로 수정하여 다시 요청했다.

수정 페이지에 접근하였지만 권한이 없다는 알림과 글 목록 페이지로 리다이렉트 하는 자바스크립트 코드가 있다.

클라이언트 측에서 자바스크립트로 권한 검증을 하는 방법은 버프스위트 같은 프록시 도구를 활용하면 우회할 수 있다. 따라서 버프스위트 인터셉트 기능으로 응답 페이지의 자바스크립트 코드를 제거한 뒤, 인터셉트를 해제하겠다.

정상적으로 수정 페이지에 접근하였고 FLAG를 획득하였다.

Auth 7

admin 계정 마이페이지에 접근해야 하지만 admin 계정 정보를 모른다. 우선 sfUser 계정의 마이페이지에 접근하였다. URL 을 보니 계정 명이 파라미터에 전달된다.

계정 명으로 test 를 입력하니 test 계정 마이페이지에 접근할 수 있다. 마이페이지는 본인만 접근할 수 있어야 하지만 본 사이트는 권한 검증이 미흡해 계정 명만 알고 있다면 마이페이지에 접근 가능하다.

admin 계정의 마이페이지에 접근해야 하므로 user 파라미터에 admin을 입력하고 요청해 FLAG를 획득하였다.

Auth 8

이전 문제와 동일하게 user 파라미터로 계정 명을 입력 받아 admin 계정의 마이페이지를 요청했으나 로그인한 계정의 마이페이지만 응답한다. 추측하건대, 쿠키와 세션으로 권한 인증을 수행하는 것 같다. 만약에 유추하기 쉬운 쿠키와 세션 ID를 사용한다면 권한 인증을 우회할 수 있다. 다시 로그인 해 어떻게 세션ID를 발급하는지 확인하겠다.

로그인 과정을 버프스위트로 확인하니, 로그인에 성공하면 서버 측에서 계정 명을 Set-Cookie 에 담아 응답한다.

다시 로그인하고 응답 페이지의 Set-Cookie 값을 admin으로 수정하겠다.

로그인에 성공하면 index.php 페이지로 리다이렉트 되는데 클라이언트 측에서 서버에 권한 인증을 위해 요청하는 Cookie에 admin 이 담겨있다.

마이페이지를 요청하는 경우에도 마찬가지다. 요청하는 URL의 파라미터는 계정 명이 입력되었지만 Cookie는 admin을 담고 있다.

서버 측은 sfUser 가 아니라 쿠키에 담겨있는 admin 으로 인식하기 때문에 권한 인증을 우회하여 admin 계정의 마이페이지에 접속한다. 그리고 FLAG를 획득하였다.

profile
하루하루 성실하게, 인생 전체는 되는대로.

0개의 댓글