{UniCode} – L’art de déguiser un nom de domaine

 

Coucou tout le monde,

 

J'espère que vous passez tous un bon weekend !
Mais surtout que cet article le rendra encore meilleur ;)

J'avais prévu de vous parler de mon Wemos mini, mais je me suis dit que ça attendrait lorsque ... par un malencontreux hasard je lui ai envoyé du 12 volts  en voulant alimenter 2 moteurs branchés sur le même circuit ...
Mon Wemos s'est mis à faire pssssshhiiiiit avec un petit nuage de fumée ...

Côté vie professionnelle, j'ai récemment eu l'occasion de rencontrer la startup Nantaise Ideolys qui fait des choses vraiment sympa et qui recrute donc si vous aimez le Javascript (et avec tous les morceaux de code que je vous partage, j'espère que vous commencez à aimer ça), ils ont plusieurs postes à pourvoir.
Il ne s'agit pas d'un sponsor de cet article, mais plutôt d'un petit coup de pub gratuit pour une boite qui m'a paru plutôt sympa !

Cela étant dit, entrons dans le sujet ...

 

Autorisation des caractères Unicode

Pour ceux qui sont un peu curieux, j'imagine que vous savez que depuis maintenant un certain temps, l'utilisation de nom de domaine avec des caractères accentués et / ou des smileys  est permis.
Il s'agit là de caractère unicode.

Cela ouvre la voie à une plus grande richesse de noms de domaine, mais aussi à un certain nombre de problèmes en matière de sécurité ...
Il faut dire que la liste des caractères unicode est assez grande, et il y a de nombreux caractères qui se ressemblent !

Ainsi il devient possible de déposer des noms de domaines comme :

  • ɾеԀհаէ
  • ƒаϲеЬооκ
  • էԝіէէеɾ
  • аɱаʑоո
  • ...

Puis de l'associer à un site factice avec du https !
Ce qui mettra en danger les bonnes pratiques que nous avons enseignées à nos aînés ...

Vérifie bien ma petite mamie que le site est en https, et surtout regarde bien l'adresse du site qui est écrite ... pour t'assurer qu'il ne s'agit pas d'un site de phishing ...

 

Protection mise en place par nos navigateurs

Rassurez-vous, votre navigateur favoris a très certainement adopté l'utilisation d'une contre-mesure appelée "Punycode" !
Il s'agit d'une syntaxe alternative permettant de transformer un texte avec des caractères Unicode en un texte unique et réversible sans caractère Unicode.

Ainsi, si vous vous rendez sur le domaine : http://էԝіէէеɾ.com

Vous devriez voir le nom de domaine se transformer en : http://xn--uoa19f2cz9atkca.com

 

 

Dyrk dans tout ça ?

Comme Bayer et Monsanto, j'aime moi aussi jouer le docteur et le savant fous !
J'ai donc créé un petit outil qui permet de générer des imitations de nom de domaine à base de caractère Unicode !

 

 

 

Le Script

Voici donc les quelques lignes de codes qui vous permettront de constater toutes les imitations possibles d'un nom de domaine ...

Pour l'utiliser, il vous suffit d'aller sur le nom de domaine en question :

  1. Ouvrir la "console développeur" à l'aide de la touche F12 de votre clavier
  2. Cliquer sur l'onglet "console" de la "console développeur"
  3. Copiez-coller le morceau de code ci-dessous
  4. Validez par la touche entrée

Une fois que le code sera exécute dans la console, vous devriez voir apparaître sur votre écran une petite zone, où seront encadrées chaque lettre du nom de domaine (en dehors de son extension)
Vous pourrez donc cliquer sur chacune de ces lettres pour voir toutes les possibilités.
Chaque changement copiera ensuite la totalité du nom de domaine généré dans un champ texte.

/*
**
**	Unicode Spoofing HostName
**	(c) Dyrk.org 2019-2020
**
*/

var mainEditDomainDiv = document.createElement('div'), customStyle = document.createElement('style'),center = document.createElement('center'),
	h = document.getElementsByTagName('html')[0], table=document.createElement('table'), tr=document.createElement('tr'), 
	resultInput = document.createElement('input'), td, selectLetter, optionLetter, tmpLetter, unicodeAlphabet = {
		",":["˒","ˏ","͵"																										 ],
		".":["˔","˕","˖","ˑ"																										 ],
		"-":["ˉ","֊"																												 ],
		"_":["˗"																													 ],
		"a":["а","à","á","â","ã","ä","å","æ","ā","Ă","ă","Ą","ą","ǎ","ǟ","ǡ","ǣ","ǻ","ǽ","ȁ","ȃ","ɐ","ɑ","ɒ","ȧ","ӑ","ӓ"			 ],
		"b":["Ь","ƀ","ƃ","Ƅ","ƅ","Ъ","Ҍ"                                                                                             ],
		"c":["ϲ","Ϛ","ϛ","ç","ƈ","ć","ĉ","ċ","č","ȼ","ς","с","ҫ"                                                                     ],
		"d":["Ԁ","ď","đ","ɖ","ɗ","Ժ","ժ"                                                                                             ],
		"e":["е","ē","ĕ","ė","ę","ě","è","é","ê","ë","ȅ","ȇ","ȩ","ɇ","ѐ","ё","ҽ","ҿ","ӗ"                                             ],
		"f":["ƒ","ƭ"                                                                                                                 ],
		"g":["ɡ","ĝ","ğ","ġ","ģ","ǥ","ǧ","ǵ","ɠ","ց"                                                                                 ],
		"h":["հ","ԧ","ĥ","ħ","ȟ","ɦ","ɧ","ћ","Һ","һ","ի"                                                                             ],
		"i":["і","ì","í","î","ï","ī","ĭ","į","ı","¡","ǐ","ȉ","ȋ","ɨ","ɩ","˦","ί","ι","ϊ","ї","ւ"                                      ],
		"j":["ϳ","ij","ĵ","ǰ","ɉ","ʝ","ј","յ"                                                                                         ],
		"k":["қ","ķ","ĸ","ǩ","ƙ","Ʀ","ɮ","ʫ","κ","к","ќ","ҝ","ҟ","ҡ","ӄ"                                                             ],
		"l":["ӏ","ĺ","ľ","ŀ","ł","ſ","ƪ","ǀ","ȴ","ɿ","ɫ","ɬ","ɭ","˥","լ"                                                             ],
		"m":["ɱ","ш","щ"                                                                                                             ],
		"n":["ո","ղ","ñ","ŋ","ǹ","ń","ņ","ň","ʼn","ƞ","ɲ","ɳ","ȵ","ή","η","π","п","դ","ը","ռ","ր"                                     ],
		"o":["о","ō","ŏ","ő","Œ","œ","ơ","ò","ó","ô","õ","ö","ø","ǒ","ǿ","ȍ","ȏ","ȫ","ȭ","ȯ","ȱ","ο","ό","ӧ","ծ"                     ],
		"p":["Ƥ","ƥ","ƿ","ρ","ϸ","ϼ","р","ҏ","թ"                                                                                     ],
		"q":["ԛ","ƍ","ƣ","ǫ","ǭ","ȡ","ʠ","ϙ","ɋ","գ","զ"                                                                             ],
		"r":["ɾ","ŕ","ŗ","ř","ȑ","ȓ","ɍ","ɤ","л","ґ","ӷ","ԯ"                                                                         ],
		"s":["ѕ","ś","ŝ","ş","š","ƨ","ș","ȿ","ϧ"                                                                                     ],
		"t":["է" ,"ţ","ť","ŧ","ƫ","ț"                                                                                                ],
		"u":["υ","ư","ũ","ū","ŭ","ů","ű","ų","ù","ú","û","ü","µ","ǔ","ǖ","ǘ","ǚ","ǜ","ȕ","ȗ","ύ","ʉ","ʊ","ʋ","ΰ","μ","ϋ","ц","џ","ս" ],
		"v":["ν","ѵ","ѷ"                                                                                                             ],
		"w":["ԝ","ŵ","ω","ώ"                                                                                                         ],
		"x":["ԟ","ϗ","ϰ","х","ҳ","ӽ","ӿ","ճ"                                                                                         ],
		"y":["у","ŷ","ÿ","ý","ȳ","ɏ","ɣ","ʏ","ў","ү","ұ","ӯ","ӱ","ӳ"                                                                 ],
		"z":["ȥ","ź","ż","ž","ƶ","ɀ","ʐ","ʑ"                                                                                         ]
	};
mainEditDomainDiv.setAttribute('style'	,'border: 1px solid black;z-index:10000;position:fixed;top:15%;left:25%;width:50%;background:#fff;border-radius:10px;min-height:60px;');
center.setAttribute('style'				,'margin-top: 10px;margin-bottom: 10px;');
customStyle.textContent = "select{ border:1px solid black;margin-left:2px;width:50px;-webkit-appearance: none;-moz-appearance:none;text-indent:1px;text-overflow:'';}";
h.appendChild(mainEditDomainDiv);
h.appendChild(customStyle);
mainEditDomainDiv.appendChild(center);
center.appendChild(table);
center.appendChild(resultInput);
table.appendChild(tr);
try {
	domainLetters = /([a-z]*?)\.[a-z]*$/.exec(document.location.host.toString())[1].split('');
} catch(e){
	domainLetters = prompt("Entrez un nom de domaine");
}
for (var letter in domainLetters){
	var func = (function(e){
		var opts  = table.getElementsByTagName('select');
		resultInput.value = "";
		for (var i in opts){
			if (opts[i].value) resultInput.value += opts[i].value;
		}
	}).bind(null,table);
	td 			 = document.createElement('td');
	selectLetter = document.createElement('select');
	tr.appendChild(td);
	selectLetter.addEventListener('change', func);
	td.appendChild(selectLetter);
	for (var suggest in unicodeAlphabet[domainLetters[letter]]){
		optionLetter = document.createElement('option');
		tmpLetter    = unicodeAlphabet[domainLetters[letter]][suggest];
		optionLetter.textContent = tmpLetter;
		optionLetter.value 		 = tmpLetter;
		selectLetter.appendChild(optionLetter);
	}
}
func();

 

La démonstration vidéo

 

 

Conclusion

Profitez de la vie et ne devenez pas parano... du moins essayez de l'être un peu ... mais pas trop quand même ! Juste ce qu'il faut ...

En attendant, j'espère vous avoir offert un outil qui vous permettra de mieux découvrir toutes les possibilités qu'offrent les caractères Unicode ...

Tous les vendeurs de nom de domaine ne permettent pas de déposer ce genre de nom de domaine, mais certains le font, donc il est parfaitement possible pour n'importe qui d'usurper de cette façon là votre nom de domaine !

Il est également possible avec des caractères Unicode, de bypasser certains mécanismes qui filtre des mots vulgaires.

 

 

 

Partagez ce contenu

2 comments

  • Perso, j’utilisais cette technique dans un autre cadre.
    En gros, j’étais victime de duplication de contenus. J’ai fini par remplacer le contenu de mes article par ces caractères.
    Du coup, le mec qui lit ne voit pas la différence, celui qui repompe: copie de la m… et google je lui envoie la vraie version.

    Et au  final; j’ai récupéré mon trafic :)

Laisser une réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *