mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/ios-pentesting/ios-pentesting-without
This commit is contained in:
parent
ec6f10fe7f
commit
072222405c
@ -17,11 +17,11 @@
|
||||
1. Εγκαταστήστε την εφαρμογή που θέλετε να δοκιμάσετε στο iPhone
|
||||
2. Εγκαταστήστε και εκκινήστε το [Apple Configurator](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) μέσα στο macos σας
|
||||
3. Ανοίξτε το `Terminal` στο Mac σας και cd στο `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps`. Το IPA θα εμφανιστεί σε αυτόν τον φάκελο αργότερα.
|
||||
4. Θα πρέπει να δείτε τη συσκευή iOS σας. Κάντε διπλό κλικ σε αυτήν και στη συνέχεια κάντε κλικ στο Προσθήκη + → Εφαρμογές από την επάνω μπάρα μενού.
|
||||
5. Μετά την κλικ στο Προσθήκη, το Configurator θα κατεβάσει το IPA από την Apple και θα προσπαθήσει να το στείλει στη συσκευή σας. Αν ακολουθήσατε τη σύστασή μου νωρίτερα και έχετε ήδη εγκαταστήσει το IPA, θα εμφανιστεί ένα παράθυρο που θα σας ζητά να επανεγκαταστήσετε την εφαρμογή.
|
||||
4. Θα πρέπει να δείτε τη συσκευή iOS σας. Κάντε διπλό κλικ σε αυτήν και στη συνέχεια κάντε κλικ στο Προσθήκη + → Εφαρμογές από τη γραμμή μενού στην κορυφή.
|
||||
5. Μετά την κλικ στο Προσθήκη, το Configurator θα κατεβάσει το IPA από την Apple και θα προσπαθήσει να το σπρώξει στη συσκευή σας. Αν ακολουθήσατε τη σύστασή μου νωρίτερα και έχετε ήδη εγκαταστήσει το IPA, θα εμφανιστεί ένα παράθυρο που θα σας ζητά να επανεγκαταστήσετε την εφαρμογή.
|
||||
6. Το IPA θα πρέπει να έχει κατέβει μέσα στο `/Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps` από όπου μπορείτε να το πάρετε.
|
||||
|
||||
Δείτε [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) για περισσότερες λεπτομέρειες σχετικά με αυτή τη διαδικασία.
|
||||
Ελέγξτε [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed) για περισσότερες λεπτομέρειες σχετικά με αυτή τη διαδικασία.
|
||||
|
||||
### Αποκρυπτογράφηση της εφαρμογής
|
||||
|
||||
@ -90,11 +90,11 @@ objection -g "com.example.target" explore
|
||||
# Or plain Frida
|
||||
frida -U -f com.example.target -l my_script.js --no-pause
|
||||
```
|
||||
Οι πρόσφατες εκδόσεις Frida (>=16) χειρίζονται αυτόματα την πιστοποίηση δεικτών και άλλες μετρήσεις προστασίας του iOS 17, οπότε τα περισσότερα υπάρχοντα σενάρια λειτουργούν αμέσως.
|
||||
Recent Frida releases (>=16) automatically handle pointer authentication and other iOS 17 mitigations, so most existing scripts work out-of-the-box.
|
||||
|
||||
### Αυτοματοποιημένη δυναμική ανάλυση με MobSF (χωρίς jailbreak)
|
||||
### Automated dynamic analysis with MobSF (no jailbreak)
|
||||
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) μπορεί να εργάζεται σε μια υπογεγραμμένη IPA σε πραγματική συσκευή χρησιμοποιώντας την ίδια τεχνική (`get_task_allow`) και παρέχει μια διαδικτυακή διεπαφή με πρόγραμμα περιήγησης συστήματος αρχείων, καταγραφή κυκλοφορίας και κονσόλα Frida【】. Ο γρηγορότερος τρόπος είναι να τρέξετε το MobSF σε Docker και στη συνέχεια να συνδέσετε το iPhone σας μέσω USB:
|
||||
[MobSF](https://mobsf.github.io/Mobile-Security-Framework-MobSF/) μπορεί να εργάζεται με ένα dev-signed IPA σε μια πραγματική συσκευή χρησιμοποιώντας την ίδια τεχνική (`get_task_allow`) και παρέχει ένα web UI με εξερευνητή συστήματος αρχείων, καταγραφή κυκλοφορίας και κονσόλα Frida【†L2-L3】. Ο γρηγορότερος τρόπος είναι να τρέξετε το MobSF σε Docker και στη συνέχεια να συνδέσετε το iPhone σας μέσω USB:
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf:latest
|
||||
docker run -p 8000:8000 --privileged \
|
||||
@ -107,7 +107,7 @@ MobSF θα αναπτύξει αυτόματα το δυαδικό αρχείο,
|
||||
### iOS 17 & προειδοποιήσεις Λειτουργίας Κλειδώματος
|
||||
|
||||
* **Λειτουργία Κλειδώματος** (Ρυθμίσεις → Ιδιωτικότητα & Ασφάλεια) μπλοκάρει τον δυναμικό συνδέτη από το να φορτώνει μη υπογεγραμμένες ή εξωτερικά υπογεγραμμένες δυναμικές βιβλιοθήκες. Όταν δοκιμάζετε συσκευές που μπορεί να έχουν αυτή τη λειτουργία ενεργοποιημένη, βεβαιωθείτε ότι είναι **απενεργοποιημένη** ή οι συνεδρίες σας Frida/objection θα τερματιστούν αμέσως.
|
||||
* Η Αυθεντικοποίηση Δείκτη (PAC) επιβάλλεται σε όλο το σύστημα σε συσκευές A12+. Η Frida ≥16 διαχειρίζεται διαφανώς την αφαίρεση PAC — απλώς κρατήστε ενημερωμένα τόσο το *frida-server* όσο και την Python/CLI εργαλειοθήκη όταν κυκλοφορεί μια νέα κύρια έκδοση iOS.
|
||||
* Η Αυθεντικοποίηση Δείκτη (PAC) επιβάλλεται σε όλο το σύστημα σε συσκευές A12+. Η Frida ≥16 χειρίζεται διαφανώς την αφαίρεση PAC — απλώς κρατήστε ενημερωμένα τόσο το *frida-server* όσο και την Python/CLI εργαλειοθήκη όταν κυκλοφορεί μια νέα κύρια έκδοση iOS.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
|
||||
@ -2,6 +2,99 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Ελέγξτε την ανάρτηση [https://portswigger.net/research/http-2-downgrades](https://portswigger.net/research/http-2-downgrades)**
|
||||
HTTP/2 θεωρείται γενικά ανθεκτικό σε κλασικές τεχνικές request-smuggling επειδή το μήκος κάθε DATA frame είναι ρητό. **Αυτή η προστασία εξαφανίζεται μόλις ένας front-end proxy “κατεβάσει” το αίτημα σε HTTP/1.x πριν το προωθήσει σε έναν back-end**. Τη στιγμή που δύο διαφορετικοί αναλυτές (ο front-end HTTP/2 και ο back-end HTTP/1) προσπαθούν να συμφωνήσουν για το πού τελειώνει ένα αίτημα και πού αρχίζει το επόμενο, όλα τα παλιά tricks desync επιστρέφουν – συν μερικά νέα.
|
||||
|
||||
---
|
||||
## Γιατί συμβαίνουν οι υποβαθμίσεις
|
||||
|
||||
1. Οι περιηγητές ήδη μιλούν HTTP/2, αλλά πολλές κληρονομημένες υποδομές προέλευσης κατανοούν μόνο HTTP/1.1.
|
||||
2. Οι αντίστροφοι proxies (CDNs, WAFs, load-balancers) επομένως τερματίζουν TLS + HTTP/2 στην άκρη και **αναδιατυπώνουν κάθε αίτημα ως HTTP/1.1** για την προέλευση.
|
||||
3. Το βήμα μετάφρασης πρέπει να δημιουργήσει *και τα δύο* `Content-Length` **και/ή** `Transfer-Encoding: chunked` headers ώστε η προέλευση να μπορεί να προσδιορίσει το μήκος του σώματος.
|
||||
|
||||
Όποτε ο front-end εμπιστεύεται το μήκος του frame HTTP/2 **αλλά** ο back-end εμπιστεύεται CL ή TE, ένας επιτιθέμενος μπορεί να τους αναγκάσει να διαφωνήσουν.
|
||||
|
||||
---
|
||||
## Δύο κυρίαρχες κλάσεις πρωτογενών
|
||||
|
||||
| Variant | Front-end length | Back-end length | Typical payload |
|
||||
|---------|-----------------|-----------------|-----------------|
|
||||
| **H2.TE** | HTTP/2 frame | `Transfer-Encoding: chunked` | Ενσωματώστε ένα επιπλέον σώμα μηνύματος chunked του οποίου το τελικό `0\r\n\r\n` *δεν* αποστέλλεται, έτσι ώστε ο back-end να περιμένει το “επόμενο” αίτημα που παρέχεται από τον επιτιθέμενο. |
|
||||
| **H2.CL** | HTTP/2 frame | `Content-Length` | Στείλτε ένα *μικρότερο* CL από το πραγματικό σώμα, έτσι ώστε ο back-end να διαβάσει πέρα από τα όρια στο επόμενο αίτημα. |
|
||||
|
||||
> Αυτά είναι πανομοιότυπα με τα κλασικά TE.CL / CL.TE, απλά με το HTTP/2 να αντικαθιστά έναν από τους αναλυτές.
|
||||
|
||||
---
|
||||
## Αναγνώριση μιας αλυσίδας υποβάθμισης
|
||||
|
||||
1. Χρησιμοποιήστε **ALPN** σε μια χειραψία TLS (`openssl s_client -alpn h2 -connect host:443`) ή **curl**:
|
||||
```bash
|
||||
curl -v --http2 https://target
|
||||
```
|
||||
Αν εμφανιστεί `* Using HTTP2`, η άκρη μιλάει H2.
|
||||
2. Στείλτε ένα σκόπιμα κακοδιαμορφωμένο αίτημα CL/TE *πάνω από* HTTP/2 (το Burp Repeater έχει τώρα ένα αναπτυσσόμενο μενού για να αναγκάσει το HTTP/2). Αν η απάντηση είναι ένα σφάλμα HTTP/1.1 όπως `400 Bad chunk`, έχετε απόδειξη ότι η άκρη μετέτρεψε την κίνηση για έναν αναλυτή HTTP/1 downstream.
|
||||
|
||||
---
|
||||
## Ροή εκμετάλλευσης (παράδειγμα H2.TE)
|
||||
```http
|
||||
:method: POST
|
||||
:path: /login
|
||||
:scheme: https
|
||||
:authority: example.com
|
||||
content-length: 13 # ignored by the edge
|
||||
transfer-encoding: chunked
|
||||
|
||||
5;ext=1\r\nHELLO\r\n
|
||||
0\r\n\r\nGET /admin HTTP/1.1\r\nHost: internal\r\nX: X
|
||||
```
|
||||
1. Το **front-end** διαβάζει ακριβώς 13 bytes (`HELLO\r\n0\r\n\r\nGE`), νομίζει ότι το αίτημα έχει τελειώσει και προωθεί τόσα στον προορισμό.
|
||||
2. Το **back-end** εμπιστεύεται την κεφαλίδα TE, συνεχίζει να διαβάζει μέχρι να δει το *δεύτερο* `0\r\n\r\n`, καταναλώνοντας έτσι το πρόθεμα του δεύτερου αιτήματος του επιτιθέμενου (`GET /admin …`).
|
||||
3. Το υπόλοιπο (`GET /admin …`) αντιμετωπίζεται ως *νέο* αίτημα που έχει προγραμματιστεί πίσω από του θύματος.
|
||||
|
||||
Αντικαταστήστε το λαθραίο αίτημα με:
|
||||
* `POST /api/logout` για να αναγκάσετε την αποτυχία συνεδρίας
|
||||
* `GET /users/1234` για να κλέψετε έναν πόρο συγκεκριμένο για το θύμα
|
||||
|
||||
---
|
||||
## h2c smuggling (αναβαθμίσεις σε καθαρό κείμενο)
|
||||
|
||||
Μια μελέτη του 2023 έδειξε ότι αν ένα front-end περάσει την κεφαλίδα HTTP/1.1 `Upgrade: h2c` σε ένα back-end που υποστηρίζει καθαρό κείμενο HTTP/2, ένας επιτιθέμενος μπορεί να στείλει *ακατέργαστα* HTTP/2 frames μέσω μιας άκρης που επικυρώνει μόνο το HTTP/1.1. Αυτό παρακάμπτει την κανονικοποίηση κεφαλίδων, τους κανόνες WAF και ακόμη και την τερματισμό TLS.
|
||||
|
||||
Βασικές απαιτήσεις:
|
||||
* Η άκρη προωθεί **και τις δύο** `Connection: Upgrade` και `Upgrade: h2c` χωρίς αλλαγές.
|
||||
* Ο προορισμός αυξάνει σε HTTP/2 και διατηρεί τη σημασιολογία επαναχρησιμοποίησης σύνδεσης που επιτρέπει την προγραμματισμένη ουρά αιτημάτων.
|
||||
|
||||
Η μείωση είναι απλή – αφαιρέστε ή σκληροκωδικοποιήστε την κεφαλίδα `Upgrade` στην άκρη εκτός από τα WebSockets.
|
||||
|
||||
---
|
||||
## Σημαντικά πραγματικά CVEs (2022-2025)
|
||||
|
||||
* **CVE-2023-25690** – Οι κανόνες αναδιάρθρωσης mod_proxy του Apache HTTP Server θα μπορούσαν να αλυσοδεθούν για διαχωρισμό και λαθραία αιτήματα. (διορθώθηκε στην 2.4.56)
|
||||
* **CVE-2023-25950** – HAProxy 2.7/2.6 λαθραία αιτήματα/απαντήσεις όταν ο αναλυτής HTX χειριζόταν λανθασμένα τις αιτήσεις σε σωλήνα.
|
||||
* **CVE-2022-41721** – Ο Go `MaxBytesHandler` προκάλεσε την ανάλυση των υπολειπόμενων bytes σώματος ως **HTTP/2** frames, επιτρέποντας τη διασυνοριακή λαθραία μεταφορά.
|
||||
|
||||
---
|
||||
## Εργαλεία
|
||||
|
||||
* **Burp Request Smuggler** – από την έκδοση v1.26, δοκιμάζει αυτόματα την υποστήριξη H2.TE/H2.CL και κρυφών ALPN. Ενεργοποιήστε την “HTTP/2 probing” στις επιλογές της επέκτασης.
|
||||
* **h2cSmuggler** – Python PoC από τον Bishop Fox για την αυτοματοποίηση της επίθεσης αναβάθμισης σε καθαρό κείμενο:
|
||||
```bash
|
||||
python3 h2csmuggler.py -u https://target -x 'GET /admin HTTP/1.1\r\nHost: target\r\n\r\n'
|
||||
```
|
||||
* **curl**/`hyper` – δημιουργία χειροκίνητων payloads: `curl --http2-prior-knowledge -X POST --data-binary @payload.raw https://target`.
|
||||
|
||||
---
|
||||
## Αμυντικά μέτρα
|
||||
|
||||
1. **End-to-end HTTP/2** – εξαλείψτε τη μετάφραση υποβάθμισης εντελώς.
|
||||
2. **Μοναδική πηγή αλήθειας μήκους** – κατά την υποβάθμιση, *πάντα* δημιουργήστε μια έγκυρη `Content-Length` **και** **αφαιρέστε** οποιεσδήποτε κεφαλίδες `Content-Length`/`Transfer-Encoding` που παρέχονται από τον χρήστη.
|
||||
3. **Κανονικοποιήστε πριν από τη διαδρομή** – εφαρμόστε την απολύμανση κεφαλίδων *πριν* από τη λογική δρομολόγησης/αναδιάρθρωσης.
|
||||
4. **Απομόνωση σύνδεσης** – μην επαναχρησιμοποιείτε τις TCP συνδέσεις back-end μεταξύ χρηστών; “ένα αίτημα ανά σύνδεση” καταστρέφει τις εκμεταλλεύσεις που βασίζονται σε ουρές.
|
||||
5. **Αφαιρέστε το `Upgrade` εκτός αν είναι WebSocket** – αποτρέπει τη σήραγγα h2c.
|
||||
|
||||
---
|
||||
## Αναφορές
|
||||
|
||||
* PortSwigger Research – “HTTP/2: The Sequel is Always Worse” <https://portswigger.net/research/http2>
|
||||
* Bishop Fox – “h2c Smuggling: request smuggling via HTTP/2 clear-text” <https://bishopfox.com/blog/h2c-smuggling-request>
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user