ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XSS(Cross Site Scripting)
    IT/웹 해킹 2024. 1. 11. 16:18

    [이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]

     

    • 목차
    1. XSS 란
    2. XSS 위험성
    3. XSS 원리
    4. XSS 종류
    5. XSS 방어

     

    1. XSS 란

    XSS는 부를 때 줄여서 '크사'라고도 부르는데 말 그대로 사이트 간 스크립트를 넣는 행위이고, 그로 인해서 사용자가 의도치 않은 행동을 하게 만드는 해킹 기법이다.  중요한 것은 클라이언트(유저) 쪽에서 코드를 실행하게 만든다는 것이다.

     

    2. XSS 위험성

    스크립트에 어떠한 코드를 넣느냐에 따라 위험성이 천차만별이다. 주로 쿠키 및 세션 탈취, 키로거, 등등 서버가 아닌 서비스를 이용하는 유저가 당하게 되는데 방식에 따라 특정유저만을 저격해서 또는 무차별적으로 해킹이 행해지게 된다. 

     

    3. XSS 원리

    게시판, url, 검색창 등등 문자를 넣을 수 있는 어느 곳에서든 발생할 위험이 있으며 취약점이 있는 곳에 javascript 코드를 삽입 후 사용자가 이 코드가 삽입된 링크나 게시물 등 접근하게 되면 악의적인 목적으로 삽입된 스크립트문이 실행되게 되는 원리이다. 

    스크린샷을 이용하여 간단한 예를 들어 설명해 보겠다.

     

    [경로 : 게시판 - 글작성]

     

     

     

    게시판에 이렇게 어그로를 끄는 제목을 작성하여 자바스크립트를 이용한 경고 알림 창을 띄우는 코드를 작성했다.

     

     

    글 작성 완료

     

     


    그럼 사람들이 궁금해 보여서 이 게시글을 클릭할 것이다.

     

     

     

     

    궁금증을 참지 못하고 이 게시글을 눌러본 사람들은 경고창 1이 뜬 메시지를 보게 될 것이다.???

    만약 이 코드가 알림 창을 띄우는 코드가 아니라 쿠키를 탈취하는 코드였다면? 키로거 코드였다면? 당신의 정보는 탈탈 털리게 되는 것이다.

     

    4. XSS 종류

    XSS의 종류는 크게 Stored XSS, Reflected XSS, Dom Based XSS 이렇게 3가지로 나뉜다.

     

    Stored XSS는 지금 위에서 보여준 것과 같이 게시물처럼 DB에 저장되는 것을 이용하여 스크립트를 서버에 저장하고 사용자가 서버에 게시물을 요청하면 서버는 악성코드가 들어있는 게시물을 응답하여 보내주는 식이다. 이로 인해 서비스를 이용하는 사람들에게 무차별적인 스크립팅 공격이 실행된다. 그래서 3가지 중에서 가장 위험하고 XSS 취약점 중에서도 Stored 방식이 제일 버그 바운티 상금이 높은 것으로 알고 있다.

     

    Reflected XSS는 말 그대로 반사한다는 특징이 있다. 저장방식이 아닌 취약점이 있는 페이지의 url 링크(스크립트 삽입된)를 전달하여 사용자가 그 링크에 들어오게 되면 링크에 작성되어 있는 악의적인 사용자의 서버로 요청되면서 해킹이 이루어지게 된다. Stored XSS와는 다르게 1회용으로 이메일이나 쪽지 등등으로 url을 특정 사용자에게 전달하여 공격이 실행된다.

     

    Dom Based XSS는 서버 측의 취약점이 아닌 브라우저를 통해 공격이 되는 기법인데 Document Object Model의 줄임말로 HTML, XML과 같이 DOM구조로 되어있는 곳에서 프로그래밍 언어가 이 구조에 접근할 수 있는 방법을 제공하여 구조, 스타일을 변경할 수 있게 돕는 것을 이용하여 해킹이 될 수 있게 한다. 브라우저에서 HTML 구문 분석을 할 때 스크립트문이 실행되면서 공격된다.

     

     

    5. XSS 방어

    XSS를 방어하는 방법은 스크립트 실행할 때 쓰이는 코드의 <, ', >와 같은 특수문자들을 HTML Entity로 치환하는 것이다.

    <  > 는   =>   &lt; &gt;싱글쿼터(' ')는   =>  &lsquo; &rsquo;로 치환

    그리고 추가적으로 게시판의 특성상 자유로운 커뮤니케이션을 위해 화이트리스트 필터링이 아닌 블랙리스트 필터링을 적용하여 script 같은 단어들을 쓰는걸 막을 수 있다. 가장 우선적이고 근본적인 것은 HTML Entity 치환이다.

Designed by Tistory.