jueves, 22 de julio de 2021

Localizar software instalado en servidores con PowerShell

Vamos as ver cómo localizar software instalado en servidores, o equipos en nuestra red, a partir de PowerShell y el uso de WMI.

Partimos de la premisa que no tenemos una herramienta más potente para estas labores de detección e inventariado como SCCM, que nos permite sacar unos informes más completos que solo el nombre de la aplicación. 

El script es el siguiente:

$list = get-content c:\listadoservidores.txt

foreach($PC in $list){

    $data = Get-WmiObject -ComputerName $PC -Class Win32_Product | sort-object Name |

    Select-Object Name | Where-Object { $_.Name -like "*Zoom*" -or $_.name -like "*McAfee*"}

    if($data){

            Write-Output "$PC tiene $($data.name) instalado" |

            out-file c:\temp\maquinasconsoft.txt -Append
    }
}

Si, es el tercer post con un bucle foreach, lo siento... Pero vamos con la explicación del funcionamiento.

Con el $list = get-content c:\listadoservidores.txt metemos en la variable $list el listado de las máquinas que queremos analizar. Otras opciones válidas serian por ejemplo, $list = 'server1','server2' o bien $list = Get-ADComputer -Filter * lo que nos permitiria directamente meter en la variable realizando la búsqueda de maquinas con filtrado directamente en AD.

Luego, desde el foreach hasta la linea del write-output tenemos la búsqueda en si. Es importante indicar que la búsqueda con el parámetro -like y los ** nos permite buscar un nombre que contenga la palabra indicada, no es necesario que sea el nombre completo. Eso si, si se meten varias aplicaciones a buscar, el script te dice si ha encontrado algo o no, pero ni especifica cual, asi que normalmente del -or hasta el } suelo eliminarlo, dejando un solo término.

Finalmente, el  out-file c:\temp\maquinasconsoft.txt -Append lo que hace es indicar en el fichero de salida "maquinasconsoft.txt" en qué maquinas ha encontrado el software instalado. En estos bucles es importante agregar el -append, porque si no, cada ejecución del bucle machaca el archivo, mostrando finalmente sólo la ultima vuelta. En cambio con -append va incorporando, sin machacar el texto previo.


jueves, 1 de julio de 2021

Workaround para Vulnerabilidad 0Day Microsoft Windows Print Spool CVE-2021-1675

 Se ha encontrado una vulnerabilidad 0 Day calificada como crítica que afecta al servicio print spooler que permitiría ejecución de código remoto y escalada de privilegios sobre los servidores. Los datos sobre la vulnerabilidad podéis encontrarlos AQUI.

 Por suerte, es una vulnerabilidad que solo afecta al servicio de impresión, que no tiene por qué estar funcionando en aquellos servidores que no ejerzan específicamente este rol.


Por eso, la mejor solución hasta que aparezca un parche de urgencia, y después, porque no tiene sentido dejar servicios corriendo sin uso, es parar y deshabilitar el servicio de impresión allí donde no se utilice.

Para eso, podemos basarnos en el script de mi anterior post. Partimos de que tenemos un listado de las máquinas donde no debe por que estar corriendo el servicio. Después, ajustamos el script para que lea ese archivo:

$archivo = get-content c:\ficheromaquinas.txt

foreach ( $equipo in $archivo ) {

write-host $equipo

Get-Service -Name spooler -ComputerName $equipo  | stop-Service

Get-Service -Name spooler -ComputerName $equipo  | Set-Service -Status stopped -startuptype disabled

Mismo procedimiento de siempre... se mete en un bucle lo que necesitamos ejecutar ,que es, primero una parada del servicio con "Get-Service -Name spooler -ComputerName $equipo  | stop-Service", y luego lo deshabilitamos, lanzando practicamente el mismo comando pero deshabilitando, con "Get-Service -Name spooler -ComputerName $equipo  | Set-Service -Status stopped -startuptype disabled". No le sienta bien al servidor todo del tirón.

¡Cuidado con dejar saltos de linea en el archivo del que toma las maquinas! No pasaría nada realmente, mas allá de un error al final, o allí donde dejemos el salto de línea.