Apuntes Ciberseguridad (Cibaism)
HTBGitHubLinkedInNotion (Writeups)
  • Welcome to My Digital Garden
  • About me
  • Hacking notes (Personal)
    • Tratamiento TTY
    • Hacking Web Tecniques
      • File Inclusion
    • Linux Privilage Escalation
    • Arreglar bloodhound
  • Hacking Notes (Learning Path)
    • (HTB) Penetration Tester
      • Getting Started
        • Common Terms
          • Tipos de Shell
          • Puertos importantes
          • OWASP Top 10
        • Service Scanning
          • Nmap
          • Attacking Network Services
            • Captura de banners
            • FTP
            • SMB
            • SNMP
        • Web Enumeration
        • Public exploits
          • Encontrar exploits públicos
          • Introducción a Metasploit
        • Types of Shells
          • Reverse Shell
          • Bind Shell
          • Web Shell
        • Privilage escalation
        • Transferring Files
      • Footprinting
        • Infrastructura Based Enumeration
          • Domain Information
          • Cloud Resources
          • Staff
        • Host Based Enumeration
          • FTP
          • SMB
          • NFS
          • DNS
          • SMTP
          • IMAP / POP3
          • SNMP
          • MySQL
          • MSSQL
          • Oracle TNS
          • IPMI
          • Protocolos de administración remota de Linux
          • Protocolos de administración remota de Windows
      • Introduction to Active Directory Enumeration & Attacks
        • Tools of the Trade
        • Initial enumeration
          • External Recon and Enumeration Principles
          • Initial Enumeration of the Domain
        • Sniffing out a Foothold
          • LLMNR/NBT-NS Poisoning - from Linux
          • LLMNR/NBT-NS Poisoning - from Windows
        • Sighting In, Hunting For A User
          • Password Spraying Overview
          • Enumerating & Retrieving Password Policies
          • Password Spraying - Making a Target User List
        • Spray Responsibly
          • Internal Password Spraying - from Linux
      • File Inclusion
        • File Disclousure
          • Local File Inclusion (LFI)
          • Basic Bypasses
          • PHP Filters
        • Remote Code Execution
          • PHP Wrappers
    • (CRTA) Red Team Analyst
      • (CRTA) Red Team Analyst - Lab
    • (eJPT) Junior Penetration Tester
      • Assessment Methodologies
        • Assessment Methodologies: Footprinting & Scanning
          • Windows Recon: Nmap Host Discovery
          • Scan the Server 1
          • Windows Recon: SMB Nmap Scripts
        • Assessment Methodologies: Enumeration
          • Importing Nmap Scan Results Into MSF
          • T1046 : Network Service Scanning
          • FTP Enumeration
          • Samba Recon: Basics
          • Apache Enumeration
          • MySQL Enumeration
          • SSH Login
          • Postfix Recon: Basics
        • Assessment Methodologies: Vulnerability Assessment
          • Windows: IIS Server DAVTest
          • Shellshock
          • Web App Vulnerability Scanning With WMAP
      • Host & Network Penetration Testing
        • Host & Network Penetration Testing: System/Host Based Attacks
          • Windows
            • Windows: IIS Server: WebDav Metasploit
            • Windows: SMB Server PSexec
            • Windows: Insecure RDP Service
            • WinRM: Exploitation with Metasploit
            • UAC Bypass: UACMe
            • Privilege Escalation: Impersonate
            • Unattended Installation
            • Windows: Meterpreter: Kiwi Extension
          • Linux
            • ProFTP Recon: Basics
            • Samba Recon: Dictionary Attack
            • Cron Jobs Gone Wild II
            • Exploiting Setuid Programs
            • Password Cracker: Linux
        • Host & Network Penetration Testing: Network-Based Attacks
          • NetBIOS Hacking
          • SNMP Analysis
          • DNS & SMB Relay Attack
        • Host & Network Penetration Testing: The Metasploit Framework (MSF)
          • Windows: Java Web Server
          • Windows: HTTP File Server
          • Vulnerable FTP Server
          • Vulnerable File Sharing Service
          • Vulnerable SSH server
          • Vulnerable SMTP Server
          • Meterpreter Basics
          • Upgrading Command Shells To Meterpreter Shells
          • Windows Post Exploitation Modules
          • UAC Bypass: Memory Injection (Metasploit)
          • Exploiting SMB With PsExec
          • Windows: Enabling Remote Desktop
          • Clearing Windows Event Logs
          • Pivoting
  • Blue team notes
    • Digital Forensics
      • Malware Analysis with VirusTotal
      • Wireshark
    • (Falcon) CrowdStrike
      • FALCON 104: Getting Started with the Endpoint Security Module
      • FALCON 106: Customizing Dashboards in Falcon
      • FALCON 180: Falcon Forensics Fundamentals
  • Programming
    • Powershell
