Sharif University CTF 2016

Sharif University CTF 2016 writeup Kick Tort Teen

Kick Tort Teen

forensics

Anagram, anyone?

Download

data.xlsというファイルですが、ダブルクリックしても下図のようにExcelで開くことができません。


no title


バイナリエディタで中身を確認すると、先頭がPKで始まっていますので、拡張子をzipに変更して解凍してみます。解凍してできたファイルを確認すると、vbaProject.binというファイルが見つかりますので、マクロ付きのExcelファイルだと思われます。

そこで、ファイルの拡張子をxlsmに変更することで、Excelで開くことができました。


1

次に、マクロを実行してみると、ユーザフォルダの直下にfileXYZ.dataファイルができます。このファイルはLinuxの実行ファイルになっていますので、Linuxの環境で実行してみると、そのままフラグが表示されました。

$ ./fileXYZ.data
SharifCTF{5bd74def27ce149fe1b63f2aa92331ab}

フラグは、

5bd74def27ce149fe1b63f2aa92331ab

です。






Sharif University CTF 2016 writeup Sec-Coding 1

Sec-Coding 1

misc

You should fix vulnerabilities of the given source code, WITHOUT changing its normal behaviour. Link
与えられたC++のソースファイルに対して、通常の動作を変更することなく脆弱性を修正する問題です。

とりあえず、stringとgetlineを使うようにしてみました。
#include <vector>
#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

int main()
{
    string line;
    vector<char> str(MAX_PATH);
   
    cout << "Enter your name: ";
    //cin >> str.data();
    getline(cin, line);

    //cout << "Hello " << str.data() << " :)" << endl;
    cout << "Hello " << line << " :)" << endl;

    return -14;
}
修正したソースファイルをアップすると、フラグが表示されました。

no title

フラグは、
8b12be66c589eef94f541dc6326a0109
です。

プログラミング言語C++第4版
ビャーネ・ストラウストラップ
SBクリエイティブ
2015-02-28



Sharif University CTF 2016 writeup We lost the Fashion Flag!

We lost the Fashion Flag!

forensics

In Sharif CTF we have lots of task ready to use, so we stored their data about author or creation date and other related information in some files. But one of our staff used a method to store data efficiently and left the group some days ago. So if you want the flag for this task, you have to find it yourself!

Download

与えられたファイルを解凍すると、fashion.modelファイルと多数の数字のファイル名のファイルが格納されたoutフォルダができます。fashion.modelをテキストエディタで見てみると、先頭にFemtoZipというキーワードが見つかります。
ググってみると、FemtoZipという圧縮ツールがあるようです。多数のファイル間に共通するデータがある場合に、gzipよりも圧縮率が高いらしいです。
https://github.com/gtoubassi/femtozip

それでは、以下のインストール手順に従ってインストールします。
https://github.com/gtoubassi/femtozip/wiki/How-to-build

サンプルデータが付いているので、以下の使い方でコマンドの使い方を確認します。
https://github.com/gtoubassi/femtozip/wiki/Tutorial

準備が整ったところで、次のコマンドで解凍します。
$ ~/femtozip/cpp/fzip/src/fzip --model fashion.model --decompress sharif_tasks/out
次に、解凍されたファイルに対して、”forensic”と”'points': 100, 'year': 2016”を含む行を抽出します。
11180(1,147)  [SJIS]: {'category': 'forensic', 'author': 'staff_3', 'challenge': 'Fashion', 'flag': 'SharifCTF{2b9cb0a67a536ff9f455de0bd729cf57}', 'ctf': 'Shairf CTF', 'points': 100, 'year': 2016}
11223(1,147)  [SJIS]: {'category': 'forensic', 'author': 'staff_5', 'challenge': 'Fashion', 'flag': 'SharifCTF{41160e78ad2413765021729165991b54}', 'ctf': 'Shairf CTF', 'points': 100, 'year': 2016}
11908(1,147)  [SJIS]: {'category': 'forensic', 'author': 'staff_2', 'challenge': 'Fashion', 'flag': 'SharifCTF{8725330d5ffde9a7f452662365a042be}', 'ctf': 'Shairf CTF', 'points': 100, 'year': 2016}
273(1,147)  [SJIS]: {'category': 'forensic', 'author': 'staff_3', 'challenge': 'Fashion', 'flag': 'SharifCTF{1bc898076c940784eb329d9cd1082a6d}', 'ctf': 'Shairf CTF', 'points': 100, 'year': 2016}
9401(1,147)  [SJIS]: {'category': 'forensic', 'author': 'staff_6', 'challenge': 'Fashion', 'flag': 'SharifCTF{c19285fd5d56c13b169857d863a1b437}', 'ctf': 'Shairf CTF', 'points': 100, 'year': 2016}
上から順番に試していくと、一番上のフラグで正解でした。
フラグは、
2b9cb0a67a536ff9f455de0bd729cf57
です。

世界でもっとも強力な9のアルゴリズム
ジョン・マコーミック
日経BP社
2012-07-19




Sharif University CTF 2016 writeup SRM

SRM

reverse

The flag is : The valid serial number

Download

与えられたファイルを実行すると、下図のような入力ダイアログが表示されます。

no title

「Your E-Mail Address:」と「Your Serial Number:」に適当な内容を入力して「OK」をクリックすると、下図のとおり不正な入力であるとのメッセージが表示されます。

4

それでは、「IDA Pro Free」で逆アセンブルし、該当部分を見てみます。上図のメッセージは下図の箇所で出力されていることが分かります。この部分をよく見ると、右側のフローで比較、条件分岐しており、全て比較結果がイコールの場合に赤い矢印のフローを流れています。おそらく右側の赤い矢印のフローを通れば正解と思われます。

3

さて、この比較、条件分岐の箇所を見てみると、入力された文字をそのまま比較している箇所と、入力された文字にある固定値をaddまたはsubした値と比較している箇所があります。それぞれ計算して入力すべき値を下表のとおり、導き出します。

ebp cmp add sub 元の値 文字
-240 43     43 C
-23f 5a     5A Z
-23e 3a 01   39 9
-23d 64     64 d
-23c 6d     6D m
-23b 44   2d 71 q
-23a 34     34 4
-239 63     63 c
-238 9b 63   38 8
-237 9b 34   67 g
-236 aa 71   39 9
-235 c8 81   47 G
-234 9b 64   37 7
-233 9b 39   62 b
-232 9b 5a   41 A
-231 9B 43   58 X

この導き出した文字をつなげると、「CZ9dmq4c8g9G7bAX」となりますので、適当なメールアドレスとこの文字列をシリアルナンバーに入力します。

1

下図のとおりフラグが表示されました。

2

フラグは、
CZ9dmq4c8g9G7bAX
です。



Sharif University CTF 2016 writeup Asian Cheetah

Asian Cheetah

misc

We have hidden a message in png file using jar file. Flag is hidden message. Flag is in this format:
SharifCTF{flag}

Download

与えられたファイルを解凍すると、jarファイルと下画像のPNGファイルが得られます。
AsianCheetah1

このJAVAプログラムを使ってPNG画像にメッセージを埋め込んでいると思われます。それでは、このJAVAプログラムの動作を確認するため、解凍してできたHide.jarファイルをデコンパイルしてみます。まず、Hide.zipにリネームして解凍します。Hide.classファイルができるので、JAVAのデコンパイラ「JD-GUI」で開きます。

no title
 

このJAVAプログラムの動作を解析すると、元になるメッセージを1文字ずつ先頭ビットから順に処理し、画像の左上(0,0)から右方向に1ピクセルを対応させています。メッセージのビットが1の場合、そのピクセルのRGB値を奇数にし、0の場合、偶数にしています。

それでは、動作が分かりましたので、画像からピクセルの色情報を読み取ってメッセージを復元するRubyプログラムを書いてみます。

require "RMagick"
include Magick

def get_rgb_arry(file)
  img = ImageList.new(file)
  str = ""
  cnt = 0
  for y in 0...img.rows
    ch = 0
    for x in 0...img.columns
      src = img.pixel_color(x, y) # 元画像のピクセルを取得
      if src.blue % 2 == 1
        ch = ch + 1
      end
      cnt = cnt + 1
      if cnt >= 8
        str = str + ch.chr
        ch = 0
        cnt = 0
      end
      ch = ch << 1
    end
  end
  return str
end

pic1 = "AsianCheetah1.png"
print get_rgb_arry(pic1)

実行すると、次の出力が得られます。

