どうもみむらです。
久しぶりの 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 以外はほぼやってませんし・・。)
ちょっと勉強なりを始めないとマズいかなと思ってます。
また、やはり思うのは
@mimura1133 おおうw バラバラであの強さとは流石w 今度はいっしょにワイワイやりましょうね
— alc@******** (@noritama_ususio) 2014, 7月 19
ということで、次こそはメンバー集まってワイワイやりたいですね!
(同じ大学のメンバーとは一緒にやりました。これはこれで楽しかったです。)
「勝ちに行くぞ-!」というような場合はあれですが、
基本的に 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 したあたりで察してください(
ではではー。