Powered by GitBook
On this page
  • UTF-8
  • Variables
  • Funciones
  • Parámetros
  • Operadores
  • Bucles
  • Arrays
  • Declaración
  • Trabajo
  • Active Directory
  1. Programming

Powershell

UTF-8

Establecer la codificación a UTF-8 para manejar caracteres especiales:

$OutputEncoding = [System.Text.Encoding]::UTF8

Variables

Solicitar los números al usuario con soporte para caracteres especiales:

$numero1 = Read-Host "Introduce el primer número"

Convertir los valores de texto a números:

$numero1 = [int]$numero1

Realizar las operacione:

$suma = $numero1 + $numero2
$resta = $numero1 - $numero2
$multiplicacion = $numero1 * $numero2

Mostrar los resultados:

Write-Host "La suma de $numero1 y $numero2 es: $suma"
Write-Host "La resta de $numero1 y $numero2 es: $resta"
Write-Host "La multiplicación de $numero1 y $numero2 es: $multiplicacion"

Funciones

Declaración de funciones:

# Función para relaizar la suma
function SUMA {
    param ($numero1, $numero2)
    return $numero1 + $numero2
}

# Función para realizar la resta
function RESTA {
    param ($numero1, $numero2)
    return $numero1 - $numero2
}

# Función para realizar la multiplicación
function MULTI {
    param ($numero1, $numero2)
    return $numero1 * $numero2
}

Llamada a la función pasandole varibales:

$suma = SUMA $numero1 $numero2
$resta = RESTA $numero1 $numero2
$multiplicacion = MULTI $numero1 $numero2

Parámetros

Obtener los números desde los parámetros:

$numero1 = [int]$args[0]
$numero2 = [int]$args[1]

Comprobar si se han pasado los parámetros correctos:

if ($args.Count -ne 2) {
    Write-Host "Por favor, proporciona exactamente dos números como parámetros."
    Write-Host "Uso: .\script.ps1 <numero1> <numero2>"
    exit
}

Operadores

Operadores de comparación comunes:

Operador
Significado
Ejemplo

-eq

Igual a

5 -eq 5 → $true

-ne

No igual a

5 -ne 3 → $true

-gt

Mayor que

5 -gt 3 → $true

-lt

Menor que

5 -lt 10 → $true

-ge

Mayor o igual que

5 -ge 5 → $true

-le

Menor o igual que

5 -le 6 → $true

Operadores de comparación de cadenas (texto):

Operador
Significado
Ejemplo

-eq

Igual (no sensible a mayúsculas)

"Hola" -eq "hola" → $true

-ceq

Igual (sensible a mayúsculas)

"Hola" -ceq "hola" → $false

-like

Coincidencia con comodines (*)

"archivo.txt" -like "*.txt"

-clike

-like sensible a mayúsculas

"Hola" -clike "H*"

-match

Coincidencia con regex

"abc123" -match "\d+"

-cmatch

Regex sensible a mayúsculas

"ABC123" -cmatch "ABC"

-contains

Contiene un valor (en colecciones)

@(1,2,3) -contains 2

Otros operadores útiles:

Operador
Significado
Ejemplo

-notcontains

No contiene el valor

@(1,2,3) -notcontains 4 → $true

-in

El valor está en la colección

2 -in @(1,2,3) → $true

-notin

El valor no está en la colección

4 -notin @(1,2,3) → $true

-is

Es del tipo especificado

"hola" -is [string]

-isnot

No es del tipo especificado

123 -isnot [string]

Bucles

Bucle "FOR"

for ($i = 1; $i -le 5; $i++) {
    Write-Host "Número $i"
}

Bucle "WHILE"

$count = 1
while ($count -le 5) {
    Write-Host "Contador $count"
    $count++
}

Bucle "FOREACH"

$numeros = 1..5  # Crea un arreglo con los números del 1 al 5
foreach ($numero in $numeros) {
    Write-Host "Número $numero"
}

Arrays

Declaración

Array simple con varios elementos

$miArray = 1, 2, 3, 4, 5

Usando el operador @()

$miArray = @(10, 20, 30)

Array vacío

$miArray = @()

Trabajo

Acceder a elementos del array

$miArray = @(100, 200, 300)
$miArray[0]   # Devuelve 100
$miArray[1]   # Devuelve 200

Agregar elementos a un array

$miArray += 400   # Agrega 400 al array

Array de diferentes tipos de datos

$miArray = @(1, "texto", $true, 3.14)

Iterar sobre un array

foreach ($item in $miArray) {
    Write-Output $item
}

Comprobar si contiene un elemento

$miArray -contains 200    # Devuelve $true si contiene 200

Array multidimensional

$matriz = New-Object 'object[,]' 2,2
$matriz[0,0] = "a"
$matriz[0,1] = "b"
$matriz[1,0] = "c"
$matriz[1,1] = "d"

