Ce qui suit est la colonne du didacticiel de développement du framework Thinkphp pour vous présenter les vulnérabilités historiques de Thinkphp du point de vue de la protection. J'espère que cela sera utile aux amis dans le besoin !
1. Avant-propos
Début 2019, deux vulnérabilités RCE de Thinkphp5 ont été divulguées sur Internet. Les vulnérabilités sont très simples à utiliser, ce qui entraîne de nombreux attaquants. utiliser des scanners pour numériser l’ensemble du réseau. Nous continuons d'observer une grande quantité de trafic d'attaque utilisant ces vulnérabilités pour mener des attaques getshell par lots via des appareils IPS. Cet article analyse principalement brièvement du point de vue du trafic et utilise thinkphp pour attaquer l'ensemble du réseau et les traces du trafic getshell.
2. Vulnérabilité et analyse du trafic Thinkphp RCE
2.1 Examen des principes de vulnérabilité
2.1.15.0.x La vulnérabilité de version
Le principe est que la classe clé utilisée par Thinkphp pour traiter les requêtes est Request(thinkphp/library/think/Request.php), qui peut implémenter certains paramètres pour les requêtes HTTP
Thinkphp Prend en charge la configuration de la "variable de camouflage de formulaire". Par défaut, la valeur de cette variable est _method. Par conséquent, dans method(), vous pouvez utiliser la "variable de camouflage de formulaire" pour écraser la variable afin d'appeler n'importe quelle fonction de cette classe. et $_POST est utilisé lorsque les paramètres de la fonction sont transmis. Les requêtes peuvent être construites pour remplacer les valeurs d'attribut de la classe Request, par exemple en écrasant l'attribut de filtre (l'attribut de filtre stocke les fonctions utilisées pour le filtrage global), réalisant ainsi l'exécution de code.
Vulnérabilité de la version 2.1.25.1.x-5.2.x
Similaire à la vulnérabilité de la version 5.0.x, les points de vulnérabilité existent dans Request(thinkphp/library/think / Request.php), où :
La variable $method est $this->method, qui est équivalente à la valeur du paramètre "_method" du POST et peut être remplacé par $ La valeur de l'attribut filter (l'attribut filter stocke la fonction utilisée pour le filtrage global) pour réaliser l'exécution du code.
Lorsque cette vulnérabilité est déclenchée, une exception de niveau d'avertissement se produit, entraînant la fin du programme. À ce stade, vous devez définir l'invite d'ignorer l'exception Configurer error_reporting(0) dans public/index.php. pour ignorer l'exception et continuer à exécuter le code, comme indiqué ci-dessous :
2.2 Analyse du réseau complet pour les vulnérabilités Thinkphp
À partir d'un Du point de vue du trafic, l'utilisation de la vulnérabilité Thinkphp consiste à envoyer un paquet http. Nous avons constaté que le scanner d'un pirate écrit d'abord une phrase simple sous forme d'empreinte digitale, puis accède au fichier pour voir si les informations d'empreinte digitale sont renvoyées. Un accès réussi indique que le shell a réussi. Fondamentalement, il envoie deux paquets http, et le. Le scanner enregistre l'écriture réussie. Entrez l'adresse IP du site Web et l'URL du shell, puis connectez-vous manuellement avec un couteau de cuisine pour les opérations ultérieures.
À partir des journaux de l'appareil IPS et de la vérification manuelle, les étapes d'attaque de l'attaquant comprennent 2 étapes : 1. Scanner l'ensemble du réseau pour envoyer des exp et identifier s'il faut récupérer le shell en fonction des empreintes digitales. 2. Connectez-vous avec un hacheur pour le contrôle à distance ; ;
2.2.1 Analyse et envoi de l'ensemble du réseau
Généralement, l'analyse des journaux traverse le segment B ou le segment C, et le temps est relativement intensif pour un certain scanner enregistré. Le fragment de journal est le suivant,
a 3 caractéristiques : 1. L'IP de destination est le même segment C ou B, 2. Le port est relativement fixe, 3. L'analyse le temps est très intensif
Scan Le message envoyé par le scanner pour confirmer que le shell a été écrit avec succès utilise l'empreinte digitale dédiée du scanner, donc ips n'a pas cette règle de détection.
2.2.2 Connexion Chopper
Lorsque l'attaquant connecte manuellement le site compromis avec un chopper, il sera également détecté par ips, et la source peut être retracée jusqu'à la vulnérabilité thinkphp via l'association de contexte comme point de violation de l'attaquant. Sélectionnez quelques cas typiques enregistrés à cette époque :
Le serveur Zhengzhou compromis 1 (122.114.24.216) :
Ce site Web a en effet été développé pour thinkphp5, À cette époque, le cheval de Troie Webshell était toujours sur le serveur et n'avait pas été supprimé. Le cheval de Troie téléchargé par le pirate informatique est accessible via le serveur. Les informations d'empreinte digitale sont baidu. Le scanner utilise cette empreinte digitale pour déterminer automatiquement le succès de getshell et enregistrer l'URL.
Le serveur Sichuan compromis (182.151.214.106) :
Le serveur Sichuan compromis (182.151.214.106) :
Ceci bien que le Le cheval de Troie dans le cas a été supprimé, le serveur pouvait encore être connecté à ce moment-là. Le serveur était également un framework thinkphp. Le nom d'utilisateur était soupçonné d'être chanpei
. L'appareil a enregistré la connexion du pirate informatique au cheval de Troie et l'exécution du message de requête réseau, les informations obtenues sont cohérentes avec le message d'erreur ci-dessus. Et on peut voir que le serveur est également situé sur une machine de l'intranet. La capture d'écran montre que le réseau contient au moins deux sous-réseaux, 192.168.9.0 et 192.168.56.0, comme indiqué ci-dessous :
Serveur américain compromis (161.129.41.36) :
Le webshell sur le serveur américain a également été nettoyé grâce à la capture de paquets de l'appareil, des pirates ont été trouvés. Le même webshell. Un cheval de Troie, à savoir x.php, a été utilisé et on soupçonne qu'il s'agit du même groupe de pirates.
Lorsque le pirate a parcouru le contenu du fichier x.php (webshell) sur le serveur américain, l'appareil a enregistré que le mot de passe de x.php était xiao, et le le drapeau était aussi baidu.
On peut voir qu'en utilisant ces deux vulnérabilités RCE à haut risque dans Thinkphp, un grand nombre de vulnérabilités de serveur ont été analysées à ce moment-là.
3. Résumé
Cet article combine les principes historiques de vulnérabilité de Thinkphp et partage les cas d'attaques réussies utilisant les vulnérabilités de Thinkphp. Actuellement, les journaux les plus courants détectés quotidiennement par l'appareil sont les journaux getshell directs tels que weblogic, struts2 et thinkphp, ou les journaux de craquage par force brute ssh rdp. Une fois que de nombreux attaquants découvrent le dernier exploit, ils équipent leurs propres scanners pour analyser l'ensemble du réseau, ce qui peut entraîner plusieurs shells par jour. Par conséquent, après l'apparition d'une vulnérabilité à haut risque, il est recommandé aux utilisateurs d'appliquer les correctifs à temps et de configurer les politiques de sécurité. À en juger par plusieurs cas réels, le risque lié aux scanners a toujours existé. Si le site Web peut être configuré pour interdire l’accès IP direct, cette menace peut être atténuée dans une certaine mesure. En raison du niveau limité, tout le monde est invité à signaler les erreurs contenues dans l'article et à partager vos suggestions
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!