Attualmente sto verificando un plug-in e ho la seguente situazione (semplificata ad esempio):
<?php
$post_id = false;
$absolute_path = "/var/www/html/wordpress/cache";
$extension = ".min.css";
$filename = $_GET['filename']; // I have complete control over the $filename variable
$absolute_path = $absolute_path . "/{$post_id}/{$filename}-[0-9]*{$extension}";
$files = glob($absolute_path);
foreach($files as $file) {
unlink($file);
}
?>
Il punto è che voglio sfruttare questa situazione per eliminare file arbitrari sul sistema, che potrebbero portare all'esecuzione di codice in modalità remota. Il problema è che controllo $filename
, ma qualcosa verrà aggiunto in seguito.
glob()
è una funzione in PHP che utilizza la corrispondenza dei modelli per trovare file e directory. glob
utilizza i caratteri jolly del sistema.
Quando espandi la variabile $absolute_path
, questo è il risultato:
/var/www/html/wordpress/cache//I-HAVE-CONTROL-OVER-THIS-PART-[0-9]*.min.css
Il mio obiettivo è ottenere il seguente risultato: avere glob()
restituire il percorso a wp-config.php
( /var/www/html/wordpress/cache/../../wp-config.php
)
Per ottenere ciò, dovrei in qualche modo ottenere glob
per "ignorare" tutto ciò che viene dopo il controllo della parte I o qualche altro bypass. C'è un modo per fare questo?
Ho già provato il debug di glob()
, ma non ne so più.