Snoozy

1.Sleep-inducing; tedious.

VulnHubのIMF: 1をやってみたよ~!

VulnHubのIMF: 1をやってみたよ~!ということでやっていく。

 

まずはnetdiscoverでIMF VMのアドレスを取得。

f:id:snoozekvn:20190620194718p:plain

アドレスが分かったら次はNmapでポートスキャン。

f:id:snoozekvn:20190620194721p:plain

80番ポートでApacheが動いていることがわかる。

アクセスしてみた結果が次の画像。

f:id:snoozekvn:20190620194714p:plain

かっこいいページだがここにはヒントはなさそう。

違うページをあさっているとcontactページのソースにフラッグを発見した。

ざっとみてスルーしてしまいそうだったが、なんとなくブラウザのページ内検索を試したら見つかった。あぶないあぶない。

f:id:snoozekvn:20190620195312p:plain

 

さて、他に隠されたページはないかdirbを使って辞書ベースのページ探索をしてみる。

f:id:snoozekvn:20190620195316p:plain

特になさそうだ。

niktoでサイトに脆弱性がないか試してみる。

f:id:snoozekvn:20190620195319p:plain

 

うむ…とくになさそう。

早くもどうしようかとウロウロしていると先程見つけたフラッグの中身がBase64エンコードされた文字列であることに気づいた。

さっそくデコードしてみる。

f:id:snoozekvn:20190620195940p:plain

ふむふむ?

ファイルが関係する…のか?

これまでのところファイルが見えるのはページのソースだけなので再度チェックしてみる。

サイトのソースをくまなく見ていくと次の画像の部分でそれをみつけた。

ファイル名がBase64エンコードされている。

f:id:snoozekvn:20190620200613p:plain

3つの文字列をつなげてからデコードしてみる。

f:id:snoozekvn:20190620200650p:plain

フラッグゲット!

f:id:snoozekvn:20190620200654p:plain
が、またしてもエンコードされているのでデコードする。

f:id:snoozekvn:20190620201105p:plain

どういうことだろう・・・?

ページ名か…?

f:id:snoozekvn:20190620200848p:plain

おお、合ってた。

ログインページさんこんにちは。

適当に試してももちろんログインできないのでソースを見てみる。

f:id:snoozekvn:20190620201453p:plain

ソースにRogerというユーザー名が見つかった。

これをつかって何度かログインを試してみたうまく行かず。

contactページでいくつかメールアドレスやユーザー名が見つかっていたので、それらをもとにcewlを使って簡単なワードリストを作る。

f:id:snoozekvn:20190620200845p:plain

ワードリストにRogerも追加して…

Burpsuiteでユーザー名とパスワードを格納するパラメータも入手し、準備は万端。

hydraでブルートフォースアタック!

 

が…うまくいかない…

ログイン可能な組み合わせは見つからなかった。

脆弱性を使うのかと、Apache2.4.18の脆弱性について調べて回ったが利用できそうなものは見あたらない。

裏でphpが動いていることはわかっているのでphpのlogin処理をbypassする方向で調べを進めたがこれもうまくいかない。

sqlインジェクション脆弱性があるのかとあれこれ試してみたがこれもだめ。

ただユーザー名がrmichaelsであることはレスポンスから判別することができた。

結局writeupを見た。

burpsuiteを使ってパスワードを受け取る変数をpass=をpass[]=にしてやるとうまくいくということだ。

そのレスポンスとして次のページが帰ってきた。

f:id:snoozekvn:20190620201342p:plain

フラッグの文字列をデコードしたのが次の画像。

f:id:snoozekvn:20190620200916p:plain

またリンクをクリックすると次のページに飛んだ。

f:id:snoozekvn:20190620201335p:plain

 URLをよく見ると引数を受け取っていることがわかる。

これは脆弱性がありそうだ。

試しにクォーテーションだけを与えてやるとさっそくエラーが出た。

f:id:snoozekvn:20190620211729p:plain

sqlmapでmysqlを攻撃可能か調べる。

f:id:snoozekvn:20190620211733p:plain

脆弱性があるといろいろ表示されるので試しに次の画像のコマンドでテーブルを表示する。

f:id:snoozekvn:20190620211726p:plain

 

 得られたテーブルで特に気になったのが次の画像だ。f:id:snoozekvn:20190620212028p:plain

ページ名とおぼしき文字列が得られている。

アクセスしてみる。

f:id:snoozekvn:20190620212031p:plain

ふーむ、画像にQRコードが含まれていることがわかる。

https://zxing.org/w/decode.jspx

このサイトでQRコードを読み取るとフラグが得られた。

f:id:snoozekvn:20190620212023p:plain

デコードしてみる。

f:id:snoozekvn:20190620213016p:plain

まーたページ名かな?

アクセスしてみる。

f:id:snoozekvn:20190620213018p:plain

アップロードフォームだ。

リモートシェルを返すスクリプトphpで書いてアップロードしてみる。

が、phpファイルはアップロードを許可されていなかった。

拡張子だけをみて判定していると考え、先程のファイルの拡張子をjpgに変えて再度アップロードする。

