1001001

73。CTFのWrite-upから始まったけど最近は技術全般の備忘録となっています。

EKOPARTY CTF 2016 Write-up

2016/10/27 05:00 ~ 10/29 05:00 (JST)に開催されたEKOPARTY CTF 2016に,チームm1z0r3として参加しました.

今回は大人数で参加できて楽しかったですが,順位は振るわず課題が残ります(主に私に).

手を付けた問題

  • Certified Excel Hacker (Forensic 50 pts)
  • Super duper advanced attack (Web 100 pts)
  • Url shortener (Web 200 pts)
  • Carder (Web 150 pts)

Cryptoが無くて呼吸困難になっていましたが,代わりにWebを解いていました.

私が直接フラグを取ったのはCertified Excel Hacker (Forensic 50 pts)だけでした:(

Certified Excel Hacker (Forensic 50 pts)

問題のzipを解凍すると,Excelのファイルが出てきます.中身を見ると,CALCULATE ANSWERというボタンがあり,それを押すとマクロが実行されるようです.しかしマクロの処理が異常に時間のかかるものらしくいつまで経っても処理が終わりません.僕の環境ではExcelが落ちます.マクロの内容を確認しようとしますが,パスワードがかかっていて見ることができません.

どうやら保護がかけられたファイルらしく,パスワードを必要とする解除を行わなければ書き込みや一部の閲覧ができません.保護により禁止されているのは以下.シート保護についてはメニューのファイル>情報から確認できると思います.

sheetprotection

vba_protection

  • シート「FORM」への書き込みの禁止
  • シート「ANSWER」の閲覧の禁止
  • マクロの閲覧,編集の禁止

これらはパスワードによって保護されており,各操作を行おうとすると保護の解除を求められますが,パスワードが分からず開けることができません.しかしマクロの内容や,ANSWERのいうシートはいかにもフラグに関係していそうなので,中身を見たいです.

そこで,無理やり保護を解除します.Excelの保護機能にはいくつかの種類があります.例えば,シートの保護,ブックの保護などです.

今回のファイルは以下のような保護がかけられています.

  • シート「FORM」への書き込みの禁止 (シート保護)
  • シート「ANSWER」の閲覧の禁止 (シート保護)
  • マクロの閲覧,編集の禁止 (VBA Projectのプロテクト)

これらの保護は無理やり解除することが可能です.VBA Projectのプロテクトの方はわかりませんが,シートの保護はExcel2013までのバージョンなら解除できるみたいです.

結論から申し上げますと,今回必要な解除は「シート保護の解除」のみです.マクロのプロテクト解除も可能ですが,実はこの問題においては必要ありません(フラグっぽいのが分かるのですが,ダミーです).しかしせっかくなのでどちらのクラック方法も載せておきます.

(以下の手順は,WindowsPCでは上手くいきましたが,Macでは上手くいきませんでした.)

Excelファイルの解凍

2つの保護解除どちらを行うにもまずはこの処理が必要です.

Excelファイルの正体は,既定のディレクトリ構造のファイル群をzip圧縮しているものですので,ファイル名を変更して解凍することで中身を取り出すことができます.

$ cp CALCULATOR.xlsm CALCULATOR.zip
$ unzip CALCULATOR.zip
Archive:  CALCULATOR.zip
  inflating: [Content_Types].xml
  inflating: _rels/.rels
  inflating: xl/_rels/workbook.xml.rels
  inflating: xl/workbook.xml
  inflating: xl/styles.xml
  inflating: xl/theme/theme1.xml
  inflating: xl/worksheets/sheet2.xml
  inflating: xl/worksheets/_rels/sheet1.xml.rels
  inflating: xl/drawings/_rels/vmlDrawing1.vml.rels
  inflating: xl/worksheets/sheet1.xml
  inflating: xl/vbaProject.bin
  inflating: xl/media/image1.emf
  inflating: xl/drawings/vmlDrawing1.vml
  inflating: xl/drawings/drawing1.xml
  inflating: xl/ctrlProps/ctrlProp1.xml
  inflating: xl/printerSettings/printerSettings1.bin
  inflating: xl/activeX/_rels/activeX1.xml.rels
  inflating: xl/activeX/activeX1.xml
  inflating: docProps/core.xml
  inflating: xl/activeX/activeX1.bin
  inflating: docProps/app.xml

この中にある特定のファイルを改竄することで各種保護を解除することができます.

VBA Project(マクロ)のプロテクトの解除( Unnecessary )

この手順は問題には必要ありません.必要なのはこの次の項目のシート保護の解除です.

解凍したファイルのうち,xl/vbaProject.binを改竄します.

バイナリエディタでこのファイルを開き,文字列で"DPB="となっている部分を検索します.

vba_dpb

このDPBに続く部分がパスワードですので,この部分を改竄することで任意のパスワードに変更することができます.

改竄する文字列をどのように決めれば良いかと言うと,別のExcelシートでマクロを作り,パスワード保護した際のDPBの値を同様の方法で確かめてコピーすれば良いです.そうすれば,自分で決めた任意のパスワードでマクロのパスワードを解除することが可能になります.

しかしここで重要なのがDPBの値の長さです.改竄先のDPBと任意のDPBの長さが一致していなければ改竄はできません.この長さはパスワードの平文に依存するわけでなく,シートを上書き保存する度に長さが変更されます.ですので,目的の長さになるまでシートを上書きします.

この手順でDPBを改竄し,マクロの保護を解除すると問題のExcelファイルのマクロを見ることができます.できますが,このような内容になっており,""明らかに""このマクロの処理内容は答えではないことがわかります.

なお,僕たちはNOT_ANSWERと書いてあるのを無視して解析し,ダミーのフラグを投げ続けていました...

シート保護の解除

さて,本題の解除方法です.

workBookProtectionの改竄

xl/workbook.xml を開きます.その中にworkbookProtectionというタグがあります.そのタグの属性のlockStructure="1"の部分を,lockStructure="0"と変更します.

sheetProtectionの改竄

xl/worksheets/sheet1.xmlと,xl/worksheets/sheet2.xml の中身を改竄します.それぞれがシートFORMとシートANSWERを示しています.

そのファイルの中の,以下のようなsheetProtectionというタグを探し,そのタグをタグごと削除します.

 再度圧縮しxlsmファイルを復元

xlsmファイルの復元は,再度zip圧縮するだけです.

$ zip -r CALCULATOR_hacked.zip \[Content_Types\].xml _rels/ docProps/ xl/

 シートANSWERの閲覧

復元したExcelファイルを開き,シートの部分で右クリック->再表示という項目をクリック->ANSWERを選択,という手順でシートを表示させます.表示させると以下のように見えるようになります.

answer_sheet

シートANSWERを見ると,一つ一つのセルの大きさが明らかにでかいので,セルのサイズを全て変えます.行の高さを5,列の幅を0.5程度にします.セルを全選択した状態で列(行)を右クリックし,列の幅(行の高さ)という項目を変更することで一気に変えることができます.

flag

The flag is EKO{HIDDEN_SHEET_123}

まとめ

やるだけ問題.また,マクロの方の罠にめげずにシート保護を解除すればフラグが取れる簡単な問題でした.

余談

問題サーバがすぐに落ちる系CTFなので,Web問とか再チャレンジできないのが悲しいです.

参考