
Controllo basato sul web per vulnerabilità di escalation dei privilegi su Windows.
Questa è la base di codice per il servizio in esecuzione su: https://patchchecker.com. In breve, PatchChecker è un'applicazione web (eseguita su Flask) che fornisce un output simile a quello di Watson. Tuttavia, utilizzando PatchChecker, non è necessario eseguire un binario sulla macchina target. Incluso in questo progetto c'è anche un web scraper che aggiornerà automaticamente il database per PatchChecker utilizzando le informazioni presenti sui siti Microsoft, consentendo una soluzione più scalabile e facile da usare per il problema di trovare i CVE per i quali un sistema Windows è (o non è) patchato. Inoltre, qualsiasi altro CVE può essere aggiunto all'input del raccoglitore di dati e verificato purché abbia una voce su https://portal.msrc.microsoft.com. Puoi anche usare questo per ottenere i dati per aggiornare Watson.
Ulteriori informazioni su questo progetto possono essere trovate qui.
Per utilizzare PatchChecker, puoi andare sul sito web ospitato pubblicamente qui su patchchecker.com oppure puoi fare git clone di questo repository, installare le librerie richieste, assicurarti che patches.db sia nella stessa directory di app.py e quindi avviare l'applicazione con python3 ./app.py.
Una volta avviata l'applicazione, è possibile aprire il file "index.html" incluso in un browser per utilizzare effettivamente il servizio e ottenere l'elenco delle patch a cui il sistema in fase di test è vulnerabile.




In alternativa, è possibile utilizzare un comando curl e fare qualcosa del genere:
Richiesta:
nota: puoi usare qualsiasi delimitatore desideri, qui sto usando spazi:
curl 'https://patchchecker.com/checkprivs/' --data-raw 'wmicinfo=KB1231411 KB1231441 KB1234141&build_num=17763'
Risposta:
nota: ho usato alcuni KB falsi, quindi mostra vulnerabile a tutto, cioè non ho nulla installato
nota: l'output è troncato
{
"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
}
]
}
Per eseguire il codice in questo repository da soli, non dimenticare di eseguire: python3 -m pip install -r requirements.txt e di eseguire con python3. Per riferimento, ho usato python 3.7.3.
Lo script patchdata_collector.py è lo scraper pyppeteer che itera attraverso diversi siti Microsoft per ottenere i dati desiderati per i CVE specificati nel file di argomenti --cve-list.
Per un esempio del formato previsto, vedere il file cves.txt all'interno della directory samples. Fondamentalmente è un file separato da righe, con ogni riga contenente quanto segue: CVE-XXXX-XXXX|https://website.com/resource-pertaining-to-CVE,http://second_resource.com
hai capito l'idea. Un esempio dell'output risultante si trova nel file patches.db incluso.
Il codice non è perfetto ma ottiene i dati e funziona per il momento. Come riferimento, con 9 CVE, dovrebbe impiegare circa 11 minuti per completare, il tuo chilometraggio può variare.
usage: patchdata_collector.py [-h] --cve-list CVE_LIST [--db DB] [--new-db] [-v]
[-vv] [--no-headless] [--json JSON]
optional arguments:
-h, --help show this help message and exit
--cve-list CVE_LIST line and pipe separated list containing CVEs and
related-URLs with information example: CVE-2020-1048|https://github.com/ionescu007/faxhell,https://github.com/ionescu007/PrintDemon
--db DB sqlite database filename
--new-db erases old database (if exists)
-v set output to debug (verbose)
-vv set output to annoying
--no-headless run browser with headless mode disabled
--json JSON json format output, argument should be json filename
L'esecuzione di time ./patchdata_collector.py --cve-list cves.txt --db antest.db --new-db produce il seguente output:
2020-06-05 20:38:49.292 | INFO | __main__:main:181 - Loaded 10 CVEs
2020-06-05 20:38:49.430 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-0836
2020-06-05 20:40:27.183 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1064
2020-06-05 20:41:07.158 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-0841
2020-06-05 20:41:31.675 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1130
2020-06-05 20:42:58.527 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1253
2020-06-05 20:43:25.069 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1315
2020-06-05 20:44:57.974 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1385
2020-06-05 20:45:22.026 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1388
2020-06-05 20:46:48.407 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2019-1405
2020-06-05 20:48:07.026 | INFO | __main__:parsekb:33 - Parsing KBs for: CVE-2020-1048
finished
real 11m27.793s
user 1m21.632s
sys 0m14.559s