2016年02月27日

Visual C++ 2008 Express Edition SP1のインストール失敗の対処方法

 Windows7 SP1 64bit環境にVisual C++ 2008 Express Editionをインストールする用事があったのですが、次のようなエラーメッセージが出てしまい、インストールできずにハマりました。

 Visual Studio 2008 Service Pack 1 システム上にMicrosoft Visual studio 2008 の以前のバージョンが検出されました。インストールを続行するには、SP1に更新する必要があります。Microsoft Updateにアクセスしてその他すべてのバージョンのVisual studio 2008を SP1レベルに更新してから、 Visual studio 2008 Express SP1をインストールしてください。

 VMware環境で確認したところ、普通にインストールできたので、実環境にインストールしてある何かのソフトの影響のようですが、特定できませんでした・・・。

 試行錯誤した結果、下表のレジストリのデータを"0"から"1"に変更したうえでインストーラーを実行することで解決できました。

環境(32bit/64bit) レジストリ
32bitの場合 HKLM\SOFTWARE\Microsoft\DevDiv\VS\Servicing\9.0\SP
64bitの場合 HKLM\SOFTWARE\Wow6432Node\Microsoft\DevDiv\VS\Servicing\9.0

[参考リンク]
Stack Overflow
How do I stop Visual Studio Express SP1 install detecting old version that doesn't exist
http://stackoverflow.com/questions/195169/how-do-i-stop-visual-studio-express-sp1-install-detecting-old-version-that-doesn

以上
posted by やまと at 23:24| Comment(0) | 実験日誌

2016年02月07日

CTF Writeup 場阿忍愚CTF(バーニングCTF)

 本日、オンラインで昨年11月16日から開催されていた場阿忍愚CTFが終了しました。楽しかったです。 結果は20位で、四段:ド変態の称号(ヒドイw)をいただきました。すでにWriteupを書かれた方がいるので、取り急ぎそちらで記載されていないものだけ記載します。

 Writeupリンク

123 二進術 Unity遊戯如何様

 Unityで作成されたMacのアプリケーション。3Dゲームだったので、とりあえず普通にプレイしてみる。ホップ・ステップ・ジャンプといった調子でジャンプするとジャンプ力が上がるため、楽しくて本気で2時間ほどプレイしてみましたが、どうしても3枚目のコインを発見できません・・・(苦笑)
 ヒントにあった Assembly-CSharp.dll をILSpyでデコンパイルしてソースコード(GUI Managerクラス)を確認すると、コインが3枚の時にフラグを表示することが判明します。というか、フラグ文字列「its_3D_Game_Tutorial」が普通に見えているので、それをサブミットするも不正解。スコアサーバの調子が悪いのかと思い、しつこく何回もサブミットしてしまいました。

 ゲームのチートをする問題なので、ソースコードを読むだけじゃダメなのかなと諦めて、Windows環境にVisualStudio 2008 ExpressとUnity Editorをインストールして、ILSpyでデコンパイルした Assembly-CSharp.dll をプロジェクト形式で保管したものを読み込み、必ずフラグが表示されるようソースコードを修正してDLLをビルド。
 DLLを入れ替えて、Macでゲームを実行したところ、フラグが全て大文字で表示されました。

 フラグ: ITS_3D_GAME_TUTORIAL

142 攻撃術 Ninja no Aikotoba

  問題サーバに接続すると、問いかけの文字列(例:Kawa)が表示され、合言葉の入力を求められる。ソースコード(aikotoba.c)を読み、合言葉の解読方法を考える問題でした。

1問目
 サーバが表示する問いかけは、合言葉を特定のアルゴリズムで変換したもの。プログラムを読み、問いかけから合言葉を導きだします。
  問いかけ:Kawa
  問いかけ生成のアルゴリズム: 合言葉の文字列(4文字)を整数型に型変換し、0x001a0012でxorします。
  合言葉:Yama

2問目
 プログラムに合言葉が埋め込まれている。8進数、10進数、16進数で文字コードが記載されています。
  合言葉:too
3問目
 合言葉をencrypt関数で処理した結果が、12個の10進数として画面に表示されます。なお、画面に表示される数値は毎回同じ。 encrypt関数を読むと、合言葉[n]と合言葉[n+6]を処理した結果を、result[n]とresult[n+6]に格納していることが分かります。問題プログラムを読むと、合言葉はアルファベット(大文字、小文字)で構成されていることが分かるため、ブルートフォースするプログラムを書けば解けます。
  合言葉:KansaiTanaka
4問目
 MD4のハッシュ値が表示されるので、ハッシュ値のクラックサービスでクラックします。
  合言葉:Zach
5問目
 この問題だけはソースコードを読んでも答えが分かりません。IDAで問題ファイル「aikotoba」、および呼び出しされる「libc.so.6」の関数を確認しても、脆弱性の存在を発見できませんでした。(aikotobaの逆アセンブリリストをじっくり読んでも脆弱性を発見できなかったので、libc.so.6のどこかで脆弱性のあるのだと思いますが・・・) libc.so.6をチラ見したところ、setbuf関数のなかで、バッファサイズを約8KBに設定しているようだったので、なんとなく8KB程度の大量データを繰り返し送信していたら、たまにフラグが表示されることに気が付きました。 攻撃が成功した理由はよく分かっていません・・・(-_-;)

[攻撃ログ](ファイルinputは、1問目から4問目までの答え、および5問目への入力として8KB程度のASCIIテキストを記載してあります。)

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : You aren't my ally!!!
[*] YOU DIED

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : You aren't my ally!!!
[*] YOU DIED

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : You aren't my ally!!!
[*] YOU DIED

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : You aren't my ally!!!
[*] YOU DIED

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : You aren't my ally!!!
[*] YOU DIED

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : You aren't my ally!!!
[*] YOU DIED

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : You aren't my ally!!!
[*] YOU DIED

C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
C:\WORK\CTF\Attack300>nc 210.146.64.35 31338 < input
Hi.
Let me check if you are my ally.

Kawa? : Good.

So then next? : Good.

-9 0 0 18 -10 8 159 194 220 212 204 202? : Good.

aa1bf8cae599b19366a8bd4b87ddd327? : Good.

And the rest? : Well Done!

Flag: flag={GetsuFumaDen}


C:\WORK\CTF\Attack300>
            

 フラグ:GetsuFumaDen

155 解析術 Encrypted Message

 問題ファイル「155-secret」の内容をバイナリエディタで確認したところ、暗号化されたデータのように見えます。もう一つ問題ファイルとして配布されているメモリダンプのなかに復号のヒントがあると考え、Volatilityで解析を実施しました。

 (1)imageinfo
    Win8SP0x86またはWin8SP1x86のメモリイメージであることが判明
 (2)pslist (profile=Win8SP1x86)
    TrueCryptが起動していることが判明。「155-secret」はTrueCryptのコンテナファイルであると推測

 (3)truecryptmaster / truecryptpassphrase (profile=Win8SP1x86)
    何も抽出されない

 (4)truecryptmaster / truecryptpassphrase (profile=Win8SP0x86)
    プロファイルが間違っている可能性を考え、SP0で再度実行したところ、truecryptのMaster Keyを取得

 Master KeyからTrueCryptコンテナを復号するため、Master Keyを埋め込んだTrueCryptをコンパイルします。
 (1)Linux環境でTrueCrypt 7.0aのソースコードを準備
 (2)VolumeHeader.cppにパッチを適用(詳細は参考リンクを参照)
    パッチには、前述の手順で取得したMaster Keyを埋め込む
 (3)TrueCryptをコンパイル

 これだけではTrueCryptコンテナを復号できないため、「155-secret」のヘッダ情報を次の手順で書き換えます。
 (1)Windows環境の通常版TrueCryptでコンテナファイル(テンプレートと呼ぶ)を作成
    その際、暗号方式、サイズ(Disk Length)は「155-secret」を同じ設定とする
    パスフレーズは任意のものを設定する。ここでは、「abc123」を設定した
 (2)テンプレートのヘッダ(ファイルの先頭512バイト)を、「155-secret」に上書きする
    $ dd if=template of=155-secret bs=512 count=1 conv=notrunc

 ヘッダを書き換えた「155-secret」を上記3.で準備したパッチ適用済みTrueCryptでマウントします。
パスフレーズは、テンプレートで設定した「abc123」を指定します。この手順により、「155-secret」をマウントすることができます。

 コンテナのなかに、「flag.txt」が格納されており、フラグが記載されていました。

 フラグ: Already Ended In 5/2014

 参考リンク

PlaidCTF Writeup: Fun with Firewire
http://mweissbacher.com/blog/tag/truecrypt/

以上です。
posted by やまと at 20:51| Comment(3) | CTF