Articles

DOM 기반의 교차 사이트 스크립팅

Posted on

덜 알려진 XSS 기술을

  • DOM 의미에 대한 문서 객체 모델
  • XSS 의미에 대한 교차 사이트 스크립팅
  • 사이의 주요 차이점은 DOM 기반 XSS 및 기타 XSS 취약점은 페이로드가 포함된 클라이언트 측에서 보다는 오히려 서버 측의
  • DOM 기반 XSS 취약성에 따라서는 것을 방지 클라이언트 측에서

Cross-site scripting(XSS)취약점 첫째 이 취약점은 이전에 악용되었지만 인증서 권고를 통해 알려졌습니다. 그래서 엑스포 는 이미 잠시 동안 주변에 있었다. 과소 평가 된 위험과 크로스 사이트 스크립팅 및 스크립트 주입 방지–간단한 가이드 당신이 예상대로,이미 크로스 사이트 스크립팅을 포함하여 주제에 실험실 기사의 숫자가 있었다. 그러나,이 문서는 주로 돔 기반의 크로스 사이트 스크립팅,먼저 아 미트 클라인에 의해 2005 년에 만들어 낸 용어에 초점을 맞추고 있습니다. 그는 돔 기반 크로스 사이트 스크립팅의 정의를 공개하고 다른 크로스 사이트 스크립팅 취약점에서 설명했습니다. 돔 기반 크로스 사이트 스크립팅을 이해하려면 먼저 돔에 대한 더 깊은 이해가 필요합니다.

돔이란?

문서 객체 모델은 문서의 구조를 정의하는 프로그램 인터페이스입니다. 이 문서는 기계 번역되었으므로 어휘,구문 또는 문법에서 오류가 있을 수 있습니다:2167>

  • 브라우저. 즉,돔은 페이지를 조작 할 수있는 기회를 제공합니다. 요즘 자바 스크립트는 일반적으로 이러한 종류의 조작에 사용됩니다.

    각 브라우저는 돔 표준을 다르게 구현합니다. 이 공격은 특정 브라우저에서 작동할지 여부에 영향을 줄 수 있습니다.

    돔의 취약점은 확인 없이 처리할 수 있는 사용자 입력이 포함된 동적 콘텐츠를 생성하는 데 사용됩니다. 이러한 종류의 공격은 사용자의 브라우저에서 자바스크립트로 수행됩니다. 여기서(악의적 인)사용자 입력이 돔에 가져 오는 위치는 소스로 지정됩니다. 돔에서(악의적인)사용자 입력을 실행할 수 있는 위치는 싱크로 지정됩니다.

    간단한 사이트 간 스크립팅 취약점의 예:

    <!DOCTYPE html><html> <body> <script> var source = "Hello " + decodeURIComponent(location.hash.split("#")); //Source var divElement = document.createElement("div"); divElement.innerHTML = source; //Sink document.body.appendChild(divElement); </script> </body></html>

    예를 들어 이 취약점은 다음 가져오기 요청으로 트리거될 수 있습니다:

    GET www.vulnerable-website.example#<img src="test" onerror="alert('XSS')">

    이 예제는decodeURIComponent방법을 사용하여 필요한 것을 알 수 있습니다. 이러한 특수 문자가 디코딩되지 않으면 공격이 작동하지 않기 때문입니다. 변수source의 내용은innerHTML을 사용하여 사업부 요소에 추가됩니다. 이는 코드에서 문제가 되는 요소입니다. 값이 자바 스크립트를 포함하는 경우,이뿐만 아니라 실행됩니다.

    이것이 서버 응답을 변경하지 않는다는 점을 지적해야 한다. 악의적인 수정은 자바스크립트 코드가 클라이언트 측에서 실행될 때만 발생하며,이후 돔이 변경됩니다.

    가장 잘 알려진 소스 및 싱크가 아래에 나열되어 있습니다. 이것은 결코 완전한 목록이 아니라는 것을 주목해야한다.

    출처

    • 문서.2167>문서.리퍼러
    • 위치
    • 위치.2167>위치.검색
    • 위치.해시
    • 위치.2549>
      • 평가
      • 설정 시간 제한
      • 설정 상호
      • 문서.쓰기
      • 요소.페이로드가 실제로 서버로 전송되지 않는 경우가 있기 때문에 이 취약점을 방지하는 것은 서버 측에서 하는 작업이 아닙니다. 위의 예는 그러한 경우 중 하나입니다. 그 이유는#문자 뒤에 나타나는 콘텐츠가 브라우저에서 서버로 전송되지 않기 때문입니다.

        가장 중요한 첫 번째 권장 사항은 가능할 때마다 콘텐츠의 동적 생성을 위해 사용자 제어 데이터를 사용하지 않는 것입니다. 만약 이것이 완전히 피할 수 없다면,가장 좋은 방법은 악의적으로 포함된 코드의 실행을 방지하는 보안 출력 방법(싱크)을 사용하는 것이다. 위의 코드 스니펫에서 코드를 안전하게 만드는 유일한 방법은.innerHTML.textContent으로 바꾸는 것입니다. 이 메서드는 실행되지 않습니다.2353>

        자바 스크립트와 보안 동적 웹 사이트를 개발하기 위해 유용한 팁을 많이 가지고 있습니다. 또한 보안 출력 방법으로 전환할 수 없을 때마다 필요한 컨텍스트 종속 인코딩에 대한 설명도 찾을 수 있습니다.

        다른 취약점과의 차이점

        가장 중요한 차이점은 공격이 코드에 포함된 위치입니다. 다른 교차 사이트 스크립팅 취약점과 달리 코드는 서버 측에 포함되지 않고 클라이언트 측에 포함됩니다. 즉,응답 코드에서 페이로드를 찾을 수 없습니다. 따라서 런타임 시 또는 웹 사이트의 돔을 확인하여 취약점을 탐지할 수 있습니다.

        대부분의 경우 돔 기반 취약점을 찾는 것은 쉬운 일이 아닙니다. 정적 코드 분석 방법을 사용하는 유용한 방법 중 하나는 트림 기반 문서에 설명되어 있습니다.

        저자에 관하여

        안드레아 하우저

        안드레아 하우저는 응용 과학 라퍼 스빌 대학에서 정보 기술 과학 학사 학위를 졸업했다. 그녀는 웹 애플리케이션 보안 테스트 및 사회 공학 캠페인의 실현에 대한 공격적인 작업을 집중하고 있습니다. 그녀의 연구 초점은 딥 페이크를 만들고 분석하는 것입니다. (오시드 0000-0002-5161-8658)

        링크

        • http://www.webappsec.org/projects/articles/071105.html
        • https://support.portswigger.net/customer/portal/articles/2325926-using-burp-scanner-to-test-for-dom
        • https://www.cert.org/historical/advisories/CA-2000-02.cfm
        • https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet
        • https://www.w3.org/DOM/
  • 답글 남기기

    이메일 주소는 공개되지 않습니다.