43:SharifCTF{e8e12db2fc654f3b50f3da4901ab986e}S�ワ?眥vkハ匣 斜1T<・カ�セdsT・.~・・ェン    イ・体・﨏・Qチ/wムKc、キf{i當2K・躬・zモホ介ニァ"クED/^_合7閾レM| ホKン0棊・フ:ーH

見事フラグを得ることができました。

フラグは、

e8e12db2fc654f3b50f3da4901ab986e

です。







Sharif University CTF 2016 writeup Dumped!

Dumped!

forensics

In Windows Task Manager, I right clicked a process and selected "Create dump file". I'll give you the dump, but in return, give me the flag!

Download

解凍すると、Windowsのダンプファイルが得られます。とりあえず、ダンプファイルからフラグ形式であるSharifCTFという文字列を探してみます。

$ strings RunMe.DMP | grep SharifCTF
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000SharifCTF{4d7328869acb371ede596d73ce0a9af8}
SharifCTF{4d
SharifCTF{4d7328869acb371ede596d73ce0a9af8}
SharifCTF{4d
SharifCTF{4d7328869acb371ede596d73ce0a9af8}

見事、見つかりました。
フラグは、

4d7328869acb371ede596d73ce0a9af8

です。


Windowsダンプの極意 エラーが発生したら、まずダンプ解析!
上原 祥市
アスキー・メディアワークス
2008-11-27



Sharif University CTF 2016 writeup dMd

dMd

reverse

Flag is : The valid input

Download

与えられたファイルを実行すると、keyの入力を求められます。試しに1と入力すると、Invalid Key!ということで怒られます。
$ ./dMd
Enter the valid key!
1
Invalid Key! :(
このときの動きをedbで見てみると、下図のように入力値である1がmd5でハッシュ化(c4ca4238a0b923820dcc509a6f75849b)されています。
no title

ある程度動きが分かりましたので、ここでobjdumpで逆アセンブルします。
objdump -s -D dMd > aaa.txt

逆アセンブルされた結果を眺めていると、以下の箇所で1バイトずつ比較しているコードが続いているところがあります。ちょうど32回続いていますので、MD5のハッシュ値と同じ長さです。

  400f2f:    48 8b 45 a8              mov    -0x58(%rbp),%rax
  400f33:    0f b6 00                 movzbl (%rax),%eax
  400f36:    3c 37                    cmp    $0x37,%al            //7
  400f38:    0f 85 5d 03 00 00        jne    40129b <main+0x40e>
  400f3e:    48 8b 45 a8              mov    -0x58(%rbp),%rax
  400f42:    48 83 c0 01              add    $0x1,%rax
  400f46:    0f b6 00                 movzbl (%rax),%eax
  400f49:    3c 38                    cmp    $0x38,%al            //8
  400f4b:    0f 85 4a 03 00 00        jne    40129b <main+0x40e>
  400f51:    48 8b 45 a8              mov    -0x58(%rbp),%rax
  400f55:    48 83 c0 02              add    $0x2,%rax
  400f59:    0f b6 00                 movzbl (%rax),%eax
  400f5c:    3c 30                    cmp    $0x30,%al            //0

(省略)

比較値をASCIIで表現すると、次のとおり32バイトの文字列が得られます。

780438d5b6e29db0898bc4f0225935c0

これを以下のサイトで検索します。

http://md5decoder.org/b781cbb29054db12f88f08c6e161c199

md5 ('grape')
b781cbb29054db12f88f08c6e161c199
md5x2 ('grape')
780438d5b6e29db0898bc4f0225935c0
grapeを2回MD5でハッシュ化した値のようです。ということで、780438d5b6e29db0898bc4f0225935c0のハッシュ化前の値であるb781cbb29054db12f88f08c6e161c199をキーとして入力してみます。

$ ./dMd
Enter the valid key!
b781cbb29054db12f88f08c6e161c199
The key is valid :)

validと表示されました。

フラグは、

b781cbb29054db12f88f08c6e161c199

です。



仮想通貨
岡田 仁志
東洋経済新報社
2015-05-29





Sharif University CTF 2016 writeup Rail Fence Cipher

Rail Fence Cipher

crypto

Decrypt and find the flag.

Download

レールフェンス暗号という暗号方式があるようです。決めた文字数分だけ縦書きしていき、その文字数に達したら右側の頭から同様に同じ文字数分だけ縦書きをしていきます。このとき、縦方向の列をフェンス、横方向の行をレールというそうです。全て書き終わったら、1行目のレールから順に文字列をつなげていけば暗号文が完成します。
AaY--rpyfneJBeaaX0n-,ZZcs-uXeeSVJ-sh2tioaZ}slrg,-ciE-anfGt.-eCIyss-TzprttFliora{GcouhQIadctm0ltt-FYluuezTyorZ-
暗号化の手順が分かりました。暗号文を適当なところで改行すると縦読みできそうですので、与えられた文字列を縦読みができるように適当なところで改行してみます。
AaY--
rpyfn
eJBea
aX0n-
,ZZcs
-uXee
SVJ-s
h2tio
aZ}sl
rg,-c
iE-an
fGt.-e
CIyss-
Tzprtt
Fliora
{Gcouh
QIadct
m0ltt-
FYluue
zTyorZ
-
フラグの形式であるSharifCTFが見つかります。このとき21行ありますので、フェンスが21前後であると考えられます。
次のサイトで、レールフェンス暗号の復号ができますので、Rails:21でDecryptしてみます。
http://rumkin.com/tools/cipher/railfence.php
A-fence-is-a-structure-that-encloses-an-area,-SharifCTF{QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJt},-typically-outdoors.
このとおり、平文を得ることができました。
フラグは、
QmFzZTY0IGlzIGEgZ2VuZXJpYyB0ZXJt
です。



記事検索
ギャラリー
  • TetCTF 2023 NewYearBot
  • UUT CTF writeup Find The Password
  • UUT CTF writeup The Puzzle
  • Hack Zone Tunisia 2019 writeup Microscope
  • Hack Zone Tunisia 2019 writeup Welcome
  • SwampCTF 2019 writeup Brokerboard
  • SwampCTF 2019 writeup Leap of Faith
  • SwampCTF 2019 writeup Last Transmission
  • CBM CTF 2019 writeup Long road
カテゴリー