PatchChecker Verificar Vulnerabilidades PrivEsc Windows
PatchChecker Verificar Vulnerabilidades PrivEsc Windows

PatchChecker: Verificar Vulnerabilidades de PrivEsc Windows

PatchChecker es un comprador, basado en la web, de las vulnerabilidades de escalada de los privilegios (PrivEsc) de Windows.

En resumen, PatchChecker es una aplicación web (que se ejecuta en Flask) que proporciona una salida similar a la de Watson (https://github.com/rasta-mouse/Watson/). Sin embargo, al usar PatchChecker, no se requiere ejecutar un binario en la máquina destino. En este proyecto también se incluye un raspador web que actualizará automáticamente la base de datos de PatchChecker utilizando la información presente en los sitios de Microsoft, lo que permite una solución más escalable y fácil de usar para el problema de encontrar CVEs a los que un sistema Windows está (o no) parcheado. Además, se puede añadir cualquier otro CVE a la entrada del colector de datos y comprobarlo siempre que tenga una entrada en https://portal.msrc.microsoft.com. También se puede usar esto para obtener los datos para actualizar Watson.

Usar PatchChecker para verificar vulnerabilidades

Para usar patchchecker, puedes ir al sitio web alojado públicamente aquí en patchchecker.com o puedes clonar este repositorio, instalar las bibliotecas necesarias, asegurarte de que patches.db esté en el mismo directorio que app.py y luego iniciar el aplicación con python3 ./app.py. Una vez que se inicia la aplicación, puedes abrir el archivo “index.html” en un navegador para usar el servicio y obtener la lista de parches a los que el sistema que se está probando es vulnerable.

Ver Demo Instagram

Obtener Datos KB

Cada parche nuevo sirve para solucionar un problema conocido y, por lo tanto, es una solución. Cada par de solución de problemas se documentará en la Knowledge Base / Base de Conocimiento (algunas veces interno, a veces externo). De ahí el término KB para parches.

El siguiente comando servirá para obtener una lista de todas las actualizaciones instaladas en Windows, filtradas por HotFixID:

wmic qfe list full | findstr /i hotfix
Comando listar actualizaciones Windows
Comando listar actualizaciones Windows

A continuación, vamos a revisar la build que tenemos instalada actualmente:

systeminfo | findstr /i build

*Si tu sistema está en idioma español, el filtro debería ser “compilación”, así:

systeminfo | findstr /i compilación
Verificar Build Windows CMD
Verificar Build Windows CMD

Entrada esperada

Con los datos obtenidos anteriormente, accedemos a patchchecker.com y colocamos los datos correspondientes:

DeadJakk's Patch Checker
DeadJakk’s Patch Checker

Salida esperada de la página web

Resultados de Patch Checker
Resultados de Patch Checker

Salida esperada de la página web cuando se encuentran vulnerabilidades:

Vulnerabilidades CVE Windows
Vulnerabilidades CVE Windows

Alternativamente, puedes usar un comando curl y hacer algo como esto:

Request: (Puedes usar cualquier delimitador que desees, estoy usando espacios aquí)

curl 'https://patchchecker.com/checkprivs/' --data-raw 'wmicinfo=KB1231411 KB1231441 KB1234141&build_num=17763'

Response:

{
    "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
        }
		]
}

Para ejecutar el código en este repositorio, no olvides ejecutar: (Usar Python 3)

python3 -m pip install -r requirements.txt

Recopilar datos: patchdata_collector.py

El script patchdata_collector.py es el raspador/scraper de pyppeteer que recorre varios sitios de Microsoft para obtener los datos deseados para las CVEs especificadas en el arg –cve-list. Para ver un ejemplo del formato esperado, consulta el archivo cves.txt dentro de la carpeta samples. Básicamente es un archivo separado por líneas, con cada línea que contiene el siguiente CVE-XXXX-XXXX|https://website.com/resource-pertaining-to-CVE,http://second_resource.com te haces una idea. Un ejemplo de la salida resultante se puede encontrar en el archivo patches.db incluido.

El código no es perfecto, pero obtiene los datos y funciona por el momento. Como referencia, con 9 CVE, debería llevar unos 11 minutos completar, YMMV.

Uso de patchdata_collector.py:

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

Ejemplo de ejecución

time ./patchdata_collector.py --cve-list cves.txt --db antest.db --new-db

La ejecución anterior produce el siguiente resultado:

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

¡Comparte esta excelente herramienta y deja tu reacción! 😀

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda