목차
1. XSS 개요
XSS(Cross Side Script)는 클라이언트 사이드 스크립트를 관리자 권한이 없는 공격자가 임의의 웹 페이지에 주입시켜 실행시킬 수 있는 기법이다. Stored XSS, Reflected XSS, DOM 기반 XSS로 나뉜다.
1-1. Stored XSS
Stored XSS는 DB에 악의적인 스크립트를 저장한 뒤 희생자가 해당 페이지에 접근할 때마다 스크립트를 실행시킬 수 있는 취약점이다. URL을 기반으로 공격을 수행하는 Reflected XSS, DOM 기반 XSS와 다르게 DB에 저장된 데이터에 접근하기만 해도 스크립트가 실행되기 때문에, 한번 공격이 성공하면 무수히 많은 피해자가 생길 수 있다.
게시판처럼 어떠한 글을 DB에 쓰고, DB에 적힌 데이터를 사용자에게 보여주는 경우 Stored XSS가 발생할 수 있는 가능성이 있다.
1-2. Reflected XSS
Reflected XSS는 사용자가 특정 파라미터에 입력한 값을 서버가 응답으로 반사해서 보내줄 때 발생하는 취약점이다. 해당 취약점은 URL에 담긴 파라미터 정보를 기반으로 공격이 수행되기 때문에, 사회 공학적인 기법(예를 들자면, 악의적인 URL이 담긴 피싱 메일)을 통해서 악의적인 URL을 희생자에게 실행시켜야만 공격 수행이 가능하다. 따라서, Stored XSS에 비하면 위험성이 낮다.
검색 쿼리를 사용자에게 받아서 검색 쿼리 자체를 사용자에게 다시 보여주는 경우가 주로 Reflected XSS가 발생하는 경우다.
1-3. DOM 기반 XSS
DOM 기반 XSS는 서버에서 파라미터를 해석하고 동적 페이지를 생성해서 응답을 주는 것이 아닌, 클라이언트에서 파라미터를 처리할 때 발생할 수 있다. 따라서 서버로 파라미터를 전달하지 않는다면 서버에서는 공격을 수행한 것인지 아닌지 파악하기 쉽지 않다는 특성이 있다.
2. XSS 실습 진행
2-1. 자유게시판 게시물(Stored XSS)
자유게시판 게시물에 alert를 동작시키는 XSS 스크립트를 넣어서 글을 등록하고, alert가 동작하는지 확인한다.
글을 등록한 후, 해당 게시물을 클릭해 XSS Alert가 발생하는지 확인한다.
자유게시판에 등록한 게시물 조회 시 XSS가 발생함을 확인할 수 있다.
2-2. 관리자 페이지에서 자유게시판 게시물 열람(Stored XSS)
관리자 페이지에서 바로 직전에 자유게시판에서 등록한 XSS 스크립트 게시물에 접근했을 때 XSS가 발생하는지를 점검한다.
관리자 페이지에서 자유게시판에 작성한 글을 열람할 때 XSS가 발생하는 것을 확인할 수 있다.
2-3. 관리자 페이지에서 1:1 문의게시판 열람(Stored XSS)
관리자 페이지에서 1:1 문의게시판에 작성된 글을 열람할 때 XSS가 발생하는지를 점검한다. 우선 1:1 문의 게시판에 XSS 스크립트를 넣은 악성 게시물을 등록한다.
이후 등록한 악성 게시물을 관리자 페이지에서 열람한다.
관리자 페이지에서 1:1 문의게시판 게시물 열람시 XSS가 동작하는 것을 확인할 수 있다.
2-4. 회원가입 정보 관리자 페이지에서 열람시 XSS 발생여부(Stored XSS)
회원가입 시에 입력하는 폼에 XSS Alert 스크립트를 삽입했을 때 스크립트가 실행되는지 점검한다.
이후 해당 정보로 회원가입한다. 회원가입이 완료된 후 관리자 페이지에서 해당 회원의 회원 정보를 열람할 때, Alert 스크립트가 동작하는지 확인한다.
xsstest 계정의 정보를 관리자 페이지에서 열람한 결과 주소/상세정보에 해당하는 칸에 입력한 스크립트가 동작함을 확인할 수 있다.
2-5. 검색 페이지(Reflected XSS)
검색 페이지의 searchstring 파라미터에 XSS 스크립트 삽입 시 스크립트가 동작하는지 점검한다.
해당 검색어로 검색을 수행했을 경우 URL은 다음과 같다.
http://10.0.0.254/gm/search_result.php?seacrh=name&searchstring=”><script>alert(“XSS”);</script> |
검색 페이지에서 XSS가 동작함을 확인할 수 있다.
2-6. 자유게시판(Reflected XSS)
자유게시판 boardIndex 파라미터에 XSS 스크립트를 삽입 시 스크립트 동작 여부를 점검한다.
접속 시 Alert가 4회 발생하는 것을 확인할 수 있다.
2-7. 상품 목록(Reflected XSS)
상품 목록 조회 시 Index 파라미터에 XSS 스크립트 삽입 시 스크립트 동작 여부를 점검한다.
2-8. 회원가입 페이지(Reflected XSS)
회원 가입 폼에서 bDeal 파라미터에 XSS 스크립트 삽입 시 스크립트 동작 여부를 점검한다.
회원가입 페이지 bDeal 파라미터를 이용해 Alert를 동작시키는 것에 성공했다.
2-9. 상품상세정보 페이지(goodsIdx)
상품상세정보 페이지의 goodsIdx 파라미터에 XSS 스크립트 삽입 시 스크립트 동작 여부를 점검한다.
상품상세정보 페이지에서 XSS Alert를 동작시키는 것에 성공했다. 해당 페이지에서는 Alert가 3회 발생한다.
3. 대응 방안
스크립트에 사용할 수 있는 <, >, &, ‘, “ 등의 문자를 HTML 엔티티로 변환한다.
문자 | HTML 엔티티 |
& | & |
" | " |
' | ' |
< | < |
> | > |
스크립트에 사용할 수 있는 문자들의 HTML 엔티티는 위 표와 같다. PHP에는 해당 문자를 HTML 엔티티로 치환해주는 htmlspecialchar() 함수가 존재하기 때문에, XSS 취약점이 존재하는 위치에 해당 함수를 이용한다면 공격자는 XSS 공격을 할 수 없다.
위 그림 18은 자유게시판 글 조회(board_view.php)의 게시물 내용에 htmlspecialchars() 함수를 적용한 것으로, 해당 함수를 적용하면 공격자가 스크립트를 글에 삽입해도 스크립트를 실행할 수 없게 만들 수 있다.
'웹 모의해킹 > 웹 취약점 진단 실습' 카테고리의 다른 글
취약점 진단 - 중요 정보 노출 (0) | 2023.01.18 |
---|---|
웹 취약점 진단 - 디렉터리 리스팅 (0) | 2023.01.18 |
웹 취약점 진단 - CSRF 취약점 (0) | 2023.01.17 |
웹 취약점 진단 - 인증처리미흡 (0) | 2023.01.16 |
댓글