1. XSS(Cross Site Scripting)
- 웹 애플리케이션을 이용하여 다른 사용자에게 악성코드를 보내는 데 사용
- 스크립트를 활용
- 스크립트는 공격자가 작성하므로 다양한 공격 가능
1.1 DBD 공격유형 (Dirve By Download)
- 악성코드를 자연스럽게 다운로드 하도록 유도함
- 스크립트 자체는 악성코드 x → 보안 솔루션에 탐지되지 않고 정상동작
- 스크립트는 악성코드를 다운로드 하도록 함
- 악성코드가 실행되면 랜섬웨어 또는 트로이 목마 등이 동작
1.2 XSS로 cookie 값을 훔치는 방법
- 방문자의 웹 브라우저가 스크립트가 있는 페이지를 방문하면, 스크립트가 쿠키를 공격자 컴퓨터로 전송
- 공격자는 자신의 쿠키를 지우고 전송받은 쿠키로 교체
- 공격자가 해당 웹사이트에 접속하면 로그인 된 상태
→ 대응방법 : 쿠키에 IP 주소를 난독화해서 넣으면 어디서 접속했는지 검증 가능, 다른 IP에서 접속하면 비정상
2. XSS 실습
2.1 DVWA - XSS Reflected
- 사용자가 입력한 값을 그대로 실행시켜 사용자에게 보여줌
① Low - 실행됨
② Medium
- <script> 태그 사라지고 alert('xss')만 남음
- view source를 이용해 소스코드 확인
- str_replace 함수가 '<script>'를 Null로 치환하고 있음
→ 우회방법1 : <script> 라는 문자열을 치환하고 있으므로 <Script> 등 대소문자를 섞어서 사용
→ 우회방법2 : 불필요한 속성 추가 ex) <script img=x>alert('xss')</script>
→ 우회방법3 : 공백 추가 ex) <script >alert('xss')</script> // 태그는 속성 추가가 가능하므로 공백이 구분자 역할
→ 우회방법4 : 스크립트 태그를 중첩 ex) <scr<script>ipt>alert('xss')</script>
※ str_replace() 함수와 같이 치환방법을 사용하는 것은 우회할 수 있는 방법이 많이 있음(좋은방법이 아님)
→ 우회방법 5 : 정규식 사용 ex) preg_replace() 함수
→ 가장 적절한 우회 방법 : Secure Coding 함수 적용
- htmlspecialchars() 함수 : html 태그로 변환하는 함수
< → < , > → > , & → &emp; , " → " , ' → ' 로 변환
→ 웹브라우저를 통해 볼 때는 정상적으로 보이지만 스크립트는 실행되지 않음
2.2 DVWA - XSS Stored
- 스크립트를 DB에 저장했다가 방문자의 웹브라우저에서 동작하도록 만드는 방식
- 게시판, 방명록 등에 스크립트가 저장되는 방식
1) Low
- Message 란에 스크립트코드 입력 시 정상 동작
2) Medium
- View Source를 보면 message부분은 secure coding 3중 방어를 하고있음, name부분은 <script>를 null로 치환
→ message부분에 스크립트 삽입은 불가
- name 부분에 스크립트를 삽입하려고 보니, 10글자 제한(클라이언트에서 입력 제한)
→ 개발자도구(F12)를 이용해 10글자 제한 해제(maxlength=10을 수정)
2.3 DVWA - XSS Stored(Medium) - Client의 요청을 Proxy에서 수정해서 전송
- Burp Suite에서 proxy 메뉴를 누르고 intercept on (인터넷 연결 속성에서 LAN 설정-프록시ON)
- 이름에 abcde, 내용은 12345를 입력하고 Sign Guestbook
→ Burp Suite에 intercept
- abcde를 지우고 스크립트 삽입 후 forward클릭, intercept off
→ 스크립트가 실행됨을 확인
* Proxy 도구
- Server와 Client의 사이에 존재하는 것
- Server에게는 Client인 척하고, Client에게는 Server인 척함
- Server에 가까우면 Server의 부담을 줄여줌
- Internet에 있으면 Client의 IP주소를 숨겨줌
- Client에 가까이 있으면 방화벽의 역할 또는 http 요청을 조작할 수 있음
- 대표적 도구 : Burp Suite, Paros Proxy(소스코드 공개, 커스터마이징 가능), charley, Fiddler2, Achilles 등
- Firewall 역할도 함 : 데이터 내용을 모두 감시하고 전달
- Local Proxy : 컴퓨터 안에 설치한 Proxy, 공격자가 자신의 트래픽을 Proxy에서 확인, 조작 가능
- Internet Proxy : Client의 IP를 숨겨줌
* Burp Suite
- Burp : 트림, Suite : 여러개를 붙여놓음
* 모의 해킹 및 실제 해킹 상황에서 약 1/4은 F12(개발자도구) 또는 Proxy 도구로 풀림
3. 난독화
- 원래 목적 : 개발자들이 내부 정보를 숨기기위함
- 공격자들이 자신이 만든 스크립트의 내용을 숨기기 위한 목적으로 난독화 사용
- DBD를 위한 스크립트의 경우, 악성코드가 있는 서버의 URL, IP주소, 악성코드의 이름 등이 들어있음
(IP주소, URL을 파악하면 방화벽의 블랙리스트에 추가 → 악성코드 유포지를 방문하지 않게 됨)
- 난독화는 생소한 인코딩에 복잡한 함수를 포함한 것 → 사람은 읽을 수 없지만 웹브라우저는 읽을 수 있음
- 난독화에 사용되는 함수
1) unescape() : escape 처리된 문자들을 원래대로 되돌리는 함수
2) eval() : 연산을 수행하는 함수
3) String.fromCharCode() : 10진수를 ASCII로 변환하는 함수
ex) test 문자열을 사용하지 못할 때
String.fromCharCode(116,101,115,116) (=test)
3.1 인코딩, 디코딩
- 인코딩 : 컴퓨터가 이해하기 쉽도록 변환
- 디코딩 : 사람이 이해하기 쉽도록 변환
- ASCII : 7bit(2의 7승), 128개의 문자 표현 가능 - 대문자, 소문자, 숫자, 특수문자, 기능 등을 표시하기 위한 언어
- Unicode(16bit)
* 한글을 표시하는 방법
- EUC-kr : MS에서 사용하는 한글 인코딩
- UTF-8 : Web, DB, Linux 등에서 한글 인코딩
- Base64 : 64진법(2의 6승, 6bit를 2bit 단위로 3개씩 사용), 3배수자리가 되지 않는 경우 패딩(=) 사용
* Base64의 특징
- 원문보다 인코딩 후에 약 1.4배 정도의 크기로 증가하게 됨
- 문자를 3,6,9자리 단위로 맞추기때문에 모자라는 글자는 =(패딩)을 추가함
- 3,6,9자리는 패딩 사용x
- 2,5,8자리는 패딩 1개 사용
- 1,4,7자리는 패딩 2개 사용
- Hex : 16진수
* 16진수 : 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
- 구분자로 주로 % 사용
- 16은 2의 4승이므로 4bit, 4bit 두개는 8bit = 1byte
- %(구분자)를 1byte단위로 사용하므로 %hexhex 패턴을 사용 ex) %0D
- 구분자로 /x를 사용하기도 함 ex) \x0D
* UCS(Universal Character Set, 범용 문자 집합)
* UCS2는 16비트를 사용하므로 4자리 단위로 표현 ex) \x09ae, %u1a3c
- UCS에서는 구분자를 %u를 사용하기도 함
* <script> </script> 태그에서 '<' 와 '>' 태그를 막는것을 우회하는 방법
- charset을 UTF-7로 사용 → chrome, Edge는 코드가 그대로 보임(실행x), Internet Explorer에서는 경고창이 뜨고 승인시 스크립트 실행
- < 는 +ADw-로, > 는 +AD4-로 사용하면 <script>문이 정상적으로 실행됨(브라우저가 자동으로 번역해 실행)
3.2 악성코드 분석 방법
- 정적 분석 : 소스코드, 외형, 사용된 함수 등을 보고 악의적인 행위를 하는지 예상
- 동적 분석 : 실제로 악성코드를 실행해 어떤 악의적인 행위인지 확인
4. 실습 준비) Malzilla 1.2.0 설치
- 난독화 해제 도구
4.1 난독화 해제 실습 1 - 스크립트 태그를 제외한 부분 난독화 해제
- e부터 ;까지 복사해서 Malzilla의 decoder에 복사 → run script
→ 악성코드 유포지(피싱사이트) url 알아냄
4.2 난독화 해제 실습 2
- eval() 함수 : 괄호 안의 내용을 동작시킴
- evla로 이름을 바꾸고 동작 (바꾸지 않고 실행하면 스크립트가 실제로 실행됨)
- 악성코드 유포지의 url 주소 확인 가능
4.3 난독화 해제 실습 3
- 복사해서 Malzilla Misc Decoders에 붙여넣기
- concatenate : 잘라져있는 부분을 붙여줌
- 구분자 %u , 2바이트 : UCS2
- UCS2 → Hex(Misc Decoder), Hex → ASCII(Hex View) 과정을 거쳐 난독화 해제
→ 악성코드 유포지의 URL 확인 가능
4.4 난독화를 해제하는 방법
- 최대한 정리해서(전처리) Hex로 변환하고 Hex를 ASCII 또는 UTF-8로 변환
4.5 Mal.js 파일에 숨어있는 비밀내용
- Malzilla에서 eval() 함수를 evla로 변경 후 스크립트 실행
- " " 안의 내용이 Mal의 내용이므로 난독화 해제
- 중간중간 "," 부분을 제거하기위해 "," 을 공백으로 replace
- 정리된 Hex를 ASCII로 변환
- 표시된 부분이 =(패딩)이 사용된 base64 인코딩 된 문장으로 보이므로 base64 디코딩
→ 숨겨진 패스워드 확인 가능
● 공격 스크립트의 약 90%는 난독화를 이용
* Deface 공격 : 웹사이트의 첫 페이지를 바꾸는 공격
- 이미 해킹이 다 되어있는 상태에서 D-Day에 이미지만 바꾸는 것
'SK 쉴더스 루키즈' 카테고리의 다른 글
[SK 쉴더스] 애플리케이션 보안 5일차 - OWASP Top 10(2) (0) | 2022.09.26 |
---|---|
[SK 쉴더스] 애플리케이션 보안 4일차 - OWASP Top 10(1) (2) | 2022.09.24 |
[SK 쉴더스] 애플리케이션 보안 3일차 - WebShell (1) | 2022.09.19 |
[SK 쉴더스] 애플리케이션 보안 1일차 - Web Hacking 실습 1 (0) | 2022.09.12 |
[SK 쉴더스] 애플리케이션 보안 1일차 - web 기본과 실습환경 (0) | 2022.09.12 |