ヤマハルータと Hyper-V でネットワーク的な隔離環境を作ってみる

みむらです。

ルータを買ったのはこれがやりたかったから(
(とはいえ、出来るか確認は取っていなかったので今回良かったなとw)

 

作り方:

1. ヤマハルータ側で VLAN の設定をする
2. Hyper-V 側で VLAN の設定をする


1. ヤマハルータ側で VLAN の設定をする

このあたりが参考になります:
http://jp.yamaha.com/products/network/solution/switch-command-tag_vlan/

具体的には、

vlan lan1/1 802.1q vid=51 name=YUI_ICHII
ip lan1/1 address 192.168.51.1/24
dhcp scope 51 192.168.51.2-192.168.51.250/24

こんな感じのコマンドを叩きます。

vlan lan1/1 802.1q vid=51 name=YUI_ICHII

vlan (LANアダプタ名)/(番号) 802.1q vid=(VID, VLAN ID) name=(名前)

こんな感じで呼び出せます。

今回の例では LAN1 上に一つめの VLAN を設定して、 VLANID は 51, 名前は YUI_ICHII となります。

ip lan1/1 address 192.168.51.1/24

いつもの IP アドレス設定ですね。ただ lan1/1 となっている所が VLAN 感出てます。

dhcp scope 51 192.168.51.2-192.168.51.250/24

いつもの DHCP 設定。

ちなみに dhcp scope 51 の 51 は、別に VLAN ID とかとは合わせる必要はないので

自分のポリシーに合わせて下さい(

 

・・・一通り叩くと VLAN が設定されます。

後はインターネットに出られるように nat の設定をしたり ip masquerade の設定もしておくと

良い感じだと思います。

 

2. Hyper-V での設定

image

各仮想マシンの設定画面の「ネットワークアダプター」の部分を開くと、

VLAN ID という項目がありそこに設定します。

ここでの VLAN ID は先ほどルータ側で VID として設定した値を入力します。

 

3.後は楽しむ


設定はこんな感じでさくさくっと出来ます。

もし通信周りでこれと絡めて遊ぶ場合は、

image

高度な機能の中に「ポートミラーリング」の設定項目もありますので、

この辺と組み合わせるとかなり楽しい環境がくめるのでは無いかと思います。

 

ではではー。

YAMAHA NVR500 と OCN でひかり電話と IPv6

どうもみむらです。

夏です。夏と言ったら BIND そして、BIND といえばネットワーク。
そう、夏はネットワークの季節でもあるのです。

夏だ!ネットだ!ルーターだ! と某とある方が仰って(?)いたように
ルータを設置するには非常に最適な季節なんだそうです。

 

・・・嘘です。誰もこんなこと言ってません。

 

さてさて。

最近、東京エリアの気温が高くなっておりまして、
それ故にいろいろな問題が発生することも多々あるようです。

私の場合はこれですね。

IMG_0317

ノリで NVR500 を購入してしまいました。

 

いや、やっぱりヤマハさんのルータは触ってて楽しいです。

 

IMG_0320

(VAIO Z を WAN に、 VAIO Pro を LAN に繋いで遊ぶ、の図)

 

さてさて。そんなわけでいろいろとやっていた訳ですが、
どうも OCN が提供する IPv6 と ひかり電話を両立できない感じでして
いろいろといじりましたのでそれのメモ、を。


一応環境としては、
(ONU) – (NVR500) – (RT57i, PC, etc..)
というような。

また、コンソールケーブルには BUFFALO の BSUSRC06 を使いました。
Windows 8.1 x64 環境でしたが、接続したらすぐ使えるようになりました。 さすがっ。

 

 

ゴールとしては、

1. NVR500 を使って快適インターネット ( NTT レンタルのルータを取り外す )
2. ひかり電話を有効にする!
3. IPv6 !
4. RT57i での SIP クライアント!

という形です。

 

1. NVR500 を使ってインターネット接続を設定する

image

「プロバイダ情報の設定」にあるウィザードに従って設定すると、
ちゃんと設定が行われます。

・・私の場合はここで設定をした後、
config を出してきて不要と思われるところを消したりとかいろいろとやりました。

(自動でいろいろとフィルタを設定してくれるのはいいのですが、自分なりの番号の振り方がある場合などは結局コンソールでいじる事にはなります)

 

・・・・そもそもこういうルータを使う人なんだから・・という感がしますので細かいところはスキップします。

もし必要な場合は ヤマハ公式サイトにて :
http://jp.yamaha.com/products/network/solution/internet/telephony_nvr500/

 

2. ひかり電話を有効に

これも、「電話の設定」の「VoIPの設定」に
「フレッツ光ネクスト ひかり電話の設定」とありますので、こちらにて。

ただこの設定項目、プロバイダ情報として IPv6 PPPoE 接続をセットアップすると使えなくなります。

たぶんいろいろと大人の事情があるんだろうなと思いつつ。
今はさくっと IPv4 のプロバイダ設定だけした状態で、ひかり電話をセットアップします。

設定としては、こちらの設定データの「電話」の部分が参考になるかと思います:
http://jp.yamaha.com/products/network/solution/flets/flets_other_service/flets-next-ipv6_ipoe-nvr500/

 

 

3. IPv6 の設定

「プロバイダ情報の設定」から新規登録に進み、
一番上の「PPPoE を用いる端末型・・」を選択してウィザードを進めます。

image

 

IDやパスワードについては、
http://service.ocn.ne.jp/ipv6/access/flow/
このあたりを参考に。

設定が完了しましたら、コンソールからコマンドをカタカタと。

 

具体的には、 ( IPv6 が pp2 で、PC が LAN1, ONU が LAN2 に繋がっていると仮定)

pp select 2
 ppp ipv6cp use on
 ipv6 pp dhcp service client
 pp enable 2

no pp select

ipv6 route default gateway pp 2
ipv6 prefix 2 dhcp-prefix@pp2::/64
ipv6 lan1 address dhcp-prefix@pp2::1/64
ipv6 lan1 rtadv send 2 o_flag=on
ipv6 lan1 dhcp service server

こんな感じのことを。(そのまま貼り付けても設定可能です。

要は、DHCP で情報を取りに行ってプレフィックスを取得、

あとはそれをLAN 内に宣伝して、ルーティングの設定をすれば終わり、というような感じです。

 

もしフィルタ設定を書く場合は、通常の “ip filter” ではなく “ipv6 filter” にて。

ex)

ipv6 filter 200100 reject * * udp,tcp 135 *

ipv6 pp secure filter in 200100

 

あとは気づかないうちに宣伝されて、IPv6 ネットワークが使えるようになります。

 

4. RT57i で電話を繋ぐ

最近、秋葉原で安く売られてます。この子。

 

2D290831CCB64DA3ADB3FBD2CDBBFFC0_12001

(引用元: http://jp.yamaha.com/products/network/routers/rt57i/

この子、VoIP アダプタとしてもいろいろと遊べまして、

NTT から貸し出されるルータに対して SIP クライアントとして登録させることも出来ます。

 

今回は NVR500 との連携ということで。

 

4.1. カスケード接続を有効にする

NVR500 :

電話の設定 → TEL の共通設定 → カスケード接続(機器間アナログ通話)の設定 へ。

そこで、「切替」を「アナログ親機」にして「設定の確定」をクリック。

RT57i :

NVR500 の設定が完了したら同様に、

電話の設定 → カスケード接続(機器間アナログ通話)の設定 へ。

そこで、「切替」を「アナログ子機」にして「設定の確定」をクリック。

うまく行けばこの時点で、親機側から子機が、子機側から親機が見えるようになります。

 

4.2. あとはいろいろと設定を。

まずは着信・発信の設定を:

RT57i の 電話の設定 → VoIP の設定 → VoIPの基本設定 へ移動します。

電話ユーザ名を固定電話の番号に変更して完了です。

(着信させたくない場合は、「着信許可」の項目をいじると遊べます。)

マイナンバーの設定をする場合:

RT57i の 電話の設定 → ISDN 電話の設定 → (設定したいポート) →電話機対応機能設定 へ。


 


とてもざっくりですが、メモとして残しておきます。

あと詰みそうなところをいくつか:

 

・IPv6 アドレスが降ってこない

気長に待っていると降ってくることがあります。

 

・電話が繋がらない

一回 IPv6 と IPv4 を接続解除した後、IPv4 側だけを残して試行してみると繋がる可能性があります。

IPv6 側の接続は少し遅れてから行うと良い感じです。

接続に必要な情報を飛ばしている可能性や、

IPv4 側の接続ではなく IPv6 側に対して試行してるかも・・。

 

・RT57i が繋がらない

RT75i を一端 Cold start して初期設定にしてからやると、うまく行くかもしれません。

 


余談:

なんだかんだこのルータ、いろいろと機能を持っていまして、

VLAN とかはちゃんと切れるのはもちろん、USB 端子や Micro SD を使っていろいろと遊べそうです。

一番気になっているのはこの辺です。

http://www.rtpro.yamaha.co.jp/RT/manual/nvr500/logging/packetdump.html

パケットダンプ・・どういう形で出てくるんだろう。

 

何はともあれ、こんな感じでちゃんと PPPoE な IPv6 と ひかり電話は共存できるよ、と。

IMG_0323

・・ってなわけで、ステキなヤマハルータライフを!

 

・・最後に。私は N の人でも無く、Yのひとでもありませんので あしからず・・

windbg と gdb に関係した基本操作メモ。

毎回調べている気がするのでメモ。
(たぶんころころ書き加えていきます

 

作業内容 windbg gdb
実行 g r
ブレークポイント bp b
ブレークポイント
一覧
bl i b
(info breakpoint)
ブレークポイント
削除
bc d
ステップ実行
(Step over)
p n
ステップ実行
(Step Into)
t s
メモリ内容表示 d
d(a,b,c,d…)
d
x/(o,x,u,t,8xb..)
変数内容表示 dv (変数名) print (変数名)

p *0x000  みたいなのも可

レジスタの値 (レジスタウィンドウを見る)

dd eax..

i r

i r eax..

逆アセンブル結果 (Disassemble ウィンドウをみる) disas (関数名)
ソースコード (ウィンドウを見る) list (関数名)

 

・・とりあえず、良く忘れるので(

 

あといくつかメモ:

 

gcc でビルド時にデバッグ情報を入れる:
→ gcc –g でビルドしてやる

objdump で Intel 記法で眺められるようにする:
→ objdump –M intel  で眺める。
ex)  objdump –M intel –D a.out   .. のように。

VC コンパイラでデバッグ情報を入れる:
→ cl /Zi でビルドする。

VC コンパイラ環境で objdump っぽいことをする:
→ dumpbin a.exe /disasm  とかやると良い感じ。

RtlUnicodeString.. 系の一部のAPI は 32767 文字以上を設定できないみたいです。

どうも、みむらです。

ちょっとカーネルモードドライバを書いていまして、
RtlUnicodeStringPrintf 関数で文字列を設定する時に、
変数のサイズを 32767 文字以上に設定すると
STATUS_INVALID_PARAMETER になって動かないことがありました。

まさかと思って 32766 にすると動く。

コードとしてはこんな感じ:

UNICODE_STRING text = {0};

text.MaximumLength = 32767;
text.Buffer = ExAllocatePoolWithTag(PagedPool, text.MaximumLength, 0x3939);
text.Length = 0;

// STATUS_INVALID_PARAMETER で失敗する。
RtlUnicodeStringPrintf(&text,L"HELLO");


// STATUS_SUCCESS になって text に "HELLO" が代入される。
text.MaximumLength = 32766;
RtlUnicodeStringPrintf(&text,L"HELLO");

ExFreePoolWithTag(text.Buffer,0x3939);

でもって、同じ文字列操作系の命令でも

RtlUnicodeStringCat は動く。

 

もちろん、 UNICODE_STRING は

typedef struct _UNICODE_STRING {
  USHORT Length;
  USHORT MaximumLength;
  PWSTR  Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

こんな感じで定義されてる。 ( http://msdn.microsoft.com/ja-jp/library/ff564879(v=vs.85).aspx )

 

謎い。

 

ってことで MSDN の説明を注意深く読んでみました。

・・・そうしましたら、双方の “DestinationString” の説明に差を見つけました。

 

RtlUnicodeStringPrintf:

DestinationString [out]
A pointer to a UNICODE_STRING structure that receives a formatted string. RtlUnicodeStringPrintf creates this string from the formatting string that pszFormat specifies and the function’s argument list. The maximum number of characters in the string is NTSTRSAFE_UNICODE_STRING_MAX_CCH.

RtlUnicodeStringCat:

DestinationString [in, out]
A pointer to a UNICODE_STRING structure. This structure includes a buffer that, on input, contains a destination string to which the source string will be concatenated. On output, this buffer is the destination buffer that contains the entire resultant string. The source string is added to the end of the destination string. The maximum number of bytes in the structure’s string buffer is NTSTRSAFE_UNICODE_STRING_MAX_CCH * sizeof(WCHAR).

 

・・・なんと。。。

 

でもって ntstrsafe.h に定義されている NTSTRSAFE_UNICODE_STRING_MAX_CCH を見てみますと、

#define NTSTRSAFE_UNICODE_STRING_MAX_CCH    (0xffff / sizeof(wchar_t)) 

こんな感じで書いてあるんですね。

 

何で双方に違いがあるのかはよく分かりませんが・・。

でも、0xffff 文字書き込めるものと 0x7fff までしか書き込めないものとがある、

ということで。。

もし文字列操作系で、バッファサイズは足りているのに格納できない場合

NTSTRSAFE_UNICODE_STRING_MAX_CCH をオーバーしていないか確認してみると良いかもしれません。

SECCON CTF 2014 Web 予選に参加してみた!

どうもみむらです。

久しぶりの SECCON CTF ということでチーム一同ノリノリではしゃぎながら参加してきました。
・・チームは “wasamusume” です。 なんだかんだで今年も旗、振ってます。

 

とりあえず私が解いたのは、

*x86アセンブラを読もう (100)
*捏造された契約書を暴け (300)
*箱庭XSSリターンズ(300)
*箱庭SQLiチャレンジ(100)
*879,394bytes (100)

の5つ。

いくつか勘で解いてしまったところがあるので、
ちゃんと説明出来る所のみを。


*x86アセンブラを読もう

-----
01361000 >   55                 PUSH EBP
01361001     8BEC               MOV EBP,ESP
01361003     83EC 08            SUB ESP,8
01361006     C745 FC 00000000   MOV DWORD PTR SS:[EBP-4],0
0136100D     C745 F8 01000000   MOV DWORD PTR SS:[EBP-8],1
01361014     EB 09              JMP SHORT test.0136101F
01361016     8B45 F8            MOV EAX,DWORD PTR SS:[EBP-8]
01361019     83C0 01            ADD EAX,1
0136101C     8945 F8            MOV DWORD PTR SS:[EBP-8],EAX
0136101F >   8B4D F8            MOV ECX,DWORD PTR SS:[EBP-8]
01361022     3B4D 08            CMP ECX,DWORD PTR SS:[EBP+8]
01361025     7F 0B              JG SHORT test.01361032
01361027     8B55 FC            MOV EDX,DWORD PTR SS:[EBP-4]
0136102A     0355 F8            ADD EDX,DWORD PTR SS:[EBP-8]
0136102D     8955 FC            MOV DWORD PTR SS:[EBP-4],EDX
01361030    ^EB E4              JMP SHORT test.01361016
01361032   . 8B45 FC            MOV EAX,DWORD PTR SS:[EBP-4]
01361035   . 83E8 02            SUB EAX,2
01361038   . 8BE5               MOV ESP,EBP
0136103A   . 5D                 POP EBP
0136103B   . C3                 RETN
...
01361040 > . 55                 PUSH EBP
01361041     8BEC               MOV EBP,ESP
01361043     51                 PUSH ECX
01361044     C745 FC 00000000   MOV DWORD PTR SS:[EBP-4],0
0136104B     6A FF              PUSH FF
0136104D     E8 AEFFFFFF        CALL test.01361000
01361052   . 83C4 04            ADD ESP,4
01361055   . 8945 FC            MOV DWORD PTR SS:[EBP-4],EAX
01361058   . 8B45 FC            MOV EAX,DWORD PTR SS:[EBP-4]
0136105B   . 50                 PUSH EAX
0136105C   . 68 F4203601        PUSH OFFSET "FLAG{%d}\n"
01361061   . FF15 A4203601      CALL DWORD PTR DS:[<&MSVCR100.printf>]
01361067   . 83C4 08            ADD ESP,8
-----

 

いきなりこれが出ると、「ウッ」とするかもしれません。私もしました。

・・某キャンプの読経か・・と。

でも冷静に見てみると結構簡単なんですね。

---
01361000 >   55                 PUSH EBP
01361001     8BEC               MOV EBP,ESP
01361003     83EC 08            SUB ESP,8
01361006     C745 FC 00000000   MOV DWORD PTR SS:[EBP-4],0
0136100D     C745 F8 01000000   MOV DWORD PTR SS:[EBP-8],1
01361014     EB 09              JMP SHORT test.0136101F
01361016     8B45 F8            MOV EAX,DWORD PTR SS:[EBP-8]
01361019     83C0 01            ADD EAX,1
0136101C     8945 F8            MOV DWORD PTR SS:[EBP-8],EAX
0136101F >   8B4D F8            MOV ECX,DWORD PTR SS:[EBP-8]
01361022     3B4D 08            CMP ECX,DWORD PTR SS:[EBP+8]
01361025     7F 0B              JG SHORT test.01361032
01361027     8B55 FC            MOV EDX,DWORD PTR SS:[EBP-4]
0136102A     0355 F8            ADD EDX,DWORD PTR SS:[EBP-8]
0136102D     8955 FC            MOV DWORD PTR SS:[EBP-4],EDX
01361030    ^EB E4              JMP SHORT test.01361016
01361032   . 8B45 FC            MOV EAX,DWORD PTR SS:[EBP-4]
01361035   . 83E8 02            SUB EAX,2
01361038   . 8BE5               MOV ESP,EBP
0136103A   . 5D                 POP EBP
0136103B   . C3                 RETN
---
0136104B     6A FF              PUSH FF
0136104D     E8 AEFFFFFF        CALL test.01361000
---
0136105B   . 50                 PUSH EAX
0136105C   . 68 F4203601        PUSH OFFSET "FLAG{%d}\n"
01361061   . FF15 A4203601      CALL DWORD PTR DS:[<&MSVCR100.printf>]
---

もう、この辺だけ見ておけば大丈夫。

[EBP-4] とかいろいろと書かれていますが、

ぱっと見で Intel 記法だなーと思ったら、 
右辺のものを左辺に移す(結果が左に入る)と言うことだけ考えながら見ていきます。

(AT&T 記法なら、左から右へ。)

 

・・・あとはこれをじっくり読むと、

def func(n):
	a = 0
	b = 1
	while b <=n:
		a += b
		b += 1
	a -= 2
	return a

print("FLAG{%d}" % func(0xFF))

 

こんな感じに書き直せる訳ですね。

(・・ Write-up の醍醐味が全力でスキップされている気がするのは気のせい)

でもって、実行すると  FLAG{32638} ということで。

 

・・・スキップされて分からない! って人は後で個別に連絡ください(汗

 


捏造された契約書を暴け

ディスクイメージが渡されるので、

この中のデータから捏造の証拠を出してね、というもの。

当初 MFT (Master File Table) を見ていまして、

$FILE_NAME の Create Time じゃないかと送信していましたがどうも通らず。

・・まさかーと思いながら “機密保持契約書.docx” ファイル内にあるファイルを見ていったところ、

中の jpg ファイルに Exif 情報として作成日時が乗っていまして、これが Flag.

 

・・・でも、 Exif としてファイルに書かれている情報よりも、

MFT の fnMFTModTime が “2012/5/23 04:56” になっている事の方が、

信頼性が高いと思うのですが、うーむ(

 


今回参加してみまして、結構楽しかったです。

ただ最近、片手間でCTF をする感じではマズいなーと思っていまして

(大会形式の CTF 以外はほぼやってませんし・・。)

ちょっと勉強なりを始めないとマズいかなと思ってます。

 

また、やはり思うのは

ということで、次こそはメンバー集まってワイワイやりたいですね!

(同じ大学のメンバーとは一緒にやりました。これはこれで楽しかったです。)

「勝ちに行くぞ-!」というような場合はあれですが、

基本的に SECCON は「みんなで楽しんでいこう-!」という感でやっているので

気の合う仲間と気楽にやっていきたいですね。

 

最後に、チームの他のメンバーが書いたブログへのリンクを貼り付けておきます。

あたがわさん:

http://blog.atgw.jp/archives/2865

hyt さん:

http://11haanyan24.com/seccon-2014-quals-online-japan%ef%bc%88write-up%ef%bc%89/

かーみーさん:

http://diary.carme-ln.net/2014/07/22/writeup-seccon-2014-online/

zip さん:

http://zipsan.pw/archives/305

『チームとしては正攻法ではないっぽい方法で解いたようなので』

・・ごめんなさい、私がこの問題のフラグを submit したあたりで察してください(

ではではー。