ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XSS (Cross Site Scripting) [9주차]
    모의해킹스터디5기(feat.Normaltic) 2024. 1. 3. 14:41

     

     

     

    지난주까지해서 SQLi를 마무리했고,

    이번주부터는 새로운 공격 기법 두번째! 

    XSS(Cross Site Scripting)에 대해 배운다.


    1. XSS

    XSS, Cross Site Scripting은 클라이언트 측에 악의적인 스크립트를 삽입하여 클라이언트, 즉 사용자들로부터 의도하지 않은 행동을 유도하거나 정보를 탈취하는 공격이다.

     

    서버에 접근해 공격하는 SQLi와는 다르게 웹 페이지를 이용하는 사용자들이 공격 대상이다.

     

    서버가 아닌 웹 브라우저에서 코드가 실행되기에 클라이언트 측 스크립트인 JavaScript를 주로 사용한다.

    그 외의 클라이언트에서 실행되는 HTML, CSS 등도 사용이 된다.

     

    공격은 악의적인 스크립트를 삽입하여 임의의 사용자가 링크를 누르게 하는 등 해당 페이지에 접근하게 하여

    삽입된 스크립트가 실행되게 하는 방식으로 이루어 진다.

     

     

    2. Stored XSS 

    악의적인 스크립트가 어떻게 나타나는지에 따라 XSS 종류가 나뉜다.

    Stored XSS스크립트를 서버에 저장하는 방식이다.

     

    예를 들면 회원가입을 통해 이름이나 ID에 스크립트를 넣어 서버에 저장시키거나,

    게시판에 스크립트를 포함한 글을 써서 서버에 저장시킬 수 있다.

    데이터가 저장되고 출력되는 곳이면 Stored XSS를 사용할 수 있다.

     

    서버에 저장되기 때문에 해당 스크립트를 포함하는 페이지를 이용하는 불특정 다수가 피해를 볼 수 있어

    위험도가 큰 편이다.

    1. Stored XSS

     

    확인 방법

    1. 작성한 데이터가 화면에 응답되는지 확인
      • 내가 작성한 데이터가 서버에 저장되는 것인지 체크
    2. 특수문자가 그대로 입력되는지 확인
      • < " ' >
      • 위의 4가지 특수문자가 치환되지 않고 입력되어야 한다.
      • 화면에 보이는 결과가 아닌 페이지 소스를 살펴볼 것.
    3. 스크립트 삽입
      • POC(Proof Of Concept)
      • POC란 말 그대로 번역하면 '개념 증명'으로, 아이디어나 기술이 실행 가능한지를 입증하는 것을 의미한다.
      • 아래 4가지 명령어는 XSS의 실행 가능성을 증명하는데 주로 쓰이는 POC 코드다.
        • alert(1)
        • prompt(1)
        • confirm(1)
        • console.log(1)
      • <script>alert(1)</script> 등 악성 스크립트를 삽입하여 결과를 확인한다.

     

     

    3. Reflected XSS

    Reflected XSS는 스크립트가 서버에 저장되지 않는다.

    HTTP 요청 메시지의 파라미터 데이터가 그대로 서버 응답 메시지에 포함되는 곳,

    이 점을 이용하여 악의적인 스크립트를 전달하는 방식이 Reflected XSS다.

     

    예를 들면 아이디가 중복되었을 때에 "~~" 아이디는 중복되어 사용할 수 없다고 나타나는 곳,

    혹은 검색 결과가 없을 때 "~~" 의 결과가 없습니다 와 같은 곳이 Reflected XSS의 취약점이다.

     

    GET 방식으로 URL 뒷부분에 스크립트를 포함하여 링크를 전달하는 방식으로 공격이 이루어진다.

    따라서 링크를 전달 받은 이용자만 위험에 노출되어 Stored XSS 보다는 피해 범위가 작다.

    2. Reflected XSS

     

     

    확인 방법

    1. GET 메서드인지 확인
      • Reflected XSS는 악성 스크립트를 포함한 URL을 통해 공격하는 링크 전달 공격이다.
      • 그 페이로드는 GET 방식이다.
    2. URL 뒤에 GET 방식으로 입력한 페이로드가 화면에 응답되는지 확인
      • http://ctf.segfaulthub.com:4343/xss_1/mypage.php?user=kkk
      • 위의 경우 kkk가 화면에 입력되는지
    3. 특수문자가 그대로 입력되는지 확인
      • < " ' >
      • 위의 4가지 특수문자가 치환되지 않고 입력되어야 한다.
      • 화면에 보이는 결과가 아닌 페이지 소스를 살펴볼 것.
    4. 스크립트 삽입
      • <script>alert(1)</script> 등 악성 스크립트를 삽입하여 결과를 확인한다.

     


    참조

     

    The Impacts of Cross Site Scripting – JJO PENTESTER

     

    jjopentester.com

     

     

Designed by Tistory.