2023. 1. 13. 00:37ㆍWeb_hacking/XSS-game
지정하는 시간별로 타이머가 돌아가는 웹 사이트 임을 확인할 수가 있다.
timer 부분에 소스코드를 보면
<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" /> 형식으로 되어 있음을 볼수가 있다.
<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />
먼저 사이트를 돌려보도록 하자.
우측 상단을 보면 겉으로 들어나는 GET 방식으로 timer 값을 받아내는 것을 확인할 수가 있다.
위에서 말한 코드에 XSS 구문을 삼입하려면 위에 타이머 값을 이용해야 함을 볼 수 있다
<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />
형식에 맞추려면 alert('XSS Sucess') 구문을 넣는다 가정할때 위에 코드는 아래와 같이 변경되지 않을까?
<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />
--> <img src="/static/loading.gif" onload="startTimer('alert('Xss Sucss')');" />
그렇다면 XSS 구문은 실행될수가 없다. 먼저 일단 사이트에 위와 같이 코드가 되는지 확인해볼 필요성이 있다.
역시 위와 같이 되는 것을 확인할 수 있다.
위에 형식대로 하면 XSS 구문이 실행할 수 없는 것은 확인이 되었다.
<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />
위에 형식대로 맞추려면 먼저 (' 와 ')를 해결해야 한다. 이게 있다면 XSS 구문은 실행할 수 없기 때문이다.
그렇다면 ?timer=3')alert('XSS Sucess 방식으로 입력하면 위와 같은 형식으로 ()()가 닫혀 XSS 구문을 성공시킬 수 있지 않을까? 생각할 수 있다.
하지만 실패했다. 다시 곰곰히 생각해보자.
-아뿔싸! XSS구문을 실행시키려면 우선 세미콜론이 필요하다는 것을 까먹고 있었다. 그렇다면
?timer=3');alert('XSS sucess 를 삼입하면 되지 않을까?
하지만 실행이 되지 않았으며 보면 ; 세미콜론이 필터링 되고 있지 않을까 ? 생각을 하게 됬다.
;뒤에 구문 모두 사라졌기 때문이다. 또 다른 이유로는 들어간 코드가
위와 같이 뒷 부분 전부 삭제된 것을 볼 수 있기 때문이다.
그렇기에 ;를 url 인코딩한 값인 %3B 를 이용하면 되지 않을까?
야호! 성공한 것을 확인할 수 있다.
위와 같이 구문을 삼입 한다면
<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />
--> <img src="/static/loading.gif" onload="startTimer('3');alert('Xss Sucess')" />
구문으로 작성되어 인젝션이 되는 것이다!
XSS 게임은 풀수록 재밌는거 같다.
'Web_hacking > XSS-game' 카테고리의 다른 글
XSS game 5번 (0) | 2023.02.01 |
---|---|
XSS game 3번 (0) | 2023.01.12 |
XSS-game 2번 (0) | 2022.12.31 |
XSS-game 1번 (0) | 2022.12.31 |