Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
Już było kilka przypadków **eskalacji uprawnień**, w których **uprzywilejowany proces** z **otwartymi i dziedzicznymi uchwytami** uruchomił **nieuprzywilejowany proces**, dając mu **dostęp do wszystkich tych uchwytów**.
Na przykład, wyobraź sobie, że **proces działający jako SYSTEM otwiera nowy proces** (`OpenProcess()`) z **pełnym dostępem**. Ten sam proces **tworzy również nowy proces** (`CreateProcess()`) **z niskimi uprawnieniami, ale dziedziczy wszystkie otwarte uchwyty głównego procesu**.\
Następnie, jeśli masz **pełny dostęp do procesu o niskich uprawnieniach**, możesz przejąć **otwarty uchwyt do uprzywilejowanego procesu utworzonego** za pomocą `OpenProcess()` i **wstrzyknąć shellcode**.
Jak przeczytałeś w początkowym przykładzie, jeśli **nieuprzywilejowany proces dziedziczy uchwyt procesu****uprzywilejowanego procesu** z wystarczającymi uprawnieniami, będzie w stanie wykonać **dowolny kod na nim**.
W [**tym doskonałym artykule**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) możesz zobaczyć, jak wykorzystać dowolny uchwyt procesu, który ma którekolwiek z następujących uprawnień:
Podobnie jak w przypadku uchwytów procesów, jeśli **nieuprzywilejowany proces dziedziczy uchwyt wątku****uprzywilejowanego procesu** z wystarczającymi uprawnieniami, będzie w stanie wykonać **dowolny kod na nim**.
W [**tym doskonałym artykule**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/) możesz również zobaczyć, jak wykorzystać dowolny uchwyt procesu, który ma którekolwiek z następujących uprawnień:
Jeśli **nieuprzywilejowany proces dziedziczy****uchwyt** z **uprawnieniami** równoważnymi **do zapisu** nad **uprzywilejowanym plikiem lub rejestrem**, będzie w stanie **nadpisać** plik/rejestr (a z dużą **szczęściem**, **eskalować uprawnienia**).
**Uchwyty sekcji** są podobne do uchwytów plików, a wspólną nazwą tego rodzaju [obiektów jest **"Mapowanie plików"**](https://docs.microsoft.com/en-us/windows/win32/memory/file-mapping). Służą do pracy z **dużymi plikami bez trzymania całego** pliku w pamięci. To sprawia, że eksploatacja jest "podobna" do eksploatacji uchwytu pliku.
[**Process Hacker**](https://github.com/processhacker/processhacker) to narzędzie, które możesz pobrać za darmo. Ma kilka niesamowitych opcji do inspekcji procesów, a jedną z nich jest **możliwość zobaczenia uchwytów każdego procesu**.
Zauważ, że aby **zobaczyć wszystkie uchwyty wszystkich procesów, potrzebne są uprawnienia SeDebugPrivilege** (więc musisz uruchomić Process Hacker jako administrator).
[**To narzędzie**](https://github.com/lab52io/LeakedHandlesFinder) pozwala na **monitorowanie** wyciekłych **uchwytów** i nawet **automatyczne ich eksploatowanie** w celu eskalacji uprawnień.
Teraz, gdy wiesz, jak znaleźć uchwyty procesów, musisz sprawdzić, czy jakikolwiek **nieuprzywilejowany proces ma dostęp do uprzywilejowanych uchwytów**. W takim przypadku użytkownik procesu mógłby uzyskać uchwyt i nadużyć go w celu eskalacji uprawnień.
Wspomniano wcześniej, że potrzebujesz SeDebugPrivilege, aby uzyskać dostęp do wszystkich uchwytów. Ale **użytkownik nadal może uzyskać dostęp do uchwytów swoich procesów**, więc może to być przydatne, jeśli chcesz eskalować uprawnienia tylko z tego użytkownika, aby **wykonywać narzędzia z regularnymi uprawnieniami użytkownika**.
Na przykład, poniższy kod należy do **usługi Windows**, która byłaby podatna. Podatny kod tego binarnego pliku usługi znajduje się w funkcji **`Exploit`**. Ta funkcja zaczyna **tworzyć nowy proces uchwytu z pełnym dostępem**. Następnie **tworzy proces o niskich uprawnieniach** (poprzez skopiowanie tokena o niskich uprawnieniach z _explorer.exe_), wykonując _C:\users\username\desktop\client.exe_. **Podatność polega na tym, że tworzy proces o niskich uprawnieniach z `bInheritHandles` ustawionym na `TRUE`**.
W związku z tym, ten proces o niskich uprawnieniach jest w stanie przejąć uchwyt procesu o wysokich uprawnieniach utworzonego wcześniej i wstrzyknąć oraz wykonać shellcode (zobacz następny rozdział).
W rzeczywistym scenariuszu prawdopodobnie **nie będziesz w stanie kontrolować binarnego pliku**, który ma być wykonany przez podatny kod (_C:\users\username\desktop\client.exe_ w tym przypadku). Prawdopodobnie **skompromitujesz proces i będziesz musiał sprawdzić, czy możesz uzyskać dostęp do jakiegokolwiek podatnego uchwytu jakiegokolwiek uprzywilejowanego procesu**.
W tym przykładzie możesz znaleźć kod możliwego exploita dla _C:\users\username\desktop\client.exe_.\
Najciekawsza część tego kodu znajduje się w `GetVulnProcHandle`. Ta funkcja **rozpocznie pobieranie wszystkich uchwytów**, następnie **sprawdzi, czy którykolwiek z nich należy do tego samego PID** i czy uchwyt należy do **procesu**. Jeśli wszystkie te wymagania są spełnione (znaleziono dostępny otwarty uchwyt procesu), próbuje **wstrzyknąć i wykonać shellcode, wykorzystując uchwyt procesu**.\
Wstrzyknięcie shellcode odbywa się wewnątrz funkcji **`Inject`** i po prostu **zapisuje shellcode wewnątrz uprzywilejowanego procesu i tworzy wątek wewnątrz tego samego procesu**, aby wykonać shellcode).
W rzeczywistym scenariuszu prawdopodobnie **nie będziesz w stanie kontrolować binarnego pliku**, który ma być wykonany przez podatny kod (_C:\users\username\desktop\client.exe_ w tym przypadku). Prawdopodobnie **skompromitujesz proces i będziesz musiał sprawdzić, czy możesz uzyskać dostęp do jakiegokolwiek podatnego uchwytu jakiegokolwiek uprzywilejowanego procesu**.
W tym przykładzie, **zamiast nadużywać otwartego uchwytu do wstrzykiwania** i wykonywania shellcode, **zostanie użyty token procesu z otwartego uchwytu uprzywilejowanego do stworzenia nowego**. To jest zrealizowane w liniach od 138 do 148.
Zauważ, jak **funkcja `UpdateProcThreadAttribute`** jest używana z **atrybutem `PROC_THREAD_ATTRIBUTE_PARENT_PROCESS` oraz uchwytem do otwartego procesu uprzywilejowanego**. Oznacza to, że **utworzony wątek procesu wykonujący \_cmd.exe**\_\*\* będzie miał te same uprawnienia tokena co proces z otwartym uchwytem\*\*.
To narzędzie pozwala monitorować wyciekające uchwyty, aby znaleźć podatne oraz nawet je automatycznie wykorzystać. Posiada również narzędzie do wycieku jednego.
Ucz się i ćwicz Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Ucz się i ćwicz Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.