ふるつき

v(*'='*)v かに

明石高専IT勉強会CTFにちょっと出た

言い訳させてほしいんだけどちょっとしか出られてないので仕方ない。

明石高専というすごい高専の人たちが一般向けにCTFを開くと言うので参加しました。takoyaki (本当はzer0pts をチーム名にしてたけどチームidのtakoyaki が通ってしまった)という一人チームで出て、自明を数問とおして 810 pt で得点26チーム中13位でした。

registrationでまごついたりCTF環境を確保できなくて困ったりしていたので仕方ない。とにかく解けた問題のwriteupをします

santy check [10pt]

やるだけ

Don't Feel Look [Bianry, 100pt]

画像にフラグが書いてあるがこういうのは嘘なので strings する

easyBIOS [Binary, 300pt]

512バイトピッタリのbinaryが渡される。strings しても情報なし。fileコマンド打つと Boot Record と言われる。そんな気はしていた。 qemu をめっちゃ遅い回線で落としてきて qemu-system-i386 hoge するとフラグを吐く

Intro to AES [Crypto 100]

rubyでAES暗号化してるコードと出力をもらう。すべてソースコードにかいてあるので、 enctypt のところを decrypt になおして動かすだけ。ruby は デフォルトでは入ってないので apt-get install -y ruby すること。

Substitution [Crypto, 100]

単一換字暗号 solver に突っ込むだけ

leaking [Web, 100]

よくわからないけど確か cookie かなにかにbase64文字列があるのでデコードする。

itadakimasu [Network, 100]

HTTPのパケットをひたすら眺めてそれっぽい文字列を urldecode すると xxd の出力があるので vim で整形して勝ち

解けたけど submit 失敗 Try, it! [Web, Crypto, 150]

文字列を入れるとエンコードされる。2文字ずつで出力が変わることがわかったので文字の長さを見ると 32 だったし md5 でしょとあたりをつけて 、フラグっぽいエンコードを32文字ごとに分けて crack、出力をtr で整形してflag, 1min たりなかった。

感想

短い時間しか参加できなかったけど面白かった。CTFの問題を解く面白さ、わからない面白さなどを感じることができた。多分運営の人は運営の面白さとか作問の面白さを感じていたと思う。また参加したい。ありがとう、ありがとう。

今の所判明しているシェル芸botの仕様

Twitterルール:特定の人物や他の利用者を標的とした嫌がらせを禁じます。Twitterは、嫌がらせ、威圧、他者の発言に対する抑制を攻撃的な行為と見なします。

https://help.twitter.com/ja/rules-and-policies/abusive-behavior

わかんないよ

ここにすべてを置いてきた

github.com

github.com

シェル芸botで使用しているdocker イメージはこちら。一応dailyで更新されています。

hub.docker.com

基本仕様

#シェル芸 #危険シェル芸 #shellgei というタグのツイート(以下シェル芸ツイート)をシェルスクリプトとして解釈し、標準出力を140字程度に切り詰めて返す。なお、このとき @minyoruminyon という先頭のメンションとトリガーとなっているタグは削除された状態で解釈される。

ときどきこれ以外のハッシュタグもサポートしていて、いまは #ゆるシェル がそうだし昔は #新春シェル芸 がそうだった。

運営は私 @theoremoon だけど、いまは @ryuichiueda 先生にサーバ借りてそちらで動かしています。ありがたい……。

運営が私なので欲しいコマンドとか機能とかがあったら伝えてくれると実装したい。とうぜん Pull-req でもよい。

制限

当然いろんな制限がある。

  • 一回のシェル芸が終わると環境がリセットされる
  • ネットワークインターフェースは loopback しかもってない
  • 実行時間は最大20秒(時々変わるけど、これ以上長くすることはあまりない)
  • 自分自身のシェル芸を実行することはない
  • シェル芸botがフォローしているユーザのシェル芸のみを実行する
  • シェル芸のトリガーとなっているタグは削除した状態で実行される
  • シェルスクリプトとして返すステータスコードが0でないとだめ
  • 出力が15 で切り詰められる

