Trend Micro CTF Asia Pacific & Japan 2015 Online Qualifier

Trend Micro CTF Asia Pacific & Japan 2015 Online Qualifier writeup Programming100

Category: Programming
Points: 100

Click on the different color.
http://ctfquest.trendmicro.co.jp:43210/click_on_the_different_color

Please type in the flag in the 'TMCTF{<flag>}' format.

Please replace <flag> with the actual flag you would like to submit.
Example: If your flag is abc, then please type in TMCTF{abc}.
与えられたURLにアクセスすると、下図のような格子状の画像が表示されます。このマス目のうち1箇所だけ
が微妙に色が異なっているので、そのマス目をクリックすると次の画像が表示されるようになっています。
最初は2×2から始まって、3×3、4×4、という風にどんどん細かくなっていきます。
下図は13×13ですが、目で判断するのは至難の業です。
no title

そこで、HTML5+javascriptで画像の特定座標の色を読み取って、異なる色の座標を取得するプログラムを書きます。
<canvas id='panel' width="390" height="390"></canvas>
<div id='answer'></div>
<script>
(function() {
    var src = 'ff3d5e6f48bee72d18d9ff04d3e5955199d2f8aa7684.png';
    var canvas = document.getElementById('panel');
    var pal = document.getElementById('answer');
    context = canvas.getContext('2d');

    var image = new Image();

    // 画像要素を生成します
    image.src = src;

    // 画像読み込み完了
    image.onload = function() {

        var RATIO = 51; // 画像の分割比
        canvas.width = image.width;
        canvas.height = image.height;
        // 画像をキャンバス上に表示します
        context.drawImage(image, 0, 0, image.width, image.height);
        var colorArray = context.getImageData(0, 0, canvas.width, canvas.height).data;
        var save_r = 0;
        var save_g = 0;
        var save_b = 0;
        var flag = 0;
        for ( var x = 0 ; x<canvas.width; x++) {
            for (var y = 0 ; y<canvas.height; y++) {
                if (colorArray[(((y * canvas.width) + x) * 4) + 0] == 255 && colorArray[(((y * canvas.width) + x) * 4) + 1] == 255 && colorArray[(((y * canvas.width) + x) * 4) + 0] == 255) {
                } else {
                    if (save_r == 0 && save_g == 0 && save_b == 0) {
                        save_r = colorArray[(((y * canvas.width) + x) * 4) + 0];
                        save_g = colorArray[(((y * canvas.width) + x) * 4) + 1];
                        save_b = colorArray[(((y * canvas.width) + x) * 4) + 2];
                    }
                    if (save_r == colorArray[(((y * canvas.width) + x) * 4) + 0] &&
                        save_g == colorArray[(((y * canvas.width) + x) * 4) + 1] &&
                        save_b == colorArray[(((y * canvas.width) + x) * 4) + 2]) {
                    } else {
                        pal.innerHTML = 'http://ctfquest.trendmicro.co.jp:43210/' + src.split('.')[0] + '?x=' + x + '&y=' + y;
                        flag = 1;
                        break;
                    }
                }
            }
            if (flag == 1) break;
        }
    };
})();
</script>
表示された画像をスクリプトと同じフォルダに保存し、画像のファイル名をvar src変数に指定して実行すると、下図のとおり、色の異なる座標を取得することができます。これを繰り返すことでフラグを得ることができます。

下図は最後の画像です。この次にフラグが表示されました。

1
表示されたフラグは、
Congraturations!! The flag is TMCTF{U must have R0807 3Y3s!}
です。



Trend Micro CTF Asia Pacific & Japan 2015 Online Qualifier writeup Analysis-others100

Category: Analysis-others
Points: 100

Please fix the PDF file for me.

Link
Please type in the flag in the 'TMCTF{<flag>}' format.

Please replace <flag> with the actual flag you would like to submit.
Example: If your flag is abc, then please type in TMCTF{abc}.
PDFファイルが破損していて表示することができません。
以下のサイトでPDFファイルの形式を確認しながら、破損している部分を修復します。
http://www.kobu.com/docs/pdf/pdfxhand.htm

まず、ID13のストリームオブジェクトに辞書(<< ... >>)がありません。また、ID14とID19のオブジェクトが参照されていません。
ID13のストリームデータ(stream~endstream間)は11991バイトあります。ID14の値が11991なので、ID13の辞書に「/Length 14 0 R」を参照で入れます。次に、ID19の辞書がID17と似ています。ID11の辞書をID13にも適用して、/Lengthを12→14、/SMaskを17→19としてみます。次のようになります。
<< /Length 14 0 R /Type /XObject /Subtype /Image /Width 305 /Height 50 /ColorSpace
16 0 R /Intent /Perceptual /SMask 19 0 R /BitsPerComponent 8 /Filter /FlateDecode   
>>
これを、ID13の辞書として追記してファイルを保存し、表示してみます。
no title
PDFファイルを表示できるようになりました。しかし、フラグらしきものは読み取れません。
あとは、調整できるとすると画像の幅、高さくらいになります。試行錯誤の結果、/Widthを1220にすると、下図の通りフラグが読める状態になりました。
<< /Length 14 0 R /Type /XObject /Subtype /Image /Width 1220 /Height 50 /ColorSpace
16 0 R /Intent /Perceptual /SMask 19 0 R /BitsPerComponent 8 /Filter /FlateDecode   
>>
1
したがって、フラグは、
TMCTF{There is always light behind the clouds.}
です。

PDF構造解説
John Whitington
オライリージャパン
2012-05-25


Trend Micro CTF Asia Pacific & Japan 2015 Online Qualifier writeup Analysis-offensive100

Category: Analysis-offensive
Points: 100

http://ctfquest.trendmicro.co.jp:8888/95f20bb7856574e91db4402435a87427

Please type in the flag in the 'TMCTF{<flag>}' format.

Please replace <flag> with the actual flag you would like to submit.
Example: If your flag is abc, then please type in TMCTF{abc}.
いろいろなユーザーでログインしてみますが、これと言って変化がありません。adminやrootでログインしても管理者権限になるわけでもありません。下表はuser/passの組み合わせとそのユーザーのUser IDです。
user/passUser ID
admin/password1011
flag/flag460
0/02286
1/1231
2/2391
5/5278
a/a207
root/root238
admin/admin947

特に手掛かりもありませんでしたが、しばらくlogin Logを眺めていると、UserID:1のユーザーが1分間隔で定期的にログインしているのが分かりました。そのタイミングに合わせてログインすると下図のようにフラグが表示されます。

no title

したがって、フラグは、
TMCTF{ad70c0b2a1d07792a310b2349cab8890}
です。



Trend Micro CTF Asia Pacific & Japan 2015 Online Qualifier writeup Analysis-defensive100

Category: Analysis-defensive
Points: 100

Analyze this! (pass: wx5tOCvU3g2FmueLEvj5np9xJX0cND3K)

Link
Please type in the flag in the 'TMCTF{<flag>}' format.

Please replace <flag> with the actual flag you would like to submit.
Example: If your flag is abc, then please type in TMCTF{abc}.
ダウンロードしたファイルを解凍して、Linuxの実行ファイルを実行するだけでフラグが表示されました。
% ./vonn
You are on VMM!
TMCTF{ce5d8bb4d5efe86d25098bec300d6954}
フラグは、
TMCTF{ce5d8bb4d5efe86d25098bec300d6954}
です。


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