Start work on hydra completion
This commit is contained in:
		
							parent
							
								
									3b28d5c2b9
								
							
						
					
					
						commit
						bf8b4cd633
					
				
					 3 changed files with 172 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
#compdef hashcat
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
tokens=(${(z)LBUFFER})
 | 
			
		||||
 | 
			
		||||
if [[ "${LBUFFER[-1]}" == " " ]]; then
 | 
			
		||||
| 
						 | 
				
			
			@ -30,6 +31,7 @@ _hashes(){
 | 
			
		|||
	else
 | 
			
		||||
		hashcat --example-hashes | awk -v RS="\n\n" -F "\t" '{gsub("\n","\t",$0); print $1 ":" $2 }' | sed 's/MODE: //; s/TYPE: //'
 | 
			
		||||
	fi
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_basic_section(){
 | 
			
		||||
| 
						 | 
				
			
			@ -64,8 +66,9 @@ best_guess(){
 | 
			
		|||
 | 
			
		||||
case "$previousArg" in
 | 
			
		||||
	-m|--hash-type)
 | 
			
		||||
		hashes=("${(f)$(_hashes)}")
 | 
			
		||||
		_describe "Hashes" hashes ;;
 | 
			
		||||
		# hashes=("${(f)$(_hashes)}")
 | 
			
		||||
		# _describe "Hashes" hashes ;;
 | 
			
		||||
		compadd -- "$(_hashes)" ;;
 | 
			
		||||
	-a|--attack-mode)
 | 
			
		||||
		ops=("${(f)$(_basic_section "Attack Modes")}")
 | 
			
		||||
		_describe "Modes" ops ;;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										166
									
								
								shells/zsh/completion/_hydra
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										166
									
								
								shells/zsh/completion/_hydra
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,166 @@
 | 
			
		|||
#compdef hydra
 | 
			
		||||
 | 
			
		||||
tokens=(${(z)LBUFFER})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [[ "${LBUFFER[-1]}" == " " ]]; then
 | 
			
		||||
	previousArg="${tokens[-1]}"
 | 
			
		||||
else
 | 
			
		||||
	previousArg="${tokens[-2]}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
services=(
 | 
			
		||||
	"adam6500"
 | 
			
		||||
	"asterisk"
 | 
			
		||||
	"afp"
 | 
			
		||||
	"cisco"
 | 
			
		||||
	"cisco-enable"
 | 
			
		||||
	"cvs"
 | 
			
		||||
	"firebird"
 | 
			
		||||
	"ftp"
 | 
			
		||||
	"ftps"
 | 
			
		||||
	"http-head"
 | 
			
		||||
	"https-head"
 | 
			
		||||
	"http-get"
 | 
			
		||||
	"https-get"
 | 
			
		||||
	"http-post"
 | 
			
		||||
	"https-post"
 | 
			
		||||
	"http-get-form"
 | 
			
		||||
	"https-get-form"
 | 
			
		||||
	"http-post-form"
 | 
			
		||||
	"https-post-form"
 | 
			
		||||
	"http-proxy"
 | 
			
		||||
	"http-proxy-urlenum"
 | 
			
		||||
	"icq"
 | 
			
		||||
	"imap"
 | 
			
		||||
	"imaps"
 | 
			
		||||
	"irc"
 | 
			
		||||
	"ldap2"
 | 
			
		||||
	"ldap2s"
 | 
			
		||||
	"ldap3"
 | 
			
		||||
	"ldap3s"
 | 
			
		||||
	"ldap3-crammd5"
 | 
			
		||||
	"ldap3-crammd5s"
 | 
			
		||||
	"ldap3-digestmd5"
 | 
			
		||||
	"ldap3-digestmd5s"
 | 
			
		||||
	"mssql"
 | 
			
		||||
	"mysql"
 | 
			
		||||
	"nntp"
 | 
			
		||||
	"oracle-listener"
 | 
			
		||||
	"oracle-sid"
 | 
			
		||||
	"pcanywhere"
 | 
			
		||||
	"pcnfs"
 | 
			
		||||
	"pop3"
 | 
			
		||||
	"pop3s"
 | 
			
		||||
	"postgres"
 | 
			
		||||
	"radmin2"
 | 
			
		||||
	"redis"
 | 
			
		||||
	"rexec"
 | 
			
		||||
	"rlogin"
 | 
			
		||||
	"rpcap"
 | 
			
		||||
	"rsh"
 | 
			
		||||
	"rtsp"
 | 
			
		||||
	"s7-300"
 | 
			
		||||
	"sip"
 | 
			
		||||
	"smb"
 | 
			
		||||
	"smtp"
 | 
			
		||||
	"smtps"
 | 
			
		||||
	"smtp-enum"
 | 
			
		||||
	"snmp"
 | 
			
		||||
	"socks5"
 | 
			
		||||
	"ssh"
 | 
			
		||||
	"sshkey"
 | 
			
		||||
	"svn"
 | 
			
		||||
	"teamspeak"
 | 
			
		||||
	"telnet"
 | 
			
		||||
	"telnets"
 | 
			
		||||
	"vmauthd"
 | 
			
		||||
	"vnc"
 | 
			
		||||
	"xmpp"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
min_max_charset(){
 | 
			
		||||
	_message -r "$(hydra -x -h)"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
service_help(){
 | 
			
		||||
	_message -r "${hydra -U $previousArg}"
 | 
			
		||||
}
 | 
			
		||||
service_list(){
 | 
			
		||||
	_describe "Services" services
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
args=(
 | 
			
		||||
	"-R[restore a previous aborted/crashed session]"
 | 
			
		||||
	"-I[ignore an existing restore file (don't wait 10 seconds)]"
 | 
			
		||||
	"-S[perform an SSL connect]"
 | 
			
		||||
	"-s[if the service is on a different default port, define it here]:value"
 | 
			
		||||
	"-l[login with LOGIN name]:value"
 | 
			
		||||
	"-L[load several logins from a file]:filename:_files"
 | 
			
		||||
	"-p[try password PASS]:value"
 | 
			
		||||
	"-P[load several passwords from a file]:filename:_files"
 | 
			
		||||
	"-C[colon separated \"login:pass\" format, instead of -L/-P options]:filename:_files"
 | 
			
		||||
	"-x[MIN:MAX:CHARSET  password bruteforce generation, type \"-x -h\" to get help]:min-max:min_max_charset"
 | 
			
		||||
	"-y[disable use of symbols in bruteforce, see above]"
 | 
			
		||||
	"-e[Extra passowrds to try options (nsr)]:nsr:_values -s '' \"Options\" \"n[Null Password]\" \"s[Login as Password]\" \"r[Reversed Login as Password]\""
 | 
			
		||||
	"-u[loop around users, not passwords (effective! implied with -x)]"
 | 
			
		||||
	"-M[list of servers to attack, one entry per line, ':' to specify port]:filename:_files"
 | 
			
		||||
	"-o[write found login/password pairs to FILE instead of stdout]:filename:_files"
 | 
			
		||||
	"-b[specify the format for the -o FILE]:format:_values \"Ouptut type\" text json jsonv1"
 | 
			
		||||
	"-f[exit when a login/pass pair is found (-M: -f per host)]"
 | 
			
		||||
	"-F[exit when a login/pass pair is found (-M: -F global)]"
 | 
			
		||||
	"-t[run X number of connects in parallel per target (default: 16)]:value"
 | 
			
		||||
	"-T[run X connects in parallel overall (for -M, default: 64)]:value"
 | 
			
		||||
	"-w[wait x time for a response (32)]:value"
 | 
			
		||||
	"-W[wait x time between connects per thread (0)]"
 | 
			
		||||
	"-c[wait x time per login attempt over all threads (enforces -t 1)]"
 | 
			
		||||
	"-4[use IPv4 (default)]"
 | 
			
		||||
	"-6[use IPv6 addresses (put always in \[\] also in -M)]"
 | 
			
		||||
	"-v[verbose mode]"
 | 
			
		||||
	"-V[show login+pass for each attempt]"
 | 
			
		||||
	"-d[debug mode]"
 | 
			
		||||
	"-O[use old SSL v2 and v3]"
 | 
			
		||||
	"-q[do not print messages about connection errors]"
 | 
			
		||||
	"-U[service module usage details]:services:service_list"
 | 
			
		||||
	"-h[COMPLETE HELP]"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
declare -a delete
 | 
			
		||||
if (( ${tokens[(I)-l]} )); then
 | 
			
		||||
	delete=("-L" "-C")
 | 
			
		||||
elif (( ${tokens[(I)-L]} )); then
 | 
			
		||||
	delete=("-l" "-C")
 | 
			
		||||
elif (( ${tokens[(I)-p]} )); then
 | 
			
		||||
	delete=("-P" "-C")
 | 
			
		||||
elif (( ${tokens[(I)-P]} )); then
 | 
			
		||||
	delete=("-p" "-C")
 | 
			
		||||
elif (( ${tokens[(I)-C]} )); then
 | 
			
		||||
	delete=("-l" "-L" "-p" "-P")
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
for target in "${delete[@]}"; do
 | 
			
		||||
	args=("${(f)$(echo -e "${(pj:\n:)args}" | grep -v "^${target}")}")
 | 
			
		||||
done
 | 
			
		||||
	#&& fzf_dirs "$current" || fzf_files "$current"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local -a line expl
 | 
			
		||||
local -i ret=1
 | 
			
		||||
typeset -A opt_args
 | 
			
		||||
_arguments -C -s "${args[@]}" ':service:->hydra_service'  && return
 | 
			
		||||
case $state in
 | 
			
		||||
	hydra_service)
 | 
			
		||||
	if compset -P "(${(j:|:)services})://"; then
 | 
			
		||||
		notify-send "Line" "$line"
 | 
			
		||||
		notify-send "Expl" "$expl"
 | 
			
		||||
		_wanted servers expl 'server' _hosts && ret=0
 | 
			
		||||
	else
 | 
			
		||||
		notify-send "Line" "$line"
 | 
			
		||||
		notify-send "Expl" "$expl"
 | 
			
		||||
		_wanted services expl $state_descr compadd -S '://' -q -a services && ret=0
 | 
			
		||||
	fi
 | 
			
		||||
	;;
 | 
			
		||||
esac
 | 
			
		||||
 
 | 
			
		||||
| 
						 | 
				
			
			@ -215,7 +215,7 @@ _msfvenom_payload() {
 | 
			
		|||
    _message -r "Cannot find metasploit cache file. Run msfconsole to populate it"
 | 
			
		||||
    compadd "$@"
 | 
			
		||||
  else
 | 
			
		||||
    _msfvenom_payloads_list=("${(f)$(sed -n '/"type": "payload"/,/"ref_name"/p' "$cacheFile" | grep -E '(ref_name|description)' | cut -d '"' -f 4 | sed -n 'h;n;p;g;p' | sed 'N;s/\n/:/')}")
 | 
			
		||||
    _msfvenom_payloads_list=("${(f)$(sed -n '/"type": "payload"/,/"ref_name"/p' "$cacheFile" | grep -E '(ref_name|description)' | cut -d '"' -f 4 | sed -n 'h;n;p;g;p' | sed 'N;s/\n/:/; s/\\n.*$//')}")
 | 
			
		||||
    _describe -t payloads 'available payloads' _msfvenom_payloads_list || compadd "$@"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue