KOSENセキュリティコンテスト2019Writeup

#はじめに

高専のコンピュータ部でお誘いがあったのでやってみました。

初めてだったので少し不安がありました...が！

結果は49チーム中35位でした！個人的には上々です！

問題文詳しく覚えてないので詳しいとこは適当です。  

その辺は他の方のWriteupを見てください(丸投げ)。

#KOSENセキュリティコンテストとは？
高専生のみ参加できる、CTF競技
相手のデータをぶっ壊してFLAGと呼ばれるデータを得て得点する

公式ページ(2019年)↓
https://www.ishikawa-nct.ac.jp/lab/I/k_seccon2019/
#Writeup
問題一覧↓
![EHyaPjlU4AALqt1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/5c9aaab5-8dca-993c-81c5-fef615612031.png)

※05は問題の不備により削除された。でも普通に解けてる人いたんだよなぁ...(恐怖)

##01回答は半角で
%[十六進数]の羅列が渡されました。

最初はpythonでゴリゴリ解こうと思ってましたが、

最終的に16進数->文字列変換サイト見つけて突っ込んでフラグを得ました。

あっ...。

お世話になりました↓
https://singoro.net/16henkan/

##02伝統的な暗号
暗号化された文字列が渡されました。ヒント無いなら多分シーザー暗号だろう！

 <b>違いました</b> 

単一換字式暗号?の様だなぁと思ったので検索をかけるー...と！

「ラグランジュ暗号」が引っ掛かった。

あとは復号するだけでしたがまぁ地味にややこしかったです。

##06無言のELF
文字入力を求められますが、入れても何も起きないELFファイルが渡されました。

とりま私大好きIDAで開く。

比較しているらしき文字列がそのままポンと出ていたのでそれをプログラムに突っ込んだらフラグが出てきました。

 <b>アセンブラ？読めません！<b/> 

##09プログラミング言語を当てよう
今話題と言えばBlawnだよなぁと思いつつ問題を見ますと...

ソースコードが渡されてこのプログラミング言語は何かという問題でした。

Blawnでよかったのに...無駄に検索掛けてました...。

##10 ツートントン 
モールス信号が描かれた画像を受け取りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496507/5b0a92d3-670e-67b8-eea7-9172f11e6e9c.png)

とりあえずJAVAでサクッと解析プログラム書きーの

```
import java.awt.image.BufferedImage;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.*;

import javax.imageio.ImageIO;

public class Tontu {
    public static void main(String[] args) {
        try {
            File f = new File("./out.txt");
            PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(f)));
            BufferedImage b = ImageIO.read(Tontu.class.getResourceAsStream("./Image.png"));
            int scounter = 0;
            for (int h = 0; h < b.getHeight(); h++) {
                for (int w = 0; w < b.getWidth(); w++) {
                    float d;
                    System.out.println(d  = b.getRGB(w, h));
                    if (d < -1 ) {
                        scounter++;
                    } else {
                        if (scounter == 2) {
                            pw.print(".");
                        } else if (scounter == 5) {
                            pw.print("-");
                        } else {
                            pw.print(" ");
                        }
                        scounter = 0;
                    }
                }
            }
            pw.close(); //実際はfinally節に書くべき
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
```

記号の隙間を詰めーの

変換サイトにぶち込みーの

解けるーn(殴

 <b>私に騙されないでください！JAVAはこういう風にサクッと書くには向いてません！</b> 

一番やりごたえがありました(ぉ

お世話になりました↓
https://morse.ariafloat.com/en/

##12 大人たちの無意味な慣習
.pcapngを受け取りました。

まず鮫さん(WireShark)で開きます。

Http(s?)通信されていたファイルをエクスポートします。

<b> 中身見ると普通にFLAGが書いてありました。</b> 

メールのやり取りしてるみたいな内容でした。

パスワードを別メールで送るのはあまり意味が無いということが分かりましたね。

いや、そもそもパスワードはメールで送っていいのか...?

##17目に見えなくても

純白のページへのリンクが渡されるのじゃ。

ブラウザの「ソース表示」をおすのじゃ。

コメントに書いてあったフラグを得るのじゃ。

##20偉くなりたい
ログインするページへのリンクとユーザIDとパスワードが渡されました。

管理者としてログインしたいという問題でした。

まずページのソースを見ます。

 <b>すると隠しフィールドとして"is_not_admin"が渡されてました...。</b> 

しばらく迷いましたが、そのソースをローカルにコピペしまして、

formのaction先を書き換えて、隠しフィールドを"is_admin"に書き換えて実行！

FLAGを得ました！

これって所謂 くろすさいと・ふぉーじぇり・あたっく って奴なのかなぁ。

#終わりに
初めてにしてはまぁまぁ上出来だったと思います...が!

<b>みんな強すぎるんだよぉ！</b> 

...まぁ来年の参加も前向きに検討しています。

企画・作問・チームメンバーの皆さんありがとうございました！