본문 바로가기

[Wargame Write-up]/WebGoat

[WebGoat] [AJAX Security] LAB: DOM-Based cross-site scripting

Stage 1


OWASP IMAGE 링크에 있는 이미지를 삽입하는 문제이다.




<img src="images/logos/owasp.jpg" /> 라고 입력해주면 된다.




Stage 2


이미지 태그에 alert문을 넣어야 하는 문제이다.


<img src=javascript:alert('XSS')>라고 넣었는데




에러가 난다. 읽어 보니, onerror를 넣어 구성해야 하는 성공 조건이 있었다.




1
<img src='' onerror=javascript:alert('XSS') />
cs

를 입력하면, 무한 alert문이 발생한다.




alert문을 제거한 후 재빨리 제출하면 끝난다.




Stage 3


IFRAME 태그에 alert문을 넣어야 한다.


onload라는 이벤트가 있어야 성공이라고 판단할 수 있는 것 같다.




1
<iframe src='' onload=javascript:alert('XSS')></iframe>
cs

 으로 구성해 넣으면 되겠다.




Stage 4


가짜 로그인 form을 생성하는 문제이다.




그대로 복사해서 붙여넣은 후 제출하면 끝난다.




Stage 5


DOM XSS 취약점을 완화하기 위해 클라이언트 단에서 HTML 개체 인코딩을 수행하라는 문제이다.


escape.js 파일에 함수가 제공되나 보다.




Java Source 버튼을 클릭하면, 성공 조건을 볼 수 있다. 


DOMXSS.js 파일에 escapeHTML(name)이라는 문자열을 넣어야 한다.




각각 내용을 확인하면, 다음과 같다. DOMXSS.js 파일 뒤에 escape.js의 escapeHTML 함수를 추가한 후, 

innerHTML에 들어가는 name을 escapeHTML(name)으로 수정하면 되겠다.




이렇게 추가 및 수정하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
function displayGreeting(name) {
    if (name != ''){
        document.getElementById("greeting").innerHTML="Hello, " + escapeHTML(name+ "!";
    }
}
 
function escapeHTML (str) {
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
}
cs



Congratulations 메시지가 안뜨고, 제출 시 오류가 발생한다.


target 경로가 살짝 다르다.




정해진 경로에 디렉터리를 추가해 DOMXSS.js 파일을 옮긴 후, 다시 제출하면 된다.


코드좀 확인하고 배포했으면 한다...