Xss game level 3 write up


#번역


미션 설명 : level 2에서 보았듯이 일부 일반적인 js기능은 실행입니다. 즉, 브라우저가 입력에 나타는 스크립트를 실행하게 됩니다. 때로는 이러한 사실은 상위 수준의 API에 의해서 기능이 숨겨집니다. 이 레벨의 응용 프로그램은 그러한 숨겨진 싱크를 사용하고 있습니다. 


미션 목표: 이전과 마찬가지로 alert()를 사용한 팝업 스크립트를 삽입하세요. 


애플리케이션의 어느 위치에든 페이로드를 입력할 수 없으므로 아래의 url 표시줄에서 수동으로 주소를 편집해야 합니다. 





#분석



<!doctype html>
<html>
  <head>
    <!-- Internal game scripts/styles, mostly boring stuff -->
    <script src="/static/game-frame.js"></script>
    <link rel="stylesheet" href="/static/game-frame-styles.css" />
 
    <!-- Load jQuery -->
    <script
      src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
    </script>
 
    <script>
      function chooseTab(num) {
        // Dynamically load the appropriate image.
        var html = "Image " + parseInt(num) + "<br>";
        html += "<img src='/static/level3/cloud" + num + ".jpg' />";
        $('#tabContent').html(html);
 
        window.location.hash = num;
 
        // Select the current tab
        var tabs = document.querySelectorAll('.tab');
        for (var i = 0; i < tabs.length; i++) {
          if (tabs[i].id == "tab" + parseInt(num)) {
            tabs[i].className = "tab active";
            } else {
            tabs[i].className = "tab";
          }
        }
 
        // Tell parent we've changed the tab
        top.postMessage(self.location.toString(), "*");
      }
 
      window.onload = function() {
        chooseTab(unescape(self.location.hash.substr(1)) || "1");
      }
 
      // Extra code so that we can communicate with the parent page
      window.addEventListener("message", function(event){
        if (event.source == parent) {
          chooseTab(unescape(self.location.hash.substr(1)));
        }
      }, false);
  </script>
 
  </head>
  <body id="level3">
    <div id="header">
      <img id="logo" src="/static/logos/level3.png">
      <span>Take a tour of our cloud data center.</a>
    </div>
 
    <div class="tab" id="tab1" onclick="chooseTab('1')">Image 1</div>
    <div class="tab" id="tab2" onclick="chooseTab('2')">Image 2</div>
    <div class="tab" id="tab3" onclick="chooseTab('3')">Image 3</div>
 
    <div id="tabContent"> </div>
  </body>
</html> 





hint를 보았다!! 

1. 버그의 원인을 찾으려면 Javascript가 사용자가 제공한 입력을 처리하는 위치를 확인하세요.

2. window.location 개체의 데이터는 공격자의 영향을 받을 수 있습니다. 

3. 주입 지점을 확인했으면 새 HTML 요소에 들어가기 위해 할 일에 대해서 생각해보세요.

4. 브라우저가 페이지 로드 된 후에 추가된 스크립트를 실행하지 않기 때문에 이전과 마찬가지고 <script>를 사용하면 작동하지 않습니다.


window.onload = function() {
        chooseTab(unescape(self.location.hash.substr(1)) || "1");
      }
 


이걸 이용하는거같은데 어떻게 이용하는걸까?


그 hint에서 3번을 보면 html요소에 들어가기 위해서 할일이라고 해서 코드를 보니 html에 들어가는 곳이 있다.

 var html = "Image " + parseInt(num) + "<br>";
        html += "<img src='/static/level3/cloud" + num + ".jpg' />";
        $('#tabContent').html(html);

img src가 저기 안에 있고, html로 들어가 적용시키고 띄우게 코딩되어있다. 그럼 level 2번에서 한 것처럼 똑같이 해보면 되지 않을까?





#익스


<img src="image.gif" onerror="myFunction()">


현재 문제창에는 url : https://xss-game.appspot.com/level3/frame#3 이렇게 떠있다. 


onerror를 사용하기 위해서 https://xss-game.appspot.com/level3/frame#'4.png' onerror='alert("yeali")'> 이렇게 url창에 입력해준다!




'WebHacking > Xss-game Write-Up' 카테고리의 다른 글

Xss game level 6 write up  (0) 2018.07.17
Xss game level 5 write up  (0) 2018.07.17
Xss-game level 4 write up  (0) 2018.07.17
Xss-game level 2 write_up  (0) 2018.07.17
Xss-game level 1 write-up  (0) 2018.07.17


Xss game level 2 write up


#번역


미션 설명 : 웹 응용 프로그램은 종종 사용자 데이터를 서버 측 및 클라이언트 측 데이터베이스에 보관하고 나중에 사용자에게 표시합니다. 그러한 사용자 제어 데이터의 출처가 무엇이든 관계없이 신중하게 처리해야 합니다.


복잡한 응용 프로그램에서 xss 버그를 얼마나 쉽게 도입할 수 있는지 알 수 있습니다. 


