書ける時に書いたやつ

にわかの備忘録的なサムシング

KOSENセキュリティコンテストに参加した話

はじめまして、そんちょうです.

KOSENセキュリティコンテストにraspberryで参加してきました.
2300点で18位でした。目標としては半分以上の順位を目指していたのでまあまあの結果でした.

解答することのできた問題のいくつかのWriteUpを書いていきたいと思います.

01 Binary 100 フラグを答えろ

バイナリをダウンロードしたのでstrings打ったらフラグらしきものが出てきたのでいらないものを消したらフラグゲット.

02 Binary 100 ファイル名を探せ

ファイルをダウンロードしたのでstrings打ったら、ファイル名らしきものがたくさんでたのでgrepでSCKOSENを検索.

03 Binary 200 ボスを倒せ

ユーザー名を入力してボスと自動で戦うプログラムが動いてました.
適当な文字数でユーザー名を増やしてたらユーザーとボスのHPも増えたので,そこから入力する文字数を減らしたり文字を変えたらボスのHPが倒せる範囲になったのでフラグが取れました.
ちゃんとした解放は先人のを参考にします.

05 Crypto 100 簡単な符号化2

自分の解くことのできた問題で1番難しかったです.
ファイルにアクセスすると以下の文字列が

NGI1MDA0MDMwMDE0MDgwODAwMDgyYzU2NGI1MzAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMGIwMDAwNzI1ZjZjNjUyZjczNzIyZTZjNjVhZDczZGQ5MjAzNGEwYzQx
ZWY4NTE0ZmJlZTQzZDliYjEwNTY5ZDkxOGRlZGJkMDhhOTEzMTAwZmIyNjY0M2Ji
M2YzYjQ2NjQ2ZmFkMjBlZjJlOGE0NTk0Y2JjMTI3MjQ3Y2U3NzQ4NGIzYmJhOTNm
OTYxNzYyZWNiMGQwNWE2OTFjNTBiNDRjOGMyZTllMWFmNzBlMWJlYmY1ZDhlZWFi
NGY5MWFhNTQ0ZjI0NjUyZTc3NTVkNjQyOTUzMDZlOTJiMzExZDg5OTZlNTNlMjYy
Mjc1MDE0NDNhNTRmMzI5NjIyNjJhNDczNzE5MWI2ZGIyOGQ3M2QzZjlmYTBhYTc5
ZDViZDdiMjAwMWJiNzg3NWZjNGJlZjFiMGMzOGIwY2VlNjhkNzNkOTE3MjhkMDIy
MjE3Mzg1NGI0NGQwNzVlMTZhOTJjNTIyYWU3MTI0MTkxNzIzNzUwZGExZmJmM2I2
YTI4NzAxYTk5NzgwYjZiOWU1N2Y1YmJhZTJlMGUxNzNkOTYwMjMyZTRhNTE0NDRi
ZmY1NzM0NDk3YzU3YmNjM2IxNDY3NWY4NGZlMjU1OWFiMzg3ZTg2ZjAxZGY0YjUw
MDgwN2FkOTgwYWM1MDBkZDAwMDAwMjQ0MDAwMDRiNTAwNDAzMDAxNDA4MDgwMDA4
MmM1NjRiNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMDAwMDZmNzc2NDcy
NjQyZjYzNmY2ZDc1NmU2NTJlNzQ2ZDc4ZWQ2YzVkOThkYjZiMTQzMGVmODYyYmY3
以下略

とりあえずコピーして.txtファイルにしてbase64でデコードしてみた.

4b5004030014080800082c564b53000000000000000000000000000b0000725f6c652f73722e6c65ad73dd92034a0c41ef8514fbee43d9bb10569d918dedbd08a913100fb26643bb3f3b46646fad20ef2e8a4594cbc127247ce77484b3bba93f961762ecb0d05a691c50b44c8c2e9e1af70e1bebf5d8eeab4f91aa544f24652e7755d64295306e92b311d8996e53e26227501443a54f32962262a4737191b6db28d73d3f9fa0aa79d5bd7b2001bb7875fc4bef1b0c38b0cee68d73d91728d0222173854b44d075e16a92c522ae7124191723750da1fbf3b6a28701a99780b6b9e57f5bbae2e0e173d960232e4a51444bff5734497c57bcc3b14675f84fe2559ab387e86f01df4b500807ad980ac500dd0000024400004b5004030014080800082c564b53000000000000000000000000001100006f776472642f636f6d756e652e746d78ed6c5d98db6b1430ef862bf7ee82db1b086da999b6531ba65d654816bb0ab20bdb2dfa22524266e2ff63527d3b2c08fdacc3e86c10a2c8ace747cf3d9639a58cabcb4a073b0615242ce6d1010430c4039e325663e026f57e6ce90602434a439619c2c04a291e3570777dc759cf3914b63d310a30c54c013cc95b9562885575427146b92685e2cb3e8d3851790ce006b90f3880996b4a07117381721a988115b1525c4da89657e341733282b130f3071c11120da8aaaf50b0daad4fee77f1b494eae3513e2e6b217386793294a08589a4214b9d66144c48f6ead81e744fa25ce4fac2c85120a7c6b354782f543b24a18c70c13bd518a828bda67cacb740a0b54775f29f6adf25568a668db27d50a5b66e56c2984c9a278262fef5f8902a11bd1aea8ecd794efececf9a1fb7c5e325a6122cc42304b0346074d66aca42bdf3c56db2e18790a96604f7ea0d0778024936e6026b6b02cd913480747856bd0da62d9c44e8ce52b6374b48a50d5a364f38598075a220cc1035f5eb472c9877d66d70eb8d1da3c6dcf022fce617ac65512758ea974fa7b67b9bdc4d927f1f466b94507ff8bef2
以下略

