#Level1 Q9 Web
問題文
HTML(Hyper Text Markup Language)は、Webサイトを記述するための言語です。
ページに表示されている部分以外にも、ページをより良くみせるためのデータが含まれています。
次のWebサイトからフラグを探して下さい。
[問題のURL]http://q9.ctf.cpaw.site
そう簡単にはいかないよね・・・ということで
HTMLのソースコードに隠されているのか?と推測、早速F12開発者ツールで確認。
ビンゴです!
#Level1 Q7.Reversing
問題文
拡張子がないファイルを貰ってこのファイルを実行しろと言われたが、どうしたら実行出来るのだろうか。
この場合、UnixやLinuxのとあるコマンドを使ってファイルの種類を調べて、適切なOSで実行するのが一般的らしいが…
問題ファイル: exec_me
与えられたファイルの種類を見てみると、""ファイル""とだけ書かれている。知っとるわい!
ということでLinuxのflieコマンドを実行
file exec_me
exec_me: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped
ということで、さっぱりわかりません。が、ELFとはxecutable and Linking Formatというバイナリ形式のファイルのことらしいです。この文字の羅列だけでは全く意味が分からないですし、見づらいので、以下のコマンドを実行します
readelf -h exec_me
ELF ヘッダ:
マジック: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
クラス: ELF64
データ: 2 の補数、リトルエンディアン
Version: 1 (current)
OS/ABI: UNIX - System V
ABI バージョン: 0
型: EXEC (実行可能ファイル)
マシン: Advanced Micro Devices X86-64
バージョン: 0x1
エントリポイントアドレス: 0x400440
プログラムヘッダ始点: 64 (バイト)
セクションヘッダ始点: 4504 (バイト)
フラグ: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 9
Size of section headers:64 (bytes)
Number of section headers: 30
Section header string table index: 27
ELFヘッダをこのように表示できます。(今知った)
ですが、あまり関係ありませんでした。
次に
./ exec_me
しかし権限がないと怒られる。
chmod 777 exec_me
解放!!
./ exec_me
実行するとフラグが出てきます。ふわ~~意外と時間かかった。。。
chmodコマンドは数字を三つ指定できるらしく、とりあえず777にしとけば最強ということを学びました。
#Level1 Q14 PPC
問題文
下にある配列の中身を大きい順に並べ替えて、くっつけてcpaw{並べ替えた後の値}をフラグとして提出してください。
例:もし配列{1,5,3,2}っていう配列があったら、大きい順に並べ替えると{5,3,2,1}となります。
そして、フラグはcpaw{5321}となります。
同じようにやってみましょう(ただし量が多いので、ソートするプログラムを書いたほうがいいですよ!)
[15,1,93,52,66,31,87,0,42,77,46,24,99,10,19,36,27,4,58,76,2,81,50,102,33,94,20,14,80,82,49,41,12,143,121,7,111,100,60,55,108,34,150,103,109,130,25,54,57,159,136,110,3,167,119,72,18,151,105,171,160,144,85,201,193,188,190,146,210,211,63,207]
public static void main(String[] args) {
int[] array = { 15, 1, 93, 52, 66, 31, 87, 0, 42, 77, 46, 24, 99, 10, 19, 36, 27, 4, 58, 76, 2, 81, 50, 102, 33, 94, 20, 14, 80, 82, 49, 41, 12, 143, 121, 7, 111, 100, 60, 55, 108, 34, 150, 103, 109, 130, 25, 54, 57, 159, 136, 110, 3, 167, 119, 72, 18, 151, 105, 171, 160, 144, 85, 201, 193, 188, 190, 146, 210, 211, 63, 207 };
int max = 0;
int j = 0;
System.out.print("cpaw{");
while (j < array.length) {
for (int i = j; i < array.length; i++) {
//並べ替え
if (max < array[i]) {
max = array[i];
array[i] = array[j];
array[j] = max;
}
}
System.out.print(array[j]);
j++;
max = 0;
}
System.out.print("}");
}
}
可読性0であります。許してください。クイックソートでやりました。
コンソールに出力されたテキストをそのままペーストしてポイントゲットです!
※数字ごとにコンマを打っていて最初は自分のコードが間違っていたのかと長考したのはここだけの秘密。
Level1でちょっと時間かかったのはこの3問だけでした。これからも精進します。
Linuxコマンド覚えたほうがいいなこれ・・・ではここで失礼します。