sCTF 2016 Q1

sCTF 2016 Q1 writeup When in Rome

When in Rome10 points  Solved 299 times  Cryptography  Zachary Taylor

I heard of a cipher named after Julius Caesar, and I want you to try it out! Try decoding this message:

Nvctfdv kf jTKW! Nv yfgv pfl veafp kyv gifscvdj nv yrmv nizkkve wfi kyv wzijk hlrikvi fw 2016. Yviv zj pfli wzijk fw (yfgvwlccp) drep wcrxj! jtkw{ny3e_1e_tkw_u0_r5_tkw3i5_u0}

「sctf{」をアルファベットで17文字分ずらすと「jtkw{」になります。したがって、上のメッセージのアルファベットのみを17文字分戻してみます。

welcome to sctf! we hope you enjoy the problems we have written for the first quarter of 2016. here is your first of (hopefully) many flags! sctf{wh3n_1n_ctf_d0_a5_ctf3r5_d0}

フラグは、

sctf{wh3n_1n_ctf_d0_a5_ctf3r5_d0}

です。




sCTF 2016 Q1 writeup Verticode

Verticode90 points  Solved 126 times  Cryptography  Arun Dunna

Welcome to Verticode, the new method of translating text into vertical codes.

Each verticode has two parts: the color shift and the code.

The code takes the inputted character and translates it into an ASCII code, and then into binary, then puts that into an image in which each black pixel represents a 1 and each white pixel represents a 0.

For example, A is 65 which is 1000001 in binary, B is 66 which is 1000010, and C is 67 which is 1000011, so the corresponding verticode would look like this.

Except, it isn't that simple.

A color shift is also integrated, which means that the color before each verticode shifts the ASCII code, by adding the number that the color corresponds to, before translating it into binary. In that case, the previous verticode could also look like this.

The table for the color codes is:

0 = Red
1 = Purple
2 = Blue
3 = Green
4 = Yellow
5 = Orange

This means that a red color shift for the letter A, which is 65 + 0 = 65, would translate into 1000001 in binary; however, a green color shift for the letter A, which is 65 + 3 = 68, would translate into 1000100 in binary.

Given this verticode, read the verticode into text and find the flag.

Note that the flag will not be in the typical sctf{flag} format, but will be painfully obvious text. Once you find this text, you will submit it in the sctf{text} format. So, if the text you find is adunnaisawesome, you will submit it as sctf{adunnaisawesome}.

問題文に書かれていることを整理します。まず、黒がビット1、白がビット0を表します。したがって、下の画像は1000001=0x41=A、1000010=0x42=B、1000011=0x43=C、となり、ABCを表します。

A-Code


次の画像は、元の値(文字コード)に、左側の色ごとに決められた数値を加算して、白黒のビット化をしています。紫は+1加算、赤は0加算(そのまま)です。したがって、ABCがそれぞれ紫赤紫により、紫A=1000001+1=1000010、赤B=1000010+0=1000010、紫C=1000011+1=1000100になります。


B-Code

それでは、問題文の内容をRubyプログラムで書いてみます。

require "RMagick"
include Magick

def get_rgb_arry(file)
  img = ImageList.new(file)
  str = ""
  for y in 0...img.rows/12
    ch = 0
    color = img.pixel_color(0, y * 12)         #色を取得
    if color.red == 65535 and color.green == 0 and color.blue == 0 then
      add = 0   #赤
    elsif color.red == 32896 and color.green == 0 and color.blue == 32896 then
      add = 1   #紫
    elsif color.red == 0 and color.green == 0 and color.blue == 65535 then
      add = 2   #青
    elsif color.red == 0 and color.green == 32896 and color.blue == 0 then
      add = 3   #緑
    elsif color.red == 65535 and color.green == 65535 and color.blue == 0 then
      add = 4   #黄
    elsif color.red == 65535 and color.green == 42405 and color.blue == 0 then
      add = 5   #橙
    else
      p color.red
      p color.green
      p color.blue
    end
    for x in 0..6
      src = img.pixel_color(7 * 12 + x * 12, y * 12)      #文字を取得
      ch = ch << 1
      if src.red == 0 then
        ch += 1
      end
    end
    str = str + (ch - add).chr
  end
  return str
end

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

これを実行すると、下記の文字列を得ることができます。

JoeLopowasamanofmildtemperamentshortstatureandhadthegoaltobecometheworldsfastesttelephoneeaterThoughLoponeverknewevenbasicphysicshecreatedatelescopecapableofsightingthesmallesthaironanalienwholivedquiteafewlightyearsawayJoeLopoquicklydestroyedalargeboulderandusedtheshatteredremainstoformeightsmallstatuesthatstronglyresembledtinycreaturesbeingorrelatedtothewaterfleaHeplacedtheminacircularpatterntoformasortofshrineandplacedthetelescopeinthemiddleofitHethenchanneledthepowerofthestonewaterfleasintothetelescopetoviewthepoweroftheheavensHewasinatrancewiththebeautyofthemysteriousdimensionanddidntevennoticetheverylargetornadoheadingtowardhimTheshrinewasquicklydemolishedandtheimmediatewithdrawlofpowersentJoeLobointoalairofpitchblacknessfoundtobeaparalleldimensionthatcausABCiamtheflagalllowercasenojokeDEFanyonewhosefirstnamebeganwithJalongwithMLandQtobecomeratheruncomfortableJoewasalsosuddenlyintroducedtoundroclamaticolomphasisciousytheeccentrictapewormwithastrongmorrocanaccentImundroclamaticolomphasisciousytheeccentrictapewormIlikepizzasohowareyadoinIhavenoideasaidJoe

flagで検索するとABC~DEFで囲まれた部分がヒットします。これをフラグの形式にしてsubmitすると正解でした。
よって、フラグは、

sctf{iamtheflagalllowercasenojoke}

です。






sCTF 2016 Q1 writeup Secure Text Saver

Secure Text Saver60 points  Solved 94 times  Reversing  Zachary Taylor

Will you test out my new program for me? It saves important info and keeps it away from prying eyes!

ダウンロードしたファイルはjarファイルですので、実行してみます。LoginフォームとSign Upフォームがあります。


no title

Sign Upフォームに適当なUsernameとPasswordを入力してSign Upボタンをクリックすると、下図のようにSecure Text Saver画面が表示されます。Save Textに適当な文字列を入力してSaveボタンをクリックすることで、文字列を保存することができるようです。


3


それでは、逆アセンブルして動作を解析します。まず、jarファイルはzip形式で圧縮されているだけなので、そのまま解凍します。次に、javapコマンドで逆アセンブルします。

>javap -c -l -p -v -constants Login_Page.class > aaa.txt

逆アセンブルされた情報をざっと眺めてみると、以下の文字列が怪しそうです。

         0: getstatic     #2                  // Field accounts:Ljava/util/ArrayList;
         3: new           #3                  // class Account
         6: dup          
         7: ldc           #4                  // String ztaylor54
         9: ldc           #5                  // String ]!xME}behA8qjM~T

Usernameにztaylor54、Passwordに]!xME}behA8qjM~Tを入力して、Loginします。


