SpoofThatMail
Bash script to check if a domain or list of domains can be spoofed based in DMARC records
File with domains:
sh SpoofThatMail.sh -f domains.txt
One single domain:
sh SpoofThatMail.sh -d domain
Category: Linux / Shell Script Development |
Watchers: 2 |
Star: 7 |
Fork: 2 |
Last update: Jan 9, 2022 |
FIX: "v=DMARC1; sp=reject; p=none" will incorrectly result in "NOT vulnerable"
Check the correct number of parameters have been passed, if not, a help message will be displayed. The same will happen if unrecognised parameters are passed.
Make use of bash functions to reduce code duplication and better structure the script
null
Use regular expression to allow whitespace around the "=" symbol to follow RFC7489 ABNF.
dmarc-request = "p" *WSP "=" *WSP ( "none" / "quarantine" / "reject" )
Reverts v4d1/SpoofThatMail#2
Reverts v4d1/SpoofThatMail#3
Implemented a fix for the issue #6!
$ ./SpoofThatMail.sh
███████╗██████╗ ██████╗ ██████╗ ███████╗
██╔════╝██╔══██╗██╔═══██╗██╔═══██╗██╔════╝
███████╗██████╔╝██║ ██║██║ ██║█████╗
╚════██║██╔═══╝ ██║ ██║██║ ██║██╔══╝
███████║██║ ╚██████╔╝╚██████╔╝██║
╚══════╝╚═╝ ╚═════╝ ╚═════╝ ╚═╝
████████╗██╗ ██╗ █████╗ ████████╗ ███╗ ███╗ █████╗ ██╗██╗
╚══██╔══╝██║ ██║██╔══██╗╚══██╔══╝ ████╗ ████║██╔══██╗██║██║
██║ ███████║███████║ ██║ ██╔████╔██║███████║██║██║
██║ ██╔══██║██╔══██║ ██║ ██║╚██╔╝██║██╔══██║██║██║
██║ ██║ ██║██║ ██║ ██║ ██║ ╚═╝ ██║██║ ██║██║███████╗
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚══════╝ by securihub.com
Wrong execution\n
Accepted parameters:\n
Use -d along with a domain name, example sh SpoofThatMail.sh -d domain.com
Null string will be detected and ignored\n
Use -f along with a file containing domain names, example sh SpoofThatMail.sh -f domains.txt
Note that the path provided for the file must be a valid one\n
diff --git a/SpoofThatMail.sh b/SpoofThatMail.sh
old mode 100644
new mode 100755
index 80e2397..2e7e05b
--- a/SpoofThatMail.sh
+++ b/SpoofThatMail.sh
@@ -6,11 +6,11 @@ YELLOW='\033[1;33m'
NC='\033[0m' # No Color
help () {
- echo "Accepted parameters:\n"
- echo "Use -d along with a domain name, example sh SpoofThatMail.sh -d domain.com"
- echo "Null string will be detected and ignored\n"
- echo "Use -f along with a file containing domain names, example sh SpoofThatMail.sh -f domains.txt"
- echo "Note that the path provided for the file must be a valid one\n"
+ echo -e "Accepted parameters:\n"
+ echo -e "Use -d along with a domain name, example sh SpoofThatMail.sh -d domain.com"
+ echo -e "Null string will be detected and ignored\n"
+ echo -e "Use -f along with a file containing domain names, example sh SpoofThatMail.sh -f domains.txt"
+ echo -e "Note that the path provided for the file must be a valid one\n"
}
check_url () {
@@ -20,17 +20,17 @@ check_url () {
output=$(nslookup -type=txt _dmarc."$domain")
case "$output" in
*p=reject*)
- echo "$domain is ${GREEN}NOT vulnerable${NC}"
+ echo -e "$domain is ${GREEN}NOT vulnerable${NC}"
;;
*p=quarantine*)
- echo "$domain ${YELLOW}can be vulnerable${NC} (email will be sent to spam)"
+ echo -e "$domain ${YELLOW}can be vulnerable${NC} (email will be sent to spam)"
;;
*p=none*)
- echo "$domain is ${RED}vulnerable${NC}"
+ echo -e "$domain is ${RED}vulnerable${NC}"
retval=1
;;
*)
- echo "$domain is ${RED}vulnerable${NC} (No DMARC record found)"
+ echo -e "$domain is ${RED}vulnerable${NC} (No DMARC record found)"
retval=1
;;
esac
@@ -49,7 +49,7 @@ check_file () {
check_url $line
VULNERABLES=$((VULNERABLES=VULNERABLES+$?))
done < $input
- echo "\n$VULNERABLES out of $COUNTER domains are ${RED}vulnerable ${NC}"
+ echo -e "\n$VULNERABLES out of $COUNTER domains are ${RED}vulnerable ${NC}"
}
@@ -73,7 +73,7 @@ main () {
}
-echo "
+echo -e "
███████╗██████╗ ██████╗ ██████╗ ███████╗
██╔════╝██╔══██╗██╔═══██╗██╔═══██╗██╔════╝
███████╗██████╔╝██║ ██║██║ ██║█████╗
@@ -90,7 +90,7 @@ echo "
"
if [ $# != 2 ];then
- echo "Wrong execution\n"
+ echo -e "Wrong execution\n"
help
exit 0
fi