
Vérification web des vulnérabilités d'escalade de privilèges Windows
Ceci est la base de code pour le service fonctionnant sur : https://patchchecker.com. En bref, PatchChecker est une application web (fonctionnant avec Flask) qui fournit une sortie similaire à celle de Watson. Cependant, en utilisant PatchChecker, il n'est pas nécessaire d'exécuter un binaire sur la machine cible. Ce projet inclut également un scraper web qui mettra automatiquement à jour la base de données de PatchChecker en utilisant les informations présentes sur les sites Microsoft, ce qui permet une solution plus évolutive et plus facile à utiliser pour trouver les CVE pour lesquelles un système Windows est (ou n'est pas) corrigé. De plus, tout autre CVE peut être ajouté à l'entrée du collecteur de données et vérifié tant qu'il possède une entrée sur https://portal.msrc.microsoft.com. Vous pouvez également l'utiliser pour obtenir les données nécessaires à la mise à jour de Watson.
Plus d'informations sur ce projet sont disponibles ici.
Pour utiliser PatchChecker, vous pouvez soit vous rendre sur le site web hébergé publiquement ici à patchchecker.com, soit cloner ce dépôt avec git, installer les bibliothèques requises, vous assurer que patches.db se trouve dans le même répertoire que app.py, puis lancer l'application avec python3 ./app.py.
Une fois l'application démarrée, vous pouvez ouvrir le fichier "index.html" inclus dans un navigateur pour utiliser le service et obtenir la liste des correctifs auxquels le système testé est vulnérable.




Vous pouvez également utiliser une commande curl et faire quelque chose comme ceci :
Requête :
remarque : vous pouvez utiliser n'importe quel délimiteur, j'utilise des espaces ici :
curl 'https://patchchecker.com/checkprivs/' --data-raw 'wmicinfo=KB1231411 KB1231441 KB1234141&build_num=17763'
Réponse :
remarque : j'ai utilisé des faux KB, donc il montre vulnérable à tout, c'est-à-dire que je n'ai rien installé
remarque : la sortie est tronquée
{
"total_vuln": 9,
"kbs_parsed": [
"KB1231411",
"KB1231441",
"KB1234141"
],
"total_kbs_parsed": 3,
"build": "17763",
"results": [
{
"refs": [
"https://exploit-db.com/exploits/46718",
"https://decoder.cloud/2019/04/29/combinig-luafv-postluafvpostreadwrite-race-condition-pe-with-diaghub-collector-exploit-from-standard-user-to-system/"
],
"name": "CVE-2019-0836",
"vulnerable": true
}
]
}
Pour exécuter le code de ce dépôt vous-même, n'oubliez pas d'exécuter : python3 -m pip install -r requirements.txt et lancez avec python3. Pour référence, j'ai utilisé python 3.7.3.
Le script patchdata_collector.py est le scraper pyppeteer qui parcourt plusieurs sites Microsoft pour obtenir les données souhaitées pour les CVE spécifiées dans le fichier de l'argument --cve-list.
Pour un exemple du format attendu, voir le fichier cves.txt dans le répertoire samples. Fondamentalement, il s'agit d'un fichier séparé par des lignes, chaque ligne contenant ceci : CVE-XXXX-XXXX|https://site.com/ressource-concernant-CVE,http://second_ressource.com
vous voyez l'idée. Un exemple du résultat obtenu se trouve dans le fichier patches.db inclus.
Le code n'est pas parfait mais il récupère les données et fonctionne pour l'instant. À titre de référence, avec 9 CVE, cela devrait prendre environ 11 minutes pour terminer, les résultats peuvent varier.
usage: patchdata_collector.py [-h] --cve-list CVE_LIST [--db DB] [--new-db] [-v]
[-vv] [--no-headless] [--json JSON]
optional arguments:
-h, --help affiche ce message d'aide et quitte
--cve-list CVE_LIST liste séparée par des lignes et des barres verticales contenant les CVE et
les URL connexes avec informations exemple : CVE-2020-1048|https://github.com/ionescu007/faxhell,https://github.com/ionescu007/PrintDemon
--db DB nom du fichier de base de données sqlite
--new-db efface l'ancienne base de données (si elle existe)
-v définit la sortie en débogage (verbeux)
-vv définit la sortie en ennuyeux
--no-headless exécute le navigateur avec le mode sans tête désactivé
--json JSON sortie au format json, l'argument doit être le nom du fichier json
L'exécution de time ./patchdata_collector.py --cve-list cves.txt --db antest.db --new-db produit la sortie suivante :
2020-06-05 20:38:49.292 | INFO | __main__:main:181 - 10 CVE chargés
2020-06-05 20:38:49.430 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-0836
2020-06-05 20:40:27.183 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-1064
2020-06-05 20:41:07.158 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-0841
2020-06-05 20:41:31.675 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-1130
2020-06-05 20:42:58.527 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-1253
2020-06-05 20:43:25.069 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-1315
2020-06-05 20:44:57.974 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-1385
2020-06-05 20:45:22.026 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-1388
2020-06-05 20:46:48.407 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2019-1405
2020-06-05 20:48:07.026 | INFO | __main__:parsekb:33 - Analyse des KB pour : CVE-2020-1048
terminé
real 11m27.793s
user 1m21.632s
sys 0m14.559s