Rularea programului fără drepturi de administrator și suprimarea cererii UAC. Creșterea privilegiilor utilizatorului în Windows Dacă scrierea într-un fișier sau registru eșuează, virtualizați la locația utilizatorului

În general, iată modalități care ne vor ajuta să atingem obiectivul de a crește privilegiile.

Punctul de plecare pentru acest articol scurt este shell-ul (contul) neprivilegiat. Este posibil să fi folosit o exploatare sau să fi efectuat un atac și să fi obținut acest shell.

Practic, la începutul timpului, nu înțelegem mașina: ce face, la ce este conectată, ce nivel de privilegii avem sau chiar ce sistem de operare este.

Mai întâi trebuie să obținem informațiile de care avem nevoie pentru a înțelege unde ne aflăm și ce avem:

Systeminfo | findstr /B /C:"Nume OS" /C:"Versiune OS"
Această comandă vă permite să determinați, după cum se poate vedea din ea, numele și versiunea sistemului de operare. Îl puteți executa fără parametri, apoi ieșirea comenzii va fi mai completă, dar acest lucru este suficient pentru noi.

  • hostname - nume de utilizator.
  • echo %username% - nume de utilizator.
Apoi, să vedem ce utilizatori sunt încă pe această gazdă și să obținem informații mai detaliate despre utilizatorul dvs.
  • utilizatori de net - alți utilizatori
  • net user user1 - informații detaliate despre utilizator, unde user1 este numele dvs. de utilizator.
După ce am primit informații despre cont, vom analiza informații despre interacțiunea în rețea a acestei gazde.

Mai întâi, să ne uităm la interfețele disponibile și la tabelul de rutare.

  • ipconfig /all - informații despre interfețele disponibile.
  • imprimare rută - tabel de rutare
  • arp -A - tabel cu intrări arp
În continuare, să ne uităm la conexiunile de rețea active și la regulile de firewall.
  • netstat -ano - conexiuni de rețea active.
-a - rularea cu acest parametru va afișa toate conexiunile TCP active, precum și porturile TCP și UDP care ascultă pe sistem;
-n - parametrul vă permite să afișați conexiuni TCP active cu adrese și numere de porturi;
-o - la fel ca comutatorul precedent, afișează conexiuni TCP active, dar codurile de proces au fost adăugate la statistici, din care puteți determina deja exact ce aplicație folosește conexiunea.
  • netsh firewall arată starea - starea firewallului
  • netsh firewall show config - configurare firewall
În cele din urmă, vom arunca o privire rapidă asupra a ceea ce rulează pe gazda compromisă: sarcini programate, procese de rulare, servicii de rulare și drivere instalate.

Schtasks /query /fo LIST /v
Unde
/query - Afișează informații despre toate sarcinile programate,
/fo LIST - Ieșire într-o listă.
/v - Afișează informații detaliate despre sarcină.

Următoarea comandă asociază procesele care rulează cu serviciile care rulează.

Lista de sarcini/SVC
Unde,
/SVC - Afișează serviciile pentru fiecare proces.

Ne vom uita și la lista serviciilor Windows care rulează.

Început net
De asemenea, este util să se uite la informații despre driverele sistemului compromis.

DRIVERQUERY
În continuare aș dori să menționez probabil cea mai utilă comandă Windows - wmic. Comanda WMIC (Windows Management Instrumentation Command) este utilizată pentru a obține informații despre hardware și sistem, pentru a gestiona procesele și componentele acestora și pentru a modifica setările utilizând capabilitățile Windows Management Instrumentation (WMI). Buna descriere.

Din păcate, unele configurații implicite de Windows nu permit accesul la WMIC decât dacă utilizatorul este membru al grupului Administratori (ceea ce este o idee foarte bună). Orice versiune de XP nu permitea accesul la WMIC dintr-un cont neprivilegiat.

În schimb, Windows 7 Professional și Windows 8 Enterprise au permis utilizatorilor cu privilegii reduse să utilizeze WMIC în mod implicit.

Ca de obicei - parametrii programului:

Înainte de a merge mai departe, merită să trecem peste informațiile colectate. De asemenea, merită să acordăm atenție patch-urilor instalate în sistem, deoarece orice informație despre găurile din sistem ne va oferi suport suplimentar pentru creșterea privilegiilor noastre. Puteți utiliza numărul HotFix pentru a căuta vulnerabilități de escaladare a privilegiilor.

În continuare ne vom uita la instalarea automată. Dacă este nevoie să instalați și să configurați o flotă mare de mașini, atunci, de regulă, personalul tehnic nu se va muta de la o mașină la alta pentru a configura fiecare în parte. Există mai multe soluții pentru instalarea automată. Care sunt aceste metode și modul în care funcționează nu este atât de important pentru noi, dar ceea ce este important este că ele lasă fișiere de configurare care sunt utilizate pentru procesul de instalare care conțin o mulțime de informații confidențiale, cum ar fi cheia de produs a sistemului de operare și parola de administrator. . Ceea ce ne interesează cel mai mult este parola de administrator, pe care o putem folosi pentru a ne mări privilegiile.

