Beyond
This is the beyond page that an additional post enumeration and assessment are conducted as the root
user after compromising the target system.
CVE-2024-9796
root@workaholic:/var/www/html/wordpress/blog/wp-content/plugins/wp-advanced-search/class.inc/autocompletion# cat autocompletion-PHP5.5.php
<?php
if(isset($_GET['q']) && !empty($_GET['q'])) {
$query = htmlspecialchars(stripslashes($_GET['q']));
// Récupération à la volée des informations transmises par le script d'autocomplétion
$table = htmlspecialchars($_GET['t']);
$field = htmlspecialchars($_GET['f']);
$type = htmlspecialchars($_GET['type']);
$encode = htmlspecialchars($_GET['e']);
/* if(is_numeric($_GET['l'])) {
$limitS = htmlspecialchars($_GET['l']);
} else {
$limitS = 5;
}*/
if($type == 0 || $type > 1) {
$arg = "";
} else {
$arg = "%";
}
// Connexion à la base de données PHP 5.5 --> Obligatoire !!!
// Fonctionne si une donnée est reçue dans le champ de recherche
include_once('../../../../../wp-load.php');
$link = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
// En cas d'erreur
if (mysqli_connect_error()) {
die('Connexion impossible à Mysql ('.mysqli_connect_errno().') : '.mysqli_connect_error());
}
// Requête de recherche dans l'index inversé (base de mots clés auto-générés)
// $requeteSQL = "SELECT DISTINCT ".$field." FROM ".$table." WHERE ".$field." LIKE '".$arg.$link->real_escape_string($query)."%' ORDER BY ".$field." ASC, idindex DESC LIMIT 0 , ".$limitS."";
$requeteSQL = "SELECT ".$field." FROM ".$table." WHERE ".$field." LIKE '".$arg.$link->real_escape_string($query)."%' ORDER BY ".$field." ASC, idindex DESC";
// Lancement de la requête
$results = $link->query($requeteSQL) or die("Erreur : ".$link->error);
// Retourne les résultats avec le système d'autocomplétion
while($donnees = mysqli_fetch_assoc($results)) {
$mots = $donnees[$field];
/*
// Recherche sur expression exacte
if(preg_match("#([ ]+)#", $mots)) {
$mots = '"'.$mots.'"';
}*/
if($encode == "utf-8" || $encode == "utf8" || $encode == "UTF-8" || $encode == "UTF8") {
echo utf8_encode($mots)."\n";
} else {
echo $mots."\n";
}
}
}
Source code of the vulnerable wp-advanced-search/class.inc/autocompletion/autocompletion-PHP5.5.php
file.
$requeteSQL = "SELECT ".$field." FROM ".$table." WHERE ".$field." LIKE '".$arg.$link->real_escape_string($query)."%' ORDER BY ".$field." ASC, idindex DESC";
This is the vulnerable SQL query.