DOM XSS : LAB [5]
DATE : 2024/1/10
Last updated
DATE : 2024/1/10
Last updated
이번 LAB은 상품 재고를 확인하는 기능에 XSS 취약점이 존재한다고 한다.
LAB에 접속해 마음에 드는 상품을 하나 골라준다!
상품의 상세 페이지로 이동하면 위와 같이 이미지, 상품 설명과 함께 재고 검색 기능을 확인할 수 있다.
여러 옵션 중 한 가지를 선택할 수 있는 Form인 걸 보면
<select> & <option> tag로 구현되었음을 예측할 수 있을 것이다.
옵션 중 한 가지를 선택해 Check stock 버튼을 클릭하면 상품이 얼마나 남았는지 알 수 있다.
LAB 설명에서 이미 검색 기능에 XSS 취약점이 있다고 알려줬기 때문에
이 부분이 어떻게 구현되어 있는 지 확인해봐야 한다.
상세 페이지의 Response를 살펴보면 이와 같은 코드를 발견할 수 있을 것이다.
변수 store에 해당하는 <option> tag는 선택되었음을 나타내는 selected 속성을 부여한다.
나머지 옵션으로는 그냥 <option> tag를 생성하는 코드이다.
이때 store 변수를 할당하는 코드를 자세히 보면
URL에 들어있는 storeId parameter 값을 가져오는 걸 알 수 있다.
근데 LAB에서는 사실 상세 페이지로 이동할 때 storeId가 URL에 포함되어있지 않을 뿐더러
검색 기능을 사용하면 POST method로 productId & storeId가 전달되기 때문에 조금 헷갈릴 수 있다.
하지만! 코드 상에서 Get method로 전달되는 parameter를 가져오고 있기 때문에
URL 바에 storeId를 추가해 스크립트를 삽입하면 되는 문제이다.
storeId parameter로 전달된 값이 코드 상에서 사용되는 위치는 여기!
바로 스크립트만 넣어도 되겠지만 코드를 예쁘게 만들어주기 위해
작성되어있는 <option> tag는 마무리해주기로 했다.
<option> tag는 마무리 해주고 스크립트 삽입 후 나머지 내용은 주석 처리한다.
URL에 storeId parameter를 추가해 스크립트를 전달하면
코드 내용은 간단하게 사용자가 선택한 storeId를 store 변수가 할당하고
위와 같이 성공적으로 팝업 창이 뜬 결과를 확인할 수 있을 것이다.