すると今度はeval関数が含まれているため許可されないとレスポンスが帰ってきた。

f:id:snoozekvn:20190620214001p:plain

 

結局私はGIFファイルシグネチャーをヘッダーに付与した非常に簡素なWebシェルをアップロードすることでこのWAFを回避した。

次の画像が実際にアップロードに使用したgifファイルだ。

f:id:snoozekvn:20190620215542p:plain

このファイルを呼び出すことができれば引数に与えたコマンドを実行できる。

 uploadディレクトリ配下に格納されると考えいくつか適当なURLにアクセスしたがページが見つからないとレスポンスが帰ってくる。

ディレクト構造に調べたりと散々苦労したあと、アップロードフォームのソースに次の文字列を発見した。
f:id:snoozekvn:20190620213012p:plain

緑色にコメントアウトされているのがその文字列である。

私は最初、この文字列が何を意味するのかわからなかった。

何度かファイルをアップロードし直したりする中で、この文字列が変化していることに気づいた。

おそらくこれがアップロード後のファイル名なのではないか?

ファイル名がハッシュ値のような形に変換されているのではないかと考えた。

実際にURLのファイル名を、この16進数表記された文字列に変えてアクセスして見るとコマンドの結果が表示された。

f:id:snoozekvn:20190620214347p:plain

lsコマンドを渡すと、フラッグが同ディレクトリ内にあることがわかったのでcatで表示させたのが次の画像。

f:id:snoozekvn:20190620214345p:plain

デコードすると次のような文字列を得られた。

f:id:snoozekvn:20190620220504p:plain

 

ここまでたどり着くのにかなりの時間を要した。

 

無事フラグも回収できたので、気を取り直して次のステップに進もう。

Webシェルの引数にwgetコマンドを与え、Kaliに置いてあるリバースシェルを張るスクリプトをダウンロードさせる。

f:id:snoozekvn:20190620220507p:plain

 次に、URL上でスクリプトを指定して実行させると、無事シェルが得られた。

シェルが得られたら次にすべきことは権限昇格だ。

PoCを使ってカーネルエクスプロイトを狙いたいがおそらくこれまでの流れから察するにうまくいかない。

先のフラッグで得られたagentservicesというヒントを使っていきたい。

netstatで裏でどんなサーバーサービスが待ち受けているのかを表示したのが次の画像。

f:id:snoozekvn:20190620220837p:plain

7788番ポートでLISTENがある。

IMF VM上でからアクセスしてみる。

f:id:snoozekvn:20190620220834p:plain

Agetn IDを求めるプログラムが動いていた。

明らかにこのプログラムが次の攻略対象だと思われる。

 

また/usr/local/binにこのagentプログラムとaccess_codesというファイルを見つけた。

f:id:snoozekvn:20190620220909p:plain

access_codesは何に使うんだろうか…?

とりあえずagentを解析するためにcatで出力し、Base64で表示可能な範囲に変換。

f:id:snoozekvn:20190620222224p:plain

この文字列をKaliにコピペし、デコードすればファイルを実質ダウンロードしたことになる。

f:id:snoozekvn:20190620222233p:plain

 

またIMF VMの方でpsコマンドを実行したところknockdを発見した。

これは予め決めておいた順にポートアクセスされたときに特定ポートを開放するというものだ。

さきほどのaccess_codeはおそらくknockするためのものだろう。

ためしにやってみる。

f:id:snoozekvn:20190620222230p:plain

冒頭のNmapを使ったスキャンでは開いていたなかった7788番ポートにアクセスできるようになっている。

やはりこのagentプログラムを利用して権限昇格を狙うので間違いないだろう。


まずはstringsコマンドで簡単にプログラムに含まれる文字列をチェックする。

f:id:snoozekvn:20190620225805p:plain

agentプログラムは最初にagent IDを求めてくる。

おそらくその部分の処理はstringsで表示された、strncmpで行われていると予想される。

ltraceでライブラリの呼び出しをチェックしてみる。

f:id:snoozekvn:20190620225756p:plain

やはりそうだった。

agent IDは48093572だ。

f:id:snoozekvn:20190620225841p:plain

次の入力で大量の文字列をインプットするとSegmentation faultを起こす。

このことからバッファオーバーフローを利用した攻撃が可能だと考えられる。

まずはバッファからeipを上書きできる場所までのオフセットを求める。

最初に一意な文字列を生成し、

f:id:snoozekvn:20190620225752p:plain

edbをagentにアタッチさせた状態で、先程の文字列をagentにインプットする。

するとedbの方で次のような出力を得る。

f:id:snoozekvn:20190620225748p:plain

eipが上書きされ、不法なアドレスにアクセスしようとした結果エラーが出たわけだ。

この文字列までのオフセットを次のコマンドで求める。

f:id:snoozekvn:20190620225808p:plain

なるほど、バッファからeipを上書きできる部分までのオフセットは168だということだ。

したがってmsfcenomでリバースシェルを張るシェルコードを生成し、

f:id:snoozekvn:20190620225902p:plain