Active Directory

Cargar el módulo de Active Directory necesario para usar cmdlets.

Import-Module ActiveDirectory

Leer un archivo .csv y convierte cada fila en un objeto PowerShell.

$lista = Import-CSV -Path $csv

Eliminar espacios en blanco al principio y final del texto. .Trim() es un método de la clase [string].

$nombre_UO = $ou.UO.Trim()
$nombre_UO_predecesora = $ou.'UO Predecesora'.Trim()

Compruebar si una cadena está vacía, es nula o contiene solo espacios.

[string]::IsNullOrWhiteSpace($nombre_UO_predecesora)

Busca una unidad organizativa en Active Directory. Parámetros clave:

  • -LDAPFilter "(name=$nombre)": busca por nombre.

  • -SearchBase $dominio: define el contexto donde buscar.

  • -SearchScope Subtree: busca en todos los niveles dentro del SearchBase.

Get-ADOrganizationalUnit -LDAPFilter "(name=$nombre_UO_predecesora)" -SearchBase $dominio -SearchScope Subtree -ErrorAction Stop

Crea una nueva unidad organizativa en AD. Parámetros clave:

  • -Name: nombre de la nueva UO.

  • -Path: ruta LDAP completa donde crearla.

  • -ProtectedFromAccidentalDeletion $false: permite borrar la UO sin cambiar propiedades de protección.

 New-ADOrganizationalUnit -Name $nombre_UO -Path $rutaPadre -ProtectedFromAccidentalDeletion $false

Verifica si una ruta (archivo o carpeta) existe.

Test-Path $logPath

Elimina archivos o carpetas.

Remove-Item $logPath

Busca grupos de Active Directory. Párametros clave:

  • -LDAPFilter "(cn=...)": busca por nombre común del grupo (CN).

  • -SearchBase: limita la búsqueda a una UO específica.

  • -ErrorAction SilentlyContinue: oculta errores si el grupo no se encuentra.

Get-ADGroup -LDAPFilter "(cn=$nombreGrupo)" -SearchBase $dnUO -ErrorAction SilentlyContinue

Crea un nuevo grupo en Active Directory. Párametros clave:

  • -Name: nombre del grupo.

  • -GroupScope Global: ámbito del grupo (Global, Universal, DomainLocal).

  • -GroupCategory Security: tipo del grupo (Security o Distribution).

  • -Path: UO donde se crea.

New-ADGroup -Name $nombreGrupo -GroupScope Global -GroupCategory Security -Path $dnUO

Agrega texto a un archivo (sin sobrescribir).

Add-Content -Path $logPath -Value $mensaje

Declara los parámetros que el script recibirá cuando se ejecute.

param (
    [string]$csvPath,
    [string]$dominioBase
)

Busca usuarios en Active Directory. Parámetros clave:

  • -Filter "SamAccountName -eq '$id'": busca por nombre de cuenta (ID de usuario).

  • -ErrorAction SilentlyContinue: oculta errores si no se encuentra.

Get-ADUser -Filter "SamAccountName -eq '$id'" -ErrorAction SilentlyContinue

Crea un nuevo usuario en Active Directory. Parámetros clave:

  • -SamAccountName: nombre de inicio de sesión.

  • -Name: nombre completo.

  • -GivenName: nombre de pila.

  • -Surname: apellido.

  • -UserPrincipalName: dirección de correo electrónico (tipo usuario@asix.local).

  • -Path: ruta LDAP (unidad organizativa).

  • -AccountPassword: contraseña (en formato seguro).

  • -Enabled $true: cuenta habilitada.

  • -ChangePasswordAtLogon $true: fuerza cambio de contraseña en primer inicio.

New-ADUser `
            -SamAccountName $id `
            -Name "$nombre $apellido" `
            -GivenName $nombre `
            -Surname $apellido `
            -UserPrincipalName "$id@$($dominioBase -replace '^DC=','' -replace ',DC=', '.')"`
            -Path $ouAD `
            -AccountPassword (ConvertTo-SecureString $pass -AsPlainText -Force) `
            -Enabled $true `
            -ChangePasswordAtLogon $true

Convierte una cadena de texto a formato seguro (SecureString) para que pueda usarse como contraseña.

ConvertTo-SecureString $pass -AsPlainText -Force

Agrega un usuario a un grupo. Parámetros clave:

  • -Identity: grupo de destino (objeto o nombre).

  • -Members: nombre de usuario (SamAccountName).

Add-ADGroupMember -Identity $grupoAD -Members $id

Convierte el DN del dominio (DC=ASIX,DC=LOCAL) a un formato de dominio tradicional (asix.local).

  • Uso: Construir el UserPrincipalName.

$($dominioBase -replace '^DC=','' -replace ',DC=', '.')
PreviousFALCON 180: Falcon Forensics Fundamentals

Last updated 1 month ago