XSS 취약점을 최대한 활용합니다. Easy Hack: Cross Site Scripting Inclusion Xss 공격 훈련을 통해 데이터를 추출하는 방법




  • 1. XSS란 무엇인가
  • 2.XSS의 종류
  • 3.DOM 기반 XSS의 특징
  • 4.XSS 감사자
  • 5.XSS 악용 사례
  • 6.XSS에 취약한 사이트 검색
  • 7.XSS 취약점 검색 및 스캔 프로그램
XSS 란 무엇입니까?

XSS(교차 사이트 스크립팅)는 다른 사용자가 보고 있는 웹 페이지에 클라이언트 측 코드(JavaScript)를 삽입하는 것과 관련된 취약점입니다.

이 취약점은 사용자가 웹 페이지에 삽입하기 위해 제출하는 데이터에 대한 필터링이 충분하지 않기 때문에 발생합니다. 구체적인 예를 들어보면 훨씬 이해하기 쉽습니다. 방명록을 기억하십시오. 이는 사용자로부터 데이터를 받아 표시하도록 설계된 프로그램입니다. 방명록이 어떤 방식으로든 입력된 데이터를 확인하거나 필터링하지 않고 단순히 표시만 한다고 가정해 보겠습니다.

가장 간단한 스크립트를 스케치할 수 있습니다(PHP에서 잘못된 스크립트를 작성하는 것보다 쉬운 것은 없습니다. 많은 사람들이 이렇게 합니다). 그러나 이미 기성품 옵션이 많이 있습니다. 예를 들어 Dojo와 OWASP Mutillidae II로 시작하는 것이 좋습니다. 거기에도 비슷한 예가 있습니다. 독립형 Dojo 환경에서는 브라우저에서 다음 링크로 이동하십시오. http://localhost/mutillidae/index.php?page=add-to-your-blog.php

사용자 중 한 명이 입력한 경우:

안녕하세요! 어떻게 지내세요.

그러면 웹페이지에 다음이 표시됩니다:

안녕하세요! 어떻게 지내세요.

그리고 사용자가 다음을 입력하면:

안녕하세요! 어떻게 지내세요. 경고("Pwned")

그러면 다음과 같이 표시됩니다.

브라우저는 수많은 사이트에 대해 여러 쿠키를 저장합니다. 각 사이트는 자신이 저장한 쿠키만 받을 수 있습니다. 예를 들어, example.com은 귀하의 브라우저에 일부 쿠키를 저장했습니다. another.com을 방문하면 이 사이트(클라이언트 및 서버 스크립트)는 example.com이 저장한 쿠키에 액세스할 수 없습니다.

example.com이 XSS에 취약하다면 이는 어떻게든 여기에 JavaScript 코드를 삽입할 수 있으며 해당 코드는 example.com을 대신하여 실행된다는 의미입니다! 저것들. 예를 들어 이 코드는 example.com의 쿠키에 액세스합니다.

JavaScript는 사용자 브라우저에서 실행된다는 사실을 모두가 기억한다고 생각합니다. XSS가 있으면 내장된 악성 코드가 웹사이트 페이지를 연 사용자의 데이터에 접근할 수 있게 됩니다.

포함된 코드는 JavaScript가 수행할 수 있는 모든 작업을 수행할 수 있습니다. 즉,

  • 귀하가 보고 있는 웹사이트의 쿠키에 접근할 수 있습니다.
  • 페이지 모양을 변경할 수 있습니다.
  • 클립보드에 액세스합니다
  • 키로거(키 입력 인터셉터)와 같은 JavaScript 프로그램을 구현할 수 있습니다.
  • BeEF에서 픽업

쿠키를 사용한 가장 간단한 예:

경고(문서.쿠키)

실제로 경고는 XSS를 탐지하는 데에만 사용됩니다. 실제 악성 페이로드는 숨겨진 작업을 수행합니다. 공격자의 원격 서버에 비밀리에 접속하여 훔친 데이터를 해당 서버로 전송합니다.

XSS의 유형

XSS 유형에 대해 이해해야 할 가장 중요한 점은 다음과 같습니다.

  • 저장됨(영구)
  • 반영됨(변덕스러움)

