Lillou Dalas, multi proxy bypass !
|Que vous soyez employé par une grande entreprise ou une PME, que vous soyez étudiant ou que vous surfiez depuis un lieu public, vos connexions à internet sont régies par un ensemble de règles vous permettant ou vous interdisant de faire certaines choses…Pour paraphraser un grand philosophe :
Ces lois ne sont pas différentes de celles de n’importe quel autre système, il y en a qu’on peut enfreindre et d’autres qu’on peut violer.
Votre machine est donc connectée à un réseau local, petit royaume à la frontière de l’internet, frontière gardée par différents dispositifs tels que les firewalls et Proxy Web.
Les Firewalls (et ACL) permettent de filtrer sur couches basses (OSI 1 2 3 4), et les proxy permettent de filtrer le trafic en fonction de certains critères de plus haut niveau comme les URL mais surtout de n’avoir qu’un seul flux Web en direction du routeur internet (ce qui est plus facile à gérer).
Bien entendu, je schématise, et l’univers de la sécurité est en réalité un peu plus complexe, il existe de nombreux dispositifs permettant de limiter le champ d’action des utilisateurs d’un réseau, de l’authentification AAA, en passant les IDS/IPS, jusqu’aux WAF qui permettent d’inspecter l’intérieur de vos paquets…
Pas de proxy, c’est easy !
Mais laissons ça de côté pour le moment car dans bien des cas, cet article sera largement suffisant pour faire tout ce dont vous avez besoin lors d’un pentest.
Pour la suite de cet article, nous supposerons que nous avons besoin d’accéder à internet depuis différentes applications qui ne sont pas forcément des Web Browsers… Et pour vous faire une petite idée sur la façon que j’ai choisi pour présenter les choses voici la configuration dans laquelle vous vous trouvez chez vous derrière votre box avec vos chaussons lapin aux pieds en train de jouer avec Burp Suite, la boîte à outils du web hacking.
Ainsi pour commencer à jouer avec Burp Suite, vous n’avez pas grand chose à faire…
Lancer Burp Suite
Configurer un Proxy et le démarrer
Désactiver l’Interception
Configurer le Web Browser
Profit !
Traverser un Proxy
Comme je vous le disais, lorsque vous surfez depuis autre part que chez vous, il est probable que vous vous trouviez derrière l’un de ces fameux proxy web. Un proxy Web peut nécessiter une authentification avant d’accepter de transmettre vos requêtes HTTP. Il existe de nombreux protocoles d’authentification : HTTP Basic, HTTP Digest, NT LM, NTLMv2…
L’application maline qui gère toutes les sortes de proxy
Si votre application est plutôt maline, elle est capable de se connecter à travers un proxy même s’il nécessite de s’authentifier. C’est par exemple le cas de Burp Suite. Pour se retrouver dans la situation schématisée ci-dessous vous n’avez que peu de chose à faire.
Configuration de Burp Suite derrière un Proxy
Pour utiliser Burp Suite derrière un Proxy, suivez la configuration proposée un peu plus haut puis configurez votre Proxy dans l’onglet Options > Connections en cliquant sur le bouton Add de la partie Upstream Proxy Servers.
En fonction de l’authentification requise par le proxy derrière lequel vous vous trouvez, il vous faudra renseigner plus ou moins de champs (se référer aux indicateurs colorés)…
Si vous ignorez comment récupérez vos identifiants NT LM ou NTLMv2, je vous conseille de lire mon précédent article intitulé CNTLM, Havij et proxy d’entreprise et plus précisément le chapitre Déterminer l’authentification.
L’application moins maline qui ne gère pas les proxy avec authentification
Et si comme Havij Free Version, le tool permettant d’automatiser la recherche de failles SQL, votre application ne gère pas les proxy avec authentification ?
Bah c’est dommage, il ne vous reste plus qu’à trouver quelque chose d’autre à faire… Non je plaisante, il existe de nombreuses solutions pour vous permettre de franchir cette barrière (qui tient plus du parapet que de la grande muraille de chine).
La parade
La solution la plus simple est certainement l’installation d’un proxy sur votre machine (proxy local) capable de gérer l’authentification vers le proxy derrière lequel les utilisateurs du réseau se trouvent. Ainsi, il vous suffira de vous connecter vers votre propre proxy pour que tout roule !
Il existe de nombreux proxy très simples à installer capable de faire le boulot sous Windows comme sous Unix.
Gérer une authentification HTTP Basic
Par exemple Polipo gère l’authentification HTTP basic auprès de ses parents. Polipo s’installe et se configure de la sorte sur Linux :
root@Kali:~# apt-get install polipo root@Kali:~# vim /etc/polipo/config # Adresse/Port de Polipo proxyAddress = "127.0.0.1" proxyPort = 3127 # Adresse/Port du serveur Proxy qui vous bloque parentProxy = "192.168.1.51:3128" parentAuthCredentials = user:password # On autorise uniquement la machine locale à utiliser Polipo allowedClients = 127.0.0.1 # Le caching, on s'en cogne diskCacheRoot = "" # IPv6 en local, c'est pareil dnsQueryIPv6 = no root@Kali:~# /etc/init.d/polipo start
Sur la capture d’écran précédente, proxy host aura 127.0.0.1 comme valeur , et proxy port sera configuré à 3127.
Gérer une authentification NT LM / NTLMv2
Pour utiliser un proxy nécessitant une authentification liée au domaine Windows, préférez le proxy CNTLM et lisez le dossier rédigé précédement sur 0x0ff.info : CNTLM, Havij et proxy d’entreprise. On y trouve notamment la configuration de CNTLM sous Windows…
Sur linux ça donnerait plutôt ça :
root@Kali:~# apt-get install cntlm root@Kali:~# mv /etc/cntlm.conf /etc/cntlm.conf.ori root@Kali:~# vim /etc/cntlm.conf #variables à modifier selon l’utilisateur et le domaine -> cntlm -M www.0x0ff.info… Username 0x0ff Domain AD # NTLM PassLM ACA745D52F2704DD552C4BCA4AEBFB11 PassNT 4BA35232DE79D3170D5F3C060679472E # NTLMv2 PassNTLMv2 2ECBF7B597B464FF74B175388731A515 # Choose Auth Auth NTLMv2 # Parent proxy address Proxy 192.168.1.51:3128 # No Proxy for local NoProxy localhost, 127.0.0.*, 10.*, 192.168.* # cntlm listening port Listen 3126 # Bullshit Header User-Agent: Mozilla/5.0 (compatible; MSIE 5.5; Windows 98) root@Kali:~# /etc/init.d/cntlm start
Sur la capture d’écran précédente, proxy host aura 127.0.0.1 comme valeur , et proxy port sera configuré à 3126.
Authentification HTTP Digest
Je crois que ni CNTLM, ni polipo, ni privoxy ne gère ce type d’authentification… Squid doit très certainement le faire, en plus les tutos ne manquent pas sur la toile. La ligne de configuration qui vous intéresse c’est :
cache_peer 192.168.1.51 parent 3128 0 default no-query login=gougleu:mylojin
L’application con comme une bite qui ne gère pas du tout les proxy
Bon, c’est jamais facile de faire fasse à des cons. Rassurez-vous, même si c’est légèrement plus compliqué, il existe un moyen.
Si l’on récapitule la situation, pour le moment votre application au capacités limitées suit le schéma ci-dessous :
Une parade nommée VPN
L’une des solutions est de monter un tunnel VPN à travers le proxy sur un port autorisant la méthode CONNECT, typiquement le port HTTPS 443…
Mais ceci entre dans le cadre des chapitres suivant. Le prochain chapitre paraitra la semaine prochaine. ;-)