Trigger: By sending a crafted request with a valid nonce to /wp-admin/admin-ajax.php, a time delay can be observed:
root@kitploit:~
POST /wp-admin/admin-ajax.php
Content-Type: application/x-www-form-urlencoded
action=wplf_update_from_previous&nonce=<valid_nonce>&id=1 AND SLEEP(5)
Impact: Attackers can gradually extract database contents (user accounts, emails, configuration values) and obtain administrator password hashes, leading to privilege escalation. Disclosure of schema information and record counts weakens confidentiality and facilitates subsequent targeted attacks against the entire WordPress installation.
PoC:
An authenticated user sends a POST request to /wp-admin/admin-ajax.php with a valid nonce.
The id parameter is injected with a time-based payload such as 1 AND SLEEP(5).
The server response is delayed, confirming the presence of Blind SQL Injection.
❓Reason for the vulnerability
The id parameter is taken directly from $_REQUEST and only passed through sanitize_text_field(), which does not prevent SQL injection. The value is then concatenated directly into the SQL query without prepared statements or proper parameter binding.