from electron 2 web

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

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

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

openwrt on kvm~仮想マシン作成からネット接続まで~

睡眠時間を削って俺は書くぞ!!!一人でも環境構築で詰まる人を消すために!!!

え~非常に大変だった。

いつものごとくkali、kvm/qemuです。

imgを落とす。

openwrt-x86-generic-combined-ext4.imgの系統のimageを落としてくる。

バージョンはなんでもおkなはず。自分2013年あたりの奴と2016年あたりの奴の2つをインストールしてみたけどどちらでもできた。

これを探し当てるのに3時間ぐらいかかった。つらい

10個ぐらいopen-wrt-XXX.imgを落としまくった。はぁ・・・つらい・・・

networkにつなげる。

こっちもめちゃくちゃ大変だった・・・

ちゃんとした状態ならこんな感じになってるはず。ipaddrは無くてもおk。

f:id:lv7777:20170326023107p:plain

んでこの通りにip降らせて(ifconfig eth0 192.168.122.40)、route add default gwで192.168.122.1でリロードしておk。

たったこれだけなのに3時間ぐらいつかった。これがrouterboard上だとまた変わってきたりするんだよな。ドライバとか絡んでくるし。

P.S. opkg updateとかするときは/etc/resolve.conf編集するんだぞちゃんと!!

openwrt on kvm~仮想マシン作成からネット接続まで~

睡眠時間を削って俺は書くぞ!!!一人でも環境構築で詰まる人を消すために!!!

え~非常に大変だった。

いつものごとくkali、kvm/qemuです。

imgを落とす。

openwrt-x86-generic-combined-ext4.imgの系統のimageを落としてくる。

バージョンはなんでもおkなはず。自分2013年あたりの奴と2016年あたりの奴の2つをインストールしてみたけどどちらでもできた。

これを探し当てるのに3時間ぐらいかかった。つらい

10個ぐらいopen-wrt-XXX.imgを落としまくった。はぁ・・・つらい・・・

networkにつなげる。

こっちもめちゃくちゃ大変だった・・・

ちゃんとした状態ならこんな感じになってるはず。ipaddrは無くてもおk。

f:id:lv7777:20170326023107p:plain

んでこの通りにip降らせて(ifconfig eth0 192.168.122.40)、route add default gwで192.168.122.1でリロードしておk。

たったこれだけなのに3時間ぐらいつかった。これがrouterboard上だとまた変わってきたりするんだよな。ドライバとか絡んでくるし。

ルーター自作本、ブリッジまで終えたのでメモと今後の予定(チラ裏)

1月ぐらいからルーター自作で分かるパケットの流れという本を読みながら写経している。

感想

はい。何やったかって言うとlink layer programing、パケットアナライザー、ブリッジ

link layer programingはnetwork proguramingとはまた違う感じ。ioctlとかifreqとかsockaddr_llが絡んでくる。

l3ならbindでipとportを指定する感じだがl2だとifを指定する感じ。ただ指定するだけではなくてioctlとかifreqとかいろいろいる。

パケットアナライザーはまぁ名のとおりだけどめちゃ大変だった。ブリッジよりもよほど大変。dhcpしか解析したことなかったけど一階層ずつ解析するってこんな大変なのな。

dhcpならportなんかで待ち受けてるから先頭チェックして違ってたら切り捨てればいいだけだし。

まずanalyzepacket関数にreadとかrecvで入ってきたデータを渡してそれがどんなんか判断する。イーサネットだったらイーサネットパーサーに渡して、そこでパーサー回してそれがipかarpかicmpかみたいなのを判別する。

んでipだったらパーサー回してtcpudpかを判断する。

もうお気づきだと思うがレイヤーが上がるごとに指数関数的にパーサーが増える。tcp以上なんて無限にプロトコル作れる訳なのでヤバい。

それこそfortigateとか見たいにskypeとかいろんなシグネチャがあるしヤバいんだろうなって思う(語彙消失)

ブリッジはifからifへと垂れ流す奴で垂れ流すだけなので割と簡単だがpollとかselectとかの知識がいる。

まぁこれがあればNWの障害とかに便利。

前STPだかでおうちネットワークに障害が発生したときトラフィック追うのがかなり大変で元々一つ持っておきたい戸思ってたんだよね。

twitter

とつぶやきましたがbridgeってネットワークタップの簡易版みたいなものだし当たり前では。

ルーター

ルーターarpテーブルの処理がかなり複雑ですね・・・

今後の予定

routerboardをまた久しぶりに使い始める。これは自宅のネットワークを改善するための準備も含めてる。

routerboardにOS2つにするやついれてあるはずだから(去年ぐらいにやった)そっちのlinuxの上でこいつ動かせばおk。

そうすれば実際にネットワークタップとして使える・・・!(とおもいましたがRBは僕のNOCの主役なので潰せないな)

あとはBGPをはるために参考実装を改造してBGPルーターとか作ってみたいですね・・・まぁ仕様がクソ大変そうですが

RKXプロはVPNルーター作ってましたし頑張ればできるでしょ・・・

linux版torの入れ方、ついでにrootでも起動できるようにscriptファイルの改造

(root制限なんか)必要ねぇんだよ!!!

environment

kali、64bit

tor用プロキシ

torに入る入り口的な。

apt-get install tor

tor proxyであってhttp proxyではないので単純にabout:config変えてfirefoxに設定しただけでは入れなかった・・・

