|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
port=443
|
|
|
|
vulnerability=""
|
|
|
|
host=""
|
|
|
|
openssl="$(which openssl)"
|
|
|
|
|
|
|
|
die(){
|
|
|
|
echo "$@" >&2
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
print_help(){
|
|
|
|
echo "Attempts to connect using different tls versions"
|
|
|
|
echo ""
|
|
|
|
echo "verifySSL [options] <host>"
|
|
|
|
echo ""
|
|
|
|
echo "-p | --port Port number (default 443)"
|
|
|
|
echo "-v | --vulnerability The vulnerability to test"
|
|
|
|
echo "--list List the vulnerabilities that can be tested"
|
|
|
|
}
|
|
|
|
|
|
|
|
list_vulnerabilites(){
|
|
|
|
echo "Beast"
|
|
|
|
echo "Sweet32"
|
|
|
|
echo "Lucky13"
|
|
|
|
}
|
|
|
|
|
|
|
|
check-beast(){
|
|
|
|
local tls1
|
|
|
|
local ssl3
|
|
|
|
local tmpfile="$(mktemp)"
|
|
|
|
# In order to test beast, you need to have a cbc cipher and tls1 or sslv3
|
|
|
|
echo "" | $openssl s_client -tls1 -connect "${host}:${port}" > /dev/null 2>&1
|
|
|
|
tls1="$?"
|
|
|
|
echo "" | $openssl s_client -ssl3 -connect "${host}:${port}" > /dev/null 2>&1
|
|
|
|
ssl3="$?"
|
|
|
|
|
|
|
|
$openssl ciphers -v | grep -i cbc | cut -d' ' -f1 | while read cipher; do
|
|
|
|
if [ $tls1 -eq 0 ]; then
|
|
|
|
echo "\$ openssl s_client -tls1 -cipher $cipher -connect ${host}:${port}" >> "$tmpfile"
|
|
|
|
echo "" | $openssl s_client -tls1 -cipher "$cipher" -connect "${host}:${port}" >> "$tmpfile" 2>&1
|
|
|
|
if [ "$?" -eq 0 ]; then
|
|
|
|
cat "$tmpfile"
|
|
|
|
fi
|
|
|
|
rm "$tmpfile"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ $ssl3 -eq 0 ]; then
|
|
|
|
echo "\$ openssl s_client -ssl3 -cipher $cipher -connect ${host}:${port}" >> "$tmpfile"
|
|
|
|
echo "" | $openssl s_client -ssl3 -cipher "$cipher" -connect "${host}:${port}" >> "$tmpfile" 2>&1
|
|
|
|
if [ "$?" -eq 0 ]; then
|
|
|
|
cat "$tmpfile"
|
|
|
|
fi
|
|
|
|
rm "$tmpfile"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
check-sweet32(){
|
|
|
|
local tmpfile="$(mktemp)"
|
|
|
|
echo "\$ openssl s_client -cipher 3DES -connect ${host}:${port}" >> "$tmpfile"
|
|
|
|
echo "" | $openssl s_client -cipher 3DES -connect "${host}:${port}" >> "$tmpfile" 2>&1
|
|
|
|
if [ "$?" -eq 0 ]; then
|
|
|
|
cat "$tmpfile"
|
|
|
|
fi
|
|
|
|
rm "$tmpfile"
|
|
|
|
}
|
|
|
|
|
|
|
|
check-lucky13(){
|
|
|
|
local tmpfile="$(mktemp)"
|
|
|
|
$openssl ciphers -v | grep -i cbc | cut -d' ' -f1 | while read cipher; do
|
|
|
|
echo "\$ openssl s_client -cipher $cipher -connect ${host}:${port}" >> "$tmpfile"
|
|
|
|
echo "" | $openssl s_client -tls1 -cipher "$cipher" -connect "${host}:${port}" >> "$tmpfile" 2>&1
|
|
|
|
if [ "$?" -eq 0 ]; then
|
|
|
|
cat "$tmpfile"
|
|
|
|
fi
|
|
|
|
rm "$tmpfile"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
while [ "$#" -gt 0 ]; do
|
|
|
|
case "$1" in
|
|
|
|
-p|--port)
|
|
|
|
port="$2"
|
|
|
|
shift; shift
|
|
|
|
;;
|
|
|
|
-v|--vulnerability)
|
|
|
|
vulnerability="$2"
|
|
|
|
shift; shift
|
|
|
|
;;
|
|
|
|
--openssl)
|
|
|
|
openssl="$2"
|
|
|
|
shift;shift
|
|
|
|
;;
|
|
|
|
-h|--help)
|
|
|
|
print_help
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
--list)
|
|
|
|
list_vulnerabilites
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
host="$1"
|
|
|
|
shift
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -z "$host" ]; then
|
|
|
|
die "No host provided"
|
|
|
|
fi
|
|
|
|
|
|
|
|
case "$(echo "$vulnerability" | tr '[:upper:]' '[:lower:]')" in
|
|
|
|
beast)
|
|
|
|
check-beast
|
|
|
|
;;
|
|
|
|
sweet32)
|
|
|
|
check-sweet32
|
|
|
|
;;
|
|
|
|
lucky13)
|
|
|
|
check-lucky13
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
die "Unknown vulnerability $vulnerability"
|
|
|
|
;;
|
|
|
|
esac
|