În mod prestabilit, PowerShell este configurat pentru a împiedica rularea scripturilor pe sisteme bazate pe Windows. Astfel de setări pot face dificilă funcționarea administratorilor, penitenciarului și dezvoltatorului și în acest articol vă voi spune despre 15 moduri de a ocoli politica de execuție fără a utiliza drepturile administratorului local.
În mod prestabilit, PowerShell este configurat pentru a împiedica rularea scripturilor pe sisteme bazate pe Windows. Astfel de setări pot face dificilă funcționarea administratorilor, penitenciarului și dezvoltatorului și în acest articol vă voi spune despre 15 moduri de a ocoli politica de execuție fără a utiliza drepturile administratorului local. Cred că există tehnici care nu vor fi menționate din cauza uitarei mele sau ignoranței elementare, dar sper că lista de mai jos va fi un bun început pentru cei care au nevoie de ea.
Ce este politica de execuție PowerShell?
Politica de executare determină ce tipuri de scripturi pot fi executate (dacă este deloc) pe sistem. În mod prestabilit, valoarea parametrului este setată la "Restricted", care interzice lansarea oricărui script. Cu toate acestea, trebuie să se înțeleagă că configurarea Politicii de Execuție nu a fost niciodată legată de gestionarea securității, ci a servit doar pentru ca administratorii să nu poată dezactiva accidental sistemul. De aceea există multe tehnici de ocolire a acestor setări, inclusiv unele furnizate de Microsoft. În mai multe detalii despre politica de executare și alte setări de securitate în PowerShell, vă recomand să citiți blogul lui Carlos Perez.
De ce este necesar să ocolim Politica de executare?
Se pare că unul dintre cele mai comune răspunsuri la întrebarea indicată în titlu este automatizarea proceselor. Cu toate acestea, există și alte motive pentru care PowerShell a devenit popular printre administratori, penitenți și hackeri. PowerShell:
- Built-in Window.
- Pot apela Windows API.
- Pot rula comenzi fără a scrie pe disc.
- Poate evita detectarea de către antivirus.
- Deja marcat ca "de încredere" și se află pe majoritatea listelor albe.
- Folosit când scrieți multe utilitare de securitate open source.
Cum se afișează setările politicii de execuție
Înainte de a începe să utilizați toate funcțiile PowerShell, trebuie să ocoliți interdicția de a rula scripturi. Setările curente pot fi obținute prin executarea comenzii "Get-ExectionPolicy". Dacă interdicția este setată, atunci când executați comanda va apărea următorul mesaj:
PS C: \> Get-ExecutionPolicy

Figura 1: Rezultatul executării comenzii în sistem unde este setată interdicția de a rula scripturi
Este important de menționat că politica de executare poate fi instalată la diferite niveluri ale sistemului. Pentru a vedea lista nivelurilor, utilizați comanda de mai jos (pentru mai multe informații, consultați pagina TechNet corespunzătoare).
Get-ExecutionPolicy-List | Format-Table -AutoSize

Figura 2: Setările politicii de execuție la diferite niveluri de sistem
Configurarea mediului de testare
În exemplele de mai jos, voi folosi un script numit runme.ps care conține următoarea comandă pentru a imprima mesajul la consola:
Scrie-gazdă "Vocea mea este pașaportul meu, verifică-mă."
Când executați scriptul într-un sistem cu setările standard de politică de execuție, se afișează următoarea eroare:

Figura 3: Eroarea afișată la rularea scriptului de testare într-un mediu în care configurați interdicția de a rula scripturi
Dacă politica dvs. curentă vă permite să rulați scripturi, puteți pune o interdicție (pentru scopuri de testare) folosind comanda Set-ExecutionPolicy Restricted, care este pornit de la consola administratorului PowerShell. Bine, destul de bine. Să mergem direct la metodele de eludare a interdicției, stabilite în politica de executare.
Copiați și inserați scriptul în consola interactivă, după cum se arată mai jos. Cu toate acestea, rețineți că veți fi limitat la privilegiile utilizatorului curent. Metoda este folosită cel mai adesea pentru a rula scripturi simple atunci când aveți acces la o consolă interactivă. În plus, această tehnică nu implică modificarea setărilor și nu necesită scrierea pe disc.

Figura 4: Rularea script-ului prin copierea în consola interactivă
2. Trimiteți conținutul script-ului la fluxul standard de intrare PowerShell
Trimiteți doar conținutul scriptului la fluxul de intrare standard. Tehnica nu implică schimbarea setărilor și nu necesită înregistrarea pe disc.
Echo Write-Host "Vocea mea este pașaportul meu, verifică-mă." | | PowerShell.exe -noprofile -

Figura 5: Afișarea conținutului scriptului în fluxul de intrare standard
3. Citirea unui script dintr-un fișier și redirecționarea conținutului la fluxul standard de intrare PowerShell
Utilizați comanda standard "type" sau PowerShell "Get-Content" pentru a citi conținutul scriptului de pe disc și redirecționa rezultatul la fluxul de intrare standard. Tehnica nu implică modificarea setărilor, dar necesită înregistrarea pe disc. Pentru a evita scrierea pe disc, puteți utiliza o partajare de rețea.
Exemplul 1: Folosind PowerShell-ul comenzii Get-Content
Obțineți conținut. \ Runme.ps1 | PowerShell.exe -noprofile -

Figura 6: Utilizarea comenzii Get-Content
Exemplul 2: Utilizarea comenzii Type
TYPE. \ Runme.ps1 | PowerShell.exe -noprofile -

Figura 7: Utilizarea comenzii Type
4. Descărcarea scriptului din rețea și pornirea cu Invoke Expression
Tehnicile pot fi utilizate pentru a descărca un script de pe Internet și pentru a rula fără scrierea pe disc. De asemenea, nu se vor schimba setările. Am văzut multe moduri de a rula scripturi în acest fel, dar recent am dat peste următorul exemplu:

Figura 8: Descărcarea scriptului de pe Internet și pornirea cu Invoke Expression
5. Folosind parametrul Command
Exemplul 1: Comandă completă
Powershell - comanda "Write-Host" Vocea mea este pașaportul meu, verifică-mă. "

Figura 9: Rularea scriptului cu versiunea completă a parametrului
Exemplul 2: Comandă scurtă
Powershell -c "Scrie-gazdă" Vocea mea este pașaportul meu, verifică-mă. "
Puteți combina comenzile de mai sus în fișiere batch și le puteți pune în autoloading pentru a crește nivelul de privilegii.
6. Folosind parametrul EncodeCommand
Metoda este similară cu cea anterioară, dar aici toate codurile sunt codate în șirul Unicode. Codarea script-ului vă permite să evitați erorile care apar atunci când utilizați parametrul "Command". Tehnica nu implică schimbarea setărilor și nu necesită înregistrarea pe disc. Exemplul de mai jos este luat de la Posh-SecMod. Același utilitar conține o metodă bună pentru reducerea mărimii comenzilor codate.
Exemplul 1: versiunea completă
$ command = "Write-Host" Vocea mea este pașaportul meu, verifică-mă. "
$ bytes = [System.Text.Encoding] :: Unicode.GetBytes (comanda $)
$ encodedCommand = [Convertizor] :: ToBase64String ($ bytes)
powershell.exe -EncodedCommand $ encodedCommand

Figura 10: Versiunea completă a comenzii
Exemplul 2: Parametru abreviat
powershell.exe -Enc
VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAA
aQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA
7. Utilizarea Invoke-Command
Tehnica pe care am găsit-o pe blogul Obscuresec este folosită prin consola interactivă sau în combinație cu parametrul "Command". Caracteristica principală a metodei este că poate fi utilizată pentru a rula comenzi pe sisteme la distanță unde script-urile PowerShell sunt permise să ruleze. Tehnica nu implică modificarea setărilor și nu necesită înregistrarea pe disc.

Figura 11: Utilizarea comenzii Invoke-Command
Echipa de mai jos, creată pe blogul Obscuresec, poate fi utilizată pentru a transfera setările politicii de execuție de la mașina la distanță la cea locală.
invoca-comanda -computername Server01 -scriptblock | set-execuție politică-forță
8. Folosind comanda Invoke-Expression
Ca și în cazul precedent, tehnica este folosită printr-o consolă interactivă sau în combinație cu parametrul "Command". Metoda nu implică modificarea setărilor și nu necesită scrierea pe disc. Următoarele sunt câteva dintre cele mai frecvente moduri de a utiliza comanda Invoke-Expression pentru a ocoli politica de execuție.
Exemplul 1: Versiunea completă a comenzii Get-Content
Obțineți conținut. \ Runme.ps1 | Invocați-Expression

Figura 12: Versiunea completă a comenzii Get-Content
Exemplul 2: O versiune prescurtată a conținutului Get-Content
GC. \ Runme.ps1 | IEX
9. Utilizarea semnalizatorului Bypass
Steagul a fost adăugat de dezvoltatorii Microsoft pentru a ocoli politica de execuție atunci când rulează scripturi din fișiere. Microsoft afirmă că, prin utilizarea acestui steag, "nimic nu este blocat și nu sunt emise avertismente sau mesaje". Tehnica nu implică schimbarea setărilor și nu necesită înregistrarea pe disc.
PowerShell.exe -ExecutionPolicy Bypass -File. \ Runme.ps1

Figura 13: Utilizarea semnalizatorului Bypass
10. Utilizarea steagului fără restricții
Tehnica este similară celei precedente. Cu toate acestea, atunci când se utilizează steagul nerestricționat, Microsoft declară că "toate fișierele de configurare sunt descărcate și toate scripturile sunt pornite. Dacă rulați un script nesemnat descărcat de pe Internet, veți vedea un mesaj care vă cere să confirmați lansarea. " Metoda nu implică modificarea setărilor și nu necesită scrierea pe disc.
PowerShell.exe -ExecutionPolicy UnRestricted -File. \ Runme.ps1

Figura 14: Utilizarea steagului nerestricționat
11. Folosind pavilionul Remote-Signed
Creați un script. Apoi, semnați-l folosind manualul. scris de Carlos Perez. Acum rulați scriptul folosind comanda de mai jos:
PowerShell.exe -ExecutionPolicy la distanță-semnat -File. \ Runme.ps1
12. Preveniți ExecutionPolicy descărcând Manager de autorizare
funcția Disable-ExecutionPolicy $ executioncontext.gettype () getfield ("_context", "nonpublic, instanță") getvalue (
$ getcontent (). getfield ("_ authorizationManager", "nonpublic, instance").
setvalue ($ ctx, (nou-obiect System.Management.Automation.AuthorizationManager "Microsoft.PowerShell")))>

Figura 15: Dezactivarea Managerului de autorizare în sesiunea curentă
13. Instalarea politicii de excuție pentru nivelul procesului
La începutul articolului sa spus că politica de execuție poate fi aplicată la diferite niveluri (inclusiv la nivelul procesului pe care dețineți controlul). Folosind această tehnică, politica de execuție poate fi setată la nerestricționată în timpul sesiunii. În plus, metoda nu implică modificări ale setărilor și nu necesită scrierea pe disc. Am gasit aceasta tehnica pe blogul r007break.
Setare-Executarea poliției Bypass -Scope Proces

Figura 16: Setarea stării nerestricționate pentru nivelul Procesului
14. Setarea stării nerestricționate pentru nivelul curentului curent utilizând comanda
Tehnica este similară cu cea anterioară, dar aici modifică setările mediului de lucru curent prin modificarea cheii din registru. Metoda nu implică modificarea setărilor și nu necesită scrierea pe disc. Tehnica a fost de asemenea găsită în blogul r007break.
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

Figura 17: Setarea stării nerestricționate pentru nivelul utilizatorului curent
15. Setarea stării nerestricționate pentru nivelul CurrentUser prin intermediul registrului
În acest exemplu, vă vom arăta cum să setați setări de politică constante pentru utilizatorul curent modificând direct cheia de registry.

Figura 18: Stabilirea stării pentru politica de execuție prin intermediul regiștrilor