@@ -568,7 +568,8 @@ func outputToFile(targets []string) {
568
568
{"omission" , sanitizedDomain , omissionAttack },
569
569
{"hyphenation" , sanitizedDomain , hyphenationAttack },
570
570
{"bitsquatting" , sanitizedDomain , bitsquattingAttack },
571
- {"homograph" , sanitizedDomain , homographAttack }} {
571
+ {"homograph" , sanitizedDomain , homographAttack },
572
+ {"doppelganger" , sanitizedDomain , doppelgangerAttack }} {
572
573
for _ , r := range t .Function (t .TargetDomain ) {
573
574
results = append (results , []string {r + "." + tld , t .Technique })
574
575
}
@@ -636,6 +637,7 @@ func runPermutations(targets []string) {
636
637
printReport ("replacement" , replacementAttack (sanitizedDomain ), tld )
637
638
printReport ("bitsquatting" , bitsquattingAttack (sanitizedDomain ), tld )
638
639
printReport ("transposition" , transpositionAttack (sanitizedDomain ), tld )
640
+ printReport ("doppelganger" , doppelgangerAttack (sanitizedDomain ), tld )
639
641
}
640
642
}
641
643
}
@@ -769,6 +771,18 @@ func hyphenationAttack(domain string) []string {
769
771
return results
770
772
}
771
773
774
+ // performs a doppelganger attack by removing hypens in subdomain
775
+ func doppelgangerAttack (domain string ) []string {
776
+ results := []string {}
777
+
778
+ for i := len (domain )- 1 ; i > 0 ; i -- {
779
+ if (rune (domain [i ]) == '.' || rune (domain [i ]) == '-' ) {
780
+ results = append (results , fmt .Sprintf ("%s%s" , domain [:i ], domain [i + 1 :]))
781
+ }
782
+ }
783
+ return results
784
+ }
785
+
772
786
// performs a bitsquat permutation attack
773
787
func bitsquattingAttack (domain string ) []string {
774
788
0 commit comments