[웹 보안] Reflected XSS / DVWA 실습 / 방어 방법

비전·2024년 9월 20일

웹 보안

목록 보기
3/5
post-thumbnail

모든 해킹 실습은 본인 소유 시스템에서만 해야 합니다. 타인의 시스템을 침해하는 행위는 불법이며, 법적 처벌을 받을 수 있습니다.

0. XSS(Cross-Site Scripting)

크로스 사이트 스크립팅은 웹 애플리이케션 보안 취약점 중 하나로,
공격자가 악의적인 스크립트를 사용자의 브라우저에서 실행할 수 있게 하는 공격 기법입니다.

XSS 공격을 통해 공격자는 사용자의 세션을 탈취하거나, 악성 코드를 삽입해 사용자의 데이터를 훔치거나,
웹 페이지를 변조할 수 있습니다.

1. Reflected XSS

  • 서버에 저장되지 않고, URL이나 요청 파라미터를 통해서 악성 스크립트를 삽입하는 방식입니다.
  • 주로 검색 결과 페이지, 오류 메시지 등에 발생합니다.

예를 들어 공격자가 사용자에게 악성 스크립트를 입력하면

<script>alert('Hacked');</script>

or

http://example.com?search=<script>alert('Hacked');</script>

사용자가 이 링크를 클릭하면 스크립트가 실행되게 됩니다.

2. DVWA 환경에서 Reflected XSS 실습

2-1 보안 레벨 설정

가장 취약한 환경을 조성하기 위해 DVWA Security Level을 Low로 설정합니다.

2-2 Reflected XSS 입력값 넣기


제 이름은 vision을 입력하면 위 사진과 같이 Hello vision을 출력합니다.


위 사진을 보면 입력값이 URL 파라미터 값으로 들어가는 것을 알 수 있습니다.

2-3 XSS 삽입 쿠키값 출력 스크립트

<script>alert(document.cookie);</script>

쿠키값이 출력 되는 것을 알게 되었습니다.

이는 피해자의 세션 쿠키를 탈취하여 사용자 세션을 가로채고, 이를 악용해 피해자의 계정에 무단으로 접근할 수 있습니다. 또한 피해자를 공격자가 설정한 피싱 페이지로 리다이렉션하여 로그인 정보나 개인 정보를 유출 할 수 있습니다.

3. 방어 방법

  • 입력 검증
    화이트리스트 기반 검증으로 사용자가 입력할 수 있는 값의 형식이나 범위를 지정할 수 있습니다.
  • 출력 이스케이프 처리
    - HTML 이스케이프: 사용자 입력을 HTML 문서에 삽입할 때 <, >, &, ", ' 등의 특수문자를 HTML 엔티티로 변환합니다.
    • JavaScript 이스케이프: 스크립트 내에서 사용자 입력을 사용할 때는 적절한 이스케이프 처리를 통해 XSS 공격을 방지합니다.
  • 프레임워크와 라이브러리 사용
    자바스크림트 프레임워크나 라이브러리를 사용하면 XSS 방지 기능이 내장된 경우가 있습니다.
    예를들어, React, Angular, Ves.js 등 기본적으로 XSS 방어를 지원합니다.
  • WAF 구축
    웹 방화벽을 구축하여 웹 기반 공격으로부터 보호할 수 있습니다.
profile
아는 만큼 보인다

0개의 댓글