シェル芸チェーン

2018年4月ごろ登場(多分)

シェル芸ツイートが引用ツイートの形であるとき、その引用ツイートの内容に続けて、シェル芸ツイートの内容を含めたものをシェルスクリプトとする。何回も連鎖ができる。

以下例

画像ツイート

2018-7-13 登場

/images に画像ファイルをおくとその画像をツイートに付与する。一枚だけしか対応してない。2018/11/27あたりに複数枚の画像に対応しました。多分辞書順に先頭4つが選ばれます。

以下例

2019-05-14 更新 このプルリクエストで表現できる画像の幅が広がりました

shebang 対応

いままでサボっていたんですが、shebangに対応しました。shebangなしだとbashスクリプトとして扱われます。

@shellgeibot

@shellgeibot という シェル芸bot よりもそれらしいアカウントが存在する。もともとはシェル芸botへの新機能の追加時にデバッグ用途で取得したアカウントだったんですが、適当な運用をしていたら鍵アカウントなのに follow request が来てしまって、いい機会なので公開したという経緯がある。

現在(2018/08/16)は twitter の UserStreams 廃止に伴って statuses/filter を用いた新しい(?) シェル芸bot のテストアカウントになっている (https://github.com/theoremoon/ShellGeiBot/tree/a3f35b47bd51075c56c3b08f7933258f89d98827)。 こちらもフォローしてフォローバックされていることが前提条件で、その上で #シェル芸 または #shellgei_test タグ付随のツイートをすることで発火する。

本家の@minyoruinyonが statuses/filterを用いる方式を採用したので、@shellgeibotは実験時を除いて停止しています。

本当にどうでもいい日記みたいなことだけど、 この機能を搭載した ShellGeiBot を 手元の arch マシンでビルドしたところ、 シェル芸botが動いている ubuntu では動かないELFができてしまった(GLIBC_2.28 が ubuntu にはまだ来てなくて、 arch ではこっちに依存してしまったのが問題らしい)。 こういうところで道を間違えるのが得意なので、 シェル芸botのビルドのために CircleCI を導入した。

画像取り込み

画像じゃなくてもいいんだけど、シェル芸タグのツイートに添付してある画像や映像を/media以下に取り込むようになりました。副作用的に、今までは画像付きのツイートはその画像のリンクが含まれているのでシェル芸botからも投稿しているように見えていたんだけど、これはできなくなりました。

一応例です。

CHANGELOG.txt

  • 2018-08-16 statuses/filter に対応した filter.json ブランチを作った。 @shellgeibot で運用している
  • 2018-07-13 画像付きツイートの機能を追加
  • 2018-11-27 画像を最大4枚までツイートできるようになった
  • 2019-01-13 shebang対応
  • 2019-05-14 unko.ls などがURLとして解釈(https://t.co/hogepiyo)されてしまいうまく動かない問題への対応
  • 2019-05-25 シェル芸bot本体と、docker imageを分離
  • 2019-06-27 メディアを取り込むようになった
  • 2019-07-12 自分自身のシェル芸は実行しないなどを追記
  • 2020-01-?? #shellgei タグに対応
  • 2020-01-29 出力の切り詰めを 100Kバイトから 15行に変更(あまりに yes が横行したため)
  • 2020-11-09 コンテナランタイムにgVisor(runsc)を使用するようになった
  • 2022-??-?? 自動フォローバックを開始しました。シェル芸botのアカウントをフォローしてから30日が経過したユーザをフォローバックします
  • 2023-03-18 なんか急に/status/filter.json から403が返ってくるようになってしまったので直しました。リアルタイム性がうしなわれた… https://github.com/theoremoon/ShellgeiBot/commit/1f0097fc8d921adf368950de8ad1f1a5ca6f5e44

あと

なんか忘れていることがあれば教えてください

SECCON2017 国内決勝に出た

KOSENSECで優勝したので theoldmoon0602、thrust2799、kyumina8376、miwpayou0808 からなる insecure というチームで SECCON 国内決勝に出ました。 結果は 300pt で 24チーム中 19 位でした。私は300pt をSubmit したので一応WriteUpを書きます。はあ〜〜〜〜負けた。

https://i.gyazo.com/c73c95915dee890e2a2d8ffe15b1985f.png

梅田

画像Uploaderの問題です。King of the Hill なので flag を書き込むべきページみたいなのがあって、そこにでかでかと SECCON{hogehoge} が鎮座していました。他のチームはこれを速攻で見つけていたっぽくて開始と同時に AC がN回行われていました。クソ焦る。私は 船橋を検討して無理だな! と結論付けた後にこれを見つけてSubmitした。梅田に取り組んでいるチームメイトもいたんですがね。 100pt

幕張

golang 製のバイナリが二つ渡されます。まずはAだけが配られていたのでAについて話す。最初は「えっなにこれ即終了するじゃ〜ん。私の環境では動かねぇのかよ」とか思って放置していましたが、 miwpayou0808 がちょっと解析して 適当に command line arguments を渡すと usage を吐いてくれることを教えてくれてやる気が出たのでもうちょっとやることにしました。

よくわかんないけどバイナリを IDA でみていたら END PRIVATE KEY みたいな文字列に遭遇して「おっ秘密鍵ジャーン」と思ってコピー&ペーストしてvim で整形しました。鍵があるということは通信しているとあたりをつけて、 wireshark でパケットを監視しながらもう一度起動しました。秘密鍵もってるし秘密通信を解読できるね! と思っていたら解読できなかったんですが、鍵交換アルゴリズムの中にフラグっぽい文字を見つけました。

後から調べたら、このバイナリはもう二つ、公開鍵証明書みたいなものを持っていて、それの mail address の欄がそうなっていたっぽいです。

この頃にはこのバイナリが MQTT みたいなプロトコルで通信していることがわかりました。 もう一つのBのバイナリも MQTT で通信するプログラムっぽかった。

けどいろいろよくわからなくて時間を無限に溶かしていましたが、 無限に溶かした時間のうち少しが有意義だったっぽくて、 MQTT には topic なる概念があって、まあ IRC で言う channel みたいなものだと思うんですけど、まあそういうものがあるということがわかりました。

で、このバイナリが何ていうchannel で通信してるかを調べたら、サービス内に飛んでるメッセージを拾えると思ったので、 クライアントはここから https://qiita.com/n-yamanaka/items/91dbd7bd9fed5b3fbed4 頂戴してきて、バイナリの中から topic っぽい文字列を探そうとしたのですが、 IDA でも gdb でも全然わからず、 miwpayou0808 が探してきていた delve という go binary 用の gdb みたいなやつを使いました。 b Subscribe→c→si→args でSubscribeしてるときの引数を見られたんですが、ここに /mkhr/v/1/unlock/1 のような名前があって、 「これじゃーん!」となりました。でもこれに対して subscribe してみても全然飛んできませんでしたどういうことだよ。

miwpayou0808 がもう一個のバイナリもおんなじように調べたら今度は 別のtopic 名があって、そっちを subscribe したらいろいろ飛んできて「うーわこれじゃん」ってなりました。その中にしれっと FLAG も飛んできてた。

多分これで subscribe の代わりに defense キーワードを publish すると defense ポイントが入るような気がしたんですが↑の時点で残り時間が 5分もなかったので意味なし!!!!!

追記

さいこうですね


これで 300 点でした。 miwpayou0808 は基本的に 幕張の rev をやってて、残りの二人は府中梅田船橋を横断していたっぽいですけどよくわからなかった。完全に食いの残る競技と言うかはーつらい。つらいなー。insecureは弱いということです。


どうでもいいことですが懇親会みたいなやつ、完全に電池が切れて端っこで座ったり寝たりしていました。人間がたくさんいて喋ってるのが本当に苦手っぽい。友達を作り損ねた。

来年はもう参加できないと思うけど参加できたら師匠に出てもらってもうちょっとまともに戦えてる風を演出したいです