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 したあたりで察してください(

ではではー。


 

関連記事