본문 바로가기
Portswigger/XSS

Portswigger - Reflected XSS in canonical link tag solution

by jh117jh 2023. 10. 4.
728x90

이번 문제는 표준 링크 태그에 사용자입력을 반영하고 꺽쇠(<,>)를 이스케이프 처리한다.

또한 사용자가 세 가지의 키 조합을 누르는 걸 가정한다.

  • ALT+SHIFT+X
  • CTRL+ALT+X
  • Alt+X

표준링크란

 

위에 사진에서 rel="canonical"로 표시된 링크로 Google이 사이트의 중복된 페이지 중 가장 대표적이라고 간주하는 페이지의 URL을 말한다. 예를 들어, 동일한 페이지의 URL이 여러 개 있는 경우(example.com?dress=1234  example.com/dresses/1234) Google은 하나를 표준 URL로 선택한다.

https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls?hl=ko 

 

URL 표준화 및 표준 태그 | Google 검색 센터  |  문서  |  Google for Developers

사이트에 중복 콘텐츠가 있는 경우 Google은 표준 URL을 선택합니다. 표준 URL 및 중복 URL 통합 방법을 자세히 알아보세요.

developers.google.com

 

이러한 표준링크에서 사용자의 입력을 반영한다는 것인데 

url에 ?a=123을 입력하면

반영된 걸 볼 수 있다.

 

보통이면 꺽쇠(<,>)를 이용해 link태그를 종료하고 스크립트문을 넣겠지만 이번 문제에서는 필터링되어 사용할 수 없다.

 

문제에서 사용자가 세가지의 키 조합을 누른다고 되어 있는데 이는 accesskey 속성을 사용하라는 뜻이다.

말 그대로 바로가기 키(access key)이므로 accesskey 속성이 적용된 요소는 포커스를 받거나 실행이 이루어진다. input 요소에 적용되면 포커스를 받게 되고, a 요소에 적용되면 해당 키를 눌러 곧바로 목적지로 이동한다.

 

단축키 조합은 웹 브라우저 마다 다르다.

이때문에 문제 아래 크롬에서만 풀수있다 적혀있다.

 

<a href="http://www.google.com/" accesskey="g">Google</a>

예를 들어 위 a태그처럼 accesskey를 g로 지정해 놓으면 Alt + Shift + g를 누를 시 구글로 바로 이동된다.

 

심지어 accesskey는 글로벌 속성(Global Attribute)으로 모든 태그 안에 적용할 수 있다.

 

그럼 이제 href 속성을 닫아주고 accesskey속성만 작성해 주면 문제가 풀릴 것이다.

 

url에 ?'accesskey='x'onclick='alert(0)을 입력하면

accesskey가 적용되고 

Alt + Shift + x(mac os 사용 시 Ctrl + opt + x)를 누르면 alert함수가 호출되는 걸 볼 수 있다.

728x90