01 Contexte
Récemment, QiAnXin a publié un avis de risque de sécurité concernant une vulnérabilité de création de fichiers « arbitraire » dans ThinkPHP 6.0. En réponse, DYSRC a immédiatement analysé la vulnérabilité et a réussi à reproduire la vulnérabilité.
Portée de la vulnérabilité : top-think/framework 6.x
02 Problème de localisation
Sur la base de la création de fichiers arbitraires et de l'historique des validations récentes, on peut en déduire que 1bbe75019 est un correctif pour ce problème. On peut voir que le correctif limite l'ID de session à uniquement des lettres et des chiffres, ce qui rend le problème plus évident.
03 Analyse des principes
Laissant d'abord de côté les problèmes ci-dessus, examinons comment thinkphp stocke les sessions.
Le système définit l'interface thinkcontractSessionHandlerInterface
La méthode SessionHandlerInterface::write est exécutée lors de la localisation des données de session, et le système l'exécutera automatiquement à la fin de chaque demande.
Voyons comment la classe thinksessiondriverFile est implémentée.
Générez d'abord le nom du fichier basé sur $sessID via getFileName, puis writeFile pour écrire le fichier.
Suivez getFileName et concaténez directement le $sessID entrant comme nom de fichier. Puisque $sessID est contrôlable, le nom du fichier est contrôlable.
Démonstration 04
À ce stade, l'ensemble du processus de vulnérabilité est fondamentalement clair. Les résultats de la démonstration locale sont donnés ci-dessous.
Site Web chinois php, un grand nombre de tutoriels d'introduction thinkphp gratuits, bienvenue pour apprendre en ligne !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!