URL 접근 제한 미흡 취약점이란 무엇인가?
인가받지 않은 사용자가 접근 가능하다면 취약점이 발생한다.
인증과 인가에 대한 이해
인증(Authentication), 인가(Authorization)
로그인 유무 파악 / 권한 있는지 파악
공격 원리 분석
공격자가 접근만 하면 된다. 공격자가 admin 페이지를 유추해서 접근할 텐데, 제어가 없다면 접근이 가능해질 것이다. 별다른 공격 원리가 없다.
예를 들어
http://www.victim.co.kr/page
어떤 페이지에 접속하는지 유추를 해야 한다. (수동적 유추)
자동화 도구를 사용할 수도 있다. 사전식 대입으로 주로 이루어진다.
대부분 관리자 페이지를 유추한다.
[실습10-1] URL 접근 제한 미흡 취약점 공격 실습
현재 이런 상태이다. 로그인하지 않은 비회원 상태이다. 작성할 수 있는 버튼이 활성화되어 있지 않아 있는 상태이다. 작성 페이지를 유추해보자.
아무 게시글 하나 들어가본 뒤, 링크를 확인해보면 page=view라고 되어 있는 것을 볼 수 있다. 이걸 유추해서 비회원으로 게시글을 작성해보자.
이렇게 url을 치면 어떻게 될까?
이렇게 글을 작성하는 페이지가 뜬다.
정상적인 실습 환경을 위해 csrf token 검증 로직을 잠시 주석 처리해주겠다. 비회원이면 token 값을 갖지 못하기 때문이다.
이렇게 작성이 되어 버렸다! 계정 이름 부분에 빈값이 입력되긴 했다.
이렇게 접근이 되어버렸다.
write 페이지를 대응하는 것이 좋고, 제일 중요한 것은 action. 회원 유무에 대한 인증 검증이 필요하다. 인증 미흡으로 취약점이 발생했다.
관리자가 접근할 수 있는 xmlparser에 접근해보자.
이 페이지는 관리자만 접근할 수 있는 페이지이다.
이렇게 이동된 모습이다. 관리자만 접속 가능한 부분인데, 비회원으로도 접속이 된 모습이다. 일반 회원이면 뜨지 않는 창인데도 뜨게 되어버렸다.
* 취약한 기능
게시글 작성
pingcheck
xmlparser
대응 방안
비회원이 접근 불가능하게끔, 관리자 외 접근 불가능하게끔...
세션을 받아오고, 세션이 없다면 비회원이라고 간주하고 코드를 짜는 방법이 있다.
[실습10-2] 취약 환경 시큐어 코딩 적용 실습
* 취약한 기능
게시글 작성 - 인증
pingcheck - 인증, 인가
xmlparser - 인증, 인가
우선 저번에 action.php에서 csrf 검증 로직 주석 처리해둔 부분을 다시 원상복구해준다.
인증 기능을 추가로 작성해주었다. 세션이 없으면 경고창을 띄우고, 이전에는 history.back(-1);를 했다면 이번에는 로그인 창으로 이동하게끔 location.href='index.php?page=login';로 설정해준다.
비회원인 상태로 url에 이렇게 쳐보자.
이렇게 경고창이 뜨고
로그인 창으로 넘어간다.
page=write로 임의로 수정해본 상태에서도 시큐어 코딩이 적용되었는지 확인해보자.
이렇게 쓰고
이렇게 경고창이 뜬 뒤 로그인 창으로 넘어간다.
이제 아예 작성조차 하지 못하게도 바꿔보자.
write.php에서도 이렇게 인증 기능을 추가해준다. 앞에서 복사해서 붙여와준 뒤, 앞 뒤를 <??>로 막아주어야 한다.
이제 비회원일 때 url에 page=write로 작성하면 경고창이 뜨고 로그인 페이지로 리다이렉션 한다.
이제 pingcheck 부분을 바꿔주자.
이렇게 세션을 확인해서 비회원일 때 경고창을 출력하고 로그인 창으로 리다이렉션 해준다. 그리고 세션이 있을 떄, 관리자만 pingcheck 부분을 들어갈 수 있으므로 관리자가 아닐 때에는 뒤로 가도록 바꿔준다.
이렇게 비회원일 때 page=pingcheck으로 하면 경고창이 뜨고 로그인 창으로 넘어간다.
test 계정으로 로그인한 뒤 page=pingcheck을 작성하니까 이렇게 경고창이 뜬다. 그러고 이전 화면이 나온다.
이렇게 xmlparser.php도 아까 pingcheck.php에서 작성한 것 그대로 복사해서 붙여넣어준다. 그럼 마찬가지로 page=xmlparser를 쳐도 관리자를 제외하고서 접근이 불가능할 것이다.
'웹 해킹 & 시큐어 코딩' 카테고리의 다른 글
웹 해킹 & 시큐어 코딩 (30) (0) | 2025.02.22 |
---|---|
웹 해킹 & 시큐어 코딩 (29) (0) | 2025.02.21 |
웹 해킹 & 시큐어 코딩 (28) (0) | 2025.02.20 |
웹 해킹 & 시큐어 코딩 (27) (0) | 2025.02.18 |
웹 해킹 & 시큐어 코딩 (26) (0) | 2025.02.15 |