1. 서론
사실 지난번 포스팅했던 XSS(Cross-Site Scripting) 취약점 찾기 포스팅 전에 먼저 다뤘어야 했는데 깜빡해버려서 지금에서야 올립니다. 사실 크게 어려운 개념도 아니고 워낙 유명해서 이전 포스팅을 통해 XSS를 처음 접해보셨던 분들도 간단한 검색을 통해서 쉽게 개념을 이해하셨을 거라 생각합니다만 그래도 XSS에 대해 소개는 해야 될 것 같습니다 ㅋㅋ
2. XSS의 정의
2-1. XSS의 개념
XSS(Cross-Site Scripting)은 일반적으로 자바스크립트를 이용한 공격으로 사용자가 입력한 값이 별도의 필터링 없이 서버로 넘어갈 경우 주로 발생합니다. 공격자는 자신이 입력한 값이 필터링 없이 그대로 서버로 넘어가 처리되는 점을 악용하여 공격자가 원하는 임의의 자바스크립트 명령어를 삽입합니다. 그 후 일반 사용자들이 해당 페이지에 접속하게 되면 공격자가 삽입한 임의의 스크립트가 동작하며 사용자의 쿠키 값을 공격자의 서버로 전송한다거나 좀 더 치명적인 악성코드가 삽입되어 있는 사이트로 강제 리다이렉트 되는 등의 피해가 발생할 수 있습니다. 물론, 이번 신천지 홈 페이지 사건 처럼(...) 단순히 경고 문구(?)가 담긴 경고창을 띄우고 끝나는 귀여운 장난(?)으로 끝낼 수 도 있습니다.
2-2. XSS의 종류
XSS는 크게 Reflected, Stored 2가지 종류로 나뉩니다. Reflected는 사용자에게 악성 스크립트가 포함된 URL을 전송하여 서버에 해당 악성 스크립트를 요청하게 하는 것이고 Stored는 공격자가 게시글이나 댓글 등을 통해 서버에 악성 스크립트를 저장하고 다른 사용자들이 이를 열람하면 해당 스크립트가 동작한다는 것입니다.
3. XSS의 예시
XSS의 예시는 Reflected XSS의 경우엔 해킹을 공부하는 사람들 사이에서 유명한 데모 사이트(http://demo.testfire.net)를 통해 예시를 들려고 합니다. Stored XSS의 경우엔 예시를 들 수 있는 데모 사이트가 기억나지 않아서 이전에 포스팅했던 XSS(Cross-Site Scripting) 취약점 찾기 를 참고해주시면 될것 같습니다. 예시의 경우 실제 악성 스크립트를 갖고 예시를 들기엔 좀 무리가 있어서 간단하게 Alert창에 현재 접속한 domain 이름이나 쿠키값을 출력하는 정도로 끝내겠습니다.
3-1. Reflected XSS
먼저 Reflected XSS의 예시입니다. 데모 사이트에 접속을 해보면 우측 상단에 검색창이 존재합니다. 해당 검색창에 내용을 입력하고 검색 버튼을 누르면 search.jsp에 query라는 파라미터 값으로 검색 내용을 넘기는데 해당 부분에 스크립트 내용을 삽입하면 입력한 내용대로 스크립트가 동작하는 것을 확인할 수 있습니다. 이를 이용해 공격자가 query 파라미터 값에 악성 스크립트를 삽입하고 사용자에게 넘긴 후 사용자가 이를 클릭하면 공격자가 의도한 악성 코드가 실행되는 것을 확인할 수 있습니다.
URL : http://demo.testfire.net/search.jsp?query=%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E
링크 클릭시 결과
3-2. Stored XSS
XSS(Cross-Site Scripting) 취약점 찾기 를 참고해주세요. 하단의 실사례가 Stored XSS입니다 :)
(추후 Stored XSS가 가능한 데모 사이트를 찾게 되면 수정하도록 하겠습니다.)
4. XSS 방어 기법
방어기법은 간단합니다. 보통 XSS 공격은 특수 문자가 거의 필수로 들어가기 때문에 preg_replace나 htmlpurifier 등을 통해 특수문자에 대한 필터링을 해준다면 어느 정도 XSS를 방어할 수 있습니다.
'Web Hacking > Tech' 카테고리의 다른 글
XSS(Cross-Site Scripting) 취약점 찾기 (0) | 2020.03.14 |
---|