偵察/スキャン
nmapでスキャンします。
┌──(kali㉿kali)-[~] └─$ nmap -P0 -sC -sV -A -p- 10.10.11.104 Starting Nmap 7.93 ( https://nmap.org ) Nmap scan report for 10.10.11.104 Host is up (0.18s latency). Not shown: 65533 closed tcp ports (conn-refused) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 53ed4440116e8bda698579c081f23a12 (RSA) | 256 bc5420ac1723bb5020f4e16e620f01b5 (ECDSA) |_ 256 33c189ea5973b1788438a421100c91d8 (ED25519) 80/tcp open http Apache httpd 2.4.29 | http-cookie-flags: | /: | PHPSESSID: |_ httponly flag not set | http-title: Previse Login |_Requested resource was login.php |_http-server-header: Apache/2.4.29 (Ubuntu) Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
TCP/22,80が開いていることがわかりました。ブラウザでアクセスすると以下のような画面が表示されます。
dirbやniktoなどを実行しましたが特に手掛かりになる情報を見つけられませんでした。
アクセス取得
対象サイトにcurlを実行すると、ブラウザで表示されなかったような内容が取得できました。curlはリダイレクトに従わないため、EARの脆弱性があるページにアクセスすると、認証されたユーザーに表示されるはずのコンテンツが表示されることがあります。
※今回のサイトはPHPを使用していますが、PHPの場合はdie()関数を呼び出すことで上記の脆弱性への対応ができるようです。
上記ページのアクセスをBurpSuiteで調べてみます。
リダイレクトされていますがレスポンスにページの内容が含まれています。
BurpSuiteでステータスコードを200に変更するとアクセスできました。
BurpSuiteを使用してアカウント作成が可能です。
作成したアカウントを使用することでログインすることができました。
ログイン後のページより、「FILES」にアクセスするとサイトのバックアップが見つかりました。
バックアップファイルの中にはconfig.phpというファイルがあり、そこにはSQLのアカウント情報が含まれていました。
※このアカウントは後程使用します。
また、「logs.php」ではコマンド実行をしているコードが確認されました。
意味深なコメントがありましたが、コメントがあるのはこのファイルだけでした。
logs.phpへのアクセスをBrup Suiteで見てみると、delimというパラメータを使用しているようでした。
logs.phpに書かれているexec関数はコマンドが記載されているだけのようであり、サニタイズなどもないので「;」に続けてpingのコマンドを入れて動作するかを確認します。
待ち受け側のターミナルでicmpの受信が確認されました。
これでPrevise上でコマンドを実行できることが確認できました。
※python3 -c 'import pty;pty.spawn("/bin/bash")'でシェルをアップグレードします。
特権昇格
取得したシェルを使用して特権昇格します。
先程取得したMySQLのアカウントを使用してみます。
※-pの後はスペースなし
MySQLへ接続できたので有用な情報がないか探してみます。
PreviseというDatabaseがあるので確認してみます。
accountsというテーブル内に「m4lwhere」というユーザが確認できました。
パスワードはハッシュ化されているようです。
以下のサイトで確認するとモード500の例のように見えます。
以下のコマンドを実行するとパスワードが取得できました。
hashcat -m 500 hash.txt /usr/share/wordlists/rockyou.txt
取得したパスワードで「m4lwhere」に変更します。
このユーザはroot権限で「access_backup.sh」を実行できるようです。
「access_backup.sh」の中身を見てみます。
シェルスクリプトの中で「gzip」というコマンドを実行しているようですが、完全なパス名ではないため、gzipを新たに作成することでroot権限が取得できます。
gzipというファイルを作成します。
※root権限で動作するので「root.txt」の中身を表示するcatコマンドを記載する方法もあります。
また、あわせて作成したgzipが配置されている環境パスを指定する必要があります。
m4lwhere@previse:/tmp$ export PATH=/tmp:$PATH
上記の後で「access_backup.sh」を実行することでroot権限が取得でき、フラグをとることができます。
参考にさせていただいたサイト
貴重な情報をありがとうございます。