Lillou Dalas, multi proxy bypass !

lilouQue 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.

morpheusVotre 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.

user-browser-burpsuite-internetAinsi pour commencer à jouer avec Burp Suite, vous n’avez pas grand chose à faire…

Lancer Burp Suite

Configurer un Proxy et le démarrer config-burp-proxy-basic-step2

Désactiver l’Interception

config-burp-proxy-basic-step1

Configurer le Web Browser

config-burp-proxy-basic-step3

Profit !burp-proxy-profite

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.

user-browser-burpsuite-proxy-internetConfiguration 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.

config-burp-proxy-through-proxy

 

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 ?

config-havij-through-proxy

user-browser-havijfree-proxy-internet

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 !

user-browser-havijfree-localproxy-proxy-internet

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 :

user-browser-stupidapp-proxy-internet

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

user-browser-stupidapp-proxy-internet-VPN

Mais ceci entre dans le cadre des chapitres suivant. Le prochain chapitre paraitra la semaine prochaine. ;-)