5c0623a62f477308fff5360d21a9498caf77fc86
ctf/IERAE CTF 2024 writeup.md
... | ... | @@ -2,6 +2,7 @@ IERAE CTFは初参加です。楽しかった! |
2 | 2 | |
3 | 3 | チーム名: `at24`, ユーザ名: `takanotume24`で参加しました。 |
4 | 4 | |
5 | +# Web |
|
5 | 6 | ## Futari APIs |
6 | 7 | `frontend.ts`の |
7 | 8 | ```javascript |
... | ... | @@ -28,6 +29,29 @@ curl "192.0.2.1:3000/search?user=http%3A%2F%2F192.0.2.2%3000" |
28 | 29 | |
29 | 30 | で`192.0.2.2:3000`に向けてFLAG付きのリクエストが飛んでくる。 |
30 | 31 | |
32 | +## babewaf |
|
33 | +解けなかったけどいくつか勉強になったことがあるのでメモ。 |
|
34 | +- expressはデフォルトでルーティングの際にキャピタライズを考慮しない。 |
|
35 | + - <https://stackoverflow.com/questions/21216523/nodejs-express-case-sensitive-urls> |
|
36 | + - `/GIVEMEFLAG`でexpressを貫通させて、なんとかHonoに拾わせるのだと思っていた。 |
|
37 | + - Honoは`/GIVEMEFLAG`に対して404を返してきたので、デフォルトでキャピタライズを考慮しているようである。 |
|
38 | + - expressになぜこのような仕様があるのか気になる。 |
|
39 | +- expressでは正規表現の`*`文字は通常の方法で解釈されない。 |
|
40 | + - <https://expressjs.com/ja/guide/routing.html> |
|
41 | + > Express 4.xでは、正規表現の*文字は通常の方法で解釈されません。回避策として、*の代わりに{0,}を使用してください。これは、Express 5で修正される可能性があります。 |
|
42 | + - <https://github.com/expressjs/express/issues/2495> |
|
43 | + - 以下のルーティングに問題があるのではないかと疑っていた。 |
|
44 | + |
|
45 | + ```javascript |
|
46 | + app.get( |
|
47 | + "*", |
|
48 | + createProxyMiddleware({ |
|
49 | + target: BACKEND, |
|
50 | + }), |
|
51 | + ); |
|
52 | + ``` |
|
53 | + |
|
54 | +# Crypt |
|
31 | 55 | ## Weak PRNG |
32 | 56 | <https://zenn.dev/hk_ilohas/articles/mersenne-twister-previous-state>のプログラムを拝借したところそのまま動作した。 |
33 | 57 | |
... | ... | @@ -222,25 +246,6 @@ if __name__ == '__main__': |
222 | 246 | </p> |
223 | 247 | </details> |
224 | 248 | |
225 | -## babewaf |
|
226 | -解けなかったけどいくつか勉強になったことがあるのでメモ。 |
|
227 | -- expressはデフォルトでルーティングの際にキャピタライズを考慮しない。 |
|
228 | - - <https://stackoverflow.com/questions/21216523/nodejs-express-case-sensitive-urls> |
|
229 | - - `/GIVEMEFLAG`でexpressを貫通させて、なんとかHonoに拾わせるのだと思っていた。 |
|
230 | -- expressでは正規表現の`*`文字は通常の方法で解釈されない。 |
|
231 | - - <https://expressjs.com/ja/guide/routing.html> |
|
232 | - > Express 4.xでは、正規表現の*文字は通常の方法で解釈されません。回避策として、*の代わりに{0,}を使用してください。これは、Express 5で修正される可能性があります。 |
|
233 | - - <https://github.com/expressjs/express/issues/2495> |
|
234 | - - 以下のルーティングに問題があるのではないかと疑っていた。 |
|
235 | - |
|
236 | - ```javascript |
|
237 | - app.get( |
|
238 | - "*", |
|
239 | - createProxyMiddleware({ |
|
240 | - target: BACKEND, |
|
241 | - }), |
|
242 | - ); |
|
243 | - ``` |
|
244 | 249 | |
245 | 250 | ## derangement |
246 | 251 | |
... | ... | @@ -249,7 +254,7 @@ if __name__ == '__main__': |
249 | 254 | |
250 | 255 | とする。 |
251 | 256 | |
252 | -`candidate_char_set`の中から、`appeared_char_set_dict[i]`を削除するとi文字目の文字だけが残る。 |
|
257 | +`candidate_char_set`の中から、`appeared_char_set_dict[i]`を削除し、残った1文字が`magic_word`のi文字目の文字である。 |
|
253 | 258 | |
254 | 259 | <details> |
255 | 260 | <summary>クリックで展開</summary> |