見つけておいたcall eax(番地0x08048563)へと、eipが上書きされるように次のようにすれば権限昇格が狙える。

f:id:snoozekvn:20190620225906p:plain

Netcatで待ち受けて…

f:id:snoozekvn:20190620225913p:plain

よおし!!

 

ここまで長かった…

VulnHubのMr-Robot: 1をやってみたよ~!

VulnHubのMr-Robot: 1をやってみたよ~!ということでやっていく。

https://www.vulnhub.com/entry/mr-robot-1,151/

 

まずはアドレスを取得する。

f:id:snoozekvn:20190617013055p:plain

ついでポートスキャン。

f:id:snoozekvn:20190617013058p:plain

ふむ、80番ポートと443番ポートが開放されていることがわかる。

80番ポートでは単純なhttpが稼働していることがわかるのでアクセスしてみる。

f:id:snoozekvn:20190617013052p:plain

めちゃくちゃかっこいいサイトが表示された。

コマンドプロンプトっぽいところへ実際にコマンドが打てるようだ。

全て試してみたが、どれからも次のステップに進むためのヒントは得られなかった。

 

niktoとdirbを使ってサイトのディレクトリを探索する。

niktoの結果からは特に得られるものはなかった。

次の画像はdirbの出力結果の一部。

WordPressが動いてることと、robots.txtがあることがわかる。

f:id:snoozekvn:20190617032234p:plain

 

robots.txtにアクセスすると次のような表示を得た。

f:id:snoozekvn:20190617014327p:plain

明らかにこれはファイル名だ。

wgetでダウンロードしてみる。

f:id:snoozekvn:20190617014333p:plain

ファイルの中身を表示したのが次の画像。

最初にfsocity.dicをheadコマンドで出力している。

これは辞書ファイルで、おそらくブルートゥースアタックに使うものだと予想される。

key-1-of-3.txtは3つあるflagの1だと思われる。

f:id:snoozekvn:20190617014744p:plain

 

さて、robots.txtから得られるものはもうなにもない。

dirbで得られた結果の解析に戻ろう。

先程実行したdirbの結果から、このサーバーにはWordPressがインストールされていることがわかっている。

アクセスしてみる。

f:id:snoozekvn:20190617013739p:plain

もろにログインページだ。おそらく先程の辞書ファイルを使うのだろう。

パスワードリストとユーザー名リストにその辞書ファイルを指定し、WPScanでブルートフォースアタックを仕掛ける。

 

…が、単語数が多すぎて一向に終わらない。

もう一度辞書ファイルをよく見ると、単語の重複がかなりあることがわかった。

ソートし、uniqコマンドで重複を削除した後、再度ブルートフォースを仕掛ける。

…が、やはり単語数が多い。全く終わる気配がしない。

 

WPScanでスキャンをかけるもユーザー名などは見つからなかった。

f:id:snoozekvn:20190617013736p:plain

また、有効な脆弱性も見つからない。

 

何か見落としがあると考え、dirbの出力結果をもう一度見直す。

結論から述べると、licenseというページにヒントがあった。

次の画像がlicenseをブラウザで開いた様子。

f:id:snoozekvn:20190617014746p:plain

煽られている…?

うおおおおおおおおおおおお

 

…ページ下部にbase64エンコードされた文字列を発見。

f:id:snoozekvn:20190617014741p:plain

デコードしてみる。

f:id:snoozekvn:20190617020648p:plain

これは…ユーザー名とパスワード…?

WordPressのログインページで試してみる。

f:id:snoozekvn:20190617020650p:plain

ログインできた!

 

とはいえ、ここからどうすればいいのか皆目見当がつかない。

シェルが得られたりしないのだろうか。

しばらくダッシュボードをいじくり回してみる。

…よくわからないので調べる。

次の記事が参考になった。

https://www.hackingarticles.in/wordpress-penetration-testing-using-wpscan-metasploit/

これによるとプラグインバックドアを仕込めるとのこと。

よし、やっと方向性が見えてきた。

例によってpentestmonkeyからコードを拝借する。

http://pentestmonkey.net/tools/web-shells/php-reverse-shell

プラグインにアップロードできるのはzipファイルだけなので、phpファイルをzipにして…

 

…ここで気がついたのだが、プラグインをアップロードしても、このコードを実行する方法がない。

もう一度上の記事をよく読んで見ると、どうやらプラグインをアップロードするのではなくて、既存のプラグインを書き換えることでバックドアを仕込むようだ。

記事を参考に404.phpを書き換える。

これなら適当なページにアクセスすることで、簡単にバックドアコードを実行させられる。

f:id:snoozekvn:20190617022411p:plain

Netcatで待ち受けて…適当なページにアクセスする。

f:id:snoozekvn:20190617022415p:plain

よし!たしかにリバースシェルが張られている。

f:id:snoozekvn:20190617022417p:plain

 

カーネルエクスプロイトで権限昇格を狙う。

まずはエクスプロイトコードを照会。

Kali側でPythonを使った簡易サーバーをホストし、Mr-RobotVM側からエクスプロイトコードをwgetする。

gccコンパイルし、実行!

