[드림핵-웹] XSS

스근한국밥한그릇·2024년 10월 9일
0

DreamHackWeb

목록 보기
2/3

1. Definition

1-1 What is XSS

Cross Stie Scripting
클라이언트 사이드 취약점 중 하나로써 웹 페이지의 이용자를 대상으로 하는 공격 기법이다.

  • 세션 및 쿠키 정보 탈취 -> 해당 계정으로 임의의 기능 수행
  • 웹 리소스에 악성 스크립트 삽입해 이용자의 웹 브라우저에서 해당 스크립트 실행 가능

1-2 Classification by type of occurrence

1. Stored XSS : XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS

  • 서버, DB에 저장된 악성 스크립트 조회시 발생
  • 게시물, 댓글에 포함시켜 업로드

2. Reflected XSS : XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS

  • 게시판 서비스에서 작성된 게시물 조회하기 위한 검색창에서 스크립트 포함해 검색하는 방식
  • URL과 같은 이용자의 요청에 의해 발생
  • 공격을 위해서는 다른 이용자를 악성 스크립트가 포함된 링크에 접속하도록 유도해야함
  • Click Jacking, Open Redirect 등 다른 취약점과 연계하여 사용

3. DOM-Based XSS : XSS에 사용되는 악성 스크립트가 URL Fragment에 삽입되는 XSS

  • Fragment는 서버 요청/응답에 포함되지 않는다.

4. Universal XSS : 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점

  • SOP(Same Oring Policy) 정책을 우회하는 XSS

2. Explanation

2-1 XSS-1

1. /vuln 코드 확인

  • param 값을 Return


2. /memo 코드 확인

  • memo에 입력된 값을 가져와서 화면에 출력
  • cookie 값을 읽을 수 있는 page


3. /flag 코드 확인

  • get 요청인지, post 요청인지 확인 후 그에 맞는 값 return
  • script 코드 이용해서 XSS 사용 가능


4. 코드 입력

  • <script>location.href="/memo?memo="+document.cookie</script>


5. flag 확인



2-2 XSS-2

1. /vuln

2. /memo

3. /flag

5. 풀이

이번에도 flag 페이지에서 어떠한 코드를 입력했을때 해당 flag가 나오도록 되어있다. XSS-1 과는 다르게 <script> 문법이 아닌 <img> 태그를 이용하여 해당 flag를 획득하였다.

  • 코드 : <img src=x onerror=this.src=‘/memo?memo='+document.cookie;'>

4. flag 출력



3. Prevent

  1. 필터링 : 도착시 입력내용 검증
  2. 적절한 응답 헤더 사용 : Content-Type, X-Content-Type-Options
  3. Content Security Policy
  4. Twig, Freemaker를 HTML에 삽입 (server sied template engines)

3-1. 사용 예시

  • twig - e() filter : {{user.firstname | e('html')}}

CSP (Content Security Policy)

  • HTML meta tag
<meta http-equiv="Content-Security-Policy"
  content="default-src 'self'; img-src https://*; child-src 'none';" />
  • HTTP header
Content-Security-Policy: policy
profile
항상 든든하게 코딩 한그릇🧑‍💻🍚

0개의 댓글