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> |