Parameter Pollution | JSON Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
HTTP Parameter Pollution (HPP) είναι μια τεχνική όπου οι επιτιθέμενοι χειρίζονται τις παραμέτρους HTTP για να αλλάξουν τη συμπεριφορά μιας διαδικτυακής εφαρμογής με μη αναμενόμενους τρόπους. Αυτή η χειραγώγηση γίνεται προσθέτοντας, τροποποιώντας ή διπλασιάζοντας παραμέτρους HTTP. Η επίδραση αυτών των χειρισμών δεν είναι άμεσα ορατή στον χρήστη, αλλά μπορεί να αλλάξει σημαντικά τη λειτουργικότητα της εφαρμογής στην πλευρά του διακομιστή, με παρατηρήσιμες επιπτώσεις στην πλευρά του πελάτη.
Μια διεύθυνση URL συναλλαγής τραπεζικής εφαρμογής:
Original URL: https://www.victim.com/send/?from=accountA&to=accountB&amount=10000
Με την προσθήκη μιας επιπλέον παραμέτρου from
:
Manipulated URL: https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC
Η συναλλαγή μπορεί να χρεωθεί λανθασμένα στο accountC
αντί για το accountA
, δείχνοντας τη δυνατότητα του HPP να χειρίζεται συναλλαγές ή άλλες λειτουργίες όπως επαναφορά κωδικού πρόσβασης, ρυθμίσεις 2FA ή αιτήματα κλειδιών API.
Ο τρόπος που οι παράμετροι αναλύονται και προτεραιοποιούνται εξαρτάται από την υποκείμενη διαδικτυακή τεχνολογία, επηρεάζοντας το πώς μπορεί να εκμεταλλευτεί το HPP.
Εργαλεία όπως το Wappalyzer βοηθούν στην αναγνώριση αυτών των τεχνολογιών και των συμπεριφορών ανάλυσής τους.
OTP Manipulation Case:
Context: Ένας μηχανισμός σύνδεσης που απαιτεί έναν Κωδικό Μίας Χρήσης (OTP) εκμεταλλεύτηκε.
Method: Με την παρεμβολή του αιτήματος OTP χρησιμοποιώντας εργαλεία όπως το Burp Suite, οι επιτιθέμενοι διπλασίασαν την παράμετρο email
στο αίτημα HTTP.
Outcome: Ο OTP, που προοριζόταν για το αρχικό email, στάλθηκε αντί για αυτό στη δεύτερη διεύθυνση email που καθορίστηκε στο χειραγωγημένο αίτημα. Αυτή η αδυναμία επέτρεψε μη εξουσιοδοτημένη πρόσβαση παρακάμπτοντας το προοριζόμενο μέτρο ασφαλείας.
Αυτό το σενάριο αναδεικνύει μια κρίσιμη παράλειψη στην υποδομή της εφαρμογής, η οποία επεξεργάστηκε την πρώτη παράμετρο email
για τη δημιουργία OTP αλλά χρησιμοποίησε την τελευταία για την παράδοση.
API Key Manipulation Case:
Scenario: Μια εφαρμογή επιτρέπει στους χρήστες να ενημερώνουν το κλειδί API τους μέσω μιας σελίδας ρυθμίσεων προφίλ.
Attack Vector: Ένας επιτιθέμενος ανακαλύπτει ότι προσθέτοντας μια επιπλέον παράμετρο api_key
στο αίτημα POST, μπορεί να χειριστεί το αποτέλεσμα της λειτουργίας ενημέρωσης του κλειδιού API.
Technique: Χρησιμοποιώντας ένα εργαλείο όπως το Burp Suite, ο επιτιθέμενος δημιουργεί ένα αίτημα που περιλαμβάνει δύο παραμέτρους api_key
: μία νόμιμη και μία κακόβουλη. Ο διακομιστής, επεξεργαζόμενος μόνο την τελευταία εμφάνιση, ενημερώνει το κλειδί API στην τιμή που παρέχεται από τον επιτιθέμενο.
Result: Ο επιτιθέμενος αποκτά έλεγχο στη λειτουργικότητα API του θύματος, ενδεχομένως αποκτώντας ή τροποποιώντας ιδιωτικά δεδομένα χωρίς εξουσιοδότηση.
Αυτό το παράδειγμα υπογραμμίζει περαιτέρω την αναγκαιότητα για ασφαλή χειρισμό παραμέτρων, ειδικά σε λειτουργίες τόσο κρίσιμες όσο η διαχείριση κλειδιών API.
Ο τρόπος που οι διαδικτυακές τεχνολογίες χειρίζονται διπλές παραμέτρους HTTP διαφέρει, επηρεάζοντας την ευαισθησία τους σε επιθέσεις HPP:
Flask: Υιοθετεί την πρώτη τιμή παραμέτρου που συναντά, όπως a=1
σε μια συμβολοσειρά ερωτήματος a=1&a=2
, προτιμώντας την αρχική εμφάνιση από τις επόμενες διπλές.
PHP (σε Apache HTTP Server): Αντίθετα, προτιμά την τελευταία τιμή παραμέτρου, επιλέγοντας a=2
στο δεδομένο παράδειγμα. Αυτή η συμπεριφορά μπορεί ακούσια να διευκολύνει τις εκμεταλλεύσεις HPP τιμώντας την παραμετροποιημένη παράμετρο του επιτιθέμενου αντί της αρχικής.
There results were taken from https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89
Αγνοήστε οτιδήποτε μετά το %00 στο όνομα παραμέτρου.
Χειριστείτε το name[] ως πίνακα.
_GET δεν σημαίνει μέθοδο GET.
Προτιμήστε την τελευταία παράμετρο.
Χρησιμοποιεί τους διαχωριστές & και ; για να διαχωρίσει τις παραμέτρους.
Δεν αναγνωρίζεται το name[].
Προτιμήστε την πρώτη παράμετρο.
POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
POST RequestMapping & PostMapping αναγνωρίζουν το name[].
Προτιμήστε το name αν το name και το name[] υπάρχουν.
Συγκεντρώστε παραμέτρους π.χ. first,last.
POST RequestMapping & PostMapping αναγνωρίζουν παραμέτρους ερωτήματος με Content-Type.
Αναγνωρίζεται το name[].
Συγκεντρώστε παραμέτρους π.χ. first,last.
ΔΕΝ αναγνωρίζεται το name[].
Προτιμήστε την πρώτη παράμετρο.
ΔΕΝ αναγνωρίζεται το name[].
Προτιμήστε την πρώτη παράμετρο.
ΔΕΝ αναγνωρίζεται το name[].
Προτιμήστε την τελευταία παράμετρο.
ΔΕΝ αναγνωρίζεται το name[].
Προτιμήστε την τελευταία παράμετρο.
Η διεπαφή χρήστη μπορεί να πιστεύει την πρώτη εμφάνιση ενώ το backend χρησιμοποιεί τη δεύτερη εμφάνιση του κλειδιού.
Ορισμένοι χαρακτήρες δεν θα ερμηνευτούν σωστά από τη διεπαφή χρήστη, αλλά το backend θα τους ερμηνεύσει και θα χρησιμοποιήσει αυτά τα κλειδιά, αυτό θα μπορούσε να είναι χρήσιμο για bypass certain restrictions:
Σημειώστε πώς σε αυτές τις περιπτώσεις το front end μπορεί να νομίζει ότι test == 1
και το backend θα νομίζει ότι test == 2
.
Αυτό μπορεί επίσης να χρησιμοποιηθεί για να παρακαμφθούν οι περιορισμοί τιμών όπως:
Εδώ θα χρησιμοποιήσουμε τον σειριαστή από κάθε αναλυτή για να δούμε την αντίστοιχη έξοδό του.
Σειριαστής 1 (π.χ., η βιβλιοθήκη GoJay του GoLang) θα παράγει:
description = "Duplicate with comments"
test = 2
extra = ""
Σειριαστής 2 (π.χ., η βιβλιοθήκη JSON-iterator της Java) θα παράγει:
description = "Duplicate with comments"
extra = "/*"
extra2 = "*/"
test = 1
Εναλλακτικά, η απλή χρήση σχολίων μπορεί επίσης να είναι αποτελεσματική:
Η βιβλιοθήκη GSON της Java:
Η βιβλιοθήκη simdjson της Ruby:
Ο αριθμός
μπορεί να αποκωδικοποιηθεί σε πολλαπλές αναπαραστάσεις, συμπεριλαμβανομένων:
Ποιες μπορεί να δημιουργήσουν ασυνέπειες
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)