mixiの脆弱性を報告したら10万円分のAmazonギフト券貰った
タイトル詐欺。
正確にはmixiプラットフォーム上のmixiゲーム「ふにゃもらけ」のゲーム内通貨が増やせる脆弱性。
修正は1ヶ月以上前に終わっているので載せても大丈夫だろう!!
mixiは脆弱性報告制度を導入していて、脆弱性の影響度、深刻度により定められた報酬額をAmazonギフト券という形で支払っている。
https://developer.mixi.co.jp/inquiry/security/
4コマ漫画を見ることで1日1回10K(クラゲマネー)が貰えるけど、この脆弱性を利用すれば何回でも10K貰える。
脆弱性としてはあるあるなものだったけど、影響範囲が大きいし、比較的人気なゲームなこともあってギフト券をくれたのかな?
脆弱性としてはこんなもの。
mixiゲーム、ふしぎな生き物 ふにゃもらけ
http://mixi.jp/view_appli.pl?id=9443&area=category_list
における、ゲーム内通貨であるクラゲマネーが、ある操作によって無尽蔵に増やせる脆弱性。
ターゲットとなるコンテンツは、「4コマを見て10Kゲット!」コンテンツです。
4コマのページ、
http://mixi.jp/run_appli.pl?id=9443&appParams={%22mode%22%3A%22fourkoma%22}
内の「ボーナス10Kゲット!」リンク
http://funya-mixi.appspot.com/bonus_4koma
で送信するパラメータに起因します。
このパラメータは、
user_id=[mixi内部ユーザID]
date=[ある法則で算出されbase64と思われるエンコードがされた値]
req_id=[恐らくリクエストを管理する値]
の3つがありますが、dateのパラメータを変更するだけでいくらでも10Kをゲットすることができました。
実証した際のURLパラメータがこちらです。
http://funya-mixi.appspot.com/bonus_4koma?user_id=[ユーザID]&date=8k0Anj3GxycUsaFFwkVErg%3D%3D&req_id=57070648
上記のURLは、正規の手続きを踏んだURLです。
以下6つのURLは、dateパラメータ、
「8k0Anj3GxycUsaFFwkVErg%3D%3D」
の%3D%3Dの前の「g」を「h」「i」「j」「k」「l」「m」に変更して送信した際のURLです。
http://funya-mixi.appspot.com/bonus_4koma?user_id=[ユーザID]&date=8k0Anj3GxycUsaFFwkVErh%3D%3D&req_id=57070648
http://funya-mixi.appspot.com/bonus_4koma?user_id=[ユーザID]&date=8k0Anj3GxycUsaFFwkVEri%3D%3D&req_id=57070648
http://funya-mixi.appspot.com/bonus_4koma?user_id=[ユーザID]&date=8k0Anj3GxycUsaFFwkVErj%3D%3D&req_id=57070648
http://funya-mixi.appspot.com/bonus_4koma?user_id=[ユーザID]&date=8k0Anj3GxycUsaFFwkVErk%3D%3D&req_id=57070648
http://funya-mixi.appspot.com/bonus_4koma?user_id=[ユーザID]&date=8k0Anj3GxycUsaFFwkVErl%3D%3D&req_id=57070648
http://funya-mixi.appspot.com/bonus_4koma?user_id=[ユーザID]&date=8k0Anj3GxycUsaFFwkVErm%3D%3D&req_id=57070648
これによって7回の送信、つまり70Kを得ることが出来ました。
上記の脆弱性による影響をmixiの脆弱性報告制度の指標に則ってまとめてみると、
・脆弱性によって可能になるデータ操作(取得、削除など)
→取得
・影響を受けるデータの範囲(全データ、重要なユーザデータなど)
→ゲーム内通貨データ
・影響を受けるデータの所有者(自分、自分以外)
→内部ユーザIDパラメータを変更すれば自分以外でも変更可能なはず。
・影響を受けるユーザ数
→全ユーザ
・攻撃が成立するために、ユーザの操作が必要か否か
→URLを踏むだけで可能。
・攻撃が成立するために、攻撃用アプリケーションのインストールが必要か否か
→不要。
この旨を記述したメールを10月下旬に送ったら、すぐさま修正され、12月24日に報酬額であるAmazonギフト券10万円を貰った。
報酬額からしてmixiの定める、
「変更できるべきではない、自分の重要なデータを変更し、チート行為が可能 10万円」
に当たったのではないかな〜と思う。
みんなもmixiをよりセキュアにして報酬額を貰っちゃおう♪
以上。
Yahoo!BB光申し込みページのXSS脆弱性
jsでチェックしてもGETメソッドで送られたらダメだし、
もしトークンみたいなパラメータ(この場合だとindivisualcodeかな?)があっても固定だと意味ないねって話。
修正が完了したらしいのでメモ書きとして残してみる。
↓
2. 脆弱性関連情報
1) 脆弱性を確認したウェブサイトのURL
フレッツ光新規申し込みページの
http://www.softbank.jp/ybb/hikari_01_explanation_yh1/
から移動される、
https://phoenix.sbb-sys.info/SFE/SimpleFletsEntry
フレッツ光乗り換え申し込みページの
http://www.softbank.jp/ybb/hikari_01_explanation_yh4/
から移動される、
https://phoenix.sbb-sys.info/SFE/SimpleFletsEntry
https://phoenix.sbb-sys.info/SFE/SimpleFletsEntry
上記URLに直接アクセスしてもパラメータがないのでエラーページが表示されるだけです。
2) 脆弱性の種類
このURLにアクセスすればアラートがでます。Firefox24で確認しました。
ChromeとIEはブラウザによってブロックされました。
また、普通に
https://phoenix.sbb-sys.info/SFE/SimpleFletsEntry
のフォームに"><script>alert()</script>で送信すればXSSできると思います。
しかし送信ボタンクリックでjsによるチェックが入るのでそのままでは送信してくれなくてめんどくさいので確認はしてません。
3) 脆弱性の発見に至った経緯
ヤフーのトップページから
4) 脆弱性であると判断した理由
新規、乗り換えのどちらのページも結局は
https://phoenix.sbb-sys.info/SFE/SimpleFletsEntry
に至りますが、individualCodeが正しくないとエラーページに遷移されます。
しかし、individualCodeは新規、乗り換えごとに一定の数値ですのでパラメータの決め打ちでいともたやすくURL誘導型のXSSが成功します。
・新規申し込みの場合
individualCode=qP6GHsFcUCdGG
type=4
・乗り換えの場合
individualCode=iJSDCYLthxX7b
type=5
これさえパラメータに含めれば正常にリクエストが受理されるようになります。
5) 脆弱性により発生しうる脅威
XSS
以上。
LINEのデータベースを解析してみる「ZMESSAGE」編
2013/12/03現在。
追記(2014/04/17).その他のテーブルについての記事も書きました。
LINEデータベース「talk.sqlite」のテーブル解析 - !#
この公式アカウントのトークが
こんな風になる(送信者の変更、送信メッセージの変更)
この他にも既読数の変更など、メッセージの捏造ならなんでもできるようです。
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
iPhoneアプリ「LINE」のトークのデータベースの解析をしてみる。
解析するデータベースは
Line/Documents/talk.sqlite
今回はZMESSAGEテーブル。
・Z_PK
通し番号。
・Z_ENT
謎。4がデフォルト?
・Z_OPT
他人の発言(メッセージ)は1。
・ZCONTENTTYPE
テキストメッセージは0。画像送信は1。
・ZREADCOUNT
他人の発言は0。自分の発言の場合はその既読数。
・ZSENDSTATUS
正常に送信できたら1。
・ZTIMESTAMP
発言したメッセージのUNIX時間。
・ZCHAT
発言した部屋番号。(いわゆるトークの通し番号)
Z_1MENBERSテーブルのZ_1CHATSの値と同じ。
・ZSENDER
発言したユーザのローカル通し番号。
ZUSERテーブルの通し番号と同じ。
・ZLATITUDE
テキストメッセージは0.0固定。
画像など、テキストメッセージ以外の時は別の数値
・ZLONGITUDE
テキストメッセージは0.0固定。
画像など、テキストメッセージ以外の時は別の数値
・ZID
多分LINE全体のデータベースの通し番号。(数値が7380億とか膨大な通し番号になってる)
・ZMESSAGETYPE
現在のメッセージだと空。昔は自分の発言はS(send?)、他人の発言はR(receive?)とか入ってた。
・ZTEXT
テキストメッセージの内容。(メッセージはもちろん、〇〇が画像を送信しましたとかも)
・ZCONTENTMETADATA
LINE@って言うのかな?企業とかのメッセージだと「bplist00」から始まるメタタグが入る。
あるときにauが画像を送信した時のタグは、
bplist00�%&T$topX$objectsX$versionY$archiver�Troot�� U$null� ZNS.objectsV$classWNS.keys���������[PREVIEW_URL\DOWNLOAD_URLVPUBLIC_Bhttp://dl-obs.official.line.naver.jp/r/talk/m/443472135318/preview_:http://dl-obs.official.line.naver.jp/r/talk/m/443472135318Ttrue� $X$classesZ$classname�!"#_NSMutableDictionary\NSDictionaryXNSObject_NSMutableDictionary
って入ってた。
・ZTHUMBNAIL
画像メッセージの時以外は空。文字化けしてよくわからないけど多分サムネ。
FreeBSD9.1 シェル上でTorネットワークを使うためのソフト「torsocks」を入れてみた
前回はFreeBSD9.1にTorを入れました。
FreeBSD9.1にTorを入れる - !#
この方法ですとブラウザ上からTorのsocksサーバを指定して利用、というような形であり、
コンソール/シェル上から通信を行う場合はTorネットワークを介すことはできませんでした。
シェルの環境変数 HTTP_PROXYなどにTorのSocksサーバを指定する方法もありますが、
その場合だとhttp/httpsのみの対応となってしまいます。
それを解消するために、様々なプロトコル上でTorネットワークを介することが可能になる、
torsocksというソフトを入れました。
torsocks - A transparent socks proxy for use with tor - Google Project Hosting
Portsコレクションに入っていますのですぐに設定できます。
www2122ui% cd /usr/ports/net/torsocks/ www2122ui% make config-recursive www2122ui% make install clean
これでインストール完了です。簡単。
次は設定を行います。
www2122ui% cp /usr/local/etc/torsocks.conf.sample /usr/local/etc/torsocks.conf www2122ui% vi /usr/local/etc/torsocks.conf
設定ファイルのサンプルをコピーします。
これで設定は終わってもいいのですが、
自分のみしかアクセスしないのでちょっと書き換えます
#自分だけなのでlocalはこの行だけでOK local = 127.0.0.0/255.128.0.0 ~~ #これもデフォルトのまま server = 127.0.0.1 ~~ #これもデフォルト server_port = 9050 ~~ #Torサーバ側で何も認証を設定していないならコメントアウトのままでよし #default_user = #default_pass =
特筆すべき項目はこれくらいでしょうか。
そもそもTorサーバ側でlocalhostのみアクセスを許可しているので認証は必要ないよね!
全て終わったら、前記事でもアクセスしたTorネットワークチェックサイトにシェル上でもアクセスしてみましょう。
www2122ui% torsocks w3m https://check.torproject.org/
成功したようです。torsocksコマンドについて詳しく知りたい場合は
torsocks公式サイトで確認してみてください。
torsocks公式サイト
torsocks - A transparent socks proxy for use with tor - Google Project Hosting
「先着1000名様!ゲームクリアで必ずFun!Fun!ピンク缶!プレゼント!」を"必ず"ゲームクリアしてみる
柔軟剤入り洗剤【ボールド】公式サイト-Fundry Town-
普通に何回スロット回しても全然クリアできなかったので本気出してみた。
まず、Fundryスロットについての説明をします。
概要
- 期間は2013年11月30日まで。
- スロットを試行するためのコインは3枚配られます。1回のスロット試行で1枚消費します。つまり初期状態で連続3回までスロットが試行できます。
- リーチの際は10秒ほどの広告アニメーションが流れた後、3つ目のロールが止まります。
- スロットのロールが揃った時、つまり当たった場合、「ヒミツの番号」が表示され、応募ページに「ヒミツの番号」を入力することにより、当たったと判断されます。
技術的な説明
- コインの枚数はCookieに保存されます。(coin)
- スロットのシステムは全てJavascript(+PHP)で書かれています(ヒミツの番号も)
- スロットが当たる確率は1/2000で、リーチの確率は350/1500(約1/4)です。
- 「ヒミツの番号」は定数です。
解析攻略してみる
それでは上記を利用して攻略してみます。
考えられる方法は、
- Cookie操作で無限回ゲーム試行
- ソースコードに含まれる確率を操作し100%当てる
- ソースコードに含まれる「ヒミツの番号」を探す
です。どの方法を使うかは自分の得意な分野で決めてください。
・ソースコードに含まれる確率を操作し100%当てる
Firebugを開き、スロットを呼び出すファイルを調べます。URLは
http://vip.myrepi.com/bold/slot.php
と判明します。
ソースを見ます。
slot.php
<script type="text/javascript" src="http://media.myrepi.com/bold/js/slot_machine.js"></script>
ページ上部にslot_machine.jsが読み込まれて怪しいので開きます。
slot_machine.js
ページ上部に
SlotMachine.percentage = 1; SlotMachine.percentageNearmiss = 350;
をあります。
ページ中部に
//当たり外れを決定する. var indices; var randomIndices = this.getRandomIndices(); this.m_reachFlag = false; this.m_winFlag = false; if(Math.random()*2000 < SlotMachine.percentage) { indices = [0,0,0]; this.m_reachFlag = true; this.m_winFlag = true; } else if(Math.random()*1500 < SlotMachine.percentageNearmiss) { indices = [0,0,randomIndices[0]]; this.m_reachFlag = true; } else indices = randomIndices; this.m_reels[1].setStopIndex(indices[0]); this.m_reels[2].setStopIndex(indices[1]); this.m_reels[3].setStopIndex(indices[2]); this.m_reels[1].start(); this.m_reels[2].start(); this.m_reels[3].start(); this.m_stopButton1.startAlert();
があります。
this.m_winFlag=trueが書いてある部分が当たりなんでしょう。if文は
if(Math.random()*2000 < SlotMachine.percentage)
と書いてあります。
つまり当たる確率は1/2000。当たらない時、リーチの確率は350/1500。
つまり100%当たるようにするには、SlotMachine.percentageの値を2001以上にすればよいわけです。
おわり。
・ソースコードに含まれる「ヒミツの番号」を探す
http://media.myrepi.com/bold/slot.php
のソースコードを開きます。
slot.php
ページ中部に、
<div id="slot_how" style="display:none"> <h2 class="ttl"><img src="http://media.myrepi.com/bold/images/detail/ttl_slot.png" alt="Fundry!スロット"></h2> <h3><img src="http://media.myrepi.com/bold/images/detail/ttl_how.png" alt="応募方法"></h3> <section> <div class="attention"><img src="http://media.myrepi.com/bold/images/detail/txt_how_attention.gif" alt="ご応募が終わるまでこの画面は閉じないよう、ご注意ください。"></div> <div class="flow" id="flow01"> <div class="inner"> <div id="secretNumber"> <h4><img src="http://media.myrepi.com/bold/images/detail/ttl_how01.gif" alt="1.ヒミツの番号をメモ"></h4> <p id="secretDigit"></p> </div> <p><img src="http://media.myrepi.com/bold/images/detail/txt_how01.gif" alt="応募画面でヒミツの番号の入力項目がありますので、上記番号をメモしてください。"></p> </div><!-- /inner --> </div><!-- /flow01 -->
があります。
secretDigitが怪しいです。
2)の時と同様に
http://media.myrepi.com/bold/js/slot_machine.js
を開きます。
slot_machine.js
secretDigitで検索をします。すると、
$("#secretDigit").get(0).innerHTML = '<img src="data:image/gif;base64,' + qervvbk +'">';
が検索にかかります。
読むと、gifファイルがbase64エンコードされているようで、
そのbase64エンコードされている値の変数はqervvbkです。この変数名で検索してみると、
var qervvbk = "R0lGODlhSAARALMPAI+Pj9ra2ubm5oKCgrS0tGlpacHBwZubm83NzfPz811dXVBQUKioqHZ2dkRERP///yHIHJkZjphYm91dD0iIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9 (略) qDAViAOAMjSAtpGwSVpVtD96saMAipNqtg44AIszWxhuJfiQSyFu4rsnEgwXgYELob+OtiiTHzgl74BGhAgklbw1UiHCkcOAQZkGIHgpRBlsdAwDTJIicquSplcvLlix4PfkCFXCJqyyZGtEjADgRAAA7"; //data:image/jpg;base64,
が検索にかかります。
この値をコピーし、Terminalを開き、base64デコードし、画像ファイルとして保存します。
画像ファイルを開くと・・・!
(モザイクしてあります)
おわり。
総評
なんでもかんでもクライアントサイドでやろうとするな。
ちなみに結局応募してません。
FreeBSD9.1にTorを入れる
ググったら2006年くらいの記事しかなかったので。
やりかたはそう変わらない。
www2122ui% whereis tor tor:/usr/ports/security/tor
whereisでtorの場所を調べます。
www2122ui% cd /usr/ports/security/tor www2122ui% make install clean
make install cleanします。configオプションはデフォルトで。
www2122ui% cd /usr/local/etc/tor www2122ui% cp tor-tsocks.conf.sample tor-tsocks.conf www2122ui% cp torrc.sample torrc
ディレクトリを移動し、サンプルをcp。
www2122ui% vi torrc SocksPolicy accept 127.0.0.1 SocksPolicy reject *
torrcを編集し、SocksPolicyを上記に変更し、自身のみの利用に限定します。
www2122ui% vi /etc/rc.conf tor_enable="YES"
rc.confに追記。
www2122ui% sudo /usr/local/etc/rc.d/tor start Starting tor. Nov 07 21:59:24.763 [notice] Tor v0.2.3.25 (git-17c24b3118224d65) running on FreeBSD. Nov 07 21:59:24.764 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning Nov 07 21:59:24.764 [notice] Read configuration file "/usr/local/etc/tor/torrc". Nov 07 21:59:24.770 [notice] Initialized libevent version 2.0.20-stable using method kqueue. Good. Nov 07 21:59:24.770 [notice] Opening Socks listener on 127.0.0.1:9050 www2122ui%
torを起動。
あとはSocks5のプロキシサーバの設定で127.0.0.1:9050を指定すれば利用できます。
以下はmacでtorが動いているFreeBSDにsshでポートフォワードして、TCP:9050をmacのlocalhostに持ってきてから設定しています。
shu-2% ssh -L 9050:127.0.0.1:9050 [FreeBSDのIPAddr]
torを使用しているかどうか、
https://check.torproject.org/
上記のURLで確認できます。
###########追記
関連記事書きました。
GIGAZINE記事の気になる言い回しを調べてみた。
まずはこの記事を読んでいただきたい。
GIGAZINEのオフィスを1階から4階へ移動させるまでの物語 -GIGAZINE
>この状態のオフィス(というか事務所)から2006年6月末までGIGAZINEは日々、更新されていたわけです。
>こんなところから毎日、GIGAZINEを更新していたわけですが、(略)その際に4階奥の和室を洋室にリフォームすることにしたわけです。
>わけです。
>したわけ
>わけ。
俺の中で「わけ」がゲシュタルト崩壊したわけです。(伝染った
実はGIGAZINEでの「わけ」の多用は(少なくともブログ形式になってから)最初から今までずっと使われているのです。
最近の記事でも。
無料で050番号ゲット&通話料が60%安いアプリ「SMARTalk」を使ってみました -GIGAZINE
>その場ですぐ聞くことができるというわけです。
・・・。
こちらは2013年8月20日、つまり今日の記事。
というわけで、昔っから今までどれだけ「わけ」が多用されているか調べてみました。
前提
全記事数は、記事ID 4から28470の合計28465件。
期間にして、恐らく2006年7月10日から2013年8月20日までの2597日間。
ページ取得速度は、図書館の事件を考慮して、毎秒2件です。
また、検索ワードは、
「というわけ」
「するわけ」
「したわけ」
「わけ。」
「わけです」
です。
これをわかりやすく「わけ群」と呼びます。
「わけではなく」
など、関係無いものは省くようにしてあります。
結果
横軸は記事中に「わけ群」を使用した回数
縦軸は記事中に横軸の回数を使っている記事数
全記事数:28465件
全文章中、「わけ群」が出てきた回数は、9955回。
全記事中、「わけ群」が出てきた記事は、5901件。
うち、記事に1回のみ「わけ群」を使ったものは、4239件。
全記事中、最も「わけ群」を使った記事は、
高木浩光による怒濤の講演「ゲーム業界におけるプライバシー保護」がすごいことに - GIGAZINE
で、その回数はなんと56回。
まあこれは取材記事なので一概には言えません。
また、上記のように「わけ群」の使用回数の多い記事トップ7は全てインタビュー記事です。
インタビューを除く、「わけ群」の使用回数の最も多い記事は、
テレビや新聞で詳しく報道されない「毎日新聞英文サイト変態記事事件」、一体何が問題なのか? - GIGAZINE
で、回数は全記事中8位の30回です。多い。
つまり俺が言いたいことは、もう少し別の言い方をしたらどうですかってこっちゃ。
(偉そう)
おわり