出力された数列をバイナリエディタに突っ込んでみたらKPやowdrd/comune.tmxやらの文字列に注目すると,ZIP形式でwordのファイルかなと思ったけどこの状態では開けなかった.
ちょっと考えてたら1byteずつで入れ替わっていることに気づいたので元に戻すpythonコードを書いてみた.

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import re
buf='4b5004030014080800082c564b53000000000000000000000000000b0000725f6c652f73722e6c65ad73dd92034a0c41ef8514fbee43d9bb10569d918dedbd08a913100fb26643bb3f3b46646fad20ef2e8a4594cbc127247ce77484b3bba93f961762ecb0d05a691c50b44c8c2e9e1af70e1bebf5d8eeab4f91aa544f24652e7755d64295306e92b311d8996e53e26227501443a54f32962262a4737191b6db28d73d3f9fa0aa79d5bd7b2001bb7875fc4bef1b0c38b0cee68d73d91728d0222173854b44d075e16a92c522ae7124191723750da1fbf3b6a28701a99780b6b9e57f5bbae2e0e173d960232e4a51444bff5734497c57bcc3b14675f84fe2559ab387e86f01df4b500807ad980ac500dd0000024400004b5004030014080800082c564b53000000000000000000000000001100006f776472642f636f6d756e652e746d78ed6c5d98db6b1430ef862bf7ee82db1b086da999b6531ba65d654816bb0ab20bdb2dfa22524266e2ff63527d3b2c08fdacc3e86c10a2c8ace747cf3d9639a58cabcb4a073b0615242ce6d1010430c4039e325663e026f57e6ce90602434a439619c2c04a291e3570777dc759cf3914b63d310a30c54c013cc95b9562885575427146b92685e2cb3e8d3851790ce006b90f3880996b4a07117381721a988115b1525c4da89657e341733282b130f3071c11120da8aaaf50b0daa以下略'
list = re.split('(..)',buf)[1::2]
#print list
ans = []
judge = 0
i=0
flag = ""
for j in list:
	judge = i%2
	print judge
	if judge==0:
		ans.append(list[i])
	elif judge!=0:
		ans.insert(i-1,list[i])
	i+=1
k=0
for h in ans:
	flag += str(ans[k])
	k+=1
print flag

即席で書いたので汚いコードです.配列が偶数番目ならそのまま追加,奇数番目ならその前の位置に格納して出力する仕組みです.
元に戻ったバイナリが出力されたのでdocxファイルにして表示したらフラグが取れた.
100点問題のレベルじゃないと思いましたまる

07 Crypto 100 簡単な符号化

こっちは簡単でした.
base64でデコードするだけでした

Miscは全てGoogle先生に聞くだけでした.

15 Network 100 寝坊気味のコンピュータ

pacingのファイルが渡されたので中身を見てみたらフラグがいくつかのパケットに分割されていたのでくっつけたらフラグゲット.

16 Network 100 ログインしたいんだ!

これもpacingが渡されました.中身をみてみたら

basic YWRtaW46U0NLT1NFTntiYXNpY19pc191bnNlY3VyZX0=

があったのでbase64デコード

admin:SCKOSEN{フラグ}

フラグがとれた.

18 Web 100 ログインせよ

アクセスするとよくあるログインフォームが.
adminとしてログインしないといけないみたいなのでいつもの

user:admin
pass:' or 1=1 --

フラグゲット

19 Web 100 灯台下暗し

アクセスするとログインフォームのしたにこんなものが

$try = false;
  $login = false;

 if( isset($_POST[‘name’]) && isset($_POST[‘password’])){
    $name = htmlspecialchars($_POST[‘name’], ENT_QUOTES);
    $password = htmlspecialchars($_POST[‘password’], ENT_QUOTES);

   $db = new SQLite3(‘data.db’);
    
   $stmt = $db->prepare(“SELECT name FROM users WHERE name = ? AND password = ?“);
    $stmt->bindValue(1, $name, SQLITE3_TEXT);
    $stmt->bindValue(2, $password, SQLITE3_TEXT);

   $rows = $stmt->execute();
    $row = $rows->fetchArray();

   $try = true;
    $login = $rows && $row[‘name’];
    $db->close();
  }

適当にsqlインジェクションしようとしてもできなかった.
urlの末尾にindex.phpとか打ってた時にdata.dbも試してみたらダウンロードできたのでsqlite3を起動してアクセスしてみた.

$ sqlite3 data.db 
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> .tables
users
sqlite> .schema users
CREATE TABLE users(name, password);
sqlite> select name, password from users;
admin|SCKOSEN{フラグ}

これに気づけなくて解くことができたのがラスト5分でした.

自分が解いたのはこのくらいです.

感想

他のチームメイトがKoHやってる隙にといたので割と多く解けました.
200点問題の難しいものとかはチームメイトに投げていたので自力で解けるようになりたいと思いました。
こういうコンテスト系は初めてでしたが楽しかったです.

最後に

チームメイトと引率の先生方,お疲れ様でした.