L’analyse des requêtes et des réponses est essentielle lors d’un test d’intrusion visant une application Web. La capacité d’interception, de consultation et de modification de ces éléments est un prérequis indispensable dans l’évaluation de la sécurité d’une telle application par un auditeur, dans la mesure où ce dernier doit pouvoir librement injecter ou modifier des entrées utilisateurs et autres entêtes du protocole HTTP.L’outil Burp Suite [1], développé par la société PortSwigger, répond parfaitement à ces besoins dans la plupart des situations. Il montre néanmoins ses limites dans certains cas où la structure des messages échangés et du protocole applicatif utilisé n'est pas standard, par exemple dans un cas où pour chaque requête, un entête HTTP personnalisé ou un paramètre spécifique (token CSRF, hash, etc.) doit être ajouté pour que la requête soit acceptée. Face à ces situations, l’auditeur va généralement tenter de contourner ces limitations en développant tant bien que mal un script qui sera plus ou moins fonctionnel, qui ne sera généralement pas réutilisable par d’autres et surtout, qui ne sera pas intégré à « l’outil-qui-va-bien » utilisé en temps normal… Afin de répondre à cette problématique, un mécanisme « d’extension » a été introduit au sein de Burp pour étendre ses fonctionnalités de manière programmatique via une API. À travers cet article, nous vous proposons une introduction pragmatique au développement d’extensions Burp en nous appuyant sur deux cas d’usages détaillés, afin de pouvoir rapidement intégrer les éventuelles spécificités protocolaires que vous pourriez rencontrer dans un test d’intrusion.
1. Des fonctionnalités manquantes
Comme évoqué, l’auditeur fait le plus souvent face à un serveur et un client discutant à l’aide du protocole HTTP. Il est alors intéressant de pouvoir modifier et rejouer ces requêtes échangées. L’outil Burp possède déjà pléthore de fonctionnalités via les modules Intercept, Repeater, Intruder, etc. En revanche, deux cas d’usage se présentent à un utilisateur où l’outil présente des limitations :
- Des fonctionnalités génériques peuvent manquer à l’appel : c’est notamment le cas pour l’absence de support des fichiers de configuration automatique de proxy sortants « proxy.PAC », ou encore la visualisation des ressources au format JSON avec une indentation agréable à l’œil ;
- Des spécificités protocolaires rendent impossible la modification des requêtes et réponses : par exemple dans le cas où un client lourd et un serveur échangent des objets sérialisés. Il est alors nécessaire de...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première
[1] http://portswigger.net/burp/
[2] http://www.burpextensions.com/Extensions/
[3] https://github.com/Meatballs1/burp-extensions
[4] http://blog.portswigger.net/2014/03/introducing-bapp-store.html
[5] http://portswigger.net/burp/extender/api/
[7] http://blog.portswigger.net/2012_12_01_archive.html
[8] https://github.com/vincd/burpxsrfextension
[9] http://portswigger.net/burp/help/extender.html
[10] https://blog.netspi.com/debugging-burp-extensions/
[11] http://xstream.codehaus.org/
[12] https://github.com/vincd/burpjavadeserializerextension
[13] https://github.com/vincd/burpproxypacextension
[14] http://blog.stalkr.net/2015/04/creating-burp-extensions-in-python.html
[15] https://www.fishnetsecurity.com/6labs/blog/automatically-adding-new-header-burp
[17] http://www.smeegesec.com/2013/04/wsdl-wizard-burp-suite-plugin-for.html
[18] http://raesene.github.io/blog/2015/01/15/burp-passive-scanner-plugins-with-jruby/
[19] https://www.tarlogic.com/blog/extension-randomheader-para-burp-suite/