애플리케이션 보안

XSS (Cross Site Scripting)

mimimin 2022. 5. 30. 00:58

SNI(Sever Name Indication - 서버의 이름을 가리킴) → 키의 주인 누구인지 확인

  • 서버이름 알려주는 곳은 암호화가 안됨 → 공개키 주인과 서버가 동일한지 확인 위해
  • 우리나라 ISP는 3군데 - KT, SK, LG

[ 접속 차단 방식 ]

  1. 서버 IP 차단 → IP가 여러개 등록되어 있으면 IP로 차단하기 어려워짐
  2. DNS에서 알려주지 않도록 설정 → 클라이언트가 도메인 주소를 입력해 IP를 요청할 때, 해당 도메인에 대한 IP 주소를 알려주지 않도록 설정
  3. http 차단 → http 헤더에 있는 호스트의 이름을 보고 차단하도록 설정, 이때 https를 사용하면 암호화 되기 때문에 해당 방법이 어려울 수도 있음
  4. 3번 과정에서 처음 연결할 때 호스트가 1번 노출되는데, 그때의 이름을 보고 차단

- 국내 ISP에서는 차단 시스템이 가진 차단 목록 DB 기준으로 차단하는데, 이때 위의 4개 방법 섞어서 사용

 

 

[ 표준 문서 체계 ]

 

1. SGML (Standard Generalized Markup Language - 원조)

  • 미국방부(항공모함, 전투기 등 매우 많이 씀)에서 만듦
  • 작성하기가 까다로워서 문서 작성 담당자 필요

 

2. HTML

  • 팀버너스리가 만든 SGML을 단순화해서 만든 것이 HTML
  • 이미지, Text, Hypertext 등을 표시

 

3. XML

  • 내용과 형식 분리 → 변경 내용이 있을 때는 내용만 바꾸면 됨 (형식은 기존의 것 그대로 사용)
  • 보편적으로 많이 사용 ex) ppt → pptx, doc → docx, xls → xlsx, hwp → hwp (~형식)
  • 위의 예시에서 x는 xml 의미, File signature는 PK(50 4B - hex)로 변경됨

 

[ HTTP Error Code ]

  • 200 → OK/Success: 정상
  • 301 → 영원히 이동
  • 302 → 임시로 이동
  • 400번대 에러 → Client의 요청이 잘못된 경우
  • 401 → Unauthorized : 로그인에 실패
  • 403 → Forbidden : 접근하면 안되는 페이지, 사이트
  • 404 → Not Found : 없는걸 달라 했을 때
  • 500번대 에러 → Server 쪽에서 잘못한 경우
  • 500 → Internal Server error: 설정 잘못 등 내부 서버에 에러
  • 503 → Service Unavailable: 사용자 폭주 혹은 DDoS 공격을 받을 때

 

[ Burp Suite ]

  • Local Proxy: 클라이언트의 컴퓨터에 설치한 Proxy → 클라이언트의 요청 조작 가능
  • 이외에도 많은 기능이 있음 (suite)
  • 조작 편리

→ 보안대책을 클라이언트에 세우는 것은 잘못된 행위임 (proxy 등으로 우회 가능하기 때문)

 

 

[ XSS(Cross Site Scripting) ]

  • 스크립트 이용한 공격
  • 서버에 스크립트를 업로드 후 클라이언트가 방문하면 스크립트가 동작하면서 악의적인 행위를 하는 것 (직접 공격이 아닌 일종의 간접공격)
  • 초반에는 공격자가 쿠키값을 획득(쿠키 훔치기)하였지만, 현재는 랜섬웨어 다운로드 유도

 

[ XSS Reflected ]

  • 스크립트를 넣어서 실행하는 것이 목적
  • Chrome에서는 스크립트가 차단되므로 실습 시에는 Edge / Explorer 사용

 

( 참고 )

  • blacklist → 안되는 것을 지정하는 방법
  • whitelist → 되는 것을 지정하는 방법 ex) 방화벽

 

[실습 - XSS Reflected]

  • DVWA - low
  • script를 입력하면 바로 실행됨

실행된 스크립트

  • DVWA - medium
  • str_replace 함수로 <script>가 ' '로 치환됨
  • 대, 소문자를 구분하지 않는 특성을 이용해 <script>가 아닌 <Script>로 사용 가능
  • 비슷하게 <sCript> 혹은 <script<script>> 등으로도 사용 가능

view source에서 확인 가능한 str_replace 함수
대, 소문자 구분이 없는 특징을 이용해 <Script> 태그 사용
scipt가 실행된 모습

 

 

** 본 실습은 모두 가상 환경 / 테스트 환경에서 이루어졌으며, 실제 서버에서 실행하시면 안됩니다. 본 블로그는 실습에 대한 어떠한 책임도 지지 않습니다 **