1. XSS ( Cross Site Scripting)
- 사용자로부터 입력받은 값을 검증하지 않고 바로 실행해서 생기는 취약점
- XSS 공격 자체로는 아무런 영향이 없으나 함께 사용되는 코드에 따라 여러 가지 공격이 발생할 수 있다.
- 가령, 사용자가 접근하는 웹 페이지에 XSS 공격 코드를 삽입하여 사용자가 원하지 않는 페이지로 이동하거나 악성 코드를 감염시키거나 사용자 정보를 수집하는 공격이 만들어질 수 있다.
2. XSS 공격 가능 여부 테스트
- 보안상 많은 게시판이 XSS 공격이 가능하지 않도록 관리되고 있다.
- 게시물에 공격 스트립트를 입력 후 게시물을 올려보자.
- 방금 등록한 게시물을 클릭하면, 게시물을 클릭한 사용자의 쿠키 값이 팝업 창 형태로 나타난다.
- 팝업창이 성공적으로 나타나면 해당 게시판은 XSS 공격에 취약하다는 뜻이다.
3. XSS 공격
- XSS 공격 스트립트가 입력된 게시물을 관리자가 읽으면 관리자의 쿠키 값이 getcookie.txt 파일에 저장된다.
- 공격자는 이 파일에 저장된 쿠키 값을 이용하여 관리자 계정 권한으로 게시판에 접근한다.
- 그러기위해서는 ASP 파일을 작성해야된다. 이 ASP 파일은 파라미터로 받은 쿠키 값을 getcookie.txt라는 이름의 텍스트 파일로 저장되는 역할
- 위의 시나리오대로 진행하기 위해서 먼저 getcookie.asp 파일을 업로드 해야 한다.
- 게시물이 정상적으로 등록되었음을 확인할 수 있다.
- 이제 첨부파일이 업로드된 경로를 확인해야 할 차례이다.
- XSS 공격 시 획득된 쿠키 값은 getcookie.asp 파일로 보내어져 텍스트 파일 형태로 저장되므로 해당 ASP 파일이 업로드된 경로를 알아야한다.
- 이제 본격적인 XSS 공격을 시작하기 앞서 공격 스트립트를 입력해보자
- 게시판에서 로그아웃한 후 관리자 계정으로 로그인 한 후 앞서 XSS 공격 스트립트 게시물을 읽어본다.
- 획득한 쿠키 값을 이용하기 위해 getcookie.asp 파일을 업로드한 경로에 접근해야 한다.
- 업로드 경로와 같은 경로에 getcookie.txt 파일이 생성되는데, 주소창에 http://IP주소/board/pds/getcookie.txt를 입력하면 관리자로부터 획득한 쿠키 값이 보이게된다.
- 관리자로부터 획득한 쿠키 값을 붙여넣기한 후 Cooxie Toolbar에 붙여넣기한 후 Set 버튼을 클릭한다.
- 현재 쿠키 값을 설정한 인터넷 익스플로러의 주소 창에서 http://IP주소/board/board_list.asp를 입력하면, 원래는 로그인 과정을 거쳐야 게시판 리스트를 볼수 있으나 쿠키 값 설정을 통하여 로그인을 하지 않고 게시판 리스트를 볼 수 있다.
- 또한, 관리자의 쿠키 값을 가지고 했기 때문에 관리자로 접속이 되어 있는 것을 확인 할 수 있다.
4. 대응방법
- XSS 공격을 하기 위해서는 기본적으로 "<", ">"와 같은 기호가 포함되어야 한다.
- 사용자 입력 폼이나 URL의 입력 값을 검증하여 "<", ">"가 포함되어 있는지를 확인하여 필터링해야 한다.
- 특수 문자나 예외 문자를 필터링하기 위해서 replace() 함수를 사용할 수 있다.
- replace(문자열, 찾을 문자열, 바꿀 문자열)
▶ 게시판 리스트를 보여주는 페이지에서 스트립트 필터링
- 게시판 화면 페이지에서 검색 구문에 <script>alert(document.cookie)</script>를 입력하게 되면 게시판에 작성된 쿠키 정보 팝업창이 뜨게 된다.
- 게시판 검색 구문이 들어간 board_serach.asp 파일에 replace() 함수 구문을 넣어서 "<", ">"을 필터링 시켜준다.
- 파일을 저장하고 게시판 리스트를 보여주는 페이지에 쿠키 정보를 확인하기 위해 사용했던 <script>alert(document.cookie)</script>를 입력
- 더 이상 쿠키 정보 팝업 창이 뜨지 않음을 확인 가능
▶ 게시물 최초 등록시 스트립트 필터링
- 게시판에서 게시물 등록시 나오는 화면으로 다른 파일과 그 파일에 넘어가는 인자들을 소스보기(FORM)으로 알 수 있다.
- 인자들이 넘어가는 board_write_reg.asp 파일에 아래와 같이 replace() 함수를 사용하여 문자를 필터링할 방어소스를 넣어준다.
- 쿠키 정보를 확인하기 위해 사용했던 <script>alert(document.cookie)</script>을 입력 후 게시판 게시물 등록하여 게시물 확인.
- 더 이상 쿠키 정보 팝업 창이 뜨지 않음을 확인, 그저 소스가 출력된다. ( 문자 필터링 완료 )
▶ 게시물 수정 시 스트립트 필터링
- 게시물에 공격 스트립트를 입력 한 게시물을 수정하여 올려보자.
- 방금 수정한 게시물을 클릭하면, 게시물을 클릭한 사용자의 쿠키 값이 팝업 창 형태로 나타난다.
- 이와 같이 팝업 창 형태로 뜨는 이유는 수정하는 asp파일이 다르기 때문이다.
- 게시판에서 게시물 수정시 나오는 화면으로 다른 파일과 그 파일에 넘어가는 인자들을 소스보기(FORM)으로 알 수 있다.
- 인자들이 넘어가는 board_update_reg.asp 파일에 아래와 같이 replace() 함수를 사용하여 문자를 필터링할 방어소스를 넣어준다.
- 쿠키 정보를 확인하기 위해 사용했던 <script>alert(document.cookie)</script>을 입력 후 게시판 게시물 수정하여 게시물 확인.
- 더 이상 쿠키 정보 팝업 창이 뜨지 않음을 확인, 그저 소스가 출력된다. ( 문자 필터링 완료 )