
전단 계와는 다른 게 링크 태그 기능이 사용되고 있지 않은 것을 확인할 수 있습니다. 페이지 소스를 보면서 한번 확인해보겠습니다. 전 단계에서 사용한 코드를 삽입해본결과 기본적인 삽입 형태가 아닌 논리 연산자가 사용되고 있습니다. 고정 소스로 .. .. www.sudo.co.il/xss/level8.php?p=" }else{ " a의 변수에 "(더블 쿼터)를 하나만 넣어 a = "" 변수를 마무리해주고 " } "를 통해 닫아주면 참일 경우의 코드 영역은 끝이 나게 됩니다. if조건문의 경우 else(거짓) 또는 FALSE 도 함께 추가해주면 b ≠ 2 즉 b 가 2와 같지 않을 때의 문장을 읽어 들이게 됩니다.(b = 1 이 고정) 이제 기반은 다져 놨으니 팝업창을 실행하기만 하면 됩니다. 하지만 위에서..

해당 문제의 경우 hohoho라는 문자열을 지정해두고 클릭 시 링크 태그( http://localhost/?로 넘어가도록 로직이 구성되어 있습니다. 해당 문제를 해결하기 위해선 Your_Payload 영역에 팝업창을 띄울 수 있는 문자열을 삽입해야 됩니다. .. .. hohoho!!! .. .. 몇 번의 시도를 해보면서 필터링하고 있는 패턴을 먼저 확인해야 됩니다. 자바스크립트 이벤트 핸들러인 "onmouseover"의 경우 가 삽입되어서 사용을 금지시키고 있습니다. 또한 태그가 삽입시 --> 제거를 하고 있어서 아무래도 localhost 문자열을 이어서 작성해야 될 것 같습니다. *(클로징) 등을 통해 문장을 마무리만 잘해주면 자바스크립트가 실행되는데 문제가 발생하지 않습니다. * onfocus : 수..

전 단계에서의 코드를 삽입해 본 결과 팝업창이 실행되지 않고 있습니다. 페이지 소스를 확인해서 검증되고 있는 코드를 확인해 본 결과 이번에는 "(더블 쿼터)를 --> 정규표현식으로 치환하여 의미 없는 문장으로 만들고 있습니다. 그리고 (꺽쇠) 조차 치환하고 있어서 이번에는 추가적으로 두 가지의 우회방법을 생각해봐야 됩니다. 해결 방법 1. '"(싱글쿼터 와 더블 쿼터를 사용하지 않고 문자열을 출력할 수 있는 방법은?) 2. 문자로 변환해줍니다. g -> 103 u -> 117 l -> 108 e -> 101 u -> 117 m -> 109 성공적으로 '(싱글 쿼터), "(더블 쿼터), (꺽쇠) 검증을 우회하여 문자열을 출력했습니다. 성공적으로 팝업창을 띄운것을 확인할 수 있습니다. Exploit Code..

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

전 단계의 코드를 실행시켜 본 결과 팝업창을 띄우지 못하고 있습니다. 또한 전 단계들과는 다르게 입력되는 폼이 존재하지 않고 DOM 방식의 형태로 URL 입력창에 코드를 삽입함으로써 팝업창을 실행시키도록 하고 있습니다. 페이지 소스를 확인해보니 스크립트 태그 안에 적절한 코드를 삽입해야만 팝업창이 실행되기 때문에 조금은 고민해볼 필요가 있습니다. 해결 방법 1. ;(세미콜론) 2. 주석 우선 javascript 에서 ;(세미콜론)은 명령이 끝났다는것을 명시적으로 구분해줍니다. 즉 세미콜론 없이 a=''alert('guleum') 형태로 입력되면 "a" 라는 변수와 "alert" 그리고 이후의 코드가 구분되지 않기 때문에 문법 오류가 발생됩니다. 만일 a='';alert('guleum'); 형식으로 중간에..

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