原理
简单来说就是你拿到你想钓鱼的蓝方的域名去利用他快速生成高相似度的钓鱼域名去注册可用的来伪装去骗其蓝方公司安全意识不强的员工来达到你的钓鱼目的。
其跟当初以太坊钓鱼攻击是一个性质
与目标域名只在u下面多了一个点而已,而且价格在60元左右,可以承担起一个对抗的成本
编写
其中工具原理原本在ditto里面,不过它探测域名是否已经购买,在国内可能不好用,反正我没有成功
故把这个功能提取出来
package main
import (
"fmt"
"golang.org/x/net/idna"
"os"
)
var (
dictionary = map[rune][]string{
'a': {"á", "à", "â", "ǎ", "ă", "ã", "ả", "ȧ", "ạ", "ä", "å", "ḁ", "ā", "ą", "ᶏ", "ⱥ", "ȁ", "ấ", "ầ", "ẫ", "ẩ", "ậ", "ắ", "ằ", "ẵ", "ẳ", "ặ", "ǻ", "ǡ", "ǟ", "ȁ", "ȃ", "ɑ"},
'b': {"ḃ", "ḅ", "ḇ", "ƀ", "ɓ", "ƃ", "ᵬ", "ᶀ", "ʙ", "B", "b"},
'c': {"Ć", "ć", "Ĉ", "ĉ", "Č", "č", "Ċ", "ċ", "c̄", "Ç", "ç", "Ḉ", "ḉ", "Ȼ", "ȼ", "Ƈ", "ƈ", "ɕ", "ᴄ", "C", "c"},
'd': {"ď", "ḋ", "ḑ", "ḍ", "ḓ", "ḏ", "đ", "Ð", "ð", "̦d̦", "ɖ", "ɗ", "ᵭ", "ᶁ", "ᶑ", "ȡ", "ᴅ", "d"},
'e': {"é", "è", "ê", "ḙ", "ě", "ĕ", "ẽ", "ḛ", "ẻ", "ė", "ë", "ē", "ȩ", "ę", "ᶒ", "ȅ", "ế", "ề", "ễ", "ể", "ḝ", "ḗ", "ḕ", "ȇ", "ẹ", "ệ", "ⱸ", "ᴇ", "e"},
'f': {"Ḟ", "ḟ", "Ƒ", "ƒ", "ᵮ", "ᶂ", "ꜰ", "F", "f"},
'g': {"ǵ", "ğ", "ĝ", "ǧ", "ġ", "ģ", "ḡ", "ǥ", "ᶃ", "g"},
'h': {"ĥ", "ȟ", "ḧ", "ḣ", "ḩ", "ḥ", "ḫ", "̱ẖ", "ħ", "ⱨ", "ɦ", "h"},
'i': {"Í", "í", "Ì", "ì", "Ĭ", "ĭ", "Î", "î", "Ǐ", "ǐ", "Ï", "ï", "Ḯ", "ḯ", "Ĩ", "ĩ", "Į", "į", "Ī", "ī", "Ỉ", "ỉ", "Ȉ", "ȉ", "Ȋ", "ȋ", "Ị", "ị", "Ḭ", "ḭ", "Ɨ", "ɨ", "ᵻ", "ᶖ", "İ", "ı", "ɪ", "I", "i"},
'j': {"Ĵ", "ĵ", "ɉ", "̌ǰ", "ȷ", "ʝ", "ɟ", "ʄ", "ᴊ", "J", "j", "I"},
'k': {"Ḱ", "ḱ", "Ǩ", "ǩ", "Ķ", "ķ", "Ḳ", "ḳ", "Ḵ", "ḵ", "Ƙ", "ƙ", "Ⱪ", "ⱪ", "ᶄ", "ᶄ", "Ꝁ", "ꝁ", "ᴋ", "K", "k"},
'l': {"Ĺ", "ĺ", "Ľ", "ľ", "Ļ", "ļ", "Ḷ", "ḷ", "Ḹ", "ḹ", "Ḽ", "ḽ", "Ḻ", "ḻ", "Ł", "ł", "Ŀ", "ŀ", "Ƚ", "ƚ", "Ⱡ", "ⱡ", "Ɫ", "ɫ", "ɬ", "ᶅ", "ɭ", "ȴ", "ʟ", "L", "l"},
'm': {"Ḿ", "ḿ", "ṁ", "Ṃ", "ṃ", "ᵯ", "ᶆ", "Ɱ", "ɱ", "ᴍ", "M", "m"},
'n': {"Ń", "ń", "Ǹ", "ǹ", "Ň", "ň", "Ñ", "ñ", "Ṅ", "ṅ", "Ņ", "ņ", "Ṇ", "ṇ", "Ṋ", "ṋ", "Ṉ", "ṉ", "̈n̈", "Ɲ", "ɲ", "Ƞ", "ƞ", "ᵰ", "ᶇ", "ɳ", "ȵ", "ɴ", "N", "n", "Ŋ", "ŋ"},
'o': {"Ó", "ó", "Ò", "ò", "Ŏ", "ŏ", "Ô", "ô", "Ố", "ố", "Ồ", "ồ", "Ỗ", "ỗ", "Ổ", "ổ", "Ǒ", "ǒ", "Ö", "ö", "Ȫ", "ȫ", "Ő", "ő", "Õ", "õ", "Ṍ", "ṍ", "Ṏ", "ṏ", "Ȭ", "ȭ", "Ȯ", "ȯ", "Ȱ", "ȱ", "Ø", "ø", "Ǿ", "ǿ", "Ǫ", "ǫ", "Ǭ", "ǭ", "Ō", "ō", "Ṓ", "ṓ", "Ṑ", "ṑ", "Ỏ", "ỏ", "Ȍ", "ȍ", "Ȏ", "ȏ", "Ơ", "ơ", "Ớ", "ớ", "Ờ", "ờ", "Ỡ", "ỡ", "Ở", "ở", "Ợ", "ợ", "Ọ", "ọ", "Ộ", "ộ", "Ɵ", "ɵ", "ⱺ", "ᴏ", "O", "o"},
'p': {"Ṕ", "ṕ", "Ṗ", "ṗ", "Ᵽ", "ᵽ", "Ƥ", "ƥ", "̃p", "̃ᵱ", "ᶈ", "ᴘ", "P", "p", "ȹ"},
'q': {"Ɋ", "ɋ", "ʠ", "Q", "q", "ȹ"},
'r': {"Ŕ", "ŕ", "Ř", "ř", "Ṙ", "ṙ", "Ŗ", "ŗ", "Ȑ", "ȑ", "Ȓ", "ȓ", "Ṛ", "ṛ", "Ṝ", "ṝ", "Ṟ", "ṟ", "Ɍ", "ɍ", "Ɽ", "ɽ", "ᵲ", "ᶉ", "ɼ", "ɾ", "ᵳ", "ʀ", "R", "r"},
's': {"ẞ", "ß", "Ś", "ś", "Ṥ", "ṥ", "Ŝ", "ŝ", "Š", "š", "Ṧ", "ṧ", "Ṡ", "ṡ", "ẛ", "Ş", "ş", "Ṣ", "ṣ", "Ṩ", "ṩ", "Ș", "ș", "̩s̩", "ᵴ", "ᶊ", "ʂ", "ȿ", "ꜱ", "S", "s"},
't': {"Ť", "ť", "Ṫ", "ṫ", "Ţ", "ţ", "Ṭ", "ṭ", "Ț", "ț", "Ṱ", "ṱ", "Ṯ", "ṯ", "Ŧ", "ŧ", "Ⱦ", "ⱦ", "Ƭ", "ƭ", "Ʈ", "ʈ", "̈ẗ", "ᵵ", "ƫ", "ȶ", "t"},
'u': {"Ú", "ú", "Ù", "ù", "Ŭ", "ŭ", "Û", "û", "Ǔ", "ǔ", "Ů", "ů", "Ü", "ü", "Ǘ", "ǘ", "Ǜ", "ǜ", "Ǚ", "ǚ", "Ǖ", "ǖ", "Ű", "ű", "Ũ", "ũ", "Ṹ", "ṹ", "Ų", "ų", "Ū", "ū", "Ṻ", "ṻ", "Ủ", "ủ", "Ȕ", "ȕ", "Ȗ", "ȗ", "Ư", "ư", "Ứ", "ứ", "Ừ", "ừ", "Ữ", "ữ", "Ử", "ử", "Ự", "ự", "Ụ", "ụ", "Ṳ", "ṳ", "Ṷ", "ṷ", "Ṵ", "ṵ", "Ʉ", "ʉ", "ᵾ", "ᶙ", "ᴜ", "U", "u", "ᵫ"},
'v': {"Ṽ", "ṽ", "Ṿ", "ṿ", "Ʋ", "ʋ", "ᶌ", "ᶌ", "ⱱ", "ⱴ", "ᴠ", "V", "v"},
'w': {"Ẃ", "ẃ", "Ẁ", "ẁ", "Ŵ", "ŵ", "Ẅ", "ẅ", "Ẇ", "ẇ", "Ẉ", "ẉ", "ẘ", "ẘ", "Ⱳ", "ⱳ", "ᴡ", "W", "w"},
'x': {"Ẍ", "ẍ", "Ẋ", "ẋ", "ᶍ", "X", "x"},
'y': {"Ý", "ý", "Ỳ", "ỳ", "Ŷ", "ŷ", "ẙ", "Ÿ", "ÿ", "Ỹ", "ỹ", "Ẏ", "ẏ", "Ȳ", "ȳ", "Ỷ", "ỷ", "Ỵ", "ỵ", "Ɏ", "ɏ", "Ƴ", "ƴ", "ʏ", "Y", "y"},
'z': {"Ź", "ź", "Ẑ", "ẑ", "Ž", "ž", "Ż", "ż", "Ẓ", "ẓ", "Ẕ", "ẕ", "Ƶ", "ƶ", "Ȥ", "ȥ", "Ⱬ", "ⱬ", "ᵶ", "ᶎ", "ʐ",
"ʑ", "ɀ", "ᴢ", "Z", "z"},
}
limit =0
)
func genEntriesForString(s string) []string {
permutations := []string{}
for i, c := range s {
if substitutes, found := dictionary[c]; found {
for _, sub := range substitutes {
permutations = append(permutations, s[:i]+sub+s[i+1:])
if limit > 0 && len(permutations) == limit {
return permutations
}
}
}
}
return permutations
}
func main() {
fmt.Println("用法:")
fmt.Println("main.exe alibaba{string}")
fmt.Println("main.exe 域名")
aString := os.Args[1]
if aString != "" {
for _, perm := range genEntriesForString(aString) {
ascii, err := idna.ToASCII(perm)
if err != nil {
ascii = err.Error()
}
fmt.Printf("%s (%s)\n", perm, ascii)
}
return
}else {
fmt.Println("请按照指定格式")
}
}