from electron 2 web

読者です 読者をやめる 読者になる 読者になる

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

サイバーコロッセオに参加してきた

チーム「Musashi」で僕とふるつきプロ(@theoldmoon0602)とりいんちゃん(@reinforchu)とかたわれ氏(@_ktwr)で参加してきた。 ちなみにこのチームは母集団がチーム「Harekaze」。

僕は一つフラグを入れた。まぁほんとはりいんちゃんが先に解いてくれてたんですがどうもうまくコピペできなかったっぽい。緊張してるとよくあるししょうがないよね。

点数は400点だった。まぁドベじゃなくてよかったというのがある。

概要

サイバーコロッセオは2020年のオリンピックの競技らしい・・・?違うっぽい・・・?

まぁとりあえず

「サイバーコロッセオ×SECCON」は東京2020公認プログラムです。

とのこと。なんか総務省がやってる。

CTFなんですが形式はKing of Hill。自分としては各サーバーごとのjoperdy+防御という認識。

会場

めっちゃ格好良かった。DEFCONとかSECCON finalな気分を味わえた。まあ実際は夢のまた夢という感じですが。

f:id:lv7777:20170305230937j:plain

f:id:lv7777:20170305232110j:plain

f:id:lv7777:20170305232135j:plain

あとNWもちゃんと安定稼働しており非常に良かった。こういうのって安定稼働させるのむずいんだろうな~。

問題

主にweb問とpcapやってた。

  • カメラ

なんかwebカメラにつながってた。画像に上の矢印があったからdirectionを上にするのかと思ったら違った。 何か左に行ったら自明にフラグが書いてあったので自明にいじって終わり。

デバックポートを探せということだったが、nmapで30000、-sUまでは見たがポート50000あたりにあったらしい。つらい・・・・ MBSDも同じような感じだったので、やっぱちゃんと見たりnmapallエイリアス作っとくの大事だな~と思った。

  • pcap

めちゃくちゃ重い。780MBあった。いろいろ抜き出したり問題文を見ずにTCPパケットから証明書を抜き出そうとして自明に頭がついてなかった。

問題文見てしばらく目grepしてたがこれは厳しいということでscapy使うことにした。

from scapy.all import *
import pycurl
li = []

def analyze(pkt):
    li.append(pkt['IP'].dst)
    li.append(pkt['IP'].src)
    return pkt['IP'].dst
sniff(offline="/root/Desktop/seccon/Challenge6/normalized.pcap",fipter="ip",score=0,prn=analyze)

li_uniq = list(set(li))
print li_uniq
for a in li_uniq:
    curl = pycurl.Curl()
    curl.setopt(pycurl.TIMEOUT,5)
    curl.setopt(pycurl.URL, a)
    curl.perform()

前日にscapy復習してたのでscapyについては割と問題なくできたんだけどpycurl始めて使ったので無事死亡。timeoutあたりがうまくいかず一つしかcurlしに行ってくれなかった。

ほんとは抜き出した奴をsystem()使ってcurlで投げればよかったけどpythonは普段使わずうまくできなかった・・・なんでだろ

ちなみにrdpcapはめっちゃ重くて動かんかった。同期するタイプの関数なのかな?

P.S. 作ってみた

ちゃんと回るようになった。ip抜くのすら重いので2スクリプトに分けた。

from scapy.all import *
import pycurl
li = []

def analyze(pkt):
    li.append(pkt['IP'].dst)
    li.append(pkt['IP'].src)
    return pkt['IP'].dst
sniff(offline="/root/Desktop/seccon/Challenge6/normalized.pcap",fipter="ip",score=0,prn=analyze)

li_uniq = list(set(li))
print li_uniq

# save to file
f=open("iplistsn.txt","at")

for ip in li_uniq:
    f.write(ip)

f.close()
print "end"
from scapy.all import *
import pycurl

f=open("iplists.txt","rt")
fline=f.read().split("\n")
#print len(fline)
for ip in fline:
    if len(ip) == 0:
        continue
    #print ip
    iphttp="http://"+ip+"/"
    print iphttp
    curl=pycurl.Curl()
    curl.setopt(pycurl.URL,str(ip))
    curl.setopt(pycurl.TIMEOUT,3)
    try:
        curl.perform()
    except:
        print "error!!"

f.close()
  • pico

flagには至らなったがpico.cやnano.c等のソースを見つけた。 それぞれbofとシェルコードでいろいろするということがソース見た瞬間一発で分かったが分かった時点で無理~~~~!!!!尊い~~~~!!!となったので退散。

  • 鯖1

任意のチームが任意の素数の積nを投げるので任意のツールを使い任意のタイミングで任意の方法で任意の素数p,qを投げると得点が入る。謎

まぁ素数を解く方法には2~3個あってフェルマー法やfactordb.comを使う。自分もちょくちょく調べては投げてたが投げる前に他のチームに全部とられてしまった。

opensslでも解析できる気がするんだけど調べても出てこん・・・う~ん・・・

いろんなチームがスクリプト回してたっぽい。暇な時に作っとけばよかった。

  • でっかいかずつくる

ちなみに積nを作ることでも点が入るのだが、opensslで作れるっぽい。 openssl genrsaで鍵作れてその中にでっかい積nがあると勘違いしてて(実際にはこれは秘密鍵なのでア)ずっと秘密鍵をopenssl rsa -text -pubinで見てた。自明に頭がついていない。

公開鍵は秘密鍵を作った後にopenssl rsa -pubin < test.pem -out > tes.pubとかで作るっぽい。openssl -rsa -textで見ると16進数+間をコロンでつなぐとかいうクソ仕様なのでvimとかsedとかで置換してhexdecodeして投げる。

秘密鍵について重大な勘違いをしていた・・・

openssl genrsa 40 -out < test.secret && openssl rsa -text < test.secretで普通に素数q,p、moduleまで全部見れるやん!!!

うお~~マジか・・・

感想

めっちゃムズくて0完したらどうしようと思ってたけど自明を1問解けてよかった。 自分はチームで出ると0完ばっかだし、一人で出ても自明問しか解けないゴミなのですが、scapyでuniqueなip抜き出したりlinux系の問題もできたし(少なくとも自分にとっては)ちょうどいい難易度だった。

同時に惜しくてもう少し知識があれば・・・って問題も結構あったのでもっと精進が必要だなって思った。

とりあえずopensslのコマンドとか今回の予習で結構覚えたし、その辺のコマンドを覚えて常設で実際に試したり、scapyも予習で結構勉強したのでPPCとかscapy使うような深いネットワーク問とかもできるようになりたい。

あと可視化エンジン体験しにきたのに競技に集中しすぎてて全然可視化エンジン見れなかった・・・

思ったこと

今回、サイバーコロッセオはサイバーセキュリティ月間?のイベントの一環として行われているわけだが、そっちの講演とかも見たかった。

ネットワークについてはローカルの閉域ネットワークAとインターネットにつながってるBがあり問題サーバーがAにある感じだったので調べるときはBで実際にやるときはAだった。ので切り替えに非常に時間がかかったりした。

まぁただこれは事前のメールに書いてあったことなので仕方ないか・・・切り替えでかなり時間食ってしまったので今度からこの形式の時はPCを2台持っていくと良さそう。この辺のこと(実際の競技では閉域ネットワークを使う)をわかりやすくメールに書いてくれたらありがたかったかな。


運営の皆様、素晴らしい会場の提供や運営等本当にありがとうございました!