일단 인가란?
특정 권한을 부여하고 권한이 있는 사용자만 행동을 할 수 있게 하는 것입니다.
그럼 인가 취약점이란?
권한이 없는 행동을 할 수 있는 취약점을 말합니다.
인가 취약점의 대표케이스를 확인해보면서 알아보겠습니다.
1. 주석처리 & CSS display: none 으로 접근 제한
관리자만 해당 버튼을 이용할 수 있다고 합니다.
페이지를 확인해보니 해당 버튼을 주석처리하여 일반 사용자에게는 보여지지 않게 처리한것 같습니다.
해당 주석을 지우면 버튼을 보여지게 할 수 있을 것 같으니 주석을 지워보겠습니다.
주석을 지워주니 화면에 관리자만 사용 가능한 버튼이 나옵니다. 클릭 시 사용자에게 제공되지않은 행동을 할 수 있습니다.
이것뿐만 아니라 비슷하게 CSS를 사용하여 해당 태크를 안보이게 할 수 있는 데 이 또한 주석 제거와 비슷하게 CSS 속성을 삭제해주면 접근이 가능하기 때문에 이러한 방식으로는 접근 제어하면 안됩니다.
2. 인가 체크를 클라이언트에서 하는 경우
일반 사용자의 경우 해당 버튼을 클릭 시 권한이 없다고 알림이 뜹니다.
버프로 확인해보니 버튼 클릭 시 goMenu라는 함수가 실행되는 것 같습니다. 그럼 goMenu함수를 확인해보겠습니다.
다른 자바스크립트 파일에 goMenu라는 함수가 정의되어 있으며 이 함수는 admin일 경우 fire_nuclear_Attack.php로 이동시켜줍니다.
올바른 권한일 경우 어떻게 실행되는 지 알았습니다. goMenu함수에 매개변수로 admin이라는 값을 넣어 실행해도 되지만 해당 파일에 바로 접근해도 똑같이 권한없이 원하는 행동을 할 수 있습니다.
버튼 클릭 시 올바른 권한일 경우 해당 페이지로 이동시키는 것이니 우리는 버튼 클릭하여 권한 체크를 건너띄고 바로 해당 페이지로 이동한 것입니다.
이렇게 권한 체크를 클라이언트측에서 검사를 하게될 경우 클라이언트측에서 얼마든지 확인하고 변경할 수 있기 때문에 무엇이든 서버측에서 본인 확인, 검증 등을 진행하여야 합니다.
3. Guessing 공격 (추측하여 공격)
말 그대로 어떤 행동을 하기위해 페이지를 추측하고 접근하여 행동하는 것입니다.
해당 페이지는 관리자 외에 글쓰기가 제한되어 있습니다. 일반 유저가 글쓰기를 하기위해 글쓰는 페이지를 추측하여 접근해보겠습니다.
게시글 목록 페이지는 notice_list.php 라는 파일로 게시글 목록을 확인할 수 있습니다.
게시글 확인은 notice_read.php라는 파일로 게시글을 확인할 수 있습니다.
그럼 게시글 작성은 notice_write, notice_create, 등... 작성에 대한 페이지가 만들어져있을 것입니다. 우리는 이 파일을 하나씩 접근해보며 가능한 페이지를 찾는 것입니다.
게시글을 작성할 수 있는 페이지를 찾았습니다.
이렇게 권한이 없는 페이지를 보이지만 않게하고 페이지에 대해 권한 체크를 하지 않을 경우 웹 개발할 때 비슷한 형식으로 이름을 설정하기 때문에 추측하여 접근할 수 있습니다.
4. 파라미터 변조
특정 행동을 하기위해 파라미터에 값은 받아 해당 값을 통해 요청을 처리하는 데
만약 회원 탈퇴 기능에서 파라미터에 아이디를 받아 회원 탈퇴 기능을 수행한다고 하면 해당 파라미터에 다른 사람의 아이디를 넣으면 공격자가 다른 사람의 아이디를 넣어 회원을 탈퇴시킬 수 있습니다.
회원 탈퇴시 id에 사용자 아이디를 받아 회원을 탈퇴해주고 있습니다.
그럼 이 부분에 다른 사용자의 아이디를 넣어 해당 계정을 탈퇴시킬 수 있을까요?
존재하던 test1 계정을 넣어 계정을 탈퇴시켜 보겠습니다.
test1 으로 로그인하려니 탈퇴되어 로그인이 안되는 것을 확인할 수 있습니다.
이렇게 요청을 할 때 파라미터의 값으로 요청을 처리하는 데 이때 권한 체크가 제대로 이루어지지 않으면 권한 없이 파라미터 값 변조만으로 특정 행동을 할 수 있습니다.
이번주차에 대표적인 인증과 인가 취약점을 알아보았습니다.
모든 처리는 클라이언트측이 아닌 서버측에서 이루어져야 하며 직접 접근을 막기위해 페이지별로 권한 체크를 해주어야합니다.
'웹 해킹' 카테고리의 다른 글
[주통기반] 로컬 웹 서버 취약점 찾기 (디렉터리 인덱싱) (0) | 2024.03.25 |
---|---|
[주통기반] 로컬 웹 서버 취약점 찾기 (SQL Injection) (0) | 2024.03.22 |
웹 해킹 공부 일기장 12 - 1 (인증 취약점) (0) | 2024.02.22 |
웹 해킹 공부 일기장 11 - 2 (파일 다운로드) (0) | 2024.02.19 |
웹 해킹 공부 일기장 11 - 1(파일 업로드) (0) | 2024.02.18 |