보안개구리
[게시판 실습] - XSS (2) Stored XSS 공격 취약 본문
[설 명]
크로스사이트 스크립팅은 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기버의 공격으로 웹 애플리케이션에서 사용자 입력 값에 대한 필터링이 제대로 이루어지지 않을 경우, 공격자는 사용자 입력 값을 받는 게시판, URL 등에 악의적인 스크립트를 삽입하여 게시글이나 이메일을 읽는 사용자의 쿠키(세션)를 탈취하여 도용하거나 악성코드 유포 사이트로 Redirect 할 수 있어 사용자 입력 값에 대한 검증 로직을 추가하거나 입력되더라도 실행되지 않게 하고, 부득이하게 웹 페이지에서 HTML을 사용하는 경우 HTML 코드 중 필요한 코드에 대해서만 입력되게 설정하여야 한다.
[점검 내용]
웹 사이트 내 크로스사이트 스크립팅 취약점 존재 여부
[점검 기준]
사용자 입력 값에 대한 검증 및 필터링이 이루어지지 않으며, HTML 코드가 입력 ·실행되는 경우
[대응 방법]
* 웹 사이트에 사용자 입력 값이 저장되는 페이지는 공격자가 웹 브라우저를 통해 실행되는 스크립트 언어를 사용하여 공격하므로 해당되는 태그 사용을 사전에 제한하고, 사용자 입력 값에 대한 필터링 작업이 필요
* 게시물의 본문뿐 아니라 제목, 댓글, 검색어 입력 창, 그 외 사용자 측에서 넘어오는 값을 신뢰하는 모든 form과 파라미터 값에 대해서 필터링을 수행
* 입력 값에 대한 필터링 로직 구현 시 공백 문자를 제거하는 trim, replace 함수를 사용하여 반드시 서버 측에 구현
* URLDecoder 클래스에 존재하는 decode 메서드를 통해 URL 인코딩이 적용된 사용자 입력 값을 디코딩함으로써 우회 공격 차단
[진단 과정]
해당 실습에 시나리오는 다음과 같습니다.
ㄱ) 해커가 게시글 내 악성 스크립트를 삽입
ㄴ) 일반 사용자가 악성 스크립트가 삽입된 게시글을 조회
ㄷ) 게시글 조회 시 사용자의 쿠키값을 악성 사용자가 수집 및 조회
ㄹ) 해커는 수집한 쿠키값을 이용하여 사용자의 아이디로 로그인
1) 실습에 앞서 먼저 cookieSteal.jsp와 cookieView.jsp를 생성합니다.
cookieSteal.jsp: 사용자가 게시글 조회 시 사용자의 쿠키 정보를 저장
cookieView.jsp: 저장된 쿠키 정보를 출력
2) 'hacker' 아이디로 로그인 후 게시글을 작성합니다. 게시글 작성 시 악성 스크립트(게시글 조회 시 쿠키 값을 악성 사이트로 전송)를 삽입 후 게시글을 저장합니다.
3) 게시글이 정상적으로 저장되었습니다. admin 사용자로 로그인 후 악성 스크립트가 삽입된 게시글을 조회합니다.
4) 게시글을 조회하여 내용을 확인하였습니다.(악성 스크립트가 삽입된 게시글이지만 일반 사용자는 악성 스크립트 삽입 여부를 쉽게 알 수 없습니다.)
5) 해커는 http://localhost:8088/hacker_A/cookieView.jsp로 이동하여 탈취한 쿠키값('admin'의 쿠키값)을 확인합니다.
6) 해커는 기존 쿠키값을 탈취한 쿠키값으로 변경 후 새로고침을 시도합니다.
7) 정상적으로 'admin' 계정으로 로그인이 되어 관리자 메뉴 노출 및 조회가 가능함을 확인하였습니다.
8) 소스코드 확인 시 별도의 필터링 조치가 없는 것을 확인하였습니다.
9) replaceALL() 함수를 사용하여 XSS 공격 시 사용되는 주요 특수문자에 대하여 필터링을 추가하였습니다.
10) 소스코드 수정 후 악성 스크립트가 삽입된 게시글 재 조회시 삽입된 스크립트 구문이 출력되며 스크립트가 실행되지 않음을 확인하였습니다.
'웹 진단 > 게시판 실습' 카테고리의 다른 글
[게시판 실습] - 불충분한 인증 (1) 중요페이지 접근 시 추가 인증 불충분 (0) | 2024.06.06 |
---|---|
[게시판 실습] - CSRF (1) CSRF 공격 취약 (0) | 2024.06.06 |
[게시판 실습] - XSS (1) Reflected XSS 공격 취약 (0) | 2024.06.05 |
[게시판 실습] - SQL Injection (1) 로그인 시 로그인 검증 우회 (0) | 2024.06.03 |
[게시판 실습] - 약한 문자열 강도 (2) 로그인 실패 시 로그인 제한 결여 (0) | 2024.05.30 |