미션 목표 : alert() 응용 프로그램의 내용 안에 팝업 스크립트를 삽입하세요.

참고 : 응용 프로그램에서 게시물을 저장하므로 코드를 몰래 사용하여 경고를 실행하면 다시 로드할 때마다 수준이 해결됩니다. 




#분석


<script>구문이 먹히지 않음으로 필터링하고 있음을 알게 되었다. (필터링 하는 법 공부 예정)


hint로 onerror를 사용하라고 했는데, onerror를 검색하니 이렇게 나왔다.

(https://www.w3schools.com/jsref/event_onerror.asp)



<img src="image.gif" onerror="myFunction()">


img src를 실행하고 없으면 에러가 발생하고 onerror를 실행하게 된다.


그래서 일부러 없는 파일을 실행시킨 후 onerror에 원하는 행동을 하면 xss를 실행할 수 있게 된다.  




#익스


<img src=image.gif onerror=alert("yeali")>




'WebHacking > Xss-game Write-Up' 카테고리의 다른 글

Xss game level 6 write up  (0) 2018.07.17
Xss game level 5 write up  (0) 2018.07.17
Xss-game level 4 write up  (0) 2018.07.17
Xss game level 3 write-up  (0) 2018.07.17
Xss-game level 1 write-up  (0) 2018.07.17

XSS game Level 1 Write up


# Analysis



번역)

미션 설명

사용자 입력이 적절한 이스케이프 처리없이 페이지에 직접 포함되는 크로스 사이트 스크립팅의 일반적인 원인을 보여준다. 

아래의 취약한 응용 프로그램 창과 상호 작용하고 원하는 JavaScript를 실행하는 방법을 찾아라. 취약한 창 내부에서 작업을 수행하거나 URL 표시 줄을 직접 편집 할 수 있다. 


미션 목표

아래 프레임에 JavaScript alert()를 삽입하시오! 

알림을 표시하면 다음 단계로 넘어갈 수 있습니다.  





** escape/이스케이프 :  번역을 하면 탈출이라는 뜻. 

값을 에러없이 전달하기 위해서 사용된다. 제어 문자로 인식될 수 있는 특정 문자 왼쪽에 슬래시를 붙이거나 URL 또는 HTML 엔티티 등으로 인코딩하여 제어 문자가 아닌 일반 문자로 인식시켜 에러 또는 에러를 이요한 부정행위를 방지하게 한다. 

또한 javascript에서 사용하는 함수 중 하나다. url로 데이터를 전달하기 위해서 문자열을 인코딩한다. 


***HTML Entity : HTML이나 XHTML 문서를 코딩할 때 특수문자를 써야 하는 경우에는 이러한 엔티티 코드 또는 엔티티 넘버로 변환해서 입력해야 한다. 변환하지 않고 특수문자를 그대로 입력해버리면 컴퓨터가 문서를 읽을 때 실제 문서 내용과 코드를 구분하지 못하는 문제가 발생한다. 또한 이스케이프때문에 사용한다. 

https://blog.outsider.ne.kr/380 



Exploit


<script>alert("yeali")</script>




'WebHacking > Xss-game Write-Up' 카테고리의 다른 글

Xss game level 6 write up  (0) 2018.07.17
Xss game level 5 write up  (0) 2018.07.17
Xss-game level 4 write up  (0) 2018.07.17
Xss game level 3 write-up  (0) 2018.07.17
Xss-game level 2 write_up  (0) 2018.07.17

 Webhacking 공부를 위해서 Webhacking.kr로 문제를 풀어보고자 합니다. 


 목표는 하루에 하나씩인데, 꼭 지켜졌으면 좋겠습니다!!ㅎㅎ



 우선 링크로 들어오면 검은색 화면의 로그인창이 보입니다. 로그인을 하려면 회원가입을 해야 되는데, 보이지가 않네요...

안 보이게 만들어놓은 것 같으니, 보이게 만들어보죠!



개발자 도구[F12]를 누르게 되면 페이지 소스가 보이게 됩니다. 그 다음에 회원가입이 있을것만 같은 저 빈공간에 마우스를 가져가면, 관련 소스가 있는 곳을 찾을 수 있습니다.



모두 주석처리가 되어있는 것을 확인할 수 있습니다. 이제 주석을 없애고 버튼을 보이게 해봅시다!



주석을 없애면 Register가 이쁘게 뜬 것을 확인할 수 있습니다. 이제 회원가입을 해볼까요?!



회원가입을 하려고 하니 decode를 해주라는 창이 있네요... 저것을 풀어야지 회원가입을 해주나 봅니다. 


decoding을 해주는 사이트의 힘을 빌려 여러번 디코딩을 반복하면 드디어 회원가입을 할 수 있는 키가 나옵니다. 


이로써 회원가입을 하게 되고!!



이제 Webhacking을 본격적으로 공부해봅시다!! 아자 화이팅이야!

+ Recent posts