▶XSS(Cross-Site Scripting,크사, 크스스)란?
클라이언트 측 스크립트를 삽입하는 공격(주로 JS, 가끔 HTML도). 웹 브라우저에서 일어남.
▶취약점 발생이유?
공격자의 스크립트가 그대로 서버에서 응답되기 때문에 발생!
▶발생 가능한 위치?
사용자의 입력이 응답에 포함되는 모든 곳! (input뿐만 아니라 모든 parameter에서 발생!)
▶ 스크립트 삽입 전략에 따른 XSS종류
[1] 서버에 저장 : Stored XSS
[2] 서버에서 반사 : Reflected XSS
[3] 클라이언트 조립 : DOM Based XSS
▶ Reflected XSS
클라이언트가 입력한 파라미터를 활용해서 서버가 내용을 반환할 때 응용함. 단, 그 정보는 서버에 저장하지 않음. 대표적으로 검색기능을 지원하는 것을 예로 들 수 있다.
Reflected XSS는 주로 링크를 줘서(URL) 활용한다.
▶ Stored XSS vs Reflected XSS
[1] Stored XSS : 위험도가 높다. 불특정 다수에게 공격이 가능하기 때문.
[2] Reflected XSS : 쉽게 찾을 수 있다. 타겟팅 공격이 가능하다. 클릭하게 만들어야되기 때문에 '사회공학기법'을 활용해야 한다.
▶ Reflected XSS 찾는 과정?
"Burp Suite" 활용 -> history에 params "v" 된 부분을 중점으로 보되, 내가 날린 데이터가 응답에 들어가 있는지 확인해볼것. -> 'Repeater'로 옮기기 -> 나만아는 keyword 넣어보기 (이때 Auto Scroll 기능을 활용하면 유용하게 찾을 수 있다.) -> parameter에 <" '>를 넣고 그대로 응답돼서 나오면 전부 활용가능(만약, "만 응답되면 "만 활용가능) -> <script>되는가? -> <script></script>되는가? -> <script>alert('1')</script>가 되면 Reflected URL을 보고서에 넣기!
-정리하면 Reflected XSS를 찾는과정은 다음과 같다.
[0] 이것저것 다해본뒤, history 데이터를 뒤져본다.
[1] 파라미터가 있어야 할 수 있다.
[2] 응답에 파라미터가 그대로 찍혀야 한다.
[3] <" '> 넣어서 확인해본다.
[4] 해당태그에서 실행이 안되면 그 태그를 벗어나게 열고 닫아준뒤 그 사이에 Script를 넣는다.
※ 막무가내로 코드 집어넣지 말기!
▶ DOM Based XSS
클라이언트 측에서 조립하는 Cross-Site Scripting 기법
▶ DOM Based XSS 찾는 과정
Reflected XSS와 같이 keyword를 넣어본다. -> 응답에 없음. -> Script부분을 보면 다음과 같이 직접 조립하는 경우가 존재.(Document.write가 사용자의 파라미터를 받는 경우이다.)
1
2
3
4
5
6
7
8
9
10
|
....
<form name="XSS" method="GET>
<select name="default">
<script>
if (document.location.href.indexOf("default=") >=0) {
var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
document.write("<option value='" + lang + "'>" + decodeURL(lang) + "</option>");
document.write("<option value='' disabled='disabled'>----</option>");
}
....
|
cs |
-> 이런 경우 개발자도구 'elements'를 통해 확인이 가능하다. -> GET방식으로 <" '>를 주고 꺾쇄가 살아있는 것을 확인 후, "공격가능하겠구나!"
※ 진짜 꼼꼼하게 JS를 봐야 분석가능하다. JS를 공부할 것!
▶ WEB server - access log 활용 (추후 보강 설명)
▶ 유념해야할 사항들
[1] 게시판의 경우 : 제목에 바로 Script 태그를 넣지 않음. 내용에 test<" '> 를 넣고 수정해가면서 상태를 봄(수정&읽기 페이지 둘다 "repeater'에 넣어서 확인해준다.).
[2] <textarea> 태그 안에 있어서 실행이 안되는 경우, </textarea>로 닫아주고 <textarea>로 열어주고 그 사이에 Script코드를 삽입해서 실행해본다.
'정보보안(웹해킹) > XSS(Cross-Site Scripting)' 카테고리의 다른 글
XSS report할 때, alert(1)을 사용하지 말아야 하는 이유 (0) | 2022.12.31 |
---|---|
JSFuck and XSS Payload (부제 : !,[,],(,),+ 만으로 XSS하기) (0) | 2022.12.11 |
XSS 블랙리스트 필터링 우회 (0) | 2022.11.22 |
XSS응답 확인 : Request bin 사이트 및 사용법 (0) | 2022.11.22 |
XSS(Cross-Site Scripting) 응용 (0) | 2022.11.22 |
댓글