Web Hacking Study/웹해킹

[Webgoat] A3 Injection - Cross Site Scripting

silver surfer 2023. 10. 30.

문제 2.
크사에 대한 설명

 
콘솔창에 입력해주면 끝남
 
문제 7.
reflected XSS 문제로 alert()나 console.log()를 이용하는 것 같다.

purchase 버튼을 한 번 클릭해보았다.
 

사용자의 입력값이 그대로 출력되었다.
 
개발자 도구를 통해서 보니 <p>태그 안에 내용이 적혀있다.

 <p>태그를 닫아주고 스크립트 코드를 삽입한다.

</p><script>alert('1')</script><p>

alert 창을 띄웠다. 
 
 
문제 10.
Javascript의 route handler를 통해 route를 찾고 exploit하라는 것 같다.

DOM-Based XSS를 지닌 페이지를 JS 코드분석을 통해 찾으라고 하고있다. 이때 test 코드가 있으니, 이를 찾으면 된다고까지도 설명해주고 있다. 문제에서도 start.mvc#lesson 이 예시임을 설명해주고 있다. 우선 예시를 기반으로 개발자도구에서 코드 검색을 진행해보자.
 
개발자 도구의 콘솔창에서 lesson을 검색해보니 라우팅을 담당하는듯 하는 GoatRouter.js를 찾을수 있었다.

 
확인해보니 test 관련한 것이 있다.
 

예시로 준 lesson이 start.mvc#lesson이었으니 testRoute는 start.mvc#test가 된다.
 

 
문제 11. 
webgoat.customjs.phoneHome 함수를 실행시켜 결과를 얻으면 되는데, 물론 콘솔에서 그냥 실행시켜도 보이겠지만
이전에 찾아낸 test route를 이용하라고 한다. 위에서 본 코드에 의하면 start.mvc#test/:param 이런식으로 URI에 입력하면 testRoute에 의한 행동이 일어난다고 한다. 그렇다면 testRoute에 대한 코드를 한번 보자

 
코드는 별게 없고 파라미터를 testHandler로 보낸다고 한다. 

 
주석보고 testHandler 위치 찾음

이번엔 showTestParam을 호출한다.
search 기능이 파이어폭스에 없는듯 해서 경로는 그냥 주석보고 찾는다.
여기서 lesson-content 부분에 html 코드가 동적으로 추가된다는 것을 알았다. 여기서 jQuery .html 함수는 브라우저의 기본 javascript의 innerhtml을 이용하기 때문에 기본적으로 <script> 태그가 실행되지 않는다. (참고 : http://api.jquery.com/html/) 그렇기때문에 <img>태그의 onerror 이벤트 핸들러를 이용하여 실행시켜보도록 하겠다

 
URL에 start.mvc#test/1234를 넣어보았다.

 
그럼 이제 1234 대신 '<img src="asdf" onerror="console.log(webgoat.customjs.phoneHome())">' 를 넣고 실행해본다.

콘솔창에 무언가 뜬 것을 알 수 있다. 나타난 숫자를 이용하여 문제에 인증해본다.
 

 
문제 12.
1 - ④
2 - ③
3 - ①
4 - ②
5 - ④
 
 

댓글