Ce PoC a été écrit rapidement, ce n'est rien de spécial.
Cela exploite la nouvelle vulnérabilité RCE SPIP CVE-2023-27372.
C'est un défaut de désérialisation qui exploite l'utilisation dangereuse de la balise #ENV lors de la fonctionnalité de réinitialisation de mot de passe (spip.php?page=spip_pass) dans "/ecrire/balise/formulaire_.php" plus précisément cette ligne :
- Syntaxe : python3 exploit.py -u http(s)://url.com
function protege_champ($texte){
if (is_array($texte))
$texte = array_map('protege_champ',$texte);
else {
// ne pas corrompre une valeur serialize
if (preg_match(",^[abis]:\d+[:;],", $texte) AND unserialize($texte)!=false)
return $texte;
$texte = entites_html($texte);
$texte = str_replace("'","'",$texte);
}
return $texte;
}
La fonction protege_champ souffre de plusieurs défauts. L'expression régulière (RE) utilisée pour valider l'entrée est défectueuse et peut être contournée facilement. Le code appelle la fonction unserialize sans validation appropriée, permettant l'exécution de code arbitraire. L'exploitation manuelle peut être effectuée très facilement. Par exemple, si nous voulons exécuter phpinfo(); nous pouvons faire :
oubli=s:19:"<?phpinfo(); ?>";
function protege_champ($texte) {
if (is_array($texte)) {
$texte = array_map('protege_champ', $texte);
} else {
if (!isValidInput($texte)) {
$texte = 'Malicious input detected';
} else {
$texte = entites_html($texte);
$texte = str_replace("'", "'", $texte);
}
}
return $texte;
}
La fonction protege_champ corrigée inclut la validation des entrées, l'assainissement et la gestion des entrées malveillantes.
Veuillez ne pas utiliser ceci à des fins malveillantes. Merci.
<a href=https://twitter.com/0SPwn>Twitter