버그바운티(Bug Bounty) Write-up / Stored XSS
Security/BugBounty Study

버그바운티(Bug Bounty) Write-up / Stored XSS

https://hackerone.com/reports/415484

 

Shopify disclosed on HackerOne: Stored xss

# Description : WAF cut html tages but when put before tages we can bypass it :) . #Step to reproduce : 1-Open your store account 2-Navigate to https://xxx.myshopify.com/admin/settings/general 3-Put your street address xss payload (xss">

hackerone.com


Stored XSS - $1,000

오늘도 역시 XSS로 바운티를 받은건을 가져 왔습니다. 날려먹어서 다시씀 Stored XSS를 성공시켜서 무려 1000달러나 되는 바운티를 받았는데요. 보통은 500달러지만 2배의 금액을 바운티 한 이유는 아마도 방화벽을 매우 간단한 방법으로 우회시켰고, 공격이 발생한다면 피해가 커질 수 있기 때문입니다.

먼저 공격구문을 살펴보겠습니다.

xss"><!--><svg/onload=alert(document.domain)>

공격구문은 매우 간단합니다. 이 공격은 /admin/settings/general 의 경로에서 이루어 졌는데요. 작성자의 설명에 따르면 주소를 입력받는 폼에 주입하여서 성공하였다고 합니다. 먼저 xss"> 를 입력해서 앞의 태그를 닫아 줍니다. 그다음 <!--> 를 넣는데, 이게 바로 방화벽을 우회하기 위해 사용한 방법이라고 합니다. 

이렇게 간단한 방법으로 방화벽을 우회한것에 대해 추가적인 바운티 금액이 붙은 것 같습니다. 방화벽 우회 구문 다음으로 경고알림창을 띄우도록 하였네요.

XSS PoC

이렇게 공격이 성공하였습니다. 


추가적으로 , 공격구문에서 유심히 봐야할게 있어서 내용을 덧붙입니다. 공격구문을 보시면 svg/onload 라는 부분이 있는데요. 원래는 슬러쉬 자리에 공백이 들어가죠. <svg onload  이렇게요. 하지만 자바스크립트는 매우 관대하기(?) 때문에 이렇게 다른 표현을 써도 같은 의미로 해석합니다.

<svg/onload=alert()>     ==     <svg onload=alert()>

슬러쉬랑 공백이 같은 의미를 가집니다.

 

document.location.href      ==     document["location"]["href"]

요것도 같은 의미를 가집니다.  .(점) 이랑 [" "] 

같은 의미를 가지기 때문에 역시 같은 결과값이 나옵니다. 이렇게 다른 표현이지만 같은 의미를 가지는 점을 이용하여 우회기법으로 사용하는 경우도 많기때문에 그만큼  xss는 구문의 종류도 많고 우회방법도 매우 많습니다.