tor用ブラウザ

tor browser linux [検索]

下手にfirefoxのプロファイル作って改造するより多分これが一番早い

rootで起動出来るように

(tor-chroot-setupとかは必要)ないです。

DLしてきた奴回答してtor-browser-en/browser/start-tor-browser.shを開く。

if [ "`id -u`" -eq 0 ]; then
    complain "The Tor Browser Bundle should not be run as root.  Exiting."
    exit 1
fi

を消す。

終わりっ!閉廷!

参考:

ubuntu - "The Tor Browser Bundle should not be run as root" Why? - Tor Stack Exchange

appendix

torにサイト立てるときは意外と簡単らしい、さらに金もかからんらしい。

普通にサイト作ってtorrc作るだけでおk。最the高。

nodeのボランティア募集してるので家に常時起動してるPC余ってる人いたらnodeにしてボランティアしてあげるのもよさ。

そのうちやっていき

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

チーム「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台持っていくと良さそう。この辺のこと(実際の競技では閉域ネットワークを使う)をわかりやすくメールに書いてくれたらありがたかったかな。


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

mozcのengine_register.ccあたりを読む

ime実装してるんですがシグナル送るときにコアダンプで無事死亡というのがあり、mozcを参考にするも意味不明なラップしてるので死亡という感じなのでブログ書きながら詳しく見ていこうな。

まず、ここではRegisterがメインだ。こいつはmozc_engine.ccから呼ばれている。

L154

void MozcEngineClassInit(gpointer klass, gpointer class_data) {
  IBusEngineClass *engine_class = IBUS_ENGINE_CLASS(klass);

  VLOG(2) << "MozcEngineClassInit is called";
  mozc::ibus::EngineRegistrar::Register(
      mozc::Singleton<mozc::ibus::MozcEngine>::get(), engine_class);

  g_parent_class = reinterpret_cast<IBusEngineClass*>(
      g_type_class_peek_parent(klass));

  GObjectClass *object_class = G_OBJECT_CLASS(klass);
  object_class->constructor = MozcEngineClassConstructor;
  IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS(klass);
  ibus_object_class->destroy = MozcEngineClassDestroy;
}

シングルトンとかいう文字が見えますね。死亡です。 こいつはどこから呼ばれているかというと、呼ばれてなくてどうやらgtype_register_staticの引数として構造体経由で渡されてる。

gtyperegisterstaticはglib object systemのアです。

まぁでしょうね。

�> >基本型ではない型は、その親の型で定義されます。この親の型は引数 �> >parent_type として g_type_register_static() と g_type_register_dynamic() �> >の両関数へ引き渡されます。 �> >Non-Fundamental types are furthermore defined by the type of their �> >parent which is passed as the parent_type parameter to �> >g_type_register_static and g_type_register_dynamic.

自作してんのか・・・?型を・・・?

一旦公開。mozcよりibus-cannnaを見たほうが小さいしよさ気だった。

alexCTF供養

team名 hitoride_daemon_kill ということで久々に一人で参加してみた。ユーモア効いてていい名前では(自画自賛) 自明問しか解けなかったがそこそこ解けて楽しかった。最近のctf0完ばっかだったからね…

rev

  • gifted

strings。

revとかバイナリ関係、strings以外が何もできないんですが大丈夫か・・・?

for

  • for1,for2

coreファイルの実行方法がわからず死亡。stringsかよくっそ・・・

もっと見とけばよかった

  • pcap

これが一番つらい。まずusbの仕様から把握してた。でなんかいろいろやってたけどできなかった。binwalkだったのか・・・forだもんな・・・そこ疑うべきだった・・・

crypto

vimで換地してもbase64できず死亡。

RSAも何故かできず死亡。つらい。

PPC

よくあるPPC。でも解いたの初めてかも。処理は2~3分ぐらいでできたが接続部分でかなり時間がかかってしまった・・・

最初shで処理しようと思った。pythonよりshのほうが得意だし。ncで取ってきた文字列をsedで置換してpython -cに投げた。(execじゃデカすぎて壊れる)

んで普通にできたんですが、ncで取ってきたあと投げるみたいな処理ができなくてアウト。だれか教えてくれ〜

次にpythonからさっきの処理をimport systemで呼び出して使おうとしたものの標準出力を変数に入れる方法がわからずアウト。流石にいちいちファイルに書き出すのも面倒だし・・・

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("195.154.53.62",1337))
t=5
while t:
    print s.recv(1024)
    s.sendall("30000000000000000\n")
    #print s.recv(1024)
    t-=1
  • SC2:cat

かなりの時間を割いたもののできず無事死亡。

つらすぎる。手当たり次第いろいろ試したのに・・・

トリビア

TR2~TR4までできた。

TR1はググってもわからんかった。歌の歌詞?それとも慣用句か?

sslでメモリの内容を見れるといえばheartbleedだよね。

  • tr3:CA

ブラウザで鍵の部分クリックしてCAを小文字になおして入れる。letsencrypt。

  • tr4:TR4: Doesn’t our logo look cool ?

いいえ。以上。

最初から記号の他になんか入ってるのは気になってた。ロゴの文字列txt保存してvimの置換を使った。

:%s/test//gでtestという文字列を消せる。 改行を消すときは普通に\nを使える。空白は\sだっけな?んで全体キャプチャは\0。


感想:

つらすぎる。全くできてないじゃん・・・