6

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


7

フラグは、

sctf{w0w_th4t_w45_pr377y_e45y}

です。






sCTF 2016 Q1 writeup rev2

rev245 points  Solved 86 times  Reversing  Arun Dunna

Little bit harder?

The answer will not be in the typical sctf{flag} format, so when you do get it, you must put it into the format by doing sctf{flag_you_found}

ダウンロードしたファイルのファイルタイプをfileコマンドで確認します。Linuxの64bitバイナリです。

$ file rev2

rev2: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3c07a67e1a790d75ac819159d8c7d824704b0fc6, not stripped

objdumpコマンドで逆アセンブルして動作を解析します。

$ objdump -s -D rev2 > aaa.txt

rev1と同様、入力されたデータを数値として読み込み、0x30dda83=51239555と比較して分岐しています。

  40067d:    bf c0 07 40 00           mov    $0x4007c0,%edi            #%d
  400682:    b8 00 00 00 00           mov    $0x0,%eax
  400687:    e8 c4 fe ff ff           callq  400550 <scanf@plt>
  40068c:    8b 45 f8                 mov    -0x8(%rbp),%eax
  40068f:    3d 83 da 0d 03           cmp    $0x30dda83,%eax            #51239555
  400694:    75 7b                    jne    400711 <main+0xbb>

rev2を実行し、パスワードに51239555を入力します。フラグが表示されました。

$ ./rev2
What is the magic password?
51239555
Correct! Your flag is: 51196695

フラグは、

sctf{51196695}

です。






sCTF 2016 Q1 writeup rev1

rev120 points  Solved 134 times  Reversing  Arun Dunna

Let's start out with an easy, typical reversing problem.

The answer will not be in the typical sctf{flag} format, so when you do get it, you must put it into the format by doing sctf{flag_you_found}

ダウンロードしたファイルのファイルタイプをfileコマンドで確認します。Linux用の64bitバイナリのようです。

$ file rev1

rev1: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=82958aa51b05984108d0808209174e172dbf4338, not stripped

実行してみるとパスワードを聞いてきます。適当に入力するとそのまま終了してしまいます。

$ ./rev1
What is the magic password?
aaa

objdumpコマンドで逆アセンブルして動作を解析します。

$ objdump -s -D rev1 > bbb.txt

以下の箇所で、入力されたデータを数値として読み込み、0x5b74=23412との比較結果により分岐しています。

  400688:    bf 60 07 40 00           mov    $0x400760,%edi     #%d
  40068d:    b8 00 00 00 00           mov    $0x0,%eax
  400692:    e8 b9 fe ff ff           callq  400550 <scanf@plt>
  400697:    8b 45 fc                 mov    -0x4(%rbp),%eax
  40069a:    3d 74 5b 00 00           cmp    $0x5b74,%eax       #0x5b74=23412

  40069f:    75 16                    jne    4006b7 <main+0x61>

それではもう一度実行し、パスワードに23412を入力します。フラグが表示されました。

$ ./rev1

What is the magic password?
23412
Correct! Your flag is: h4x0r!!!

フラグは、

sctf{h4x0r!!!}

です。

熱血! アセンブラ入門
坂井弘亮
秀和システム
2015-06-12


sCTF 2016 Q1 writeup Lengthy Lingo

Lengthy Lingo35 points  Solved 104 times  Cryptography  Zachary Taylor

Can you crack the code? We intercepted this flag but can't seem to figure out how it was encrypted.

問題で与えられたファイルencrypted.datは、下記のとおり長桁数数値のカンマ区切りデータです。

8211425851727057573810336026447657378648606436653705214471504337148868375787615020316735272873372782753586827527228, 556583248852048700547687228714654588412241548488486080714105465661031780254061717027244360672162304, 20284544651170808332373262437178385122628242586447832311283361667288254058428121357535201617453654647158765645863507, 641645284837042555065848650227830204734325151143047352176245600677525006432433761200730571563633341874, 342027254152311761208102622711476060766457874721662321275836852351517711811816000537323162350554321727074377662105763512421, 8784438522271173870658770231428186802117155301006, 851271814388572043005646253257882778080174820026, 5152278471687871386558523063450583532127073562672, 58402637862327420571743120302372687101273281802261612756601674607838448505707031861822603516351, 21785101140108815817550581106056205782745154018141824355181082370871280767676236284851681813185837715816764233114503, 75468842754437666045225283217607131215027645570708460660328830332327177142278465383661516060875106636187, 004084640437678015242077825105508301572447342665703, 61481202401520261016664357016073057166333608341162105780323515016101153863676117172660402616212, 67137581235720433002567561134576801515557488388446451143124763477488234883858782254145355582823446828621622608, 361627034030368303676028686247165018284673708054087006308645155621758746177514040254386220583106811757757625237546558, 7810385411342768056733534421023138637284441362835570732441074536146640378166087702208483061622213015864744178, 36444234330553844133752416866028452105102612312567388022042422030572063230885142576850555741308084, 802883230005082840721262220788876753001086347568658, 341534080255806735433265360040272780103741476412352186617443776772213268688384082550850845484428537731847277078525, 10333246418112336008141207026837833383757140678451737, 08134072300283626153024487365357081852686250511232665305416067844633127324036603515586215406375, 6644373087400003840177255780830815845467788518288870370882611671221084040554741222518148623811630880, 1874164531238557446382474665024343750507725185687, 3428147020402505523081340422167387373508255465066108045356323725248343273364407211447325161637834351, 38200286578137344573560145113440874422470378362628547325035243016463725708045276675313550552284628814838001320, 806347380866376761651076678847632341843, 6782405613823305448662505356202253522216848541276876268, 21610750337217487876332037857863745176424178055560780304436148466245250311600818047084626115882, 415801364313780536684357757138703605673323462440428, 1827040640335580766163300361644068715736016848530473076211533371362711571245531763264474443716843266518325024215217713, 136813170810124226561107868288233631777673006131161, 56386101645506650038634685540666532268562572660065816374610141865505515757175067044411064058384018747200824734, 23278556752387282800763002774344020550130044713620824741611878673670284345480652052374014343450, 6554573117028387718748457516242144322752878438280643878616824404212754631068253016383858715753135370265663101, 7071157615018638763862668265461074228266233868268575, 02757727801286747044647151187608680766122643671571562512023570281384607483387264016523454428300602107836128463141727, 64233458887214322415114204638805878308031453712834554240213374675128542444605317148165856405325316707363087756232244, 531847048452644248150014378663516501141163107814524, 868348813862807873166628676351868634540831417145714765101404566857555265252062402176652860660044803785874242872474, 85215280840021114401857327137683348056058207177166561135102265635132711853708453122316516272738347116321284205813607575250722

