
level 10단계를 진행하겠습니다. 표면상 보이는 화면은 이전과 유사한 모습을 띄우고 있습니다. 내부 코드를 먼저 살펴보도록 하겠습니다. 10단계에서는 a와 b라는 변수와 값이 선언되어 있는 상태입니다. 우리가 입력할 Payload는 "a" 변수에 담기도록 되어있는데 document.write 속성을 통해 값이 실행되는 것을 보실 수 있습니다. document.write()의 기능은 Document Object의 함수로 인수 값을 웹 브러우저 화면에 텍스트 형식으로 출력해주는 기능을 가지고 있습니다. ';{document.location.href="http://IP"}// 9단계에서 진행한 방법대로 a변수를 닫아 마무리(;)해주고 공격자 서버를 로드시켜 스크립트가 실행되도록 해주면 될 것 같습니다. 뒤..

한동안 올리지 못했던 XSS 챌린지를 오랜만에 다시 풀게 되었습니다. 제가 재미있게 풀고 있는 Alexander Korznikov의 XSS 챌린지의 장점은 기존의 XSS 게임과는 다르게 파회 법을 올린 사람들이 많이 없으며(국내에서는 본 적이 없네요..) 출제자의 의도를 알아서 파악하고 일말의 힌트 없이 공략 한다는 점에서 더욱 애착이 가고 몰입이 되는 거 같습니다. 공략 페이지는 굉장히 심플합니다. Reflected 방식으로 파라미터에 적절한 Payload가 삽입될 경우 다이얼로그 팝업창을 띄우실 수 있습니다. 이전 단계(8-1) 의 소스와 유사한 형태의 코드를 가지고 있습니다. b라는 변수에는 "1"이 선언되어 있고 if 조건문을 통해 스크립트가 실행될 수 있도록 구문을 완성시켜야 됩니다. b의 변수..

조건문이 사용된 8 Level을 이어서 8-1 Level까지 한번 풀어보도록 하겠습니다. 마찬가지로 링크 태그나 입력을 받는 폼이 따로 존재하지 않으며 URL 파라미터에 적당한 문자열을 삽입하도록 하고 있습니다. 페이지 소스를 보시면 8 Level 소스와 유사해 보이지만 조금 다른 형태를 가지고 있습니다. 스크립트코드는 마찬가지로 실행되지 않고 있으며 이유는 바로 "줄 바꿈"에 있습니다. 총 2곳의 줄바꿈 처리가 되어 있습니다. if ( b == 2 ){a = "Your_Payload"} 빨간색으로 처리된 부분의줄 바꿈으로 인해 입력된 문자열이 오류가 발생하고 있습니다. 마지막 문단라인은 " } " 닫힘에 잘 맞게 문자열 조절을 하면 되겠지만 첫 번째 " { " 줄 바뀜으로 인해 else 조건문이 제대로..

전단 계와 마찬가지로 URL에 입력값을 받아 팝업창을 띄우도록 하고 있습니다. 어떤 검증을 하는지 확인하기 위해 전 단계에서의 코드를 삽입하여 페이지의 소스를 확인해 본 결과 이번에는 '(싱글 쿼터)를 --> \' 형태로 백 슬래시를 추가로 붙여서 검증하고 있습니다. 해결 방법 1. "(더블쿼터) 2. \(백슬래시 활용) 우선 ('guleum') --> (\'guleum\')로 치환되고 있기 때문에 '(싱글쿼터) --> "(더블쿼터)로 변경하여 사용해주시면 됩니다. 그다음이 중요합니다. 페이지 소스를 보시면 a 변수에는 '(싱글 쿼터)가 기본적으로 하나가 붙어있기 때문에 닫을 때도 '(싱글 쿼터)를 사용해서 묶어줘야 됩니다. 이럴 때는 \(백 슬래시)를 '\' 싱글 쿼터로 묶어주면 \(백슬래시)에 의해 ..

전 단계에서 사용한 공백 치환 구문을 삽입해본 결과 성공적으로 실행되지 않고 있습니다. 어떠한 구문을 검증하고 있는지 소스를 통해 확인해 본 결과 "()(괄호)"와 팝업창을 띄워주는 "alert"가 필터링되고 있습니다. 괄호의 경우 제거를 하고 있으며 alert는 -> Alert로 변경시킴으로써 의미 없는 구문을 만들고 있습니다. 괄호 제거의 코드를 우회할 수 있는 방법은 ` --> "back-tick" 백틱을 사용해주시면 됩니다. 또한 alert를 혼돈시키고 있기 때문에 이번 문제에는 "confirm"이나 "prompt"로 변경하여 사용해주시면 됩니다. 성공후 페이지 소스를 확인해보시면 검증하는 alert 대신 confirm으로 대체하고 괄호를 대신한 백 틱으로 구분을 해줬기 때문에 팝업창 성공적으로 ..

설명(번역) Level 0을 이어서 다음 단계인 Level 1을 해결해보도록 하겠습니다. 전 단계에서 사용했던 기본 구문을 삽입해보면 javascript 가 실행되지 않고 있습니다. 입력했던 코드가 어떻게 삽입되어 있는지 확인해보면 코드가 제대로 구분되어 있지 않습니다. 보통 XSS 취약점을 찾을 때 자주 사용하는 기법인 "> 클로징 태그를 사용해서 이전 구문을 닫아주고 지금부터 입력된 구문을 선언하겠다는 방식을 이용하면 됩니다. 팝업창이 성공적으로 떴으면 페이지 소스를 통해 구문이 어떻게 되었는지 확인해 볼 수 있습니다. alert("guleum");으로 명확하게 구분이 되었습니다. Exploit Code ">