crashRT のブログ

技術とかそれ以外とか

ICTSC2023 に参加してきました

3/16~17にICTトラブルシューティングコンテスト2023の本戦に参加してきました! 結果は僕が所属するチームKMCは5位でした。チーム全員初参加にしては頑張った方なんじゃないかなと思います。 来年は優勝目指して頑張ります!

icttoracon.net

オフラインでの開催でいろんな人と会えるのはやっぱり良いですね。 オンラインではKMCと仲が良いtraPの人々と初めて会えたり、インターンで知り合った人と再会したり... いろんな方と話せて楽しかったです!

せっかくなので、本戦で僕が解いた問題について感想とかを書いていこうかなと思います。

問題の感想

[vkm] VKM

シェル芸の問題ですね。チームメイトとホテルの部屋で夜な夜な解いてました。 短くするよりもまずは動くものを作らないとな~と思っていたらchatGPTくんが結構良いものを出してくれちゃいました。

cat /dev/urandom | tr -dc 'A-Z' | fold -w 3 | uniq | head -n 20

これを少し修正して動くようにしたら83byteくらいの動くものが手に入ったので、あとは短くするだけでした。 消しても問題ない空白を消したり、'が実は必要なかったり、uniqしてsortしてshufsort -uR に置き換えたり... コマンドのオプションとかを色々調べながら短くしていった結果56byteまで削ることができました。 最終的に完成したワンライナー

tr -dc A-Z</dev/random|fold -w3|sed 99q|sort -uR|sed 20q

です。

以下のサイトが参考になりました。

qiita.com

[vhn] xへ繋がりたい!

名前を変えてしまったあのサービスに接続できるようにし、また、そのサービス名でユーザーを作成する問題でした。 全体的に名前に関する問題だったな~って感じがしました。

接続の部分はチームメイトがしてくれたのですが、ユーザーを作成するとうまく動かなかったのでそこから一緒に見ていきました。 ユーザーXだけ実行可能なプロセス数が0に制限されていたりパスワード認証でのSSHが2箇所で禁止されていたり...Xに対して恨みがあるんかな~とか思いながら直しました。 ulimit とか /etc/security/limits.conf とか知らなかったので勉強になりました。

[jpq] 初心者プログラマーでも make がしたい!

チュートリアル的な問題でした。 出力されたエラーを丁寧に見ていけば解決はできたのですが、ゼロ幅スペースとか ., の違いとか、微妙に気づきにくいものが多いな~という印象でした。

[aka] 秘密鍵ないなった

RSA暗号で遊んだことが何度かあったので解いてみました。 第1問は簡単に素因数分解できたのでただ計算するだけでした。

第2問はPeggyがヒントを話してくれていたのでそれを元に検索すると、 1089桁の素数が見つかったので多分片方はこれだろうと予想できました。 33x33に整列して表示したら各行・列・対角線上の値がそれぞれエマープ数になるようです。 こんなすごい素数があったんですね~

mywindow.blog.fc2.com

あとはこれでNを割って...という流れで、1000桁って64bitとかでは当然扱いきれないので、計算大変そうだな~って感じてました。 が、Pythonは特に何もしなくても上限なく整数が使えるらしいです。Pythonえらい!

ということでPythonで計算したら無事割り切れて、100桁の別の値が出てきました。 その値で検索してみると、10x10で整列するとこの素数も各行・列・対角線上の値がそれぞれエマープ数になるらしいです。 しかもこの100桁の素数もエマープ数らしいです。これまたすごい素数ですね...

www.zeldadungeon.net

ということで無事素因数2つが見つかったので秘密鍵を求めることができました。

...が、素因数を見つける過程を省略して2つの素因数が有名な素数であることをちゃんと記述していなかったため、点数をもらえませんでした... 普通に素因数分解はできない値なので、ちゃんとその過程も書く必要があったようです。来年以降は気をつけたいですね...

[nle] †権限デストロイヤー†

パソコンをロックせずにトイレに行ったらいろんなファイルの権限が000にされてしまっていた、という問題でした。 去年の実験中にパソコンをロックせずに席を離れている人がいて友達と 「chmod 000 / で完全にパソコンロックしちゃいたいね~」みたいな冗談話していたら似た状況に遭遇してしまいました。

チームメイトが chmod を復活させるコマンドを見つけてくれていた後を引き継ぎました。OS初期化しなくても復活させることが出来たんですね~

sudo /lib64/ld-linux-x86-64.so.2 /usr/bin/chmod 755 /usr/bin/chmod

いろんなコマンドも権限が000になっていたので sudo chmod /bin/* をしてしまったのですが、sudoパーミッションは変更してはいけなかったようです。再展開するしかありませんでした... 再展開後は必要なコマンドのみ権限を復活させながら進めていきました。

chmodmemo.txt の権限変えたら終わりかな~と思っていたのですが、流石にそれだけで終わるということはなく... ファイルのフラグが編集されていて変更不可になっていたようでした。 ファイルにフラグがあったんですね...知らなかったです。 lsattr とか chattrとか初めて使いました。

[kog] さよならリモートワーク

予選で今まで知らなかったVyOSが出ていたので本戦まで少し勉強していたのが役に立って良かったです。 無事firewallの設定を変更したら古の暗号方式がどんどん要求されてしまいました。 少し古い機器を使うときなどによく見かけたエラーでした。

.ssh/config の変更が禁止されているものの /etc/ssh/ssh_config は禁止されていなかったので想定解とは違いそうだと薄々思いながらも他の方法を知らなかったのでこの裏ルートで解消していましました。 サーバー側で使用する暗号を決める設定もあったんですね...

最後に

ICTSC2023 本戦で解いた問題について感想のような何かを書いてみました。 途中までしか解けなかった問題もありましたが、どの問題も解いていて楽しかったです! ありがとうございました!