Hacking (CTF)/Web

[xss-game] Level 5: Breaking protocol

gapsoo 2023. 11. 6. 19:24

 

 

https://xss-game.appspot.com/

 

XSS game

Welcome, recruit! Cross-site scripting (XSS) bugs are one of the most common and dangerous types of vulnerabilities in Web applications. These nasty buggers can allow your enemies to steal or modify user data in your apps and you must learn to dispatch the

xss-game.appspot.com

 

 

 

 


[1] 문제 탐색

 

 

 

문제 화면이다.

 

해석을 해보면,

 

임무 설명
크로스 사이트 스크립팅은 단순히 데이터를 올바르게 이스케이프하는 것이 아닙니다. 때로는 공격자가 DOM에 새로운 요소를 삽입하지 않고도 나쁜 일을 할 수 있습니다.

임무 목표
alert()애플리케이션 컨텍스트에서 팝업을 표시하는 스크립트를 삽입합니다 .

 

 

라고 한다.

 

 

오늘 새로운 베타 groovy 2.0을 발표한다고 한다.

sign up 을 눌러보자.

 

 

 

e-mail을 입력한 뒤 next버튼을 누를 수 있도록 되어있다.

위의 URL을 보았을 때, /signup 페이지에 next 파라미터로 confirm을 전송하는 것으로 보아,

입력하게 되는 e-mail값을 통해 xss 공격을 하는 것이 아닌지... 예상해보았다.

 

 

 

그래서 일단 이메일 입력 칸에 저렇게 입력을 해봤더니...

 

 

 

다시 초기 화면으로 돌아오고 아무 변화도 생기지 않았다.

 

 

감을 잡을 수 없어서 힌트 4개를 다 확인했다.

 

 

1. 이 레벨의 제목이 힌트

2. signup frame의 소스를 보는 것과 URL 파라미터가 사용되는 것을 보는 것이 유용하다.

3. onclick 핸들러를 사용하지 않고 링크를 클릭하면 Javascript가 실행되도록 하려면 어떻게 해야 하나?

4. 진짜 막히면, https://datatracker.ietf.org/doc/html/draft-hoehrmann-javascript-scheme-00 여기를 보라는데...

 

 

 

우선 이 레벨의 제목은 "Breaking protocol" 이다.

나에겐 도움이 되지 않았다.

 

 

그 다음으로 signup frame의 소스를 보라고 했는데,

아마 signup.html을 보라는 뜻인 것 같아 확인해보도록 하겠다.

 

 

signup.html

<!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" />
  </head>
 
  <body id="level5">
    <img src="/static/logos/level5.png" /><br><br>
    <!-- We're ignoring the email, but the poor user will never know! -->
    Enter email: <input id="reader-email" name="email" value="">
 
    <br><br>
    <a href="{{ next }}">Next >></a>
  </body>
</html>

 

 

이 부분을 보면, Next 를 눌렀을 때 next 인자의 값을 가진 링크로 이동하는 것을 알 수 있다.

 

 

11번 줄에서 이런 문구가 적혀있는 것을 보고, confirm.html을 확인해보았다.

 

 

confirm.html

 

이와 같이, confirm.html 의 소스코드를 보니 email 값은 전달되지 않고 있다.

때문에 URL 에서 입력할 수 있는 next 값을 통해 XSS 공격을 수행해야 한다.

위와 같이 URL 로 입력받은 next 값은 confirm.html 에서 window.location 안에 들어가고 있다.

 

 

 

 

 

 

 

Next 링크를 클릭할 때, 조건문이 존재한다고 한다.

 

 

1. next 값에 signup 이 포함되면 signup.html 로 이동
2. next 값에 confirm 이 포함되면 confirm.html 로 이동
3. next 값이 1,2 이외의 값이면 welcome.html 로 이동

 

2번 조건의 경우 confirm 을 포함한 어떤 next 값을 주어도 몇 초 뒤에 모두 welcome.html 로 이동하였다. next 값을 welcome 으로 바꿔주는 로직이 존재하는 것 같다고 한다.

 

 

따라서 signup.html에 스크립트를 주입하여 alert()를 팝업해야 한다.

링크로 alert() 를 실행하는 방법 중에  javascript:alert() 를 이용하는 방법이 있다고 한다.

 

 

 

이를 이용하여 XSS 를 수행해보면,

 

next 값 : javascript:alert(1)
적용되는 <a> 태그 : <a href = "javascript:alert(1)">Next >></a>

 

 

 

 

정답!

 

 


[2] 참고

 

https://binwalk.tistory.com/124

 

XSS game - Level 5

Level 5 시작! 별다른 입력값 없이 Sign up 링크만 있다. Sign up 을 누르면 email 을 입력하는 signup.html 로 이동한다. Next 를 누르면 또 다른 페이지로 이동하고 url 를 보면 next 인자를 통해 어떤 값을 전

binwalk.tistory.com

 

 

https://raise-meow.tistory.com/232

 

[level5] Breaking protocol :: XSS game

DOM에 스크립트를 삽입하지 않고 문제를 풀어야 한다고 한다. DOM이란 무엇일까? 더보기 Document Object Model 웹 페이지(HTML)에 대한 인터페이스 1. 뷰 포트에 무엇을 렌더링 할 지 결정하기 위해 사용 2

raise-meow.tistory.com

 

 

'Hacking (CTF) > Web' 카테고리의 다른 글

[webhacking.kr] Challenge old-23  (0) 2023.11.09
[Dreamhack/드림핵] xss-2  (0) 2023.11.06
[Dreamhack/드림핵] xss-1  (0) 2023.11.05
[Dreamhack/드림핵] DOM XSS  (0) 2023.11.05
[los.rubiya.kr] orc  (1) 2023.10.07