このファイルのデータをカンマで区切って、数値の桁数を文字コードとして解釈して、文字列を出力するRubyプログラムを書いてみます。

f = File.open("encrypted.dat", "r")
s = f.read
ary = s.split(",")
flag = ""
ary.each do |a|
  flag = flag + a.strip.length.chr
end
p flag

実行すると、次のとおりフラグが表示されました。

"sctf{101_th3_numb3r5_d1dn'7_3v3n_m4tt3r}"

フラグは、

sctf{101_th3_numb3r5_d1dn'7_3v3n_m4tt3r}

です。


たのしいRuby 第5版
高橋 征義
SBクリエイティブ
2016-02-26


sCTF 2016 Q1 writeup Ducks

Ducks30 points  Solved 107 times  Web  Michael Zhang

The ducks and I have a unfinished score to settle.

問題に記載されているリンクをクリックすると、下記のページが表示されます。ページ下部にsource.phpへのリンクがありますのでクリックしてみると、source.phpを取得できます。


no title


source.phpでPasswordをチェックしている箇所を以下に抜粋します。extract関数でPOSTデータを変数に展開しています。そのあとで、$pass変数と$thepassword_123変数が一致しているかチェックし、一致している場合にフラグが表示されるようです。

                    <?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
                        <?php
                        extract($_POST);
                        if ($pass == $thepassword_123) { ?>
                            <div class="alert alert-success">
                                <code><?php echo $theflag; ?></code>

それでは、Fiddlerを起動し、上記ページでsubmitしたときのリクエストを記録します。そして、下図のようにFiddlerでそのリクエストを右クリックし、「Replay」→「Reissue and Edit」を選択します。


1

すると、下図のように画面右側にリクエストを編集して再度リクエストを投げることができる画面が表示されます。Nameにpassとthepassword_123を追加し、Valueはどちらも同じ文字列にします。そして、「Run to Completion」をクリックすると、リクエストが発行されます。


2

すると、下図のとおりレスポンスが返ってきます。


3

フラグは、

sctf{maybe_i_shouldn't_have_extracted_everything_huh}

です。



実践 Fiddler
Eric Lawrence
オライリージャパン
2013-05-25



sCTF 2016 Q1 writeup Banana Boy

Banana Boy20 points  Solved 118 times  Forensics  Zachary Taylor

Carter loves bananas, but I heard a rumor that he's hiding something!

Can you find it?

問題で与えられたファイルは次のような画像ファイルです。


carter

バイナリエディタで確認すると、下図のようにJPEGの終了を表すFF D9の後にJPEGの開始を表すFF D8があります。


no title

FF D8以降をコピーして別ファイルに保存します。そのファイルを表示すると次のような画像ファイルが表示されます。


1

したがって、フラグは、

sctf{tfw_d4nk_m3m3s_w1ll_a1w4y5_pr3v4il}

です。


JPEG―概念からC++での実装まで
橋本 晋之介
ソフトバンククリエイティブ
2004-12




記事検索
ギャラリー
  • 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
カテゴリー