[XSS Challenge] Stage #15
2021. 6. 27. 18:45
Study/Web Hacking
위 사진은 Stage #15의 화면이다. 화면에 보이는 input에 값을 입력하면 해당 내용이 document.write로 작성이 된다. document.write로 입력하면 이번 문제를 해결할 수 있다. document.write에는 \x3c를 로 해석하는 특징이 있다.해당 특성을 사용해서 payload를 작성해봤다. \x3cscript\x3ealert(document.domain);\x3c/script\x3e그러나 아무런 변화도 일어나지 않았다. 소스코드를 확인해보니 '\'문자 하나가 필터링되고 있었다. 이번엔 \를 하나 더 추가하여 작성했다. \\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e 그 결과 alert창이 제대로 실행되었다.
[XSS Challenge] Stage #14
2021. 5. 30. 05:04
Study/Web Hacking
이번에도 input의 입력값이 style과 value에 적용된다. Stage #13에서 사용하지 못했던 expression을 다시 입력해봤는데 expression이 xxx로 필터링 되고 있었다. 지난번에 domain이 필터링 됐을 때 썼던 방법처럼 expression 사이에 expression을 넣을까 생각해봤지만 expression이 사라지는게 아니라 xxx로 바뀌기 때문에 해당 방법은 사용하지 못한다. expression 대신에 주석을 사용해서 필터링을 우회할 수 있을 것 같다. /**/ xss:ex/**/pression(alert(document.domain)); 하지만 이번에도 expression을 사용한 payload가 잘 실행되지 않아서 input태그에 onclick 이벤트를 삽입해서 해결했다..
[XSS Challenge] Stage #13
2021. 5. 30. 04:36
Study/Web Hacking
이번 문제는 input태그의 입력이 value뿐만 아니라 style속성에도 적용된다. (onclick 이벤트 입력함) style속성을 이용해서 해결할 수 있는 방법을 찾아보다가 expression이라는 함수를 알게 되었다. CSS의 expression 스크립트 확장 기능으로 해당 함수를 이용해서 XSS 공격을 할 수 있다고 한다. expression는 CSS에서 script를 실행할 수 있게 해주는 함수다. payload를 다음과 같이 작성했다. width: expression(alert(document.domain)); payload를 입력했으나 alert창이 뜨지 않았다. alert창이 뜨지 않는 이유를 알아내지 못해서 expression대신 onclick 이벤트를 삽입해서 해결했다. Stage #1..
[XSS Challenge] Stage #12
2021. 5. 23. 18:04
Study/Web Hacking
Stage #12에 입장! input에 아무 payload나 작성하고 소스코드를 확인해봤다. 소스코드를 확인해보니 , "등 특수문자를 필터링하고 있는 것을 알아냈다. 힌트를 보니 역시 대부분의 특수분자를 필터링하고 있었다. 특수문자 필터링을 우회할 방법을 찾아보다가 Character Escape Sequences라는 것을 발견했다.  은 공백을 나타내고, "는 더블쿼터(")를 나타낸다고 한다. 해당 Escape Sequence를 사용하여 필터링을 우회했다. 새로 작성한 payload는 다음과 같다. " onclick="alert(document.domain); 아래와 같이 payload를 입력해주고 input 태그를 클릭해주면 팝업창이 뜰 줄 알았는데 나타나지 않았다. 소스코..
[XSS Challenge] Stage #10
2021. 5. 15. 19:33
Study/Web Hacking
Stage #10에 입장! 이전에 사용했던 방식을 그대로 써보았다. 그 후 개발자도구로 확인해보니 domain부분이 필터링되어 있었다. domain이 필터링되어도 domain인이 남을 수 있도록 payload를 다음과 같이 작성할 수 있다. " onclick="alert(document.dodomainmain); 가운데 domain이 필터링되어 사라지더라도 남은 문자열이 합쳐지면서 domain이 만들어진다. 작성한 payload를 입력하면 다음과 같이 Stage #10을 해결할 수 있다.
[XSS Challenge] Stage #9
2021. 5. 15. 18:55
Study/Web Hacking
Stage #9에 입장! 일단 이전 stage들에서 썼던 방식들을 적용해봤다. 그 후 개발자도구를 열어 소스코드를 확인해보니 onclick 이벤트가 잘 삽입되어 있었다. 그러나 input 태그를 클릭해도 이 onclick 이벤트는 실행되지 않았다. 프록시로 Request 패킷을 확인해보니 input['text']에서 받은 값외에 charset이 전달되는 것을 확인할 수 있었다. charset이 euc-jp로 인코딩되고 있는 것 같다. 이쯤에서 Stage #9의 힌트를 확인해보면 UTF-7을 볼 수 있는데, 아무래도 인코딩 방식을 바꿔서 XSS를 해결해야 할 거 같아보인다. " onclick="alert(document.domain);을 UTF-7 방식으로 인코딩하고 charset을 UTF-7로 바꿔서 패..
[XSS Challenge] Stage #8
2021. 5. 8. 02:03
Study/Web Hacking
Stage #8에 입장! Stage #7과 똑같이 입력해봤다. 그랬더니 입력을 밑에 URL 링크로 만들어주는 것을 확인했다. 소스코드를 확인해보니 사용자 입력이 a태그의 href 속성값으로 사용되고 있었다. alert(document.domain);을 실행시키는 것이 목적이니 href를 alert(document.domain)로 만들기만 하면 된다. javascript:alert(document.domain) 입력하고 생성된 URL을 클릭하면 다음과 같이 alert 함수가 실행된다. Stage #8을 성공적으로 해결했다.
[XSS Challenge] Stage #7
2021. 5. 8. 01:16
Study/Web Hacking
Stage #7에 입장! Stage #6에서 입력했던 것과 같이 " onclick="alert(document.domain);을 입력해봤다. 역시 alert 함수는 실행되지 않는다. 확인해본 결과 "r가 필터링되고 있었다. 필터링을 우회할 다른 방법을 써야할 것 같다. 찾아보니 "대신 /를 사용할 수 있는 것 같았다. payload를 다시 작성하면 다음과 같이 쓸 수 있다. / onclick=alert(document.domain) 개발자도구로 확인해보니 onclick 이벤트 핸들러가 잘 적용되어 있었다. input 태그를 클릭하면 아래처럼 alert 함수가 실행된 것을 확인할 수 있다. Challenge를 성공적으로 해결했다.