starting point
xss-game-level 6 본문
url에 #뒤에 적힌 경로를 통해 gadget.js를 로드하는 것을 추측할 수 있다.
경로를 조금 바꾸니 제대로 로드가 되지 않는 것처럼 보인다. 개발자 도구를 통해 변화를 관찰해 보겠다.
url의 #뒤에 적힌 경로가 그대로 적혀 외부 리소스를 가져오는 것을 알 수 있다.
[사진4]의 리소스 요청은 실패한 것을 [사진5]의 콘솔창을 통해서 확인할 수 있다.
그렇다면 이 문제는 외부의 리소스를 가져와서 문제를 해결해 볼 수 있을 것이다.
하지만 외부 리소스를 이용해서 문제를 해결하려면 서버를 생성해야 하기 때문에 외부리소스를 가져오지 않고 해결하는 방법이 있다.
data URL scheme이다.
data:[미디어타입][;인코딩방식],<데이터>의 형태를 가진다. 이러한 방식을 통해서 외부 리소스를 가져오지 않고 직접 작성할 수 있다. 이미지를 외부에서 가져오지 않고 소스코드안에서 바로 사용할 때 사용된다.
이 방법을 이용하여 외부 리소스를 가져오지 않고 바로 스크립트를 실행시킬 수 있다.
이런 식으로 미디어 타입을 text의 javascript로 설정하고 alert()함수를 넣었다. 이를 입력할 경우 위 문자열이 그대로 <script>의 src속성값으로 들어가게 되고 자바스크립트가 실행될 때 경고창을 출력할 것이다.
이 문제는 외부리소스를 이용해서도 스크립트를 실행시킬 수 있다는 것을 보여준다. 이러한 취약점도 문자열 필터링을 통해서 해결할 수 있을 것이다. 필터링을 적용할 때는 화이트리스트를 적용하여 허용된 문자열만 통과하도록 설정해 그 안전성을 높이는 것이 좋을 것이다.
이것으로 xss-game 워게임 사이트의 모든 문제를 해결했다. 이를 통해 XSS의 공격방법이 단순하지만 그 방법이 매우 다양하고 변칙적임을 볼 수 있었다. XSS는 항상 OWASP top 10에 항상 오르는 것을 볼 때 그 명성을 알 수 있을 것이고, 아직까지고 완벽한 해결책이 없음을 알 수 있다. 때문에 웹사이트를 개발할 때 필수적으로 고려해야 하는 취약점이 될 것이다. 내가 최근에 사용한 node js에서는 xss라는 언급한 화이트리스트 방식을 적용한 필터링을 제공하는 모듈을 제공한다. 스스로 완벽하게 막을 자신이 없다면 이러한 모듈을 사용하는 것이 현명할 것이다.
'WarGame_WriteUp > XSS-Game' 카테고리의 다른 글
xss-game-level 5 (0) | 2020.02.19 |
---|---|
xss-game-level 4 (0) | 2020.02.19 |
xss-game-level 3 (0) | 2020.02.19 |
xss-game-level 2 (0) | 2020.02.19 |
xss-game-level 1 (0) | 2020.02.19 |