-
[Web Hacking] Portswigger - DOM XSS in jQuery anchor href attribute sink using location.search sourceCoding/Hacking & Security 2023. 1. 20. 14:33
문제 링크 : https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-jquery-href-attribute-sink
Lab: DOM XSS in jQuery anchor href attribute sink using location.search source | Web Security Academy
This lab contains a DOM-based cross-site scripting vulnerability in the submit feedback page. It uses the jQuery library's $ selector function to find an ...
portswigger.net
FAK SQL injection 문제에 비해서 상대적으로 쉬운 편이지만, 몇 가지 새로운 사실을 배운 유익한 문제였다.
문제 분석
문제 사이트의 submit feedback page에 Dom based XSS 취약점이 존재한다고 알려주었다.
코드를 살펴보면, jQuery의 selector function을 이용하여 anchor element의 href를 변경하고 있다.
$(function() { $('#backLink').attr("href", (new URLSearchParams(window.location.search)).get('returnPath')); });
JQuery의 selector(선택자)란, html문서 내의 element를 선택하여 컨트롤할 수 있는 기능이다.
물론, 아래와 같은 방법으로도 element를 선택할 수 있다.
document.getElementById("backlink");
위의 예시는 "backlink"라는 이름의 element를 document.getElementById를 이용하여 선택한 모습이다.
이를 JQuery selector를 이용하여 아래와 같이 나타낼 수 있다는 것이다.
$("#backlink");
다시 문제로 돌아가서, 사이트의 취약점이 발생하는 코드를 살펴보자.
$(function() { $('#backLink').attr("href", (new URLSearchParams(window.location.search)).get('returnPath')); });
이때 backlink는 anchor element이다.
Anchor element의 href값을 URL에서 returnPath라는 parameter에서 받아 해당 값으로 변경하고 있는 것이다.
목표
이 문제를 해결하기 위해서는 backlink를 클릭했을 때 document.cookie가 출력되도록 해야 한다.
URL의 returnPath parameter에 적당한 값을 입력해주어 alert 함수를 호출해보자.
풀이
처음에는 escaping을 통해 <script> 태그를 추가하는 방법을 시도했다.
그러나 잘 통하지 않아서 <a>태그를 벗어나지 않고 alert 함수를 호출하는 방법을 찾아보았다.
그 결과, href를 통해 직접 javascript를 호출하는 방법이 있다는 것을 알게 되었다.
앞에 "javascript: "라는 문자열을 추가해주면, anchor element를 클릭했을 때 해당 script를 실행하게 된다는 것이다.
따라서 URL의 returnPath 값을 javascript:alert$($document.cookie$)$ 로 입력하면 문제를 풀 수 있다.
URL에 입력해주었다 그 결과 backlink의 href가 이렇게 변화하였다! 'Coding > Hacking & Security' 카테고리의 다른 글