…とはいかず。2,3他のコードも試してみたがうまく刺さらなかった。

 

残念ながらここでギブアップした。

これまでの経験から、権限昇格における私の手札は次のようなものだ。

カーネルエクスプロイト。

sudo -lでroot権限で実行を許可されているコマンドを見つけ、そこからroot権限のシェルをスポーンさせる。

同様の考えで、root権限で動くサービスからシェルをスポーンさせる。

root権限のcronで定期実行されるスクリプトを書き換える。

 

しかし今回はこのどれも使えなかった。

writeupを見ると次のような方法でroot権限を得ていた。

まずSUIDがrootのものをすべて列挙し、

f:id:snoozekvn:20190617024748p:plain

今回はそのうちのNmapの利用している。

f:id:snoozekvn:20190617023729p:plain

古いバージョンのNmapはユーザーがシェルコマンドを実行できる対話モードが実装されているらしい。

pingなどのネットワークユーティリティは実行にroot権限が必要な場合があり、Nmapもこれに該当する。

sudo -lが封じられていてもroot権限で動くものを探させるということが学べた。

 

さて、残りのフラッグは/home/robot/と/rootにあった。

f:id:snoozekvn:20190617023727p:plain

f:id:snoozekvn:20190617031345p:plain

Thanks to the Leon Johnson for this CTF!

 

前半はWPScanのオプションが変更されていることに気づかず時間を溶かしてしまった一方で、後半は新しい手法を学ぶことができた。

また、その過程でペンテストについて参考になるブログをたくさん見つけることができた。熟読して手札を増やしていきたい。

 

 




 

 