상수의 예:

  • 서버에 저장되어 있는 방명록(댓글, 포럼 메시지, 프로필)에 공격자가 입력한 특수 제작된 메시지는 사용자가 이 페이지 표시를 요청할 때마다 서버에서 다운로드됩니다.
  • 공격자는 예를 들어 SQL 삽입을 통해 서버 데이터에 액세스하고 사용자에게 제공된 데이터에 악성 JavaScript 코드(킬로로거 또는 BeEF 포함)를 삽입했습니다.

비영구적인 것의 예:

  • 사이트에 검색결과와 함께 "검색한 항목: [검색 문자열]"과 같은 내용이 표시되는 검색이 있으며 데이터가 제대로 필터링되지 않습니다. 이러한 페이지는 해당 페이지에 대한 링크가 있는 사람에게만 표시되므로 공격자가 사이트의 다른 사용자에게 링크를 보낼 때까지 공격은 작동하지 않습니다. 피해자에게 링크를 보내는 대신 피해자가 방문하는 중립 사이트에 악성 스크립트를 배치하는 방법을 사용할 수 있습니다.

그들은 또한 다음과 같이 구별합니다(일부는 비지속적 XSS 취약점의 유형으로, 일부는 이 유형이 지속성 XSS의 유형일 수도 있다고 말합니다).

  • DOM 모델
DOM 기반 XSS의 특징

아주 간단하게 말하면, HTML 코드를 열면 "일반" 비영속성 XSS의 악성코드를 볼 수 있습니다. 예를 들어 링크는 다음과 같이 구성됩니다.

Http://example.com/search.php?q="/>경고(1)

소스 HTML 코드를 열면 다음과 같은 내용이 표시됩니다.

< div class = "m__search" > < form method = "get" action = "/search.php" > < input type = "text" class = "ui-input query" name = "q" value = "" /> < script >경고(1)" />< button type = "submit" class = "ui-button" >찾다

그리고 DOM XSS는 브라우저에 형성된 DOM 구조를 즉석에서 변경하는데, 생성된 DOM 구조를 볼 때만 악성코드를 볼 수 있다. HTML은 변경되지 않습니다. 이 코드를 예로 들어보겠습니다.

< html > < head > < title >웹사이트:::DOM XSS< meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < body > < div id = "default" >에러 발생됨...< script >function OnLoad() ( varfoundFrag = get_fragment(); findFrag 반환; ) function get_fragment() ( var r4c = "(.*?)"; var results = location.hash.match(".*input=token(" + r4c + ");") if (결과) ( document.getElementById("default").innerHTML = ""; return (unescape(results)); ) else ( return null; ) ) display_session = OnLoad(); document.write("귀하의 세션 ID는: " + display_session + "< br >< br >")

그러면 브라우저에서 다음을 볼 수 있습니다:

페이지 소스 코드:

다음과 같이 주소를 구성해 보겠습니다.

http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1);

이제 페이지는 다음과 같습니다.

하지만 HTML 소스 코드를 살펴보겠습니다.

거기에는 전혀 변한 것이 없습니다. 이것이 제가 말한 것입니다. 악성 코드를 식별하려면 문서의 DOM 구조를 살펴봐야 합니다.

다음은 작동하는 XSS 프로토타입입니다. 실제 공격을 위해서는 더 복잡한 페이로드가 필요합니다. 이는 응용 프로그램이 세미콜론 바로 다음에 읽기를 중지하고 Alert(1);alert(2)와 같은 것이 불가능하다는 사실로 인해 불가능합니다. 더 오래 가능합니다. 그러나 unescape() 덕분에 반환 데이터에서 다음과 같은 페이로드를 사용할 수 있습니다.

http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1)%3balert(2);

기호를 대체한 곳은 ; URI로 인코딩된 것과 동일합니다!

이제 표준 비지속적 크로스 사이트 스크립팅에서와 마찬가지로 악성 JavaScript 페이로드를 작성하고 피해자에게 보낼 링크를 구성할 수 있습니다.

XSS 감사자

Google Chrome(현재 Google Chrome 엔진을 사용하는 Opera에서도 마찬가지)에서는 다음과 같은 놀라움이 나를 기다리고 있었습니다.

dom_xss.html:30 XSS 감사자는 소스 코드가 요청 내에서 발견되었기 때문에 'http://localhost/tests/XSS/dom_xss.html#input=token