XSS

justugi·2024년 5월 16일

웹 취약점 진단

목록 보기
3/19

주의사항 : 이 포스팅은 개인 학습 및 교육적 목적으로 작성되었으며, 제공하는 정보를 악용하여 불법적인 행위를 하는 것은 엄격히 금지되어 있습니다. 웹 취약점 진단은 해당 웹사이트의 소유자의 명시적인 허가 없이는 수행해서는 안되며, 웹 취약점을 발견하였을 경우 즉시 해당 웹사이트의 소유자나 관리자에게 알려야 합니다.

XSS

: 웹 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도하는 취약점이다. 일반적인 공격 형태로는 세션 도용, 악성코드 유포 등이 있으며, 특정 게시물을 클릭했을 시 브라우저가 계속해서 열리거나 경고창이 무한반복 되는 것들도 크로스 사이트 스크립팅 공격의 한 예라 할 수 있다.

  • reflection 방식 : 사용자가 입력 한 스크립트가 서버측에서 다시 리턴되어 브라우저에서 HTML의 일부로 해석되는 과정에서 스크립트가 실행되는 방식이다. 주로 검색란과 같은 곳에서 많이 발생한다.

  • stored 방식 : 사용자가 입력 한 스크립트가 DB에 저장(업로드)되어 일반 사용자가 페이지를 열람할 때 마다 DB로부터 불러와져서 실행되는 방식이다. 주로 게시판과 같은 곳에서 많이 발생한다.

  • DOM based 방식 : 스크립트가 실행되도록 URL 주소를 만들어 배포 후 일반 사용자에게 스크립트가 실행되도록하는 방식이다. 위의 두 방식과 다르게 서버와 관계없이 브라우저에서 발생한다.

점검 절차

: html 구문(JavaScript를 실행하는)을 웹 페이지의 텍스트가 입력가능한 곳(검색창, 게시글 업로드 시 제목or내용 칸 등)에 입력 후 구문이 실행시켜 본다.

  1. 게시판 또는 검색란 같이 텍스트 입력 가능한 곳에 스크립트 삽입
  2. 클라이언트 측 필터링 여부를 확인하기 위해 서버 측으로 전송되는 패킷을 웹 프록시로 intercept하여 확인. 필터링이 된 경우 웹 프록시에서 스크립트 직접 삽입
  3. 브라우저에서 스크립트 실행여부 확인
  4. 스크립트가 실행되지 않을 경우 웹 페이지 소스를 통해 서버 측 필터링 여부 확인
  5. 스크립트에 쓰이는 문자가 필터링되지 않았을 경우 다양한 우회 패턴 시도

보안 대책

  1. Script 문자 필터링
    : 사용자의 모든 입력 값에 대한 정보를 서버 측에서 필터링한다. php의 htmlspecialchars, htmlentities 함수 등을 통해 HTML 특수 문자들을 그대로 출력되게 한다.
  • 입력 시점 필터링은 공격패턴을 완벽하게 예측하여 차단하기 어렵고, 우회하여 데이터에 접근하는 경우 필터링이 안될 수 있기 때문에 출력 시점 필터링이 입력 시점 필터링보다 더 안정적이다.
  1. XSS 방어 라이브러리, 브라우저 확장 기능 사용
    : XSS를 막아주는 Anti XSS 라이브러리를 사용하여 막는 방법. 또는 브라우저에 이와 동일한 기능을 하는 확장 기능을 추가한다. OWASP ESAPI 라이브러리도 유명하다.

  2. 웹 방화벽 사용
    : 기본적인 웹 방화벽을 통해 XSS 공격을 대비한다.

출처
https://junhyunny.github.io/information/security/dom-based-cross-site-scripting/
https://m.blog.naver.com/PostView.naver?blogId=lstarrlodyl&logNo=221941738753&navType=by

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글