VulnHubのKioptrix: 2014 (#5)をやってみたよ~!

VulnHubのKioptrix: 2014 (#5)をやってみたよ~!ということでやっていく。

https://www.vulnhub.com/entry/kioptrix-2014-5,62/

 

まずは対象VMのアドレスの取得から。

f:id:snoozekvn:20190616001811p:plain

アドレスをゲットできたらNmapでポースキャン。

f:id:snoozekvn:20190616001815p:plain

80番ポートと8080番ポートでhttpが稼働中のようなのでアクセスしてみる。

まずは80番ポートから。

f:id:snoozekvn:20190616001819p:plain

ソースにページ情報を発見。

f:id:snoozekvn:20190616002118p:plain

アクセスしてみる。

f:id:snoozekvn:20190616002206p:plain なにやらよくわからないページが表示された。

このページの内容自体にはヒントになりそうなものはなさそう。

ちなみに8080番ポートは権限が足りずアクセス拒否された。

 

niktoとdirbを使ってディレクトリ探索を実施。

f:id:snoozekvn:20190616002121p:plain

f:id:snoozekvn:20190616002125p:plain

どちらの結果にも、次のステップに進むための有益な情報は含まれていなかった。

 

どうしようかしばらく右往左往した。

アドレスにバージョン情報っぽい数列が含まれていたのでひょっとしたらと思い調べると、先程表示したpChartのページは、pChartというライブラリによってホストされているらしいことがわかった。

アホっぽい言い回しだが重要な収穫だ。

 

さっそくsearhsploitで調べてみるとやはり脆弱性情報があった。

f:id:snoozekvn:20190616002210p:plain

このテキストによるとDirectory TraversalとCross-Site Scriptingの脆弱性があるらしい。

f:id:snoozekvn:20190616002203p:plain

記述を参考にアドレスを打ち込んでみると、確かにディレクトリ内容が表示された。

f:id:snoozekvn:20190616003233p:plain

 

またXSSも再現できた。

f:id:snoozekvn:20190616003513p:plain

ただ、これらの情報からKioptrixVMへの侵入に繋がりそうな直接の情報は得られなかった。

ここで、すこし迷った。

次の一手は、ディレクトリトラバーサルXSS脆弱性を調整しさらなる情報窃取をすることだ。

はて、どうすればいいのだろうか。

わかっていることはFreeBSD上でApacheが動いているということだ。

ディレクトリトラバーサル脆弱性を利用し、他のファイルも見てみたい。できればクレデンシャルが含まれたファイルがあればそれがいい。

とはいえ、ダイレクトな情報が出てくるとは考えにくいので、まずはFreeBSDApacheをインストールしたときのデフォルトのディレクトリ構造を調べることにした。

そういう向きで検索をかけると次のサイトがヒットした。

f:id:snoozekvn:20190616011041p:plain

https://www.freebsd.org/doc/handbook/network-apache.html

これによると、FreeBSDApacheは設定ファイルを以下のディレクトリに作成するらしい。

 /usr/local/etc/apache2x/httpd.conf

ディレクトリトラバーサル脆弱性を利用し、このファイルを見てみよう。次の画像が得られたhttpd.conの内容だ。

f:id:snoozekvn:20190616003230p:plain

Apacheでは、各ページごとの設定をこのhttpd.confファイルに記述していく。

次のサイトを参考にしながら調査していった。

https://r7kamura.hatenablog.com/entry/20110222/1298371277

調査の結果、ページ最下部に記述されていた次の画像の部分が、8080番ポートへのアクセスを制限していることがわかった。

 

f:id:snoozekvn:20190616010042p:plain

これによると、user-agentがMozilla/4.0でなければ8080番ポートにはアクセスできない。

さっそくcurlコマンドで、user-agentのオプションを調整してアクセスしてみよう。
f:id:snoozekvn:20190616003824p:plain

8080番ポートにアクセスするとphptaxへのリンクが張ってあることがわかる。

分かりやすいようにページをダウンロードし、実際にブラウザ上に表示させてみる。

f:id:snoozekvn:20190616012423p:plainf:id:snoozekvn:20190616012420p:plain

再度curlを使って、phptax/へアクセスするとさらにリンクが貼ってあるがこの先に接続はできなかった。

ページをダウンロードし表示させてみる。

f:id:snoozekvn:20190616012439p:plain

f:id:snoozekvn:20190616012442p:plain

f:id:snoozekvn:20190616012445p:plain

おそらくphptax配下にもなにかページがある。

phptaxは、dirbが使うワードリストから漏れているので、再度dirbで新しく見つかったページphptax配下を探ってみる。

f:id:snoozekvn:20190616003827p:plain

phptax配下にいくつかページが有ることが確認できた。

次の画像はphptax/readme/index.htmlをcurlでダウンロードし、ブラウザ上で表示させたもの。

f:id:snoozekvn:20190616013542p:plain

ここにきてphptaxなるものが、なんらかのサービスであることがわかった。

ページ名だとばかり思っていたが、pChartと同じ轍を踏んでしまった。

 

さて、気を取り直してsearchsploitで脆弱性情報を照会する。

f:id:snoozekvn:20190616003816p:plain

一番上に表示されたRubyファイルを見てみる。

f:id:snoozekvn:20190616013815p:plain

Metasploit Frameworkで使用可能ということなので楽をさせてもらうことにする。

msfconsoleを開き、searchコマンドで先程の脆弱性を検索する。

f:id:snoozekvn:20190616013818p:plain

useコマンドで指定。

f:id:snoozekvn:20190616013813p:plain

オプションを表示し必要項目を埋める。

f:id:snoozekvn:20190616014018p:plain

exploit!

f:id:snoozekvn:20190616014021p:plain

うまく刺さったようだ。

 

ここからはFreeBSD脆弱性を突くことで権限昇格を狙っていく。

まずはOS情報から脆弱性をサーチ。

f:id:snoozekvn:20190616014016p:plain

見つかった脆弱性をKioptrixVMにアップロードする。

wgetコマンドがKioptrixVMになかったのでnetcatを使う。

最初にKali側でファイルを指定してやり、

f:id:snoozekvn:20190616014346p:plain

KioptrixVM側でnetcatコマンドを使ってダウンロードする。

f:id:snoozekvn:20190616014348p:plain

gccコンパイルし、実行!
f:id:snoozekvn:20190616014343p:plain

rootに移動し、

f:id:snoozekvn:20190616014643p:plain

フラッグゲット!やったぜ!

flagで述べられているように、Kioptrix:2014はテクニカルな部分はほぼ一本道だが、その道を見つけるまでの検索力を問う問題だった。

Thanks to the  author of Kioptrix for this CTF!

 

 

VulnHubでBrainpan: 1をやってみたよ~!

VulnHubでBrainpan: 1をやってみたよ~!ということでやっていく。

https://www.vulnhub.com/entry/brainpan-1,51/

 

まずはいつもどおりアドレスをゲットするところから始める。

f:id:snoozekvn:20190615170028p:plain

次はポートスキャン。

9999番ポートでabyssなるもの、10000番ポートでhttpサーバーが可動している模様。

まずはブラウザからhttpにアクセス。

f:id:snoozekvn:20190615170656p:plain

う~ん、ヒントはなさそう。

f:id:snoozekvn:20190615170209p:plain

9999番ポートで稼働中のabyssなるものはざっと検索してみたところWebサーバーぽい。netcatでアクセスしてみる。

f:id:snoozekvn:20190615174101p:plain

何やらバナーが表示されパスワードの入力を求められた。

適当な文字列を入力してみても当然弾かれる。

う~ん。

dirbでもう少し10000番ポートを探索してみることにする。

f:id:snoozekvn:20190615170026p:plain

/binがあるらしいのでアクセスしてみる。

f:id:snoozekvn:20190615171002p:plain

ダウンロードして中身をざっと見てみる。

f:id:snoozekvn:20190615171250p:plain

これは9999番ポートで出力されたバナーと全く同じ…

さらに含まれている文字列を見てみる。

f:id:snoozekvn:20190615171247p:plain

文字列比較やネットワーク系の命令が見えるなぁ。

Windows Emulatorことwineを使って実行してみる。

f:id:snoozekvn:20190615171005p:plain

9999番ポートにバインドしている…やっぱりBrainpanVMの9999番ポートで稼働中のものと同じものっぽい。

 

netcatで自分自身の9999番ポートに接続してみる。

f:id:snoozekvn:20190615170958p:plain

パスワードの入力を求められているので適当な文字を入力。当然ACCESS DENIED…残念。

と思いきや次のような出力がされていた。

f:id:snoozekvn:20190615171729p:plain

これはBOF攻撃ができるのか…?

Pythonでシンプルなファザーを書いてファジングしてみる。

ファジングに使ったコードは以下。

f:id:snoozekvn:20190615183357p:plain

すると次のように出力された。

f:id:snoozekvn:20190615171733p:plain

702bytesコピーしたところでオーバーフローしたとのこと。

ということは、オーバーフローしたポイントが502~702bytesにあるということだ。

具体的に何byte目でオーバーフローするのかさらに調査する。

文字列中の3bytes特定できれば、それが文字列中のどの部分なのかが一意に特定できる文字列を、次のコマンドで出力する。

f:id:snoozekvn:20190615173105p:plain

さてこの文字列をbrainpan.exeに流し込む。

書いたコードは以下。

f:id:snoozekvn:20190615183442p:plain

結果は次のようになった。

f:id:snoozekvn:20190615172353p:plain

アドレス0x35724134にアクセスしようとしてエラーを起こしている。

0x35724134をascii変換すると5rA4で、このことからバッファーの大きさは先程用意した文字列の先頭からちょうど5rA4までだとわかる。

では次のようにしてその長さを求めてみよう。

f:id:snoozekvn:20190615172356p:plain

バッファーの大きさは524bytesだと判明した。

さて、ここからどうするのかだが…

BOF攻撃を使ってKaliへリモートシェルを張らせるようなコマンドを実行させることができれば、BrainpanVMのシェルが取れそうだ。

msfvenomを使ってリバースシェルを張らせるペイロードを作成する。

f:id:snoozekvn:20190615175756p:plain

ペイロードを含んだコードを作成して、

f:id:snoozekvn:20190615183532p:plain

ncでリバースシェルを待ち受け後、実行!

すると次のような出力が得られた。f:id:snoozekvn:20190615180548p:plain

たぶんこれをBrainpanVMの9999ポートに試せば、シェルが得られるんだと思う。

ペイロードを書き込んだファイルのアドレスをBrainpanVMのアドレスに書き換えて実行してみる。ncで待ち受けるのを忘れないように!
f:id:snoozekvn:20190615180822p:plain

素晴らしい!シェルが得られているようだ。

さっそく内部を調査する。

シェルを操作していると変な挙動を示す。bashのつもりで動かすとうまくいかない。

多分いま操作しているのはwindowsのシェルであってbashではないからだろう。

f:id:snoozekvn:20190615180825p:plain

動かしづらいと思っていたら矢先に/bin/bashを見つけた。

ただbashが使えるのは使えるのだがいちいち直接bashを指定してやらねばならず、不便この上ない。

リバースシェルを貼らせてみる。

f:id:snoozekvn:20190615180818p:plain

f:id:snoozekvn:20190615182202p:plain

うまくいったようだ。いつもどおりのbashの要領で操作ができる。

さておもむろに、root権限で実行可能なファイルを調べて見ると、あるではないか!f:id:snoozekvn:20190615182205p:plain

これを使ってrootへの昇格をねらう。

このanansi_utlはいくつかのコマンドを実行できるようだ。試しにmanualコマンドを実行してみよう。

f:id:snoozekvn:20190615185953p:plain

これによるとanansi_utl manualは引数に与えられたコマンドのmanページを表示するものらしい。
これは怪しい。

以下のページにあるように、vimやmanなどはその中でさらにコマンドを実行可能だということが知られている。

https://www.hackingarticles.in/linux-privilege-escalation-using-exploiting-sudo-rights/

これを利用すればroot権限を引き継いだshを呼び出すことが可能だろう。

f:id:snoozekvn:20190615182200p:plain

よし!

f:id:snoozekvn:20190615182213p:plain

やったね!

Thanks to superkojiman for this CTF!

 

あとから気づいたんだけど画像が全部透けててぜんぜんやったねじゃないじゃん…

 

 

 

 

 

VulnHubでSickOs: 1.2をやってみたよ~!

VulnHubのSickOs: 1.2をやってみたよ~!ということでやっていく。

https://www.vulnhub.com/entry/sickos-12,144/

 まずは対象ホストのアドレスを取得する。

f:id:snoozekvn:20190614004850p:plain

/etc/hostsに[address] [name]の形でIPと名前の対応を登録しておくと、勝手に名前解決してくれるから便利。f:id:snoozekvn:20190614004853p:plainアドレスを取得できたら稼働中のサービスを確認する。Nmapでポートスキャン。f:id:snoozekvn:20190614004847p:plain

22番ポートでssh、80番ポートでhttpが可動している事がわかる。

早速アクセスしてみる。

f:id:snoozekvn:20190614005211p:plain

う~ん?なにもない…?名前解決されてない…?

アドレスを直打ちして再度アクセスしてみる。

f:id:snoozekvn:20190614005622p:plain

おっ、何か表示された。これは若かりしキアヌ・リーブスですな。ちなみにソースに有意な情報はなかった。他にページや脆弱性がないかdirbとniktoでスキャンする。

f:id:snoozekvn:20190614005213p:plain

f:id:snoozekvn:20190614005216p:plain

/test/というページがあるらしい。アクセス結果は以下。

f:id:snoozekvn:20190614010432p:plain

サーバーのディレクトリが見えてしまっている。ここからどうすればいいのだろうか。

ここでつまってしまい結局writeupをみた。どうもこのページではPUTメソッドが有効になっているらしくそれを利用してサーバーにリソースを作成するらしい。

次の画像ではcurlコマンドでページ情報を取得している。Allow項目にPUTメソッドがたしかに確認できる。

f:id:snoozekvn:20190614010013p:plain

実際にPUTメソッドを使ってサーバーにコマンドを実行させるリソースをアップロードする。

f:id:snoozekvn:20190614010015p:plain

URLの引数にcmd=[command]を与えてやればコマンドが実行できる。

次の画像はidコマンドとlsコマンド、unameコマンドを実行させた様子。f:id:snoozekvn:20190614010010p:plain

f:id:snoozekvn:20190614014302p:plainf:id:snoozekvn:20190614014257p:plain

さて、URLからコマンドが実行できるのならリモートシェルも張れるはずだ。

次のコマンドのアドレスとポートを調整して実行させてみる。

f:id:snoozekvn:20190614014300p:plain

まずはURLエンコードする。

f:id:snoozekvn:20190614014525p:plain

次にKali側で予め待ち受けておく。

f:id:snoozekvn:20190614014528p:plain

最後にエンコードした文字列をcmd=のあとに続けて入力し、Enter!

f:id:snoozekvn:20190614014723p:plain

OK!接続できた!

よし、内部を探索してみよう。

ざっとみてヒントになりそうなものは見当たらない。

また、OSの脆弱性情報を照会しても刺さりそうなものはなかった。

ここで再びつまった。こういうときはroot権限で動作中のデーモンをみつけて権限昇格を狙ったりするのだが、どうしたものか。

結局writeupをみた。root権限で定期実行されているChrootkitに脆弱性があるらしい。

これは/tmp内にupdateというファイルを設置するとChrootkitの権限で実行されてしまうというものだ。

次のコマンドは、ユーザー:www-dataかつ実行時にパスワードを求めない形で、sudo suを実行できるようにupdateというファイルを/tmpに追加するというもの。

echo 'echo“ www-data ALL = NOPASSWD:ALL” >> / etc / sudoers && chmod 440 / etc / sudoers'> / tmp / update

f:id:snoozekvn:20190614015235p:plain

しばらくしてこのupdateファイルが実行されていれば、sudo suでrootに昇格できる。

その前にフルシェルを得ておく。

f:id:snoozekvn:20190614015232p:plain

sudo suを試してみると見事権限昇格できている。やったね!

 f:id:snoozekvn:20190614015229p:plain

フラッグゲット!

f:id:snoozekvn:20190614015412p:plain

Thanks to D4rk for this CTF!

 

システム侵入前と侵入後で2度詰まった。
curlでリソースをPUTする方法は単純に知らなかったが、Chrootkitの脆弱性を利用する部分はもうすこし粘れば自力で導けた感はある。いずれにせよ経験値不足が目立つのでもうちょっとVulnHubの問題を解いていきたい。

 

 

 

VulnHubのVulnOS: 2をやってみたよ~!

VulnHubのVulnOS: 2をやってみたよ~!ということでやっていく。

https://www.vulnhub.com/entry/vulnos-2,147/

まずは対象ホストのアドレスを確認する。

f:id:snoozekvn:20190612232502p:plain

次いで、稼働中のサービスを確認する。

f:id:snoozekvn:20190612232505p:plain

80番ポートでサービスhttpdが稼働しているのでアクセスしてみる。

f:id:snoozekvn:20190612232510p:plain

なにやらよくわからないサイトが表示された。とりあえずいろいろ探ってみる。

脆弱性スキャナーniktoや秘匿オブジェクト探査ツールのdirbでスキャンを掛けてみたが有意な情報は得られなかった。

ページのソースに何か含まれないかと見ていくと、jabc/というサイトのソースにいかにもな文言を確認できた。

f:id:snoozekvn:20190612232738p:plain

下がその画像。このサーバー上に/jacd0cs/があるらしいのでアクセスして見る。

f:id:snoozekvn:20190612232742p:plain

guest/guestでログインしてみる。

f:id:snoozekvn:20190612232735p:plain

 

なにやら画像やpdfがおいてある。

f:id:snoozekvn:20190612233900p:plain

f:id:snoozekvn:20190612233903p:plain

置いてあるデータ自体にはあまり意味はなさそう。次のステップに進むヒントは見つけられなかった。

ここで、何をすればいいのかわからなくなった。

sshはアクセスできないし…総当たりでログインを試すか?

などとあれやこれや考えていると、前回のVM同様、脆弱性が突けるのではないかと思いあたった。このページをホストしているOpenDocMan v1.2.7の脆弱性を調べてみた。

f:id:snoozekvn:20190612233857p:plain

ふむ。これを使ってみよう。

f:id:snoozekvn:20190612234640p:plain

中身を読んでみるとどういう脆弱性があってどう攻めればいいのか解説してある。

f:id:snoozekvn:20190612234644p:plain

HTTP GETパラーメータの"add_value"のvalidation不十分により、攻撃者はデータベースに対して任意のSQLコマンドを実行できるというものらしい。

さっそくsqlmapで攻撃を試してみる。運が良ければデータベース内にクレデンシャルがあるはずだ。まずはデータベースの一覧を取得する。なおデフォルトではデータを取得できなかったので、いくつかオプションを加えている。

f:id:snoozekvn:20190612234638p:plain

うまく攻撃が成功したようだ。次にデータベースjabcd0csを指定し、テーブルodm_userのダンプを行った。

f:id:snoozekvn:20190612235719p:plain

さて、得られたパスワードのハッシュからもとのパスワードを求めよう。

f:id:snoozekvn:20190612235714p:plainf:id:snoozekvn:20190612235723p:plain

 

ユーザーwebmin、パスワードwebmin1980という結果が得られた。

試しにsshの認証にこれを使ってみる。

f:id:snoozekvn:20190613000332p:plain

素晴らしい!侵入成功!

システムの情報を集めよう!

f:id:snoozekvn:20190613000335p:plain

Ubuntu14.04ということなので脆弱性がないか検索する。

f:id:snoozekvn:20190613000329p:plain

よし!これを使おう!

まずはKali側でサーバーを立てておいて…

f:id:snoozekvn:20190613000534p:plain

VulnOS側からエクスプロイトコードを含んだファイルをダウンロードする。

f:id:snoozekvn:20190613000537p:plain

コンパイルして…実行!

f:id:snoozekvn:20190613000541p:plain

YES!

Thanks to c4b3rw0lf for this CTF!

いかにも教科書的(?)というのだろうか、お手本のような良い問題だったと思う。

結局6667ポートで稼働しているIRCは最後まで触らなかった。これはToDo。

VulnHubのStapler: 1をやってみたよ~!

VulnHubのStapler: 1をやってみたよ~!ということでやっていく。

https://www.vulnhub.com/entry/stapler-1,150/

まずはアドレスの確認。

f:id:snoozekvn:20190611225515p:plain

アドレスが分かったらサービスのスキャン。いろいろ動いている。

f:id:snoozekvn:20190611230458p:plain

こっちのほうが見やすいね。
f:id:snoozekvn:20190611225519p:plain

80番ポートがオープンしているのでブラウザで開いてみるも何も得られず。

dirbで隠しオブジェクトを探索してみる。f:id:snoozekvn:20190611225527p:plainちなみに脆弱性スキャナーniktoでも同様の結果が得られた。f:id:snoozekvn:20190611225522p:plain.bashrcと.profileがあるということなのでダウンロードして中身を確認。

f:id:snoozekvn:20190611225530p:plain…してみたのだが有意な情報は含まれていなかった。

他のポートの調査に移る。まずは22番のsshから。

f:id:snoozekvn:20190611225554p:plain

流石にログインはさせてもらえないがバナー?が表示された。こういう名前は後で総当たりに使うのが定石…メモっておく。またメッセージの内容からsshにBarry用のアカウントの存在が示唆されている。

次に21番ポートのftpに接続を試みる。

f:id:snoozekvn:20190611232123p:plain

また名前が出てきたので覚えておく。一応匿名で見れるものがないか確認すると、noteというファイルがあったのでダウンロードして中身を確認する。

f:id:snoozekvn:20190611225539p:plain
ま~た名前だ。JohnのメッセージによるとftpアカウントにはJohnの他にElly用のアカウントも存在することが示唆されている。

次は139番ポートのsambaを調査する。まずはクライアントをKaliにインストールし、アクセス可能なディレクトリの一覧を表示する。次いで実際にディレクトリにアクセスし中身を確認した。f:id:snoozekvn:20190611225457p:plain

Kathy_stuff内のtodo-list.txtをダウンロードした。f:id:snoozekvn:20190611225502p:plain

中身はKathyが残したメッセージで画像を載せるほど大した内容ではなかった。

さて、一通り調査が終わったわけだが、次のステップに進むヒントになりそうなものは名前ぐらいだろうか。この名前で各サービスに対して総当たりでアタックを仕掛けてみる。と、思ったがその前にsambaに脆弱性がないかMetasploitでサーチをかけてみた。f:id:snoozekvn:20190611225505p:plainその結果が上の画像だが、やはり脆弱性があった。とりあえず最新版でRankがexcellentなのを試してみる。f:id:snoozekvn:20190611225509p:plain刺さってしまった。

f:id:snoozekvn:20190611225513p:plain

フラグはゲットできたものの、このVMが公開されたのが2016年で、試したエクスプロイトが2017年のものだということを考えるとこれは問題作者が想定していた正規ルートではなさそう。

他の方のwriteupを見させていただくと、予想通りhydraを使ってブルートフォースを仕掛けている。これはToDo.