De obicei, acestea sunt următoarele directoare:

  • c:\sysprep.inf
  • c:\sysprep\sysprep.xml
  • %WINDIR%\Panther\Unattend\Unattended.xml
  • %WINDIR%\Panther\Unattended.xml
Dar merită să verificați întregul sistem.

Aceste fișiere conțin parole în text clar sau codare BASE64.
Exemple:

Sysprep.inf - parola în text clar.

Sysprep.xml - parola codificata in base64.

"

Unattended.xml - parolă codificată în base64.

De asemenea, pentru gazdele conectate la domeniu, puteți căuta fișierul Group.xml, care conține o parolă criptată AES256, dar care poate fi decriptată deoarece cheia este postată pe msdn (https://msdn.microsoft.com/en-us/library/cc422924.aspx) și alte surse. Dar acesta este cazul dacă se folosește politica de creare a utilizatorilor locali pe gazde sau, de exemplu, setarea unei parole pentru administratorul local.

De exemplu, il am aici:

După ce l-ați deschis, căutați parametrul „cpassword”.

În continuare, trebuie să descifrați această secvență. Folosim, de exemplu, CrypTool. Mai întâi, să decodificăm Base64.
Particularitatea Base64 este că lungimea sa trebuie să fie un multiplu de 4. Prin urmare, numărăm blocurile de 4, iar dacă nu sunt suficiente caractere în ultimul bloc, adăugăm caracterele lipsă cu caractere „=”.
Am primit 2 „=”.

Îndepărtăm punctele suplimentare care separă caracterele și obținem parola.

Pe lângă Group.xml, iată câteva alte fișiere de preferințe de politică care pot avea un set suplimentar de atribute „cPassword”:

  • Services\Services.xml
  • ScheduledTasks\ScheduledTasks.xml
  • Printers\Printers.xml
  • Drives\Drives.xml
  • DataSources\DataSources.xml
Cu toate acestea, cu toții iubim soluțiile automate, astfel încât să putem ajunge la linia de sosire cât mai repede posibil. Există două opțiuni principale aici, în funcție de tipul de shell/acces pe care îl avem. Există un modul metasploit care poate fi executat printr-o sesiune stabilită (https://www.rapid7.com/db/modules/post/windows/gather/credentials/gpp) sau puteți folosi Get-GPPPassword care face parte din PowerSploit .

Pentru a putea folosi acest lucru trebuie să verificăm dacă ambele chei de registry sunt setate și dacă da putem obține shell-ul SYSTEM. Sa verificam:

Interogare de înregistrare HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
interogare reg HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
Metasploit include un modul special exploit/windows/local/always_install_elevated, care creează un fișier MSI cu un fișier executabil special încorporat în el, care este extras și executat de către instalatorul cu privilegii de sistem. Odată executat, fișierul msi oprește instalarea pentru a preveni înregistrarea acțiunii în sistem. În plus, dacă rulați instalarea cu comutatorul /quiet, nici măcar nu veți vedea o eroare.

Ei bine, câteva comenzi utile pentru căutarea sistemului:

Comanda de mai jos va căuta în sistemul de fișiere nume de fișiere care conțin anumite cuvinte cheie. Puteți specifica orice număr de cuvinte cheie.

Dir /s *pass* == *cred* == *vnc* == *.config*
Căutând anumite tipuri de fișiere după cuvânt cheie, această comandă poate genera o mulțime de rezultate.

Findstr /si parola *.xml *.ini *.txt
În mod similar, cele două comenzi de mai jos pot fi folosite pentru a grep registrul pentru cuvinte cheie, în acest caz „parolă”.

Interogare de înregistrare HKLM /f parola /t REG_SZ /s
interogare reg HKCU /f parola /t REG_SZ /s
În acest moment avem deja suficient pentru a obține un shell de sistem. Dar mai există câteva atacuri pentru a obține rezultatul dorit: ne vom uita la serviciile Windows și la permisiunile de fișiere și foldere. Scopul nostru aici este să folosim permisiuni slabe pentru a escalada privilegiile de sesiune.

Vom verifica multe drepturi de acces, accesschk.exe, care este un instrument de la Microsoft Sysinternals Suite, ne va ajuta în acest sens. Microsoft Sysinternals conține multe instrumente excelente. Pachetul poate fi descărcat de pe site-ul Microsoft Technet (https://docs.microsoft.com/ru-ru/sysinternals/downloads/sysinternals-suite).

Putem verifica nivelul de privilegii necesar pentru fiecare serviciu folosind accesschk.

Putem vedea permisiunile pe care le are fiecare nivel de utilizator.

Accesschk poate verifica automat dacă avem acces de scriere la un serviciu Windows cu un anumit nivel de utilizator. De obicei, ca utilizator cu privilegii reduse, dorim să bifăm „Utilizatori”. Asigurați-vă că verificați la ce grupuri de utilizatori aparțineți.

C Numele este un serviciu Windows, cum ar fi ssdpsrv (specificați „*” pentru a afișa toate serviciile)
-d Procesează numai directoare
-e Emite numai niveluri de integritate specificate explicit (numai Windows Vista)
-k Numele este o cheie de registry, de exemplu hklm\software
-n Afișează numai obiectele care nu au reguli de acces
-p Nume este numele sau identificatorul de proces (PID), cum ar fi cmd.exe (specificați numele ca „*” pentru a lista toate procesele)
-q Omite titlul
-r Afișează numai obiectele care au acces de citire
-s Prelucrare recursiva
-v Imprimați informații detaliate
-w Listează numai obiectele care au acces la scriere

Există și o altă comandă interesantă:

Autorunsc.exe -a | findstr /n /R „Fișier\ nu\ găsit”
Vă permite să găsiți o intrare de registry despre un fișier care a pornit automat, dar nu mai este în sistem. Intrarea ar putea rămâne dacă, de exemplu, serviciul a fost șters incorect. De fiecare dată când sistemul pornește, încearcă fără succes să ruleze acest fișier. Această situație poate fi folosită și pentru a vă extinde puterile. Pur și simplu îl puteți înlocui pe al nostru în locul acestui fișier.

În primul rând: replicăm rezultatele unei postări scrise de Parvez de la GreyHatHacker; „Elevarea privilegiilor prin exploatarea permisiunilor slabe ale folderelor” (http://www.greyhathacker.net/?p=738).

Acest exemplu este un caz special de deturnare a fișierelor dll. Programele de obicei nu pot funcționa singure, au o mulțime de resurse la care trebuie să se conecteze (în mare parte dll-uri, dar și propriile fișiere). Dacă un program sau un serviciu încarcă un fișier dintr-un director în care avem acces de scriere, putem abuza de acest lucru pentru a porni un shell cu privilegiile sub care rulează programul.

De obicei, o aplicație Windows va folosi căi de căutare predefinite pentru a găsi dll-ul și va verifica acele căi într-o anumită ordine. Deturnarea dll-urilor are loc de obicei prin plasarea dll-urilor rău intenționate pe una dintre aceste căi. Această problemă poate fi rezolvată furnizând aplicației căi absolute către dll-ul necesar.

Ordine de căutare DLL:

  1. Directorul din care este lansată aplicația
  2. Director de sistem pe 32 de biți (C:\Windows\System32)
  3. Director de sistem pe 16 biți (C:\Windows\System)
  4. Director Windows (C:\Windows)
  5. Director de lucru curent (CWD)
  6. Directoare din variabila de mediu PATH (sistem apoi utilizator)
Uneori, aplicațiile încearcă să încarce fișiere dll care nu se află pe mașină. Acest lucru se poate întâmpla din mai multe motive, cum ar fi dacă dll-ul este necesar doar de anumite pluginuri sau componente care nu sunt instalate. În acest caz, Parvez a descoperit că unele servicii Windows încercau să încarce dll-uri care nu existau în instalările implicite.

Deoarece dll-ul nu există, ajungem să parcurgem toate căile de căutare. Ca utilizator cu privilegii reduse, avem șanse mici de a pune un dll rău intenționat în elementele 1-4, 5. Dar dacă avem acces de scriere la oricare dintre directoare, atunci șansele noastre de câștig sunt mari.

Să vedem cum funcționează acest lucru în practică, pentru exemplul nostru vom folosi serviciul IKEEXT (IPSec IKE și AuthIP Key Modules) care încearcă să încarce wlbsctrl.dll.

Orice director din „C:\” va oferi acces de scriere utilizatorilor autentificați, acest lucru ne oferă o șansă.

C:\Users\user1\Desktop> accesschk.exe -dqv „C:\Python27”
C:\Python27 Medium Obligatoriu Nivel (implicit) RW BUILTIN\Administrators FILE_ALL_ACCESS RW NT AUTHORITY\SYSTEM FILE_ALL_ACCESS R BUILTIN\Users FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_ACCESS RW NT AUTHORITY\SYSTEM FILE_ALL_ACCESS R BUILTIN\Users Utilizatori FILE_ADD_FILE FILE_ADD_SUBDIRECTORY FILE_LIST_DIRECTORY FILE_READ_ATTRIBUTES FILE_READ_EA FILE_TRAVERSE FILE_WRITE_ATTRIBUTES FILE_WRITE_EA ȘTERGERE SINCRONIZARE READ_CONTROL
C:\Users\user1\Desktop> icacls „C:\Python27”
C:\Python27 BUILTIN\Administrators:(ID)F BUILTIN\Administrators:(OI)(CI)(IO)(ID)F NT AUTHORITY\SYSTEM:(ID)F NT AUTORITY\SYSTEM:(OI)(CI)( IO)(ID)F BUILTIN\Utilizatori:(OI)(CI)(ID)R NT AUTHORITY\Utilizatori autentificați:(ID)C NT AUTHORITY\Utilizatori autentificați:(OI)(CI)(IO)(ID)C
F - acces complet.
(OI) - moștenire prin obiecte.
(CI) - mostenire prin containere.
(IO) - numai moștenire.
(NP) - interdicția de răspândire a moștenirii.
(I) - moștenirea permisiunilor de la containerul părinte.

Înainte de a continua, trebuie să verificați starea serviciului IKEEXT. În acest caz, putem vedea că este setat la „AUTO_START”!

Sc qc IKEEXT
QueryServiceConfig SUCCESS SERVICE_NAME: IKEEXT TYPE: 20 WIN32_SHARE_PROCESS START_TYPE: 2 AUTO_START ERROR_CONTROL: 1 NORMAL BINARY_PATH_NAME: C:\Windows\system32\svchost.exe -k netsvcs LOAD_ORDER_NAME: GROUPE DE DISPOZIȚIE și DEPLAY_CIP IES: BFE SERVICE_START_NAME: LocalSystem
Acum știm că avem condițiile necesare și putem crea un dll rău intenționat și deturnăm shell-ul!

Folosim Metasploit -> msfvenom, de exemplu.

După transferul evil.dll pe computerul nostru țintă, tot ce trebuie să facem este să-l redenumim wlbsctrl.dll și să-l mutăm în „C:\Python27”. Odată ce se face acest lucru, trebuie să așteptăm cu răbdare ca mașina să se repornească (sau putem încerca să forțăm o repornire) și vom obține shell-ul sistemului.

Copiați evil.dll C:\Python27\wlbsctrl.dll
După aceasta, tot ce rămâne este să așteptați ca sistemul să se repornească.

Pentru ultimul nostru exemplu, ne vom uita la sarcinile programate. Voi descrie principiul, pentru că Cazurile fiecăruia pot fi diferite.

Găsim procesul, serviciul, aplicația lansată de task scheduler din SYSTEM.
Verificăm drepturile de acces la folderul în care se află ținta noastră.

Accesschk.exe -dqv „path_to_target”
În mod clar, aceasta este o problemă serioasă de configurare, dar ceea ce este și mai rău este faptul că orice Utilizator autentificat (utilizator autentificat) are acces de scriere la acest folder. În acest exemplu, putem pur și simplu suprascrie executabilul binar cu fișierul generat în metasploit.

Poate fi codificat suplimentar.

Acum tot ce rămâne este să descărcați fișierul executabil rău intenționat și să îl suprascrieți în folderul cu fișiere executabile. Odată ce s-a făcut acest lucru, putem merge cu ușurință în pat și putem obține o ușurare sistemică dimineața devreme.

Aceste două exemple ar trebui să ne dea o idee despre vulnerabilitățile de căutat atunci când luăm în considerare permisiunile pentru fișiere și foldere. Va dura timp pentru a învăța toate căile binare pentru serviciile Windows, sarcinile programate și sarcinile de pornire.

În cele din urmă, câteva sfaturi despre utilizarea accesschk.exe.

Găsiți toate permisiunile slabe pentru folderele de pe un disc.

Accesschk.exe -uwdqs Utilizatori c:\ accesschk.exe -uwdqs „Utilizatori autentificați” c:\
Găsiți toate permisiunile slabe pentru fișierele de pe disc.

Accesschk.exe -uwqs Utilizatori c:\*.* accesschk.exe -uwqs „Utilizatori autentificați” c:\*.*
Arata ca asta e.

UAC(User Account Control) este o tehnologie de control al contului care a apărut pentru prima dată în Windows Vistași mai în vârstă. Această tehnologie împiedică programele să efectueze acțiuni care necesită drepturi de administrator. Atunci când programul efectuează astfel de acțiuni, activitatea sa este suspendată și utilizatorului i se prezintă o fereastră de solicitare pe desktopul protejat (astfel încât este imposibil să apăsați programatic butonul OK). De exemplu, dacă programul dvs. trebuie să facă modificări la cheia de registry HKEY_LOCAL_MACHINE, atunci va avea nevoie de drepturi de administrator.
Pentru a rezolva această problemă, puteți utiliza implementarea unui fișier manifest în proiect, pe care sistemul de operare îl va citi și va determina automat parametrii necesari pentru lansare.
Să luăm în considerare introducerea unui fișier manifest în aplicație " Windows Form" Pentru a face acest lucru, deschideți Visual Studio (versiunea 2012 este folosită în acest exemplu) și creați un proiect " Windows Form" Deschis " Explorator de soluții(Solution Explorer), care oferă o vizualizare organizată a proiectelor și a fișierelor acestora, accesați meniul Vedere» - « Explorator de soluții" Faceți clic dreapta pe " Explorator de soluții" după numele proiectului și selectați din meniul contextual, " Adăuga» - « Creați element...».

Se va deschide o fereastră nouă" Adăugarea unui element nou -..." căutați elementul Visual C# numit " Fișierul manifest al aplicației", selectați-l și faceți clic pe " Adăuga».

IN " Explorator de soluții„Veți avea un articol nou cu numele fișierului manifest. De asemenea, va fi deschis automat în editorul de cod.

Pentru a configura drepturile necesare rulării aplicației, trebuie să determinați nivelul de securitate și să descrieți elementul „ requestedExecutionLevel" Acest element nu are elemente secundare și are următoarele atribute:
1) Nivel- Necesar. Setează nivelul de securitate cerut de aplicație. Următoarele valori sunt disponibile pentru acest atribut:
  • ca Invocator- cererea începe cu drepturile procesului părinte. Aceasta înseamnă că dacă rulați un program dintr-o aplicație care rulează deja cu drepturi de administrator, acesta va avea automat aceleași drepturi. Acest mod este recomandat de Microsoft în majoritatea cazurilor. Acestea. Acestea sunt acele programe care nu necesită drepturi de administrator;
  • cel mai mare disponibil— aplicația este lansată cu drepturi mai mari decât are utilizatorul actual. Regedit.exe, Mmc.exe sunt lansate cu aceste drepturi;
  • cereAdministrator- sunt solicitate drepturi complete de administrator. Acestea. necesar pentru aplicațiile care nu pot rula fără drepturi de administrator.

Instalarea aplicațiilor" Faceți clic O dată" este posibil numai cu valoarea "asInvoker". Orice altă valoare nu va permite instalarea.

2) uiAccess- Opțional. Indică dacă aplicația necesită acces la elementele de interfață de utilizator protejate pentru a implementa caracteristici de accesibilitate. Valori disponibile" Adevărat" Și " fals", valoarea implicită este " fals". Sens " Adevărat" trebuie să aibă doar aplicații semnate și să fie lansat din folderele „\Program Files\” și „\windows\system32\”. Cel mai adesea, acest lucru nu este necesar.
Pentru ca programul să necesite creșterea drepturilor la nivelul de Administrator la pornire, înlocuiți atributul „ Nivel" valoare implicită " ca Invocator" pe " cereAdministrator».

Construiți o soluție apăsând butonul „ F6" Dacă ați făcut totul corect, atunci în sistemele de operare Windows Vista și mai vechi, va apărea o pictogramă scut pe pictograma fișierului executabil al programului, indicând faptul că acest program necesită creșterea drepturilor.

Pentru a verifica permisiunile aplicației dvs., puteți utiliza lista de mai jos.
string s = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator) ? „Administrator” : „Utilizator obișnuit”; Dacă aveți o aplicație de consolă, atunci principiul de funcționare este același.

Creșterea privilegiilor este poate unul dintre punctele cheie de care depinde scenariul pentru continuarea pentesting sau atac. De foarte multe ori, totul se termină în această etapă dacă nu este posibil să vă „extindeți puterile”. Prin urmare, astăzi vom vorbi puțin despre modalitățile care permit unui utilizator să-și mărească privilegiile nu numai la administrator, ci și la sistem.

Introducere

Escalarea privilegiilor este ușor diferită în Windows și Linux. Deși ambele sisteme de operare poartă numărul obișnuit de vulnerabilități, cercetătorii observă că un server Windows complet corelat este mult mai comun decât un server Linux care a fost actualizat la cea mai recentă stare. În plus, timpul de lansare pentru patch-urile Windows este adesea mai scurt, ceea ce face ca creșterea privilegiilor pe Windows să fie o sarcină destul de interesantă și ambițioasă. Ei îi vom dedica povestea noastră.

Opțiuni

Deci, ce oportunități avem de a ne ridica în lumea Windows? În primul rând, recent s-au găsit destule vulnerabilități legate de analizarea fonturilor în nucleul sistemului de operare, ceea ce face procesul de escaladare a privilegiilor destul de simplu dacă aveți un exploit adecvat la îndemână. Dacă utilizați Metasploit, atunci este suficientă o singură comandă pentru a obține un shell de sistem. Cu toate acestea, este posibil ca toate acestea să funcționeze cu succes numai dacă sistemul nu este complet corectat. Dacă toate actualizările sunt instalate pe mașină, atunci, spre deosebire de Linux, nu va fi posibil să găsiți binare SUID, iar variabilele de mediu nu sunt de obicei transmise serviciilor sau proceselor cu privilegii mai mari. Ce ne mai rămâne ca rezultat?

De la administrator la sistem, sau ceea ce știe toată lumea

De obicei, atunci când vă gândiți la escaladarea privilegiilor, metoda care vă vine imediat în minte este utilizarea programatorului de sarcini. În Windows, puteți adăuga o sarcină folosind două utilitare: at și schtasks. Al doilea va rula sarcina în numele utilizatorului care a adăugat sarcina, în timp ce primul va rula în numele sistemului. Un truc standard de care probabil ați auzit și care vă permite să rulați consola cu drepturi de sistem:

La 13:01 /cmd interactiv

Al doilea lucru care îmi vine în minte este adăugarea unui serviciu care va lansa fișierul necesar / va executa comanda:

@echo off @break off rădăcină titlu Cls echo Crearea serviciului. sc create evil binpath= "cmd.exe /K start" type= own type= interact > nul 2>&1 echo Pornirea serviciului. sc start evil > nul 2>&1 echo În așteptare... ping 127.0.0.1 -n 4 > nul 2>&1 echo Se elimină serviciul. ecou. sc delete evil > nul 2>&1

A treia metodă este înlocuirea utilitarului de sistem C:\windows\system32\sethc.exe cu, de exemplu, cmd. Dacă vă deconectați după aceasta și apăsați tasta Shift de mai multe ori, va apărea o consolă cu drepturi de sistem.

În ceea ce privește metodele automate, Metasploit și getsystem-ul său vin imediat în minte. O opțiune alternativă este PsExec de la Sysinternals (psexec -i -s -d cmd.exe).

Vom merge pe alt drum

Toate aceste metode au un dezavantaj comun: sunt necesare privilegii de administrator. Aceasta înseamnă că creștem privilegiile de la un cont privilegiat. În cele mai multe cazuri, când ați primit drepturi de administrator, aveți o mulțime de opțiuni despre cum să creșteți și mai mult. Deci nu este o sarcină foarte dificilă. Astăzi vom vorbi despre metode de escaladare a privilegiilor care nu folosesc vulnerabilități 0day, presupunând că avem un sistem normal și un cont al unui utilizator obișnuit neprivilegiat.

Caută acreditări

Una dintre modalitățile fiabile și stabile de a crește privilegiile și de a obține un punct de sprijin în sistem este obținerea parolelor administratorilor sau utilizatorilor cu privilegii mai mari. Și acum este timpul să ne amintim despre instalarea automată a software-ului. Dacă gestionați un domeniu care include o flotă mare de mașini, cu siguranță nu doriți să instalați manual software pe fiecare dintre ele. Și va dura atât de mult timp încât nu va fi suficient pentru alte sarcini. Prin urmare, sunt folosite instalări Nesupravegheate, care generează fișiere care conțin parole de administrator în forma lor cea mai pură. Ceea ce este pur și simplu o comoară atât pentru pentesteri, cât și pentru atacatori.

Instalații nesupravegheate

În cazul unei instalări automate, fișierul Unattended.xml, care este destul de interesant pentru noi, rămâne pe client, care se află de obicei fie în %WINDIR%\Panther\Unattend\, fie în %WINDIR%\Panther\ și poate stocați parola de administrator în text clar. Pe de altă parte, pentru a obține acest fișier de pe server, nici măcar nu aveți nevoie de nicio autentificare. Trebuie doar să găsiți serverul „Servicii de implementare Windows”. Pentru a face acest lucru, puteți utiliza script-ul auxiliar/scanner/dcerpc/windows_deployment _services de la Metasploit. Deși Windows Deployment Services nu este singura modalitate de a efectua instalări automate, fișierul Unattended.xml este considerat un standard, astfel încât descoperirea acestuia poate fi considerată un succes.

GPP

Fișierele XML de preferințe de politică de grup conțin destul de des un set de acreditări criptate care pot fi folosite pentru a adăuga noi utilizatori, a crea partajări și așa mai departe. Din fericire, metoda de criptare este documentată, astfel încât puteți obține cu ușurință parolele în forma lor pură. Mai mult decât atât, echipa Metasploit a făcut deja totul pentru tine - doar folosește modulul /post/windows/gather/credentials/gpp.rb. Dacă sunteți interesat de detalii, atunci toate informațiile necesare sunt disponibile la acest link.

Drepturile utilizatorului

Foarte des, escaladarea privilegiilor este o consecință a drepturilor utilizatorului configurate incorect. De exemplu, când un utilizator de domeniu este un administrator local (sau Power User) pe gazdă. Sau atunci când utilizatorii de domeniu (sau membrii grupurilor de domenii) sunt administratori locali pe toate gazdele. În acest caz, nu va trebui să faceți nimic. Dar astfel de opțiuni nu apar foarte des.

AlwaysInstallElevated

Uneori, administratorii permit utilizatorilor obișnuiți să instaleze ei înșiși programele, de obicei prin următoarele chei de registry:

HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated

HKCU\SOFTWARE\Policies\Microsoft\Window s\Installer\AlwaysInstallElevated

Ei spun sistemului că orice fișier MSI trebuie instalat cu privilegii ridicate (NT AUTHORITY\SYSTEM). În consecință, utilizând un fișier special creat, puteți efectua din nou acțiuni în numele sistemului și vă puteți actualiza privilegiile.

Metasploit include un modul special exploit/windows/local/always_install_elevated, care creează un fișier MSI cu un fișier executabil special încorporat în el, care este extras și executat de către instalatorul cu privilegii de sistem. Odată executat, fișierul MSI anulează instalarea (prin apelarea unui VBS invalid special creat) pentru a preveni înregistrarea acțiunii în sistem. În plus, dacă porniți instalarea cu comutatorul /quiet, utilizatorul nici măcar nu va vedea o eroare.

Lipsește pornirea automată

Se întâmplă adesea ca sistemul să păstreze o înregistrare a unui fișier care trebuie lansat automat, chiar și după ce fișierul în sine a căzut deja în uitare. Poate că un serviciu a fost eliminat incorect - nu există niciun fișier executabil, dar intrarea din registry rămâne și de fiecare dată când porniți sistemul încearcă fără succes să-l pornească, umplând jurnalul de evenimente cu mesaje despre eșecuri. Această situație poate fi folosită și pentru a vă extinde puterile. Primul pas este să găsiți toate astfel de înregistrări orfane. De exemplu, folosind utilitarul autorunsc de la Sysinternals.

Autorunsc.exe -a | findstr /n /R „Fișier\ nu\ găsit”

După care, după cum ați ghicit, tot ce rămâne este să vă strecurați cumva candidatul în locul dosarului lipsă.

Magia citatelor

Da, da, ghilimele nu numai că pot juca o glumă crudă în interogările SQL, permițând injectarea, dar și pot ajuta la creșterea privilegiilor. Problema este destul de veche și este cunoscută încă din timpurile NT. Ideea este că căile către fișierele executabile ale unor servicii nu sunt înconjurate de ghilimele (de exemplu, ImagePath=C:\Program Files\Common Files\Network Associates\McShield\McShield.exe) și există caractere de spațiu în cale. În acest caz, dacă atacatorul creează un fișier care va adăuga noi administratori la sistem sau va efectua alte acțiuni și îl numește C:\Program Files\common.exe, atunci când serviciul este pornit, va fi obișnuit. exe care va fi lansat, iar partea rămasă a căii va fi luată ca argument(e). Este clar că un utilizator neprivilegiat nu va putea pune nimic în Program Files, dar fișierul executabil al serviciului poate fi localizat într-un alt director, adică utilizatorul va avea posibilitatea să se strecoare în propriul fișier.

Pentru a utiliza această tehnică, trebuie să găsiți un serviciu vulnerabil (care nu va folosi ghilimele în calea către binarul său). Acest lucru se face după cum urmează:

Serviciul Wmic obține numele, numele afișat, calea, modul start |findstr /i "auto" |findstr /i /v "c: \windows\\" |findstr /i /v """

Adevărat, pe XP, acest lucru va necesita privilegii de administrator, deci este mai bine să utilizați următoarea metodă acolo: obțineți o listă de servicii - sc query , apoi uitați-vă la informații pentru fiecare serviciu - sc qc servicename .

Totul conform planului

Un alt mecanism care poate ajuta la creșterea drepturilor și care este de obicei uitat este planificatorul de sarcini. Utilitarul schtasks vă permite să atribuiți sarcini unor evenimente specifice. Cele mai interesante pentru noi sunt ONIDLE, ONLOGON și ONSTART. După cum sugerează numele, ONIDLE va fi executat de fiecare dată când computerul este inactiv, ONLOGON și ONSTART - când utilizatorul se autentifică și, respectiv, când sistemul pornește. Astfel, fiecăruia dintre evenimente poate fi atribuită o sarcină separată. De exemplu, când sistemul pornește, copiați un binar/keylogger/... undeva rău intenționat și rulați-l. Când utilizatorii se conectează, rulați un dumper pentru carduri de credit. Pe scurt, totul este limitat doar de imaginația ta și de sarcina la îndemână.

Trucuri cu permisiuni

Permisiunile pentru fișiere sunt de obicei prima apărare care ne împiedică să ne creștem privilegiile. Ar fi tentant să suprascrieți pur și simplu un fișier de sistem (de exemplu, același sethc.exe menționat chiar la începutul articolului) și să obțineți imediat privilegii de sistem. Dar toate acestea sunt doar vise, de fapt, avem doar permisiunea de a o citi, ceea ce nu ne dă absolut nimic. Cu toate acestea, nu ar trebui să vă atârnați nasul, deoarece, cu permise, nici totul nu este atât de neted - aici, ca și în altă parte, există capcane, a căror cunoaștere vă permite să faceți imposibilul posibil.

Unul dintre directoarele de sistem protejate de acest mecanism este deosebit de interesant din punct de vedere al escaladării privilegiilor - Program Files. Utilizatorilor neprivilegiati li se interzice accesul acolo. Cu toate acestea, uneori se întâmplă ca în timpul procesului de instalare, instalatorii să stabilească incorect permisiunile pentru fișiere, ceea ce duce la acordarea tuturor utilizatorilor de acces deplin la fișierele executabile. Ce rezultă din asta - ai ghicit deja.

O altă limitare este că un muritor obișnuit nu are voie să scrie în rădăcina discului de sistem. Totuși, de exemplu, pe XP, la crearea unui director nou la rădăcina discului, grupul BUILTIN\Users primește permisiuni FILE_APPEND_DATA și FILE_WRITE_DATA (chiar dacă proprietarul folderului este un administrator):

BUILTIN\Utilizatori:(OI)(CI)R BUILTIN\Users:(CI)(acces special:) FILE_APPEND_DATA BUILTIN\Users:(CI)(acces special:) FILE_WRITE_DATA

Pe cei „șapte” se întâmplă aproape același lucru, doar grupul UTENTIFICĂȚI AUTENTIFICAȚI primește permisiunea. Cum poate acest comportament să devină o problemă? Doar că unele aplicații se instalează în afara directoarelor protejate, ceea ce facilitează înlocuirea fișierelor lor executabile. De exemplu, un astfel de incident s-a întâmplat cu Metasploit Framework în cazul instalării sale cu mai mulți utilizatori. Această eroare a fost remediată în versiunea 3.5.2, iar utilitarul a fost mutat în Program Files.


Cum să cauți astfel de directoare/fișiere

Găsirea unui director cu permisiuni incorecte este deja jumătate din luptă. Cu toate acestea, mai întâi trebuie să-l găsiți. Pentru a face acest lucru, puteți utiliza următoarele două instrumente: AccessChk și Cacls/ICacls. Pentru a găsi directoare „slabe” folosind AccessChk, veți avea nevoie de aceste comenzi:

Accesschk.exe -uwdqs utilizatori c:\ accesschk.exe -uwdqs „Utilizatori autentificați” c:\

Pentru a căuta fișiere cu permisiuni „slabe”, utilizați următoarele:

Accesschk.exe -uwqs utilizatori c:\*.* accesschk.exe -uwqs „Utilizatori autentificați” c:\*.*

Același lucru se poate face folosind Cacls/ICacls:

Cacls "c:\Program Files" /T | findstr Utilizatori

Trucuri cu serviciile

O altă opțiune pentru a trece în sus în sistem este să profitați de configurările greșite și erorile de service. După cum arată practica, nu numai fișierele și folderele, ci și serviciile care rulează în sistem pot avea permisiuni incorecte. Pentru a le detecta, puteți folosi utilitarul AccessChk de la binecunoscutul Mark Russinovich:

Accesschk.exe –uwcqv *

Va fi cel mai încurajator să vedeți permisiunea SERVICE_ALL_ACCESS pentru utilizatorii autentificați sau utilizatorii cu putere. Dar următoarele pot fi considerate de asemenea un mare succes:

  • SERVICE_CHANGE_CONFIG - putem schimba fișierul executabil al serviciului;
  • WRITE_DAC - permisiunile pot fi modificate, ceea ce duce la obținerea permisiunii SERVICE_CHANGE_CONFIG;
  • WRITE_OWNER - puteți deveni proprietar și puteți schimba permisiunile;
  • GENERIC_WRITE - moștenește permisiunile SERVICE_CHANGE_CONFIG ;
  • GENERIC_ALL - moștenește permisiunile SERVICE_CHANGE_CONFIG.

Dacă descoperiți că una (sau mai multe) dintre aceste permisiuni sunt setate pentru utilizatori neprivilegiați, șansele dvs. de a vă escalada privilegiile cresc dramatic.

Cum să măresc?

Să presupunem că ați găsit un serviciu potrivit, este timpul să lucrați la el. Utilitarul de consolă sc va ajuta în acest sens. În primul rând, obținem informații complete despre serviciul care ne interesează, să presupunem că este upnphost:

Sc qc upnphost

Să o configuram folosind același utilitar:

Sc config vulnsrv binpath= "utilizator net john salut /adăugați && net localgroup Administratori john /add" tip= interacționați sc config upnphost obj= „.\LocalSystem” parola=“”

După cum puteți vedea, data viitoare când serviciul pornește, în loc de fișierul său executabil, va fi executată comanda net user john hello /add && net localgroup Administrators john /add, adăugând un nou utilizator john cu parola hello la sistem. Tot ce rămâne este să reporniți manual serviciul:

Net stop upnphost net start upnphost

Asta e toată magia.

Care este rezultatul?

Cândva, am citit un articol de revistă care sublinia tehnici de bază pentru escaladarea privilegiilor în Windows. Nu i-am acordat prea multă importanță atunci, dar teoria mi-a rămas în cap și m-a ajutat o dată foarte mult. Așadar, sper că vei găsi ceva nou pentru tine în acest articol care te va ajuta într-o zi să depășești o altă barieră.

Astăzi vom vorbi despre escaladarea privilegiilor Windows. Veți învăța cum un atacator poate escalada privilegiile și cum să vă protejați de acest lucru.

Toate informațiile au doar scop informativ. Nici editorii site-ului, nici autorul articolului nu sunt responsabili pentru utilizarea necorespunzătoare a acestuia.

Creșterea privilegiilor cu BeRoot

Majoritatea metodelor de ridicare a privilegiilor sunt asociate cu erori în configurarea software-ului instalat, fie că este vorba de calea către fișierul executabil al serviciului, neînconjurat de ghilimele și care conține un spațiu (această situație este tratată destul de interesant de Windows), fie incorect setați drepturi la directorul cu aplicația.

Omul este o creatură leneșă și nu vrea să verifice toate acestea manual de fiecare dată. Prin urmare, mai devreme sau mai târziu a trebuit să apară un instrument care să automatizeze această rutină.

Mâner secundar de conectare

Un alt truc interesant implică utilizarea serviciului de conectare secundară. Acest serviciu vă permite să rulați programe, console de management Microsoft și elemente ale panoului de control în calitate de administrator, chiar dacă utilizatorul curent aparține doar grupului Utilizatori sau Utilizatori cu putere. Ideea este că acest serviciu nu șterge mânerele atunci când creează noi procese.

Ceea ce este important pentru noi este că aproape toate versiunile de Windows (x32 și x64) sunt susceptibile la această vulnerabilitate: de la Vista la Windows 2012 Server. Dar există și limitări: pentru a escalada cu succes privilegiile, sistemul trebuie să aibă instalat PowerShell 2.0 sau o versiune superioară, precum și două sau mai multe nuclee CPU. Metasploit Framework are un modul special exploit/windows/local/ms16_032_secondary_logon_handle_privesc.

Utilizarea lui presupune că avem deja o sesiune meterpreter, pe care trebuie să o specificăm în parametri: setați SESIUNEA 1. Ei bine, în cazul exploatării cu succes, vom avea o altă sesiune cu privilegii ridicate.

\ pentestlab > wmic qfe list | găsiți „3139914”

Concluzie

Indiferent cât de mult încerc să încadrez într-un singur articol toate opțiunile posibile pentru creșterea privilegiilor, este puțin probabil să funcționeze, sau articolul va crește la proporții gigantice și va deveni neinteresant pentru tine. Așa că este timpul să numim asta o zi. Vom vorbi despre protecție într-un articol separat.