Merge branch 'master' into v8.8-rain
|
@ -40,6 +40,8 @@ LOCAL_SRC_FILES:= \
|
|||
hydra-irc.c\
|
||||
hydra-ldap.c\
|
||||
hydra-mod.c\
|
||||
hydra-memcached.c\
|
||||
hydra-mongodb.c\
|
||||
hydra-mssql.c\
|
||||
hydra-mysql.c\
|
||||
hydra-ncp.c\
|
||||
|
@ -90,7 +92,8 @@ LOCAL_STATIC_LIBRARIES := \
|
|||
libiconv\
|
||||
libneon\
|
||||
libssl_static\
|
||||
libcrypto_static
|
||||
libcrypto_static\
|
||||
libmemcached
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := \
|
||||
libsqlite\
|
||||
|
|
23
CHANGES
|
@ -1,6 +1,29 @@
|
|||
Changelog for hydra
|
||||
-------------------
|
||||
|
||||
Release 9.1-dev
|
||||
* svn: updated to support past and new API
|
||||
* http module now supports F=/S= string matching conditions (thanks to poucz@github)
|
||||
* changed mysql module not to use mysql db as a default. if the user has not access to this db auth fails ...
|
||||
* added -K command line switch to disable redo attempts (good for mass scanning)
|
||||
* forgot to have the -m option in the hydra help output
|
||||
|
||||
|
||||
Release 9.0
|
||||
* rdp: Revamped rdp module to use FreeRDP library (thanks to loianhtuan@github for the patch!)
|
||||
* Added memcached module
|
||||
* Added mongodb module
|
||||
* http: http module now supports a= option to select http authentication type
|
||||
* JSON output does now truncate the file if exists.
|
||||
* Fixed svn module memory leaks
|
||||
* Fixed rtsp module potential buffer overflow
|
||||
* Fixed http module DIGEST-MD5 mode
|
||||
|
||||
|
||||
Release 8.9.1
|
||||
* Clarification for rdp error message
|
||||
* CIDR notation (hydra -l test -p test 192.168.0.0/24 ftp) was not detected, fixed
|
||||
|
||||
|
||||
Release 8.8
|
||||
* New web page: https://github.com/vanhauser-thc/thc-hydra
|
||||
|
|
2
INSTALL
|
@ -2,7 +2,7 @@ type "./configure", then "make" and finally "sudo make install"
|
|||
|
||||
For special modules you need to install software packages before
|
||||
you run "./configure":
|
||||
Ubuntu/Debian: apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird2.1-dev libncp-dev libncurses5-dev
|
||||
Ubuntu/Debian: apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird-dev libncurses5-dev
|
||||
Redhat/Fedora: yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel libncurses-devel
|
||||
OpenSuSE: zypper install libopenssl-devel pcre-devel libidn-devel ncpfs-devel libssh-devel postgresql-devel subversion-devel libncurses-devel
|
||||
|
||||
|
|
22
Makefile.am
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Makefile for Hydra - (c) 2001-2019 by van Hauser / THC <vh@thc.org>
|
||||
#
|
||||
OPTS=-I. -O3
|
||||
OPTS=-I. -O3 -march=native -flto
|
||||
# -Wall -g -pedantic
|
||||
LIBS=-lm
|
||||
BINDIR = /bin
|
||||
|
@ -12,11 +12,11 @@ DESTDIR ?=
|
|||
SRC = hydra-vnc.c hydra-pcnfs.c hydra-rexec.c hydra-nntp.c hydra-socks5.c \
|
||||
hydra-telnet.c hydra-cisco.c hydra-http.c hydra-ftp.c hydra-imap.c \
|
||||
hydra-pop3.c hydra-smb.c hydra-icq.c hydra-cisco-enable.c hydra-ldap.c \
|
||||
hydra-mysql.c hydra-mssql.c hydra-xmpp.c hydra-http-proxy-urlenum.c \
|
||||
hydra-snmp.c hydra-cvs.c hydra-smtp.c hydra-smtp-enum.c hydra-sapr3.c \
|
||||
hydra-ssh.c hydra-sshkey.c hydra-teamspeak.c hydra-postgres.c \
|
||||
hydra-rsh.c hydra-rlogin.c hydra-oracle-listener.c hydra-svn.c \
|
||||
hydra-pcanywhere.c hydra-sip.c hydra-oracle.c hydra-vmauthd.c \
|
||||
hydra-memcached.c hydra-mongodb.c hydra-mysql.c hydra-mssql.c hydra-xmpp.c \
|
||||
hydra-http-proxy-urlenum.c hydra-snmp.c hydra-cvs.c hydra-smtp.c \
|
||||
hydra-smtp-enum.c hydra-sapr3.c hydra-ssh.c hydra-sshkey.c hydra-teamspeak.c \
|
||||
hydra-postgres.c hydra-rsh.c hydra-rlogin.c hydra-oracle-listener.c \
|
||||
hydra-svn.c hydra-pcanywhere.c hydra-sip.c hydra-oracle.c hydra-vmauthd.c \
|
||||
hydra-asterisk.c hydra-firebird.c hydra-afp.c hydra-ncp.c hydra-rdp.c \
|
||||
hydra-oracle-sid.c hydra-http-proxy.c hydra-http-form.c hydra-irc.c \
|
||||
hydra-s7-300.c hydra-redis.c hydra-adam6500.c hydra-rtsp.c \
|
||||
|
@ -25,11 +25,11 @@ SRC = hydra-vnc.c hydra-pcnfs.c hydra-rexec.c hydra-nntp.c hydra-socks5.c \
|
|||
OBJ = hydra-vnc.o hydra-pcnfs.o hydra-rexec.o hydra-nntp.o hydra-socks5.o \
|
||||
hydra-telnet.o hydra-cisco.o hydra-http.o hydra-ftp.o hydra-imap.o \
|
||||
hydra-pop3.o hydra-smb.o hydra-icq.o hydra-cisco-enable.o hydra-ldap.o \
|
||||
hydra-mysql.o hydra-mssql.o hydra-xmpp.o hydra-http-proxy-urlenum.o \
|
||||
hydra-snmp.o hydra-cvs.o hydra-smtp.o hydra-smtp-enum.o hydra-sapr3.o \
|
||||
hydra-ssh.o hydra-sshkey.o hydra-teamspeak.o hydra-postgres.o \
|
||||
hydra-rsh.o hydra-rlogin.o hydra-oracle-listener.o hydra-svn.o \
|
||||
hydra-pcanywhere.o hydra-sip.o hydra-oracle-sid.o hydra-oracle.o \
|
||||
hydra-memcached.o hydra-mongodb.o hydra-mysql.o hydra-mssql.o hydra-xmpp.o \
|
||||
hydra-http-proxy-urlenum.o hydra-snmp.o hydra-cvs.o hydra-smtp.o \
|
||||
hydra-smtp-enum.o hydra-sapr3.o hydra-ssh.o hydra-sshkey.o hydra-teamspeak.o \
|
||||
hydra-postgres.o hydra-rsh.o hydra-rlogin.o hydra-oracle-listener.o \
|
||||
hydra-svn.o hydra-pcanywhere.o hydra-sip.o hydra-oracle-sid.o hydra-oracle.o \
|
||||
hydra-vmauthd.o hydra-asterisk.o hydra-firebird.o hydra-afp.o \
|
||||
hydra-ncp.o hydra-http-proxy.o hydra-http-form.o hydra-irc.o \
|
||||
hydra-redis.o hydra-rdp.o hydra-s7-300.c hydra-adam6500.o hydra-rtsp.o \
|
||||
|
|
2
PROBLEMS
|
@ -3,5 +3,3 @@ List of known issues:
|
|||
|
||||
* Cygwin: more than 30 tasks (-t 31 or more) will lead to a stack smash
|
||||
* OS X: brew installed modules are not compiled correctly and will crash hydra
|
||||
* RDP module: disabled as it does not support the current protocol. Help needed!
|
||||
|
||||
|
|
530
README
|
@ -1,530 +0,0 @@
|
|||
|
||||
H Y D R A
|
||||
|
||||
(c) 2001-2019 by van Hauser / THC
|
||||
<vh@thc.org> https://github.com/vanhauser-thc/thc-hydra
|
||||
many modules were written by David (dot) Maciejak @ gmail (dot) com
|
||||
BFG code by Jan Dlabal <dlabaljan@gmail.com>
|
||||
|
||||
Licensed under AGPLv3 (see LICENSE file)
|
||||
|
||||
Please do not use in military or secret service organizations,
|
||||
or for illegal purposes.
|
||||
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
------------
|
||||
Number one of the biggest security holes are passwords, as every password
|
||||
security study shows.
|
||||
This tool is a proof of concept code, to give researchers and security
|
||||
consultants the possibility to show how easy it would be to gain unauthorized
|
||||
access from remote to a system.
|
||||
|
||||
THIS TOOL IS FOR LEGAL PURPOSES ONLY!
|
||||
|
||||
There are already several login hacker tools available, however, none does
|
||||
either support more than one protocol to attack or support parallized
|
||||
connects.
|
||||
|
||||
It was tested to compile cleanly on Linux, Windows/Cygwin, Solaris,
|
||||
FreeBSD/OpenBSD, QNX (Blackberry 10) and MacOS.
|
||||
|
||||
Currently this tool supports the following protocols:
|
||||
Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP,
|
||||
HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY,
|
||||
HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST,
|
||||
HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener,
|
||||
Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin,
|
||||
Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5,
|
||||
SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth,
|
||||
VNC and XMPP.
|
||||
|
||||
However the module engine for new services is very easy so it won't take a
|
||||
long time until even more services are supported.
|
||||
Your help in writing, enhancing or fixing modules is highly appreciated!! :-)
|
||||
|
||||
|
||||
|
||||
WHERE TO GET
|
||||
------------
|
||||
You can always find the newest release/production version of hydra at its
|
||||
project page at https://github.com/vanhauser-thc/thc-hydra/releases
|
||||
If you are interested in the current development state, the public development
|
||||
repository is at Github:
|
||||
svn co https://github.com/vanhauser-thc/thc-hydra
|
||||
or
|
||||
git clone https://github.com/vanhauser-thc/thc-hydra
|
||||
Use the development version at your own risk. It contains new features and
|
||||
new bugs. Things might not work!
|
||||
|
||||
|
||||
|
||||
HOW TO COMPILE
|
||||
--------------
|
||||
To configure, compile and install hydra, just type:
|
||||
|
||||
```
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
```
|
||||
|
||||
If you want the ssh module, you have to setup libssh (not libssh2!) on your
|
||||
system, get it from http://www.libssh.org, for ssh v1 support you also need
|
||||
to add "-DWITH_SSH1=On" option in the cmake command line.
|
||||
IMPORTANT: If you compile on MacOS then you must do this - do not install libssh via brew!
|
||||
|
||||
If you use Ubuntu/Debian, this will install supplementary libraries needed
|
||||
for a few optional modules (note that some might not be available on your distribution):
|
||||
|
||||
```
|
||||
apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev \
|
||||
libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev \
|
||||
firebird-dev
|
||||
```
|
||||
|
||||
This enables all optional modules and features with the exception of Oracle,
|
||||
SAP R/3, NCP and the apple filing protocol - which you will need to download and
|
||||
install from the vendor's web sites.
|
||||
|
||||
For all other Linux derivates and BSD based systems, use the system
|
||||
software installer and look for similarly named libraries like in the
|
||||
command above. In all other cases, you have to download all source libraries
|
||||
and compile them manually.
|
||||
|
||||
|
||||
|
||||
SUPPORTED PLATFORMS
|
||||
-------------------
|
||||
- All UNIX platforms (Linux, *BSD, Solaris, etc.)
|
||||
- MacOS (basically a BSD clone)
|
||||
- Windows with Cygwin (both IPv4 and IPv6)
|
||||
- Mobile systems based on Linux, MacOS or QNX (e.g. Android, iPhone, Blackberry 10, Zaurus, iPaq)
|
||||
|
||||
|
||||
|
||||
HOW TO USE
|
||||
----------
|
||||
If you just enter `hydra`, you will see a short summary of the important
|
||||
options available.
|
||||
Type `./hydra -h` to see all available command line options.
|
||||
|
||||
Note that NO login/password file is included. Generate them yourself.
|
||||
A default password list is however present, use "dpl4hydra.sh" to generate
|
||||
a list.
|
||||
|
||||
For Linux users, a GTK GUI is available, try `./xhydra`
|
||||
|
||||
For the command line usage, the syntax is as follows:
|
||||
For attacking one target or a network, you can use the new "://" style:
|
||||
hydra [some command line options] PROTOCOL://TARGET:PORT/MODULE-OPTIONS
|
||||
The old mode can be used for these too, and additionally if you want to
|
||||
specify your targets from a text file, you *must* use this one:
|
||||
|
||||
```
|
||||
hydra [some command line options] [-s PORT] TARGET PROTOCOL [MODULE-OPTIONS]
|
||||
```
|
||||
|
||||
Via the command line options you specify which logins to try, which passwords,
|
||||
if SSL should be used, how many parallel tasks to use for attacking, etc.
|
||||
|
||||
PROTOCOL is the protocol you want to use for attacking, e.g. ftp, smtp,
|
||||
http-get or many others are available
|
||||
TARGET is the target you want to attack
|
||||
MODULE-OPTIONS are optional values which are special per PROTOCOL module
|
||||
|
||||
FIRST - select your target
|
||||
you have three options on how to specify the target you want to attack:
|
||||
1. a single target on the command line: just put the IP or DNS address in
|
||||
2. a network range on the command line: CIDR specification like "192.168.0.0/24"
|
||||
3. a list of hosts in a text file: one line per entry (see below)
|
||||
|
||||
SECOND - select your protocol
|
||||
Try to avoid telnet, as it is unreliable to detect a correct or false login attempt.
|
||||
Use a port scanner to see which protocols are enabled on the target.
|
||||
|
||||
THIRD - check if the module has optional parameters
|
||||
hydra -U PROTOCOL
|
||||
e.g. hydra -U smtp
|
||||
|
||||
FOURTH - the destination port
|
||||
this is optional! if no port is supplied the default common port for the
|
||||
PROTOCOL is used.
|
||||
If you specify SSL to use ("-S" option), the SSL common port is used by default.
|
||||
|
||||
|
||||
If you use "://" notation, you must use "[" "]" brackets if you want to supply
|
||||
IPv6 addresses or CIDR ("192.168.0.0/24") notations to attack:
|
||||
hydra [some command line options] ftp://[192.168.0.0/24]/
|
||||
hydra [some command line options] -6 smtps://[2001:db8::1]/NTLM
|
||||
|
||||
Note that everything hydra does is IPv4 only!
|
||||
If you want to attack IPv6 addresses, you must add the "-6" command line option.
|
||||
All attacks are then IPv6 only!
|
||||
|
||||
If you want to supply your targets via a text file, you can not use the ://
|
||||
notation but use the old style and just supply the protocol (and module options):
|
||||
hydra [some command line options] -M targets.txt ftp
|
||||
You can supply also the port for each target entry by adding ":<port>" after a
|
||||
target entry in the file, e.g.:
|
||||
|
||||
```
|
||||
foo.bar.com
|
||||
target.com:21
|
||||
unusual.port.com:2121
|
||||
default.used.here.com
|
||||
127.0.0.1
|
||||
127.0.0.1:2121
|
||||
```
|
||||
|
||||
Note that if you want to attach IPv6 targets, you must supply the -6 option
|
||||
and *must* put IPv6 addresses in brackets in the file(!) like this:
|
||||
|
||||
```
|
||||
foo.bar.com
|
||||
target.com:21
|
||||
[fe80::1%eth0]
|
||||
[2001::1]
|
||||
[2002::2]:8080
|
||||
[2a01:24a:133:0:00:123:ff:1a]
|
||||
```
|
||||
|
||||
LOGINS AND PASSWORDS
|
||||
--------------------
|
||||
You have many options on how to attack with logins and passwords
|
||||
With -l for login and -p for password you tell hydra that this is the only
|
||||
login and/or password to try.
|
||||
With -L for logins and -P for passwords you supply text files with entries.
|
||||
e.g.:
|
||||
|
||||
```
|
||||
hydra -l admin -p password ftp://localhost/
|
||||
hydra -L default_logins.txt -p test ftp://localhost/
|
||||
hydra -l admin -P common_passwords.txt ftp://localhost/
|
||||
hydra -L logins.txt -P passwords.txt ftp://localhost/
|
||||
```
|
||||
|
||||
Additionally, you can try passwords based on the login via the "-e" option.
|
||||
The "-e" option has three parameters:
|
||||
|
||||
```
|
||||
s - try the login as password
|
||||
n - try an empty password
|
||||
r - reverse the login and try it as password
|
||||
```
|
||||
|
||||
If you want to, e.g. try "try login as password and "empty password", you
|
||||
specify "-e sn" on the command line.
|
||||
|
||||
But there are two more modes for trying passwords than -p/-P:
|
||||
You can use text file which where a login and password pair is separated by a colon,
|
||||
e.g.:
|
||||
|
||||
```
|
||||
admin:password
|
||||
test:test
|
||||
foo:bar
|
||||
```
|
||||
|
||||
This is a common default account style listing, that is also generated by the
|
||||
dpl4hydra.sh default account file generator supplied with hydra.
|
||||
You use such a text file with the -C option - note that in this mode you
|
||||
can not use -l/-L/-p/-P options (-e nsr however you can).
|
||||
Example:
|
||||
|
||||
```
|
||||
hydra -C default_accounts.txt ftp://localhost/
|
||||
```
|
||||
|
||||
And finally, there is a bruteforce mode with the -x option (which you can not
|
||||
use with -p/-P/-C):
|
||||
|
||||
```
|
||||
-x minimum_length:maximum_length:charset
|
||||
```
|
||||
|
||||
the charset definition is `a` for lowercase letters, `A` for uppercase letters,
|
||||
`1` for numbers and for anything else you supply it is their real representation.
|
||||
Examples:
|
||||
|
||||
```
|
||||
-x 1:3:a generate passwords from length 1 to 3 with all lowercase letters
|
||||
-x 2:5:/ generate passwords from length 2 to 5 containing only slashes
|
||||
-x 5:8:A1 generate passwords from length 5 to 8 with uppercase and numbers
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
hydra -l ftp -x 3:3:a ftp://localhost/
|
||||
```
|
||||
|
||||
SPECIAL OPTIONS FOR MODULES
|
||||
---------------------------
|
||||
Via the third command line parameter (TARGET SERVICE OPTIONAL) or the -m
|
||||
command line option, you can pass one option to a module.
|
||||
Many modules use this, a few require it!
|
||||
|
||||
To see the special option of a module, type:
|
||||
|
||||
hydra -U <module>
|
||||
|
||||
e.g.
|
||||
|
||||
./hydra -U http-post-form
|
||||
|
||||
The special options can be passed via the -m parameter, as 3rd command line
|
||||
option or in the service://target/option format.
|
||||
|
||||
Examples (they are all equal):
|
||||
|
||||
```
|
||||
./hydra -l test -p test -m PLAIN 127.0.0.1 imap
|
||||
./hydra -l test -p test 127.0.0.1 imap PLAIN
|
||||
./hydra -l test -p test imap://127.0.0.1/PLAIN
|
||||
```
|
||||
|
||||
RESTORING AN ABORTED/CRASHED SESSION
|
||||
------------------------------------
|
||||
When hydra is aborted with Control-C, killed or crashes, it leaves a
|
||||
"hydra.restore" file behind which contains all necessary information to
|
||||
restore the session. This session file is written every 5 minutes.
|
||||
NOTE: the hydra.restore file can NOT be copied to a different platform (e.g.
|
||||
from little endian to big endian, or from Solaris to AIX)
|
||||
|
||||
HOW TO SCAN/CRACK OVER A PROXY
|
||||
------------------------------
|
||||
The environment variable HYDRA_PROXY_HTTP defines the web proxy (this works
|
||||
just for the http services!).
|
||||
The following syntax is valid:
|
||||
|
||||
```
|
||||
HYDRA_PROXY_HTTP="http://123.45.67.89:8080/"
|
||||
HYDRA_PROXY_HTTP="http://login:password@123.45.67.89:8080/"
|
||||
HYDRA_PROXY_HTTP="proxylist.txt"
|
||||
```
|
||||
|
||||
The last example is a text file containing up to 64 proxies (in the same
|
||||
format definition as the other examples).
|
||||
|
||||
For all other services, use the HYDRA_PROXY variable to scan/crack.
|
||||
It uses the same syntax. eg:
|
||||
|
||||
```
|
||||
HYDRA_PROXY=[connect|socks4|socks5]://[login:password@]proxy_addr:proxy_port
|
||||
```
|
||||
|
||||
for example:
|
||||
|
||||
```
|
||||
HYDRA_PROXY=connect://proxy.anonymizer.com:8000
|
||||
HYDRA_PROXY=socks4://auth:pw@127.0.0.1:1080
|
||||
HYDRA_PROXY=socksproxylist.txt
|
||||
```
|
||||
|
||||
ADDITIONAL HINTS
|
||||
----------------
|
||||
* sort your password files by likelihood and use the -u option to find
|
||||
passwords much faster!
|
||||
* uniq your dictionary files! this can save you a lot of time :-)
|
||||
cat words.txt | sort | uniq > dictionary.txt
|
||||
* if you know that the target is using a password policy (allowing users
|
||||
only to choose a password with a minimum length of 6, containing a least one
|
||||
letter and one number, etc. use the tool pw-inspector which comes along
|
||||
with the hydra package to reduce the password list:
|
||||
cat dictionary.txt | pw-inspector -m 6 -c 2 -n > passlist.txt
|
||||
|
||||
|
||||
RESULTS OUTPUT
|
||||
--------------
|
||||
|
||||
The results are output to stdio along with the other information. Via the -o
|
||||
command line option, the results can also be written to a file. Using -b,
|
||||
the format of the output can be specified. Currently, these are supported:
|
||||
|
||||
* `text` - plain text format
|
||||
* `jsonv1` - JSON data using version 1.x of the schema (defined below).
|
||||
* `json` - JSON data using the latest version of the schema, currently there
|
||||
is only version 1.
|
||||
|
||||
If using JSON output, the results file may not be valid JSON if there are
|
||||
serious errors in booting Hydra.
|
||||
|
||||
|
||||
JSON Schema
|
||||
-----------
|
||||
Here is an example of the JSON output. Notes on some of the fields:
|
||||
|
||||
* `errormessages` - an array of zero or more strings that are normally printed
|
||||
to stderr at the end of the Hydra's run. The text is very free form.
|
||||
* `success` - indication if Hydra ran correctly without error (**NOT** if
|
||||
passwords were detected). This parameter is either the JSON value `true`
|
||||
or `false` depending on completion.
|
||||
* `quantityfound` - How many username+password combinations discovered.
|
||||
* `jsonoutputversion` - Version of the schema, 1.00, 1.01, 1.11, 2.00,
|
||||
2.03, etc. Hydra will make second tuple of the version to always be two
|
||||
digits to make it easier for downstream processors (as opposed to v1.1 vs
|
||||
v1.10). The minor-level versions are additive, so 1.02 will contain more
|
||||
fields than version 1.00 and will be backward compatible. Version 2.x will
|
||||
break something from version 1.x output.
|
||||
|
||||
Version 1.00 example:
|
||||
```
|
||||
{
|
||||
"errormessages": [
|
||||
"[ERROR] Error Message of Something",
|
||||
"[ERROR] Another Message",
|
||||
"These are very free form"
|
||||
],
|
||||
"generator": {
|
||||
"built": "2019-03-01 14:44:22",
|
||||
"commandline": "hydra -b jsonv1 -o results.json ... ...",
|
||||
"jsonoutputversion": "1.00",
|
||||
"server": "127.0.0.1",
|
||||
"service": "http-post-form",
|
||||
"software": "Hydra",
|
||||
"version": "v8.5"
|
||||
},
|
||||
"quantityfound": 2,
|
||||
"results": [
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"login": "bill@example.com",
|
||||
"password": "bill",
|
||||
"port": 9999,
|
||||
"service": "http-post-form"
|
||||
},
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"login": "joe@example.com",
|
||||
"password": "joe",
|
||||
"port": 9999,
|
||||
"service": "http-post-form"
|
||||
}
|
||||
],
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
SPEED
|
||||
-----
|
||||
through the parallelizing feature, this password cracker tool can be very
|
||||
fast, however it depends on the protocol. The fastest are generally POP3
|
||||
and FTP.
|
||||
Experiment with the task option (-t) to speed things up! The higher - the
|
||||
faster ;-) (but too high - and it disables the service)
|
||||
|
||||
|
||||
|
||||
STATISTICS
|
||||
----------
|
||||
Run against a SuSE Linux 7.2 on localhost with a "-C FILE" containing
|
||||
295 entries (294 tries invalid logins, 1 valid). Every test was run three
|
||||
times (only for "1 task" just once), and the average noted down.
|
||||
|
||||
```
|
||||
P A R A L L E L T A S K S
|
||||
SERVICE 1 4 8 16 32 50 64 100 128
|
||||
------- --------------------------------------------------------------------
|
||||
telnet 23:20 5:58 2:58 1:34 1:05 0:33 0:45* 0:25* 0:55*
|
||||
ftp 45:54 11:51 5:54 3:06 1:25 0:58 0:46 0:29 0:32
|
||||
pop3 92:10 27:16 13:56 6:42 2:55 1:57 1:24 1:14 0:50
|
||||
imap 31:05 7:41 3:51 1:58 1:01 0:39 0:32 0:25 0:21
|
||||
```
|
||||
|
||||
(*)
|
||||
Note: telnet timings can be VERY different for 64 to 128 tasks! e.g. with
|
||||
128 tasks, running four times resulted in timings between 28 and 97 seconds!
|
||||
The reason for this is unknown...
|
||||
|
||||
guesses per task (rounded up):
|
||||
|
||||
295 74 38 19 10 6 5 3 3
|
||||
|
||||
guesses possible per connect (depends on the server software and config):
|
||||
|
||||
telnet 4
|
||||
ftp 6
|
||||
pop3 1
|
||||
imap 3
|
||||
|
||||
|
||||
|
||||
BUGS & FEATURES
|
||||
---------------
|
||||
Hydra:
|
||||
Email me or David if you find bugs or if you have written a new module.
|
||||
vh@thc.org (and put "antispam" in the subject line)
|
||||
|
||||
|
||||
You should use PGP to encrypt emails to vh@thc.org :
|
||||
|
||||
```
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v3.3.3 (vh@thc.org)
|
||||
|
||||
mQINBFIp+7QBEADQcJctjohuYjBxq7MELAlFDvXRTeIqqh8kqHPOR018xKL09pZT
|
||||
KiBWFBkU48xlR3EtV5fC1yEt8gDEULe5o0qtK1aFlYBtAWkflVNjDrs+Y2BpjITQ
|
||||
FnAPHw0SOOT/jfcvmhNOZMzMU8lIubAVC4cVWoSWJbLTv6e0DRIPiYgXNT5Quh6c
|
||||
vqhnI1C39pEo/W/nh3hSa16oTc5dtTLbi5kEbdzml78TnT0OASmWLI+xtYKnP+5k
|
||||
Xv4xrXRMVk4L1Bv9WpCY/Jb6J8K8SJYdXPtbaIi4VjgVr5gvg9QC/d/QP2etmw3p
|
||||
lJ1Ldv63x6nXsxnPq6MSOOw8+QqKc1dAgIA43k6SU4wLq9TB3x0uTKnnB8pA3ACI
|
||||
zPeRN9LFkr7v1KUMeKKEdu8jUut5iKUJVu63lVYxuM5ODb6Owt3+UXgsSaQLu9nI
|
||||
DZqnp/M6YTCJTJ+cJANN+uQzESI4Z2m9ITg/U/cuccN/LIDg8/eDXW3VsCqJz8Bf
|
||||
lBSwMItMhs/Qwzqc1QCKfY3xcNGc4aFlJz4Bq3zSdw3mUjHYJYv1UkKntCtvvTCN
|
||||
DiomxyBEKB9J7KNsOLI/CSst3MQWSG794r9ZjcfA0EWZ9u6929F2pGDZ3LiS7Jx5
|
||||
n+gdBDMe0PuuonLIGXzyIuMrkfoBeW/WdnOxh+27eemcdpCb68XtQCw6UQARAQAB
|
||||
tB52YW4gSGF1c2VyICgyMDEzKSA8dmhAdGhjLm9yZz6JAjkEEwECACMCGwMCHgEC
|
||||
F4AFAlIp/QcGCwkIAwcCBhUKCQgLAgUWAwIBAAAKCRDI8AEqhCFiv2R9D/9qTCJJ
|
||||
xCH4BUbWIUhw1zRkn9iCVSwZMmfaAhz5PdVTjeTelimMh5qwK2MNAjpR7vCCd3BH
|
||||
Z2VLB2Eoz9MOgSCxcMOnCDJjtCdCOeaxiASJt8qLeRMwdMOtznM8MnKCIO8X4oo4
|
||||
qH8eNj83KgpI50ERBCj/EMsgg07vSyZ9i1UXjFofFnbHRWSW9yZO16qD4F6r4SGz
|
||||
dsfXARcO3QRI5lbjdGqm+g+HOPj1EFLAOxJAQOygz7ZN5fj+vPp+G/drONxNyVKp
|
||||
QFtENpvqPdU9CqYh8ssazXTWeBi/TIs0q0EXkzqo7CQjfNb6tlRsg18FxnJDK/ga
|
||||
V/1umTg41bQuVP9gGmycsiNI8Atr5DWqaF+O4uDmQxcxS0kX2YXQ4CSQJFi0pml5
|
||||
slAGL8HaAUbV7UnQEqpayPyyTEx1i0wK5ZCHYjLBfJRZCbmHX7SbviSAzKdo5JIl
|
||||
Atuk+atgW3vC3hDTrBu5qlsFCZvbxS21PJ+9zmK7ySjAEFH/NKFmx4B8kb7rPAOM
|
||||
0qCTv0pD/e4ogJCxVrqQ2XcCSJWxJL31FNAMnBZpVzidudNURG2v61h3ckkSB/fP
|
||||
JnkRy/yxYWrdFBYkURImxD8iFD1atj1n3EI5HBL7p/9mHxf1DVJWz7rYQk+3czvs
|
||||
IhBz7xGBz4nhpCi87VDEYttghYlJanbiRfNh3okCOAQTAQIAIgUCUin7tAIbAwYL
|
||||
CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQyPABKoQhYr8OIA//cvkhoKay88yS
|
||||
AjMQypach8C5CvP7eFCT11pkCt1DMAO/8Dt6Y/Ts10dPjohGdIX4PkoLTkQDwBDJ
|
||||
HoLO75oqj0CYLlqDI4oHgf2uzd0Zv8f/11CQQCtut5oEK72mGNzv3GgVqg60z2KR
|
||||
2vpxvGQmDwpDOPP620tf/LuRQgBpks7uazcbkAE2Br09YrUQSCBNHy8kirHW5m5C
|
||||
nupMrcvuFx7mHKW1z3FuhM8ijG7oRmcBWfVoneQgIT3l2WBniXg1mKFhuUSV8Erc
|
||||
XIcc11qsKshyqh0GWb2JfeXbAcTW8/4IwrCP+VfAyLO9F9khP6SnCmcNF9EVJyR6
|
||||
Aw+JMNRin7PgvsqbFhpkq9N+gVBAufz3DZoMTEbsMTtW4lYG6HMWhza2+8G9XyaL
|
||||
ARAWhkNVsmQQ5T6qGkI19thB6E/T6ZorTxqeopNVA7VNK3RVlKpkmUu07w5bTD6V
|
||||
l3Ti6XfcSQqzt6YX2/WUE8ekEG3rSesuJ5fqjuTnIIOjBxr+pPxkzdoazlu2zJ9F
|
||||
n24fHvlU20TccEWXteXj9VFzV/zbPEQbEqmE16lV+bO8U7UHqCOdE83OMrbNKszl
|
||||
7LSCbFhCDtflUsyClBt/OPnlLEHgEE1j9QkqdFFy90l4HqGwKvx7lUFDnuF8LYsb
|
||||
/hcP4XhqjiGcjTPYBDK254iYrpOSMZSIRgQQEQIABgUCUioGfQAKCRBDlBVOdiii
|
||||
tuddAJ4zMrge4qzajScIQcXYgIWMXVenCQCfYTNQPGkHVyp3dMhJ0NR21TYoYMC5
|
||||
Ag0EUin7tAEQAK5/AEIBLlA/TTgjUF3im6nu/rkWTM7/gs5H4W0a04kF4UPhaJUR
|
||||
gCNlDfUnBFA0QD7Jja5LHYgLdoHXiFelPhGrbZel/Sw6sH2gkGCBtFMrVkm3u7tt
|
||||
x3AZlprqqRH68Y5xTCEjGRncCAmaDgd2apgisJqXpu0dRDroFYpJFNH3vw9N2a62
|
||||
0ShNakYP4ykVG3jTDC4MSl2q3BO5dzn8GYFHU0CNz6nf3gZR+48BG+zmAT77peTS
|
||||
+C4Mbd6LmMmB0cuS2kYiFRwE2B69UWguLHjpXFcu9/85JJVCl2CIab7l5hpqGmgw
|
||||
G/yW8HFK04Yhew7ZJOXJfUYlv1EZzR5bOsZ8Z9inC6hvFmxuCYCFnvkiEI+pOxPA
|
||||
oeNOkMaT/W4W+au0ZVt3Hx+oD0pkJb5if0jrCaoAD4gpWOte6LZA8mAbKTxkHPBr
|
||||
rA9/JFis5CVNI688O6eDiJqCCJjPOQA+COJI+0V+tFa6XyHPB4LxA46RxtumUZMC
|
||||
v/06sDJlXMNpZbSd5Fq95YfZd4l9Vr9VrvKXfbomn+akwUymP8RDyc6Z8BzjF4Y5
|
||||
02m6Ts0J0MnSYfEDqJPPZbMGB+GAgAqLs7FrZJQzOZTiOXOSIJsKMYsPIDWE8lXv
|
||||
s77rs0rGvgvQfWzPsJlMIx6ryrMnAsfOkzM2GChGNX9+pABpgOdYII4bABEBAAGJ
|
||||
Ah8EGAECAAkFAlIp+7QCGwwACgkQyPABKoQhYr+hrg/9Er0+HN78y6UWGFHu/KVK
|
||||
d8M6ekaqjQndQXmzQaPQwsOHOvWdC+EtBoTdR3VIjAtX96uvzCRV3sb0XPB9S9eP
|
||||
gRrO/t5+qTVTtjua1zzjZsMOr1SxhBgZ5+0U2aoY1vMhyIjUuwpKKNqj2uf+uj5Y
|
||||
ZQbCNklghf7EVDHsYQ4goB9gsNT7rnmrzSc6UUuJOYI2jjtHp5BPMBHh2WtUVfYP
|
||||
8JqDfQ+eJQr5NCFB24xMW8OxMJit3MGckUbcZlUa1wKiTb0b76fOjt0y/+9u1ykd
|
||||
X+i27DAM6PniFG8BfqPq/E3iU20IZGYtaAFBuhhDWR3vGY4+r3OxdlFAJfBG9XDD
|
||||
aEDTzv1XF+tEBo69GFaxXZGdk9//7qxcgiya4LL9Kltuvs82+ZzQhC09p8d3YSQN
|
||||
cfaYObm4EwbINdKP7cr4anGFXvsLC9urhow/RNBLiMbRX/5qBzx2DayXtxEnDlSC
|
||||
Mh7wCkNDYkSIZOrPVUFOCGxu7lloRgPxEetM5x608HRa3hDHoe5KvUBmmtavB/aR
|
||||
zlGuZP1S6Y7S13ytiULSzTfUxJmyGYgNo+4ygh0i6Dudf9NLmV+i9aEIbLbd6bni
|
||||
1B/y8hBSx3SVb4sQVRe3clBkfS1/mYjlldtYjzOwcd02x599KJlcChf8HnWFB7qT
|
||||
zB3yrr+vYBT0uDWmxwPjiJs=
|
||||
=ytEf
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
```
|
13
README.md
|
@ -24,7 +24,7 @@ access from remote to a system.
|
|||
THIS TOOL IS FOR LEGAL PURPOSES ONLY!
|
||||
|
||||
There are already several login hacker tools available, however, none does
|
||||
either support more than one protocol to attack or support parallized
|
||||
either support more than one protocol to attack or support parallelized
|
||||
connects.
|
||||
|
||||
It was tested to compile cleanly on Linux, Windows/Cygwin, Solaris,
|
||||
|
@ -34,8 +34,8 @@ Currently this tool supports the following protocols:
|
|||
Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP,
|
||||
HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY,
|
||||
HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST,
|
||||
HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener,
|
||||
Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin,
|
||||
HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MEMCACHED, MONGODB, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener,
|
||||
Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, Radmin, RDP, Rexec, Rlogin,
|
||||
Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5,
|
||||
SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth,
|
||||
VNC and XMPP.
|
||||
|
@ -81,7 +81,8 @@ for a few optional modules (note that some might not be available on your distri
|
|||
```
|
||||
apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev \
|
||||
libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev \
|
||||
firebird-dev
|
||||
firebird-dev libmemcached-dev libgpg-error-dev \
|
||||
libgcrypt11-dev libgcrypt20-dev
|
||||
```
|
||||
|
||||
This enables all optional modules and features with the exception of Oracle,
|
||||
|
@ -149,7 +150,7 @@ THIRD - check if the module has optional parameters
|
|||
e.g. hydra -U smtp
|
||||
|
||||
FOURTH - the destination port
|
||||
this is optional! if no port is supplied the default common port for the
|
||||
this is optional, if no port is supplied the default common port for the
|
||||
PROTOCOL is used.
|
||||
If you specify SSL to use ("-S" option), the SSL common port is used by default.
|
||||
|
||||
|
@ -166,7 +167,7 @@ All attacks are then IPv6 only!
|
|||
If you want to supply your targets via a text file, you can not use the ://
|
||||
notation but use the old style and just supply the protocol (and module options):
|
||||
hydra [some command line options] -M targets.txt ftp
|
||||
You can supply also the port for each target entry by adding ":<port>" after a
|
||||
You can also supply the port for each target entry by adding ":<port>" after a
|
||||
target entry in the file, e.g.:
|
||||
|
||||
```
|
||||
|
|
317
configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# uname -s = Linux | OpenBSD | FreeBSD
|
||||
# uname -s = Linux | OpenBSD | FreeBSD | Darwin
|
||||
# uname -m = i636 or x86_64
|
||||
|
||||
if [ "$1" = "-h" -o "$1" = "--help" ]; then
|
||||
|
@ -38,6 +38,7 @@ WSSL_LIB_PATH=""
|
|||
CURSES_PATH=""
|
||||
CURSES_IPATH=""
|
||||
CRYPTO_PATH=""
|
||||
GPGERROR_IPATH=""
|
||||
IDN_PATH=""
|
||||
IDN_IPATH=""
|
||||
PR29_IPATH=""
|
||||
|
@ -48,6 +49,12 @@ FIREBIRD_PATH=""
|
|||
FIREBIRD_IPATH=""
|
||||
MYSQL_PATH=""
|
||||
MYSQL_IPATH=""
|
||||
MCACHED_PATH=""
|
||||
MCACHED_IPATH=""
|
||||
MONGODB_PATH=""
|
||||
MONGODB_IPATH=""
|
||||
BSON_PATH=""
|
||||
BSON_IPATH=""
|
||||
AFP_PATH=""
|
||||
AFP_IPATH=""
|
||||
NCP_PATH=""
|
||||
|
@ -63,6 +70,8 @@ NSL_PATH=""
|
|||
SOCKET_PATH=""
|
||||
MANDIR=""
|
||||
XHYDRA_SUPPORT=""
|
||||
FREERDP2_PATH=""
|
||||
WINPR2_PATH=""
|
||||
|
||||
if [ '!' "X" = "X$*" ]; then
|
||||
while [ $# -gt 0 ] ; do
|
||||
|
@ -117,6 +126,7 @@ echo "Starting hydra auto configuration ..."
|
|||
rm -f Makefile.in
|
||||
SYSS=`uname -s 2> /dev/null`
|
||||
SYSO=`uname -o 2> /dev/null`
|
||||
SYSM=`uname -m 2> /dev/null`
|
||||
if [ "$SYSS" = "Linux" -o "$SYSS" = "OpenBSD" -o "$SYSS" = "FreeBSD" -o "$SYSS" = "NetBSD" -o "$SYSS" = "Darwin" ]; then
|
||||
SF=`uname -m | grep 64`
|
||||
if [ `uname -m` = "s390x" ]; then
|
||||
|
@ -252,22 +262,33 @@ if [ "$SSL_IPATH" = "/usr/include" ]; then
|
|||
SSL_IPATH=""
|
||||
fi
|
||||
|
||||
echo "Checking for gcrypt (libgcrypt.so) ..."
|
||||
echo "Checking for gcrypt (libgcrypt.so, gpg-error.h) ..."
|
||||
for i in $LIBDIRS ; do
|
||||
if [ "X" = "X$GCRYPT_PATH" ]; then
|
||||
if [ -f "$i/libgcrypt.so" -o -f "$i/libgcrypt.dylib" -o -f "$i/libgcrypt.a" -o -f "$i/libgcrypt.dll.a" -o -f "$i/libgcrypt.la" ]; then
|
||||
if [ -f "$i/libgcrypt.so" -o -f "$i/libgcrypt.dylib" -o -f "$i/libgcrypt.a" -o -f "$i/libgcrypt.dll.a" -o -f "$i/libgcrypt.la" ]; then
|
||||
HAVE_GCRYPT="y"
|
||||
fi
|
||||
done
|
||||
|
||||
for i in $INCDIRS ; do
|
||||
if [ "X" = "X$GPGERROR_IPATH" ]; then
|
||||
TMP_PATH=`/bin/ls $i/$SYSM*/gpg-error.h 2> /dev/null`
|
||||
if [ -n "$TMP_PATH" ]; then
|
||||
GPGERROR_IPATH="$i"
|
||||
else
|
||||
if [ -f "$i/gpg-error.h" ]; then
|
||||
GPGERROR_IPATH="$i"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
if [ -n "$HAVE_GCRYPT" ]; then
|
||||
echo " ... found"
|
||||
|
||||
if [ -n "$HAVE_GCRYPT" -a "X" != "X$GPGERROR_IPATH" ]; then
|
||||
echo " ... found"
|
||||
else
|
||||
echo " ... gcrypt not found, radmin2 module disabled"
|
||||
echo " ... gcrypt not found, radmin2 module disabled"
|
||||
HAVE_GCRYPT=""
|
||||
fi
|
||||
|
||||
|
||||
|
||||
echo "Checking for idn (libidn.so) ..."
|
||||
for i in $LIBDIRS ; do
|
||||
if [ "X" = "X$IDN_PATH" ]; then
|
||||
|
@ -549,6 +570,10 @@ for i in $INCDIRS ; do
|
|||
fi
|
||||
fi
|
||||
done
|
||||
SYS_PARAM=""
|
||||
if [ -f "$SDK_PATH/usr/include/sys/param.h" ]; then
|
||||
SYS_PARAM=-DHAVE_SYS_PARAM_H
|
||||
fi
|
||||
if [ "X" != "X$DEBUG" ]; then
|
||||
echo DEBUG: SVN_PATH=$SVN_PATH/libsvn_client-1
|
||||
echo DEBUG: APR_PATH=$APR_PATH/libapr
|
||||
|
@ -940,6 +965,218 @@ if [ "X" = "X$ORACLE_PATH" -o "X" = "X$ORACLE_IPATH" ]; then
|
|||
ORACLE_IPATH=""
|
||||
fi
|
||||
|
||||
echo "Checking for Memcached (libmemcached.so, memcached.h) ..."
|
||||
|
||||
for i in $LIBDIRS ; do
|
||||
if [ "X" = "X$MCACHED_PATH" ]; then
|
||||
if [ -f "$i/libmemcached.so" -o -f "$i/libmemcached.dylib" -o -f "$i/libmemcached.a" ]; then
|
||||
MCACHED_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$MCACHED_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/libmemcached.so* 2> /dev/null | grep memcached`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
MCACHED_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$MCACHED_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/libmemcached.dll* 2> /dev/null | grep memcached`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
MCACHED_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
MCACHED_IPATH=
|
||||
for i in $INCDIRS ; do
|
||||
if [ "X" = "X$MCACHED_IPATH" ]; then
|
||||
if [ -f "$i/memcached.h" ]; then
|
||||
MCACHED_IPATH="$i"
|
||||
fi
|
||||
if [ -f "$i/libmemcached/memcached.h" ]; then
|
||||
MCACHED_IPATH="$i/libmemcached"
|
||||
fi
|
||||
if [ -f "$i/libmemcached-1.0/memcached.h" ]; then
|
||||
MCACHED_IPATH="$i/libmemcached-1.0"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "X" != "X$DEBUG" ]; then
|
||||
echo DEBUG: MCACHED_PATH=$MCACHED_PATH/libmemcached
|
||||
echo DEBUG: MCACHED_IPATH=$MCACHED_IPATH/memcached.h
|
||||
fi
|
||||
if [ -n "$MCACHED_PATH" -a -n "$MCACHED_IPATH" ]; then
|
||||
echo " ... found"
|
||||
fi
|
||||
if [ "X" = "X$MCACHED_PATH" -o "X" = "X$MCACHED_IPATH" ]; then
|
||||
echo " ... NOT found, module memcached disabled"
|
||||
MCACHED_PATH=""
|
||||
MCACHED_IPATH=""
|
||||
fi
|
||||
|
||||
|
||||
echo "Checking for Freerdp2 (libfreerdp2.so, freerdp/*.h, libwinpr2.so, winpr/*.h) ..."
|
||||
|
||||
for i in $LIBDIRS ; do
|
||||
if [ "X" = "X$FREERDP2_PATH" ]; then
|
||||
if [ -f "$i/libfreerdp2.so" -o -f "$i/libfreerdp2.dylib" -o -f "$i/libfreerdp2.a" ]; then
|
||||
FREERDP2_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$FREERDP2_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/libfreerdp2*.so* 2> /dev/null | grep libfreerdp2`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
FREERDP2_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
FREERDP2_IPATH=
|
||||
for i in $INCDIRS ; do
|
||||
if [ "X" = "X$FREERDP2_IPATH" ]; then
|
||||
if [ -f "$i/freerdp/freerdp.h" ]; then
|
||||
FREERDP2_IPATH="$i/freerdp2"
|
||||
fi
|
||||
if [ -f "$i/freerdp2/freerdp/freerdp.h" ]; then
|
||||
FREERDP2_IPATH="$i/freerdp2"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
for i in $LIBDIRS ; do
|
||||
if [ "X" = "X$WINPR2_PATH" ]; then
|
||||
if [ -f "$i/libwinpr2.so" -o -f "$i/libwinpr2.dylib" -o -f "$i/libwinpr2.a" ]; then
|
||||
WINPR2_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$WINPR2_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/winpr.dll* 2> /dev/null | grep winpr`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
WINPR2_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
WINPR2_IPATH=
|
||||
for i in $INCDIRS ; do
|
||||
if [ "X" = "X$WINPR2_IPATH" ]; then
|
||||
if [ -f "$i/winpr.h" ]; then
|
||||
WINPR2_IPATH="$i"
|
||||
fi
|
||||
if [ -f "$i/winpr2/winpr/winpr.h" ]; then
|
||||
WINPR2_IPATH="$i/winpr2"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "X" != "X$DEBUG" ]; then
|
||||
echo DEBUG: FREERDP2_PATH=$FREERDP2_PATH/
|
||||
echo DEBUG: FREERDP2_IPATH=$FREERDP2_IPATH/
|
||||
echo DEBUG: WINPR2_PATH=$WINPR2_PATH/
|
||||
echo DEBUG: WINPR2_IPATH=$WINPR2_IPATH/
|
||||
fi
|
||||
|
||||
if [ -n "$FREERDP2_PATH" -a -n "$FREERDP2_IPATH" -a -n "$WINPR2_PATH" -a -n "$WINPR2_IPATH" ]; then
|
||||
echo " ... found"
|
||||
fi
|
||||
if [ "X" = "X$FREERDP2_PATH" -o "X" = "X$FREERDP2_IPATH" -o "X" = "X$WINPR2_PATH" -o "X" = "X$WINPR2_IPATH" ]; then
|
||||
echo " ... NOT found, module rdp disabled"
|
||||
FREERDP2_PATH=""
|
||||
FREERDP2_IPATH=""
|
||||
WINPR2_PATH=""
|
||||
WINPR2_IPATH=""
|
||||
fi
|
||||
|
||||
echo "Checking for Mongodb (libmongoc-1.0.so, mongoc.h, libbson-1.0.so, bson.h) ..."
|
||||
|
||||
for i in $LIBDIRS ; do
|
||||
if [ "X" = "X$MONGODB_PATH" ]; then
|
||||
if [ -f "$i/libmongoc-1.0.so" -o -f "$i/libmongoc-1.0.dylib" -o -f "$i/libmongoc-1.0.a" ]; then
|
||||
MONGODB_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$MONGODB_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/libmongoc-*.so* 2> /dev/null | grep mongoc`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
MONGODB_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$MONGODB_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/libmongoc.dll* 2> /dev/null | grep mongoc`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
MONGODB_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
MONGODB_IPATH=
|
||||
for i in $INCDIRS ; do
|
||||
if [ "X" = "X$MONGODB_IPATH" ]; then
|
||||
if [ -f "$i/mongoc.h" ]; then
|
||||
MONGODB_IPATH="$i"
|
||||
fi
|
||||
if [ -f "$i/libmongoc/mongoc.h" ]; then
|
||||
MONGODB_IPATH="$i/libmongoc"
|
||||
fi
|
||||
if [ -f "$i/libmongoc-1.0/mongoc.h" ]; then
|
||||
MONGODB_IPATH="$i/libmongoc-1.0"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
for i in $LIBDIRS ; do
|
||||
if [ "X" = "X$BSON_PATH" ]; then
|
||||
if [ -f "$i/libbson-1.0.so" -o -f "$i/libbson-1.0.dylib" -o -f "$i/libbson-1.0.a" ]; then
|
||||
BSON_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$BSON_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/libbson-*.so* 2> /dev/null | grep mongoc`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
BSON_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
if [ "X" = "X$BSON_PATH" ]; then
|
||||
TMP_LIB=`/bin/ls $i/libbson.dll* 2> /dev/null | grep mongoc`
|
||||
if [ -n "$TMP_LIB" ]; then
|
||||
BSON_PATH="$i"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
BSON_IPATH=
|
||||
for i in $INCDIRS ; do
|
||||
if [ "X" = "X$BSON_IPATH" ]; then
|
||||
if [ -f "$i/bson.h" ]; then
|
||||
BSON_IPATH="$i"
|
||||
fi
|
||||
if [ -f "$i/libbson/bson.h" ]; then
|
||||
BSON_IPATH="$i/libbson"
|
||||
fi
|
||||
if [ -f "$i/libbson-1.0/bson.h" ]; then
|
||||
BSON_IPATH="$i/libbson-1.0"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "X" != "X$DEBUG" ]; then
|
||||
echo DEBUG: MONGODB_PATH=$MONGODB_PATH/libmongoc
|
||||
echo DEBUG: MONGODB_IPATH=$MONGODB_IPATH/libmongoc.h
|
||||
echo DEBUG: BSON_PATH=$BSON_PATH/libbson
|
||||
echo DEBUG: BSON_IPATH=$BSON_IPATH/libbson.h
|
||||
fi
|
||||
|
||||
if [ -n "$MONGODB_PATH" -a -n "$MONGODB_IPATH" -a -n "$BSON_PATH" -a -n "$BSON_IPATH" ]; then
|
||||
echo " ... found"
|
||||
fi
|
||||
if [ "X" = "X$MONGODB_PATH" -o "X" = "X$MONGODB_IPATH" -o "X" = "X$BSON_PATH" -o "X" = "X$BSON_IPATH" ]; then
|
||||
echo " ... NOT found, module mongodb disabled"
|
||||
MONGODB_PATH=""
|
||||
MONGODB_IPATH=""
|
||||
BSON_PATH=""
|
||||
BSON_IPATH=""
|
||||
fi
|
||||
|
||||
if [ "X" = "X$XHYDRA_SUPPORT" ]; then
|
||||
echo "Checking for GUI req's (pkg-config, gtk+-2.0) ..."
|
||||
|
@ -1034,8 +1271,17 @@ XLIBS=""
|
|||
XLIBPATHS=""
|
||||
XIPATHS=""
|
||||
|
||||
if [ -n "$FIREBIRD_PATH" -o -n "$PCRE_PATH" -o -n "$IDN_PATH" -o -n "$SSL_PATH" -o -n "$CRYPTO_PATH" -o -n "$NSL_PATH" -o -n "$SOCKET_PATH" -o -n "$RESOLV_PATH" -o -n "$SAPR3_PATH" -o -n "$SSH_PATH" -o -n "$POSTGRES_PATH" -o -n "$SVN_PATH" -o -n "$NCP_PATH" -o -n "$CURSES_PATH" -o -n "$ORACLE_PATH" -o -n "$AFP_PATH" -o -n "$MYSQL_PATH" ]; then
|
||||
XLIBPATHS="-L/usr/lib -L/usr/local/lib -L/lib"
|
||||
if [ -n "$FIREBIRD_PATH" -o -n "$PCRE_PATH" -o -n "$IDN_PATH" -o -n "$SSL_PATH" -o -n "$CRYPTO_PATH" -o -n "$NSL_PATH" -o -n "$SOCKET_PATH" -o -n "$RESOLV_PATH" -o -n "$SAPR3_PATH" -o -n "$SSH_PATH" -o -n "$POSTGRES_PATH" -o -n "$SVN_PATH" -o -n "$NCP_PATH" -o -n "$CURSES_PATH" -o -n "$ORACLE_PATH" -o -n "$AFP_PATH" -o -n "$MYSQL_PATH" -o -n "$MCACHED_PATH" -o -n "$MONGOD_PATH" -o -n "$FREERDP2_PATH" -o -n "$WINPR2_PATH" ]; then
|
||||
if [ "$SYSS" = "Darwin" ] && [ ! -d "/lib" ]; then
|
||||
#for libraries installed with MacPorts
|
||||
if [ -d "/opt/local/lib" ]; then
|
||||
XLIBPATHS="-L/usr/lib -L/usr/local/lib -L/opt/local/lib"
|
||||
else
|
||||
XLIBPATHS="-L/usr/lib -L/usr/local/lib"
|
||||
fi
|
||||
else
|
||||
XLIBPATHS="-L/usr/lib -L/usr/local/lib -L/lib"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$MYSQL_IPATH" ]; then
|
||||
XIPATHS="$XIPATHS -I$MYSQL_IPATH"
|
||||
|
@ -1098,10 +1344,24 @@ fi
|
|||
if [ -n "$HAVE_GCRYPT" ]; then
|
||||
XDEFINES="$XDEFINES -DHAVE_GCRYPT"
|
||||
fi
|
||||
|
||||
if [ -n "$MCACHED_PATH" ]; then
|
||||
XDEFINES="$XDEFINES -DLIBMCACHED"
|
||||
fi
|
||||
if [ -n "$MONGODB_PATH" ]; then
|
||||
XDEFINES="$XDEFINES -DLIBMONGODB"
|
||||
fi
|
||||
if [ -n "$BSON_PATH" ]; then
|
||||
XDEFINES="$XDEFINES -DLIBBSON"
|
||||
fi
|
||||
if [ -n "$FREERDP2_PATH" ]; then
|
||||
XDEFINES="$XDEFINES -DLIBFREERDP2"
|
||||
fi
|
||||
if [ -n "$WINPR2_PATH" ]; then
|
||||
XDEFINES="$XDEFINES -DLIBWINPR2"
|
||||
fi
|
||||
|
||||
OLDPATH=""
|
||||
for i in $SSL_PATH $FIREBIRD_PATH $WORACLE_LIB_PATH $PCRE_PATH $IDN_PATH $CRYPTO_PATH $SSH_PATH $NSL_PATH $SOCKET_PATH $RESOLV_PATH $SAPR3_PATH $POSTGRES_PATH $SVN_PATH $NCP_PATH $CURSES_PATH $ORACLE_PATH $AFP_PATH $MYSQL_PATH; do
|
||||
for i in $SSL_PATH $FIREBIRD_PATH $WORACLE_LIB_PATH $PCRE_PATH $IDN_PATH $CRYPTO_PATH $SSH_PATH $NSL_PATH $SOCKET_PATH $RESOLV_PATH $SAPR3_PATH $POSTGRES_PATH $SVN_PATH $NCP_PATH $CURSES_PATH $ORACLE_PATH $AFP_PATH $MYSQL_PATH $MCACHED_PATH $MONGODB_PATH $BSON_PATH $FREERDP2_PATH $WINPR2_PATH; do
|
||||
if [ "$OLDPATH" = "$i" ]; then
|
||||
OLDPATH="$i"
|
||||
else
|
||||
|
@ -1154,6 +1414,15 @@ fi
|
|||
if [ -n "$ORACLE_IPATH" ]; then
|
||||
XIPATHS="$XIPATHS -I$ORACLE_IPATH"
|
||||
fi
|
||||
if [ -n "$MCACHED_IPATH" ]; then
|
||||
XIPATHS="$XIPATHS -I$MCACHED_IPATH"
|
||||
fi
|
||||
if [ -n "$MONGODB_IPATH" ]; then
|
||||
XIPATHS="$XIPATHS -I$MONGODB_IPATH -I$BSON_IPATH"
|
||||
fi
|
||||
if [ -n "$FREERDP2_IPATH" ]; then
|
||||
XIPATHS="$XIPATHS -I$FREERDP2_IPATH -I$WINPR2_IPATH"
|
||||
fi
|
||||
if [ -n "$HAVE_GCRYPT" ]; then
|
||||
XLIBS="$XLIBS -lgcrypt"
|
||||
fi
|
||||
|
@ -1217,7 +1486,21 @@ fi
|
|||
if [ -n "$RESOLV_PATH" ]; then
|
||||
XLIBS="$XLIBS -lresolv"
|
||||
fi
|
||||
|
||||
if [ -n "$MCACHED_PATH" ]; then
|
||||
XLIBS="$XLIBS -lmemcached"
|
||||
fi
|
||||
if [ -n "$MONGODB_PATH" ]; then
|
||||
XLIBS="$XLIBS -lmongoc-1.0"
|
||||
fi
|
||||
if [ -n "$BSON_PATH" ]; then
|
||||
XLIBS="$XLIBS -lbson-1.0"
|
||||
fi
|
||||
if [ -n "$FREERDP2_PATH" ]; then
|
||||
XLIBS="$XLIBS -lfreerdp2"
|
||||
fi
|
||||
if [ -n "$WINPR2_PATH" ]; then
|
||||
XLIBS="$XLIBS -lwinpr2"
|
||||
fi
|
||||
if [ -d /usr/kerberos/include ]; then
|
||||
XIPATHS="$XIPATHS -I/usr/kerberos/include"
|
||||
fi
|
||||
|
@ -1244,7 +1527,7 @@ else
|
|||
fi
|
||||
|
||||
if [ "X" != "X$DEBUG" ]; then
|
||||
echo DEBUG: XDEFINES=$XDEFINES $MATH
|
||||
echo DEBUG: XDEFINES=$XDEFINES $MATH $SYS_PARAM
|
||||
echo DEBUG: XLIBS=$XLIBS
|
||||
echo DEBUG: XLIBPATHS=$XLIBPATHS
|
||||
echo DEBUG: XIPATHS=$XIPATHS
|
||||
|
@ -1262,7 +1545,7 @@ if [ "X" != "X$FHS" ]; then
|
|||
echo "MANDIR = /share/man/man1" >> Makefile.in
|
||||
echo "DATADIR = /share/hydra" >> Makefile.in
|
||||
fi
|
||||
echo "XDEFINES=$XDEFINES $MATH" >> Makefile.in
|
||||
echo "XDEFINES=$XDEFINES $MATH $SYS_PARAM" >> Makefile.in
|
||||
echo "XLIBS=$XLIBS" >> Makefile.in
|
||||
echo "XLIBPATHS=$XLIBPATHS" >> Makefile.in
|
||||
echo "XIPATHS=$XIPATHS" >> Makefile.in
|
||||
|
@ -1300,7 +1583,7 @@ if [ "x$WINDRES" = "x" ]; then
|
|||
echo HYDRA_LOGO= >> Makefile
|
||||
echo PWI_LOGO= >> Makefile
|
||||
fi
|
||||
if [ "$GCCSEC" = "yes" ] && [ "$SYSS" != "SunOS" ]; then
|
||||
if [ "$GCCSEC" = "yes" ] && [ "$SYSS" != "SunOS" ] && [ "$SYSS" != "Darwin" ]; then
|
||||
echo "SEC=$GCCSECOPT" >> Makefile
|
||||
else
|
||||
echo "SEC=" >> Makefile
|
||||
|
|
|
@ -54,7 +54,7 @@ static int32_t server_subconnect(struct afp_url url) {
|
|||
|
||||
if (strlen(url.uamname) > 0) {
|
||||
if ((conn_req->uam_mask = find_uam_by_name(url.uamname)) == 0) {
|
||||
fprintf(stderr, "[ERROR] Unknown UAM: %s", url.uamname);
|
||||
fprintf(stderr, "[ERROR] Unknown UAM: %s\n", url.uamname);
|
||||
FREE(conn_req);
|
||||
FREE(server);
|
||||
return -1;
|
||||
|
|
|
@ -114,6 +114,7 @@ void service_asterisk(char *ip, int32_t sp, unsigned char options, char *miscptr
|
|||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
default:
|
||||
hydra_report(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
||||
hydra_child_exit(2);
|
||||
|
|
|
@ -155,10 +155,12 @@ void service_ftp_core(char *ip, int32_t sp, unsigned char options, char *miscptr
|
|||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
case 4: /* clean exit */
|
||||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
default:
|
||||
hydra_report(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
||||
hydra_child_exit(2);
|
||||
|
|
|
@ -690,7 +690,7 @@ void on_btnSave_clicked(GtkButton * button, gpointer user_data) {
|
|||
text = gtk_text_buffer_get_text(outputbuf, &start, &end, TRUE);
|
||||
|
||||
fd = open(filename, O_CREAT | O_TRUNC | O_WRONLY, 0644);
|
||||
if (fd > 0) {
|
||||
if (fd >= 0) {
|
||||
write(fd, text, strlen(text));
|
||||
close(fd);
|
||||
}
|
||||
|
|
|
@ -248,6 +248,8 @@ GtkWidget *create_wndMain(void) {
|
|||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "ldap3");
|
||||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "ldap3-crammd5");
|
||||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "ldap3-digestmd5");
|
||||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "memcached");
|
||||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "mongodb");
|
||||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "mssql");
|
||||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "mysql");
|
||||
cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "ncp");
|
||||
|
|
|
@ -50,10 +50,12 @@ Added fail or success condition, getting cookies, and allow 5 redirections by da
|
|||
*/
|
||||
|
||||
#include "hydra-http.h"
|
||||
#include "sasl.h"
|
||||
|
||||
extern char *HYDRA_EXIT;
|
||||
char *buf;
|
||||
char *cond;
|
||||
extern int32_t http_auth_mechanism;
|
||||
|
||||
struct header_node {
|
||||
char *header;
|
||||
|
@ -323,7 +325,7 @@ void hdrrep(ptr_header_node *ptr_head, char *oldvalue, char *newvalue) {
|
|||
if (cur_ptr->value)
|
||||
strcpy(cur_ptr->value, newvalue);
|
||||
else {
|
||||
hydra_report(stderr, "[ERROR] Out of memory (hddrep).");
|
||||
hydra_report(stderr, "[ERROR] Out of memory (hddrep).\n");
|
||||
hydra_child_exit(0);
|
||||
}
|
||||
}
|
||||
|
@ -342,7 +344,7 @@ void hdrrepv(ptr_header_node *ptr_head, char *hdrname, char *new_value) {
|
|||
if (cur_ptr->value)
|
||||
strcpy(cur_ptr->value, new_value);
|
||||
else {
|
||||
hydra_report(stderr, "[ERROR] Out of memory (hdrrepv %lu)", strlen(new_value) + 1);
|
||||
hydra_report(stderr, "[ERROR] Out of memory (hdrrepv %lu)\n", strlen(new_value) + 1);
|
||||
hydra_child_exit(0);
|
||||
}
|
||||
}
|
||||
|
@ -397,6 +399,29 @@ int32_t parse_options(char *miscptr, ptr_header_node *ptr_head) {
|
|||
*/
|
||||
while (*miscptr != 0) {
|
||||
switch (miscptr[0]) {
|
||||
case 'a': // fall through
|
||||
case 'A': // only for http, not http-form!
|
||||
ptr = miscptr + 2;
|
||||
|
||||
if (strncasecmp(ptr, "NTLM", 4) == 0)
|
||||
http_auth_mechanism = AUTH_NTLM;
|
||||
else if (strncasecmp(ptr, "MD5", 3) == 0 || strncasecmp(ptr, "DIGEST", 6) == 0)
|
||||
http_auth_mechanism = AUTH_DIGESTMD5;
|
||||
else if (strncasecmp(ptr, "BASIC", 4) == 0)
|
||||
http_auth_mechanism = AUTH_BASIC;
|
||||
else
|
||||
fprintf(stderr, "[WARNING] unknown http auth type: %s\n", ptr);
|
||||
|
||||
while (*ptr != 0 && *ptr != ':')
|
||||
ptr++;
|
||||
|
||||
if (*ptr != 0) {
|
||||
*ptr = 0;
|
||||
ptr += 1;
|
||||
}
|
||||
|
||||
miscptr = ptr;
|
||||
break;
|
||||
case 'c': // fall through
|
||||
case 'C':
|
||||
ptr = miscptr + 2;
|
||||
|
@ -416,7 +441,7 @@ int32_t parse_options(char *miscptr, ptr_header_node *ptr_head) {
|
|||
*(ptr - 1) = 0;
|
||||
if (*ptr != 0) {
|
||||
*ptr = 0;
|
||||
ptr += 2;
|
||||
ptr += 1;
|
||||
}
|
||||
ptr2 = ptr;
|
||||
while (*ptr2 != 0 && (*ptr2 != ':' || *(ptr2 - 1) == '\\'))
|
||||
|
@ -434,7 +459,7 @@ int32_t parse_options(char *miscptr, ptr_header_node *ptr_head) {
|
|||
break;
|
||||
}
|
||||
// Error: abort execution
|
||||
hydra_report(stderr, "[ERROR] Out of memory for HTTP headers (h).");
|
||||
hydra_report(stderr, "[ERROR] Out of memory for HTTP headers (h).\n");
|
||||
return 0;
|
||||
case 'H':
|
||||
// add a new header, or replace an existing one's value
|
||||
|
@ -447,7 +472,7 @@ int32_t parse_options(char *miscptr, ptr_header_node *ptr_head) {
|
|||
|
||||
if (*ptr != 0) {
|
||||
*ptr = 0;
|
||||
ptr += 2;
|
||||
ptr += 1;
|
||||
}
|
||||
ptr2 = ptr;
|
||||
while (*ptr2 != 0 && (*ptr2 != ':' || *(ptr2 - 1) == '\\'))
|
||||
|
@ -465,7 +490,7 @@ int32_t parse_options(char *miscptr, ptr_header_node *ptr_head) {
|
|||
break;
|
||||
}
|
||||
// Error: abort execution
|
||||
hydra_report(stderr, "[ERROR] Out of memory for HTTP headers (H).");
|
||||
hydra_report(stderr, "[ERROR] Out of memory for HTTP headers (H).\n");
|
||||
return 0;
|
||||
// no default
|
||||
}
|
||||
|
@ -1079,6 +1104,7 @@ void service_http_form(char *ip, int32_t sp, unsigned char options, char *miscpt
|
|||
* - 3 -> Disconnect and end with success.
|
||||
* - 4 -> Disconnect and end with error.
|
||||
*/
|
||||
|
||||
while (1) {
|
||||
if (run == 2) {
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) {
|
||||
|
@ -1235,11 +1261,18 @@ ptr_header_node initialize(char *ip, unsigned char options, char *miscptr) {
|
|||
ptr++;
|
||||
if (*ptr != 0)
|
||||
*ptr++ = 0;
|
||||
cond = ptr;
|
||||
|
||||
if ((ptr2 = rindex(ptr, ':')) != NULL) {
|
||||
cond = ptr2 + 1;
|
||||
*ptr2 = 0;
|
||||
} else
|
||||
cond = ptr;
|
||||
/*
|
||||
while (*ptr != 0 && (*ptr != ':' || *(ptr - 1) == '\\'))
|
||||
ptr++;
|
||||
if (*ptr != 0)
|
||||
*ptr++ = 0;
|
||||
*/
|
||||
optional1 = ptr;
|
||||
if (strstr(url, "\\:") != NULL) {
|
||||
if ((ptr = malloc(strlen(url))) != NULL) {
|
||||
|
@ -1281,6 +1314,8 @@ ptr_header_node initialize(char *ip, unsigned char options, char *miscptr) {
|
|||
success_cond = 0;
|
||||
}
|
||||
|
||||
//printf("miscptr: %s, url=%s, variables=%s, ptr=%s, optional1: %s, cond: %s (%d)\n", miscptr, url, variables, ptr, optional1, cond, success_cond);
|
||||
|
||||
/*
|
||||
* Parse the user-supplied options.
|
||||
* Beware of the backslashes (\)!
|
||||
|
@ -1299,7 +1334,7 @@ ptr_header_node initialize(char *ip, unsigned char options, char *miscptr) {
|
|||
strncat(proxy_string, proxy_authentication[selected_proxy], strlen(proxy_authentication[selected_proxy]) - 6);
|
||||
add_header(&ptr_head, "Proxy-Authorization", proxy_string, HEADER_TYPE_DEFAULT);
|
||||
} else {
|
||||
hydra_report(stderr, "Out of memory for \"Proxy-Authorization\" header.");
|
||||
hydra_report(stderr, "Out of memory for \"Proxy-Authorization\" header.\n");
|
||||
return NULL;
|
||||
}
|
||||
if (getcookie) {
|
||||
|
@ -1362,7 +1397,7 @@ void usage_http_form(const char *service) {
|
|||
" This is where most people get it wrong. You have to check the webapp what a\n"
|
||||
" failed string looks like and put it in this parameter!\n"
|
||||
"The following parameters are optional:\n"
|
||||
" C=/page/uri to define a different page to gather initial cookies from\n"
|
||||
" (c|C)=/page/uri to define a different page to gather initial cookies from\n"
|
||||
" (h|H)=My-Hdr\\: foo to send a user defined HTTP header with each request\n"
|
||||
" ^USER[64]^ and ^PASS[64]^ can also be put into these headers!\n"
|
||||
" Note: 'h' will add the user-defined header at the end\n"
|
||||
|
|
|
@ -8,7 +8,7 @@ char *http_proxy_buf = NULL;
|
|||
int32_t start_http_proxy(int32_t s, char *ip, int32_t port, unsigned char options, char *miscptr, FILE * fp, char *hostname) {
|
||||
char *empty = "";
|
||||
char *login, *pass, buffer[500], buffer2[500];
|
||||
char url[210], host[30];
|
||||
char url[210], host[60];
|
||||
char *header = ""; /* XXX TODO */
|
||||
char *ptr, *fooptr;
|
||||
|
||||
|
@ -23,7 +23,7 @@ int32_t start_http_proxy(int32_t s, char *ip, int32_t port, unsigned char option
|
|||
} else {
|
||||
sprintf(url, "%.200s", miscptr);
|
||||
ptr = strstr(miscptr, "://"); // :// check is in hydra.c
|
||||
sprintf(host, "Host: %.200s", ptr + 3);
|
||||
sprintf(host, "Host: %.50s", ptr + 3);
|
||||
if ((ptr = index(host, '/')) != NULL)
|
||||
*ptr = 0;
|
||||
if ((ptr = index(host + 6, ':')) != NULL && host[0] != '[')
|
||||
|
|
127
hydra-http.c
|
@ -1,19 +1,26 @@
|
|||
#include "hydra-http.h"
|
||||
#include "sasl.h"
|
||||
|
||||
|
||||
|
||||
extern char *HYDRA_EXIT;
|
||||
char *webtarget = NULL;
|
||||
char *slash = "/";
|
||||
char *http_buf = NULL;
|
||||
|
||||
#define END_CONDITION_MAX_LEN 100
|
||||
static char end_condition[END_CONDITION_MAX_LEN];
|
||||
int end_condition_type=-1;
|
||||
|
||||
int32_t webport, freemischttp = 0;
|
||||
int32_t http_auth_mechanism = AUTH_BASIC;
|
||||
int32_t http_auth_mechanism = AUTH_UNASSIGNED;
|
||||
|
||||
int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, char *miscptr, FILE * fp, char *type, ptr_header_node ptr_head) {
|
||||
char *empty = "";
|
||||
char *login, *pass, *buffer, buffer2[500];
|
||||
char *header;
|
||||
char *ptr, *fooptr;
|
||||
int32_t complete_line = 0;
|
||||
int32_t complete_line = 0, buffer_size;
|
||||
char tmpreplybuf[1024] = "", *tmpreplybufptr;
|
||||
|
||||
if (strlen(login = hydra_get_next_login()) == 0)
|
||||
|
@ -26,7 +33,8 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
|
||||
header = stringify_headers(&ptr_head);
|
||||
|
||||
if(!(buffer = malloc(strlen(header) + 500))) {
|
||||
buffer_size = strlen(header) + 500;
|
||||
if(!(buffer = malloc(buffer_size))) {
|
||||
free(header);
|
||||
return 3;
|
||||
}
|
||||
|
@ -63,14 +71,14 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
char *pbuffer;
|
||||
|
||||
pbuffer = hydra_strcasestr(http_buf, "WWW-Authenticate: Digest ");
|
||||
strncpy(buffer, pbuffer + strlen("WWW-Authenticate: Digest "), sizeof(buffer));
|
||||
buffer[sizeof(buffer) - 1] = '\0';
|
||||
strncpy(buffer, pbuffer + strlen("WWW-Authenticate: Digest "), buffer_size - 1);
|
||||
buffer[buffer_size - 1] = '\0';
|
||||
|
||||
fooptr = buffer2;
|
||||
sasl_digest_md5(fooptr, login, pass, buffer, miscptr, type, webtarget, webport, header);
|
||||
if (fooptr == NULL) {
|
||||
free(buffer);
|
||||
free(header);
|
||||
free(buffer);
|
||||
free(header);
|
||||
return 3;
|
||||
}
|
||||
|
||||
|
@ -95,38 +103,37 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
//send the first..
|
||||
if (use_proxy == 1 && proxy_authentication[selected_proxy] != NULL)
|
||||
sprintf(buffer,
|
||||
"%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nAuthorization: NTLM %s\r\nProxy-Authorization: Basic %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\nConnection: keep-alive\r\n%s\r\n",
|
||||
"%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nAuthorization: NTLM %s\r\nProxy-Authorization: Basic %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\n%s\r\n",
|
||||
type, webtarget, webport, miscptr, webtarget, buf1, proxy_authentication[selected_proxy], header);
|
||||
else {
|
||||
if (use_proxy == 1)
|
||||
sprintf(buffer, "%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\nConnection: keep-alive\r\n%s\r\n",
|
||||
sprintf(buffer, "%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\n%s\r\n",
|
||||
type, webtarget, webport, miscptr, webtarget, buf1, header);
|
||||
else
|
||||
sprintf(buffer, "%s %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\nConnection: keep-alive\r\n%s\r\n", type, miscptr, webtarget,
|
||||
sprintf(buffer, "%s %s HTTP/1.1\r\nHost: %s\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\n%s\r\n", type, miscptr, webtarget,
|
||||
buf1, header);
|
||||
}
|
||||
|
||||
if (hydra_send(s, buffer, strlen(buffer), 0) < 0) {
|
||||
free(buffer);
|
||||
free(header);
|
||||
free(buffer);
|
||||
free(header);
|
||||
return 1;
|
||||
}
|
||||
|
||||
//receive challenge
|
||||
if (http_buf != NULL)
|
||||
free(http_buf);
|
||||
|
||||
http_buf = hydra_receive_line(s);
|
||||
while (http_buf != NULL && (pos = hydra_strcasestr(http_buf, "WWW-Authenticate: NTLM ")) == NULL) {
|
||||
free(http_buf);
|
||||
http_buf = hydra_receive_line(s);
|
||||
}
|
||||
|
||||
if (http_buf == NULL) {
|
||||
free(buffer);
|
||||
free(header);
|
||||
return 1;
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[ERROR] Server did not answer\n");
|
||||
free(buffer);
|
||||
free(header);
|
||||
return 3;
|
||||
}
|
||||
|
||||
pos = hydra_strcasestr(http_buf, "WWW-Authenticate: NTLM ");
|
||||
if (pos != NULL) {
|
||||
char *str;
|
||||
|
||||
|
@ -137,7 +144,11 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
if ((str = strchr(pos, '\n')) != NULL) {
|
||||
pos[str - pos] = 0;
|
||||
}
|
||||
} else {
|
||||
hydra_report(stderr, "[ERROR] It is not NTLM authentication type\n");
|
||||
return 3;
|
||||
}
|
||||
|
||||
//recover challenge
|
||||
from64tobits((char *) buf1, pos);
|
||||
free(http_buf);
|
||||
|
@ -150,14 +161,14 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
//create the auth response
|
||||
if (use_proxy == 1 && proxy_authentication[selected_proxy] != NULL)
|
||||
sprintf(buffer,
|
||||
"%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nAuthorization: NTLM %s\r\nProxy-Authorization: Basic %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\nConnection: keep-alive\r\n%s\r\n",
|
||||
"%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nAuthorization: NTLM %s\r\nProxy-Authorization: Basic %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\n%s\r\n",
|
||||
type, webtarget, webport, miscptr, webtarget, buf1, proxy_authentication[selected_proxy], header);
|
||||
else {
|
||||
if (use_proxy == 1)
|
||||
sprintf(buffer, "%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\nConnection: keep-alive\r\n%s\r\n",
|
||||
sprintf(buffer, "%s http://%s:%d%s HTTP/1.1\r\nHost: %s\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\n%s\r\n",
|
||||
type, webtarget, webport, miscptr, webtarget, buf1, header);
|
||||
else
|
||||
sprintf(buffer, "%s %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\nConnection: keep-alive\r\n%s\r\n", type, miscptr, webtarget,
|
||||
sprintf(buffer, "%s %s HTTP/1.1\r\nHost: %s\r\nAuthorization: NTLM %s\r\nUser-Agent: Mozilla/4.0 (Hydra)\r\n%s\r\n", type, miscptr, webtarget,
|
||||
buf1, header);
|
||||
}
|
||||
|
||||
|
@ -218,8 +229,18 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
if (ptr != NULL)
|
||||
ptr++;
|
||||
if (ptr != NULL && (*ptr == '2' || *ptr == '3' || strncmp(ptr, "403", 3) == 0 || strncmp(ptr, "404", 3) == 0)) {
|
||||
hydra_report_found_host(port, ip, "www", fp);
|
||||
hydra_completed_pair_found();
|
||||
#ifdef HAVE_PCRE
|
||||
if (end_condition_type >= 0 && hydra_string_match(http_buf, end_condition)!=end_condition_type) {
|
||||
#else
|
||||
if (end_condition_type >= 0 && (strstr(http_buf, end_condition) == NULL ? 0 : 1) != end_condition_type) {
|
||||
#endif
|
||||
if (debug) hydra_report(stderr, "End condition not match continue.\n");
|
||||
hydra_completed_pair();
|
||||
} else {
|
||||
if (debug) hydra_report(stderr, "END condition %s match.\n",end_condition);
|
||||
hydra_report_found_host(port, ip, "www", fp);
|
||||
hydra_completed_pair_found();
|
||||
}
|
||||
if (http_buf != NULL) {
|
||||
free(http_buf);
|
||||
http_buf = NULL;
|
||||
|
@ -230,7 +251,7 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
|
||||
//the first authentication type failed, check the type from server header
|
||||
if ((hydra_strcasestr(http_buf, "WWW-Authenticate: Basic") == NULL) && (http_auth_mechanism == AUTH_BASIC)) {
|
||||
//seems the auth supported is not Basic shceme so testing further
|
||||
//seems the auth supported is not Basic scheme so testing further
|
||||
int32_t find_auth = 0;
|
||||
|
||||
if (hydra_strcasestr(http_buf, "WWW-Authenticate: NTLM") != NULL) {
|
||||
|
@ -247,8 +268,8 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
if (find_auth) {
|
||||
// free(http_buf);
|
||||
// http_buf = NULL;
|
||||
free(buffer);
|
||||
free(header);
|
||||
free(buffer);
|
||||
free(header);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -256,10 +277,12 @@ int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
}
|
||||
// free(http_buf);
|
||||
// http_buf = NULL;
|
||||
|
||||
free(buffer);
|
||||
free(header);
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
||||
return 3;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -310,9 +333,12 @@ void service_http(char *ip, int32_t sp, unsigned char options, char *miscptr, FI
|
|||
*ptr++ = 0;
|
||||
optional1 = ptr;
|
||||
|
||||
if (!parse_options(optional1, &ptr_head))
|
||||
if (!parse_options(optional1, &ptr_head)) // this function is in hydra-http-form.c !!
|
||||
run = 4;
|
||||
|
||||
if (http_auth_mechanism == AUTH_UNASSIGNED)
|
||||
http_auth_mechanism = AUTH_BASIC;
|
||||
|
||||
while (1) {
|
||||
next_run = 0;
|
||||
switch (run) {
|
||||
|
@ -383,12 +409,53 @@ int32_t service_http_init(char *ip, int32_t sp, unsigned char options, char *mis
|
|||
// 0 all OK
|
||||
// -1 error, hydra will exit, so print a good error message here
|
||||
|
||||
|
||||
|
||||
/*POU CODE */
|
||||
char * start=strstr(miscptr, "F=");
|
||||
if(start==NULL)
|
||||
start=strstr(miscptr, "S=");
|
||||
|
||||
if (start !=NULL){
|
||||
if(start[0]=='F')
|
||||
end_condition_type=0;
|
||||
else
|
||||
end_condition_type=1;
|
||||
|
||||
int condition_len=strlen(start);
|
||||
memset(end_condition,0,END_CONDITION_MAX_LEN);
|
||||
if(condition_len>=END_CONDITION_MAX_LEN){
|
||||
hydra_report(stderr,"Condition string cannot be bigger than %u.",END_CONDITION_MAX_LEN);
|
||||
return -1;
|
||||
}
|
||||
//copy condition witout starting string (F= or S= 2char)
|
||||
strncpy(end_condition, start+2,condition_len-2);
|
||||
if(debug)
|
||||
hydra_report(stderr, "End condition is %s, mod is %d\n",end_condition,end_condition_type);
|
||||
|
||||
if(*(start-1)==' ')
|
||||
start--;
|
||||
memset(start,'\0',condition_len);
|
||||
if (debug)
|
||||
hydra_report(stderr, "Modificated options:%s\n",miscptr);
|
||||
}else{
|
||||
if (debug)
|
||||
hydra_report(stderr, "Condition not found\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void usage_http(const char* service) {
|
||||
printf("Module %s requires the page to authenticate.\n"
|
||||
"The following parameters are optional:\n"
|
||||
" (a|A)=auth-type specify authentication mechanism to use: BASIC, NTLM or MD5\n"
|
||||
" (h|H)=My-Hdr\\: foo to send a user defined HTTP header with each request\n"
|
||||
"For example: \"/secret\" or \"http://bla.com/foo/bar:H=Cookie\\: sessid=aaaa\" or \"https://test.com:8080/members\"\n\n", service);
|
||||
" (F|S)=check for text in the HTTP reply. S= means if this text is found, a\n"
|
||||
" valid account has been found, F= means if this string is present the\n"
|
||||
" combination is invalid. Note: this must be the last option supplied.\n"
|
||||
"For example: \"/secret\" or \"http://bla.com/foo/bar:H=Cookie\\: sessid=aaaa\" or \"https://test.com:8080/members:A=NTLM\"\n\n", service);
|
||||
}
|
||||
|
|
|
@ -233,9 +233,11 @@ void service_icq(char *ip, int32_t sp, unsigned char options, char *miscptr, FIL
|
|||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
}
|
||||
run = next_run;
|
||||
}
|
||||
|
|
|
@ -393,6 +393,7 @@ void service_ldap(char *ip, int32_t sp, unsigned char options, char *miscptr, FI
|
|||
|
||||
if ((buf[0] != 0 && buf[9] == 0) || (buf[0] != 32 && buf[9] == 32)) {
|
||||
/* TLS option negociation goes well, now trying to connect */
|
||||
free(buf);
|
||||
if ((hydra_connect_to_ssl(sock, hostname) == -1) && verbose) {
|
||||
hydra_report(stderr, "[ERROR] Can't use TLS\n");
|
||||
hydra_child_exit(1);
|
||||
|
@ -403,6 +404,7 @@ void service_ldap(char *ip, int32_t sp, unsigned char options, char *miscptr, FI
|
|||
}
|
||||
} else {
|
||||
hydra_report(stderr, "[ERROR] Can't use TLS %s\n", buf);
|
||||
free(buf);
|
||||
hydra_child_exit(1);
|
||||
}
|
||||
}
|
||||
|
|
179
hydra-memcached.c
Normal file
|
@ -0,0 +1,179 @@
|
|||
//This plugin was written by <david dot maciejak at gmail D O T com>
|
||||
//Tested on memcached 1.5.6-0ubuntu1
|
||||
|
||||
#ifdef LIBMCACHED
|
||||
#include <libmemcached/memcached.h>
|
||||
#endif
|
||||
|
||||
#include "hydra-mod.h"
|
||||
|
||||
#ifndef LIBMCACHED
|
||||
void dummy_mcached() {
|
||||
printf("\n");
|
||||
}
|
||||
#else
|
||||
|
||||
extern int32_t hydra_data_ready_timed(int32_t socket, long sec, long usec);
|
||||
|
||||
extern char *HYDRA_EXIT;
|
||||
|
||||
int mcached_send_com_quit(int32_t sock) {
|
||||
char *com_quit = "quit\r\n";
|
||||
|
||||
if (hydra_send(sock, com_quit, strlen(com_quit), 0) < 0)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mcached_send_com_version(int32_t sock) {
|
||||
char *com_version = "version\r\n";
|
||||
|
||||
if (hydra_send(sock, com_version, strlen(com_version), 0) < 0)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int32_t start_mcached(int32_t s, char *ip, int32_t port, unsigned char options, char *miscptr, FILE * fp) {
|
||||
char *empty = "";
|
||||
char *login, *pass;
|
||||
|
||||
memcached_server_st *servers = NULL;
|
||||
memcached_return_t rc;
|
||||
memcached_st *cache;
|
||||
|
||||
if (strlen(login = hydra_get_next_login()) == 0)
|
||||
login = empty;
|
||||
if (strlen(pass = hydra_get_next_password()) == 0)
|
||||
pass = empty;
|
||||
|
||||
cache = memcached_create(NULL);
|
||||
|
||||
rc = memcached_set_sasl_auth_data(cache, login, pass);
|
||||
if (rc != MEMCACHED_SUCCESS) {
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[ERROR] Couldn't setup SASL auth: %s\n", memcached_strerror(cache, rc));
|
||||
memcached_free(cache);
|
||||
return 3;
|
||||
}
|
||||
|
||||
rc = memcached_behavior_set(cache, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);
|
||||
if (rc != MEMCACHED_SUCCESS) {
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[ERROR] Couldn't use the binary protocol: %s\n", memcached_strerror(cache, rc));
|
||||
memcached_destroy_sasl_auth_data(cache);
|
||||
memcached_free(cache);
|
||||
return 3;
|
||||
}
|
||||
rc = memcached_behavior_set(cache, MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT, 10000);
|
||||
if (rc != MEMCACHED_SUCCESS) {
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[ERROR] Couldn't set the connect timeout: %s\n", memcached_strerror(cache, rc));
|
||||
memcached_destroy_sasl_auth_data(cache);
|
||||
memcached_free(cache);
|
||||
return 3;
|
||||
}
|
||||
|
||||
servers = memcached_server_list_append(servers, hydra_address2string(ip), port, &rc);
|
||||
rc = memcached_server_push(cache, servers);
|
||||
if (rc != MEMCACHED_SUCCESS) {
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[ERROR] Couldn't add server: %s\n", memcached_strerror(cache, rc));
|
||||
memcached_destroy_sasl_auth_data(cache);
|
||||
memcached_free(cache);
|
||||
return 3;
|
||||
}
|
||||
|
||||
rc = memcached_stat_execute(cache, "", NULL, NULL);
|
||||
if (rc != MEMCACHED_SUCCESS) {
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[ERROR] Couldn't get server stats: %s\n", memcached_strerror(cache, rc));
|
||||
memcached_destroy_sasl_auth_data(cache);
|
||||
memcached_free(cache);
|
||||
hydra_completed_pair_skip();
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) {
|
||||
return 3;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
||||
memcached_destroy_sasl_auth_data(cache);
|
||||
memcached_free(cache);
|
||||
|
||||
hydra_report_found_host(port, ip, "memcached", fp);
|
||||
hydra_completed_pair_found();
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
||||
return 3;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
void service_mcached(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname) {
|
||||
int32_t run = 1, next_run = 1, sock = -1;
|
||||
|
||||
hydra_register_socket(sp);
|
||||
|
||||
while (1) {
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
||||
return;
|
||||
|
||||
switch (run) {
|
||||
case 1:
|
||||
next_run = start_mcached(sock, ip, port, options, miscptr, fp);
|
||||
break;
|
||||
case 2:
|
||||
hydra_child_exit(0);
|
||||
return;
|
||||
default:
|
||||
if (!verbose)
|
||||
hydra_report(stderr, "[ERROR] Caught unknown return code, try verbose option for more details\n");
|
||||
hydra_child_exit(2);
|
||||
}
|
||||
run = next_run;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t service_mcached_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname) {
|
||||
// called before the childrens are forked off, so this is the function
|
||||
// which should be filled if initial connections and service setup has to be
|
||||
// performed once only.
|
||||
|
||||
int32_t sock = -1;
|
||||
int32_t myport = PORT_MCACHED;
|
||||
char *buf;
|
||||
|
||||
if (port != 0)
|
||||
myport = port;
|
||||
|
||||
sock = hydra_connect_tcp(ip, myport);
|
||||
if (sock < 0) {
|
||||
if (verbose || debug)
|
||||
hydra_report(stderr, "[ERROR] Can not connect\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (mcached_send_com_version(sock)) {
|
||||
if (verbose || debug)
|
||||
hydra_report(stderr, "[ERROR] Can not send request\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (hydra_data_ready_timed(sock, 0, 1000) > 0) {
|
||||
buf = hydra_receive_line(sock);
|
||||
if (strstr(buf, "VERSION ")) {
|
||||
hydra_report_found_host(port, ip, "memcached", fp);
|
||||
mcached_send_com_quit(sock);
|
||||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_report(stderr, "[ERROR] Memcached server does not require any authentication\n");
|
||||
}
|
||||
free(buf);
|
||||
return -1;
|
||||
}
|
||||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
115
hydra-mod.c
|
@ -33,7 +33,7 @@ int32_t do_retry = 1;
|
|||
int32_t module_auth_type = -1;
|
||||
int32_t intern_socket, extern_socket;
|
||||
char pair[260];
|
||||
char HYDRA_EXIT[5] = "\x00\xff\x00\xff\x00";
|
||||
char *HYDRA_EXIT = "\x00\xff\x00\xff\x00";
|
||||
char *HYDRA_EMPTY = "\x00\x00\x00\x00";
|
||||
char *fe80 = "\xfe\x80\x00";
|
||||
int32_t fail = 0;
|
||||
|
@ -85,7 +85,7 @@ void interrupt() {
|
|||
|
||||
/* ----------------- internal functions ----------------- */
|
||||
|
||||
int32_t internal__hydra_connect(char *host, int32_t port, int32_t protocol, int32_t type) {
|
||||
int32_t internal__hydra_connect(char *host, int32_t port, int32_t type, int32_t protocol) {
|
||||
int32_t s, ret = -1, ipv6 = 0, reset_selected = 0;
|
||||
|
||||
#ifdef AF_INET6
|
||||
|
@ -102,6 +102,8 @@ int32_t internal__hydra_connect(char *host, int32_t port, int32_t protocol, int3
|
|||
selected_proxy = random() % proxy_count;
|
||||
}
|
||||
|
||||
memset(&target, 0, sizeof(target));
|
||||
memset(&sin, 0, sizeof(sin));
|
||||
#ifdef AF_INET6
|
||||
memset(&target6, 0, sizeof(target6));
|
||||
memset(&sin6, 0, sizeof(sin6));
|
||||
|
@ -111,10 +113,10 @@ int32_t internal__hydra_connect(char *host, int32_t port, int32_t protocol, int3
|
|||
|
||||
#ifdef AF_INET6
|
||||
if (ipv6)
|
||||
s = socket(AF_INET6, protocol, type);
|
||||
s = socket(AF_INET6, type, protocol);
|
||||
else
|
||||
#endif
|
||||
s = socket(PF_INET, protocol, type);
|
||||
s = socket(PF_INET, type, protocol);
|
||||
if (s >= 0) {
|
||||
if (src_port != 0) {
|
||||
int32_t bind_ok = 0;
|
||||
|
@ -468,7 +470,7 @@ RSA *ssl_temp_rsa_cb(SSL * ssl, int32_t export, int32_t keylength) {
|
|||
#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10100000L
|
||||
BIGNUM *n;
|
||||
n = BN_new();
|
||||
RSA_get0_key(rsa, &n, NULL, NULL);
|
||||
RSA_get0_key(rsa, (const struct bignum_st **)&n, NULL, NULL);
|
||||
ok = BN_zero(n);
|
||||
#else
|
||||
if (rsa->n == 0)
|
||||
|
@ -580,10 +582,10 @@ int32_t internal__hydra_connect_to_ssl(int32_t socket, char *hostname) {
|
|||
return socket;
|
||||
}
|
||||
|
||||
int32_t internal__hydra_connect_ssl(char *host, int32_t port, int32_t protocol, int32_t type, char *hostname) {
|
||||
int32_t internal__hydra_connect_ssl(char *host, int32_t port, int32_t type, int32_t protocol, char *hostname) {
|
||||
int32_t socket;
|
||||
|
||||
if ((socket = internal__hydra_connect(host, port, protocol, type)) < 0)
|
||||
if ((socket = internal__hydra_connect(host, port, type, protocol)) < 0)
|
||||
return -1;
|
||||
|
||||
return internal__hydra_connect_to_ssl(socket, hostname);
|
||||
|
@ -935,74 +937,73 @@ int32_t hydra_recv_nb(int32_t socket, char *buf, uint32_t length) {
|
|||
}
|
||||
|
||||
char *hydra_receive_line(int32_t socket) {
|
||||
char buf[1024], *buff, *buff2, text[64];
|
||||
int32_t i, j = 1, k, got = 0;
|
||||
char buf[1024], *buff, *buff2, pid[64];
|
||||
int32_t i, j, k, got = 0;
|
||||
|
||||
if ((buff = malloc(sizeof(buf))) == NULL) {
|
||||
fprintf(stderr, "[ERROR] could not malloc\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memset(buff, 0, sizeof(buf));
|
||||
|
||||
if (debug)
|
||||
printf("[DEBUG] hydra_receive_line: waittime: %d, conwait: %d, socket: %d, pid: %d\n", waittime, conwait, socket, getpid());
|
||||
|
||||
if ((i = hydra_data_ready_timed(socket, (long) waittime, 0)) > 0) {
|
||||
if ((got = internal__hydra_recv(socket, buff, sizeof(buf) - 1)) < 0) {
|
||||
do {
|
||||
j = internal__hydra_recv(socket, buf, sizeof(buf) - 1);
|
||||
if (j > 0) {
|
||||
for (k = 0; k < j; k++)
|
||||
if (buf[k] == 0)
|
||||
buf[k] = 32;
|
||||
|
||||
buf[j] = 0;
|
||||
|
||||
if ((buff2 = realloc(buff, got + j + 1)) == NULL) {
|
||||
free(buff);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
buff = buff2;
|
||||
memcpy(buff + got, &buf, j + 1);
|
||||
got += j;
|
||||
buff[got] = 0;
|
||||
} else if (j < 0) {
|
||||
// some error occured
|
||||
got = -1;
|
||||
}
|
||||
} while (hydra_data_ready(socket) > 0 && j > 0
|
||||
#ifdef LIBOPENSSL
|
||||
|| use_ssl && SSL_pending(ssl)
|
||||
#endif
|
||||
);
|
||||
|
||||
if (got > 0) {
|
||||
if (debug) {
|
||||
sprintf(pid, "[DEBUG] RECV [pid:%d]", getpid());
|
||||
hydra_dump_data(buff, got, pid);
|
||||
//hydra_report_debug(stderr, "DEBUG_RECV_BEGIN [pid:%d len:%d]|%s|END", getpid(), got, buff);
|
||||
}
|
||||
} else {
|
||||
if (got < 0) {
|
||||
if (debug) {
|
||||
sprintf(pid, "[DEBUG] RECV [pid:%d]", getpid());
|
||||
hydra_dump_data((unsigned char*)"", -1, pid);
|
||||
//hydra_report_debug(stderr, "DEBUG_RECV_BEGIN||END [pid:%d %d]", getpid(), i);
|
||||
perror("recv");
|
||||
}
|
||||
}
|
||||
free(buff);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
usleepn(100);
|
||||
} else {
|
||||
if (debug)
|
||||
printf("[DEBUG] hydra_data_ready_timed: %d, waittime: %d, conwait: %d, socket: %d\n", i, waittime, conwait, socket);
|
||||
}
|
||||
|
||||
if (got < 0) {
|
||||
if (debug) {
|
||||
sprintf(text, "[DEBUG] RECV [pid:%d]", getpid());
|
||||
hydra_dump_data((unsigned char*)"", -1, text);
|
||||
//hydra_report_debug(stderr, "DEBUG_RECV_BEGIN||END [pid:%d %d]", getpid(), i);
|
||||
perror("recv");
|
||||
}
|
||||
free(buff);
|
||||
return NULL;
|
||||
} else {
|
||||
if (got > 0) {
|
||||
for (k = 0; k < got; k++)
|
||||
if (buff[k] == 0)
|
||||
buff[k] = 32;
|
||||
buff[got] = 0;
|
||||
usleepn(100);
|
||||
}
|
||||
}
|
||||
|
||||
while (hydra_data_ready(socket) > 0 && j > 0) {
|
||||
j = internal__hydra_recv(socket, buf, sizeof(buf) - 1);
|
||||
if (j > 0) {
|
||||
for (k = 0; k < j; k++)
|
||||
if (buf[k] == 0)
|
||||
buf[k] = 32;
|
||||
buf[j] = 0;
|
||||
if ((buff2 = realloc(buff, got + j + 1)) == NULL) {
|
||||
free(buff);
|
||||
return NULL;
|
||||
} else
|
||||
buff = buff2;
|
||||
memcpy(buff + got, &buf, j + 1);
|
||||
got += j;
|
||||
buff[got] = 0;
|
||||
}
|
||||
usleepn(100);
|
||||
}
|
||||
|
||||
if (debug) {
|
||||
sprintf(text, "[DEBUG] RECV [pid:%d]", getpid());
|
||||
hydra_dump_data(buff, got, text);
|
||||
//hydra_report_debug(stderr, "DEBUG_RECV_BEGIN [pid:%d len:%d]|%s|END", getpid(), got, buff);
|
||||
}
|
||||
if (got == 0) {
|
||||
free(buff);
|
||||
return NULL;
|
||||
}
|
||||
return buff;
|
||||
}
|
||||
|
||||
|
|
184
hydra-mongodb.c
Normal file
|
@ -0,0 +1,184 @@
|
|||
//This plugin was written by <david dot maciejak at gmail D O T com>
|
||||
//Tested on mongodb-server 1:3.6.3-0ubuntu1
|
||||
//MONGODB-CR is been deprecated
|
||||
|
||||
#ifdef LIBMONGODB
|
||||
#include <mongoc.h>
|
||||
#endif
|
||||
|
||||
#include "hydra-mod.h"
|
||||
|
||||
#ifndef LIBMONGODB
|
||||
void dummy_mongodb() {
|
||||
printf("\n");
|
||||
}
|
||||
#else
|
||||
|
||||
extern int32_t hydra_data_ready_timed(int32_t socket, long sec, long usec);
|
||||
|
||||
extern char *HYDRA_EXIT;
|
||||
char *buf;
|
||||
|
||||
#define DEFAULT_DB "admin"
|
||||
|
||||
int is_error_msg(char *msg) {
|
||||
if (strstr(msg, "errmsg ")) {
|
||||
if (debug)
|
||||
hydra_report(stderr, "[ERROR] %s\n", msg);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int require_auth(int32_t sock) {
|
||||
unsigned char m_hdr[] =
|
||||
"\x3f\x00\x00\x00" //messageLength (63)
|
||||
"\x00\x00\x00\x41" //requestID
|
||||
"\xff\xff\xff\xff" //responseTo
|
||||
"\xd4\x07\x00\x00" //opCode (2004 OP_QUERY)
|
||||
"\x00\x00\x00\x00" //flags
|
||||
"\x61\x64\x6d\x69\x6e\x2e\x24\x63\x6d\x64\x00" //fullCollectionName (admin.$cmd)
|
||||
"\x00\x00\x00\x00" //numberToSkip (0)
|
||||
"\x01\x00\x00\x00" //numberToReturn (1)
|
||||
"\x18\x00\x00\x00\x10\x6c\x69\x73\x74\x44\x61\x74\x61\x62\x61\x73\x65\x73\x00\x01\x00\x00\x00\x00"; //query ({"listDatabases"=>1})
|
||||
|
||||
if (hydra_send(sock, m_hdr, sizeof(m_hdr), 0) > 0) {
|
||||
if (hydra_data_ready_timed(sock, 0, 1000) > 0) {
|
||||
buf = hydra_receive_line(sock);
|
||||
return is_error_msg(buf);
|
||||
}
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
|
||||
int32_t start_mongodb(int32_t s, char *ip, int32_t port, unsigned char options, char *miscptr, FILE * fp) {
|
||||
char *empty = "";
|
||||
char *login, *pass;
|
||||
char uri[256];
|
||||
mongoc_client_t *client;
|
||||
mongoc_database_t *database;
|
||||
mongoc_collection_t *collection;
|
||||
mongoc_cursor_t *cursor;
|
||||
bson_t q;
|
||||
const bson_t *doc;
|
||||
bson_error_t error;
|
||||
bool r;
|
||||
|
||||
if (strlen(login = hydra_get_next_login()) == 0)
|
||||
login = empty;
|
||||
if (strlen(pass = hydra_get_next_password()) == 0)
|
||||
pass = empty;
|
||||
|
||||
mongoc_init();
|
||||
mongoc_log_set_handler (NULL, NULL);
|
||||
bson_init(&q);
|
||||
|
||||
snprintf(uri, sizeof(uri), "mongodb://%s:%s@%s/?authSource=%s",login, pass, hydra_address2string(ip), miscptr);
|
||||
client = mongoc_client_new(uri);
|
||||
if (!client)
|
||||
return 3;
|
||||
|
||||
mongoc_client_set_appname(client, "hydra");
|
||||
collection = mongoc_client_get_collection(client, miscptr, "test");
|
||||
cursor = mongoc_collection_find_with_opts(collection, &q, NULL, NULL);
|
||||
r = mongoc_cursor_next(cursor, &doc);
|
||||
if (!r) {
|
||||
r = mongoc_cursor_error(cursor, &error);
|
||||
if (r) {
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[ERROR] Can not read document: %s\n", error.message);
|
||||
mongoc_cursor_destroy(cursor);
|
||||
mongoc_collection_destroy(collection);
|
||||
mongoc_client_destroy(client);
|
||||
mongoc_cleanup();
|
||||
hydra_completed_pair_skip();
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) {
|
||||
return 3;
|
||||
}
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
mongoc_cursor_destroy(cursor);
|
||||
mongoc_collection_destroy(collection);
|
||||
mongoc_client_destroy(client);
|
||||
mongoc_cleanup();
|
||||
|
||||
hydra_report_found_host(port, ip, "mongodb", fp);
|
||||
hydra_completed_pair_found();
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
||||
return 3;
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
void service_mongodb(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname) {
|
||||
int32_t run = 1, next_run = 1, sock = -1;
|
||||
|
||||
if (!miscptr) {
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[INFO] Using default database \"admin\"\n");
|
||||
miscptr = DEFAULT_DB;
|
||||
}
|
||||
|
||||
hydra_register_socket(sp);
|
||||
|
||||
while (1) {
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
||||
return;
|
||||
|
||||
switch (run) {
|
||||
case 1:
|
||||
next_run = start_mongodb(sock, ip, port, options, miscptr, fp);
|
||||
break;
|
||||
case 2:
|
||||
hydra_child_exit(0);
|
||||
return;
|
||||
default:
|
||||
if (!verbose)
|
||||
hydra_report(stderr, "[ERROR] Caught unknown return code, try verbose option for more details\n");
|
||||
hydra_child_exit(2);
|
||||
}
|
||||
run = next_run;
|
||||
}
|
||||
}
|
||||
|
||||
int32_t service_mongodb_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname) {
|
||||
// called before the childrens are forked off, so this is the function
|
||||
// which should be filled if initial connections and service setup has to be
|
||||
// performed once only.
|
||||
|
||||
int32_t myport = PORT_MONGODB;
|
||||
int32_t sock = -1;
|
||||
|
||||
if (port != 0)
|
||||
myport = port;
|
||||
|
||||
if ((options & OPTION_SSL) == 0)
|
||||
sock = hydra_connect_tcp(ip, myport);
|
||||
else
|
||||
sock = hydra_connect_ssl(ip, myport, hostname);
|
||||
|
||||
if (sock < 0) {
|
||||
if (verbose || debug)
|
||||
hydra_report(stderr, "[ERROR] Can not connect\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!require_auth(sock)) {
|
||||
hydra_report_found_host(port, ip, "mongodb", fp);
|
||||
hydra_report(stderr, "[ERROR] Mongodb server does not require any authentication\n");
|
||||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
return -1;
|
||||
}
|
||||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void usage_mongodb(const char* service) {
|
||||
printf("Module mongodb is optionally taking a database name to attack, default is \"admin\"\n\n");
|
||||
}
|
|
@ -180,19 +180,13 @@ int32_t start_mysql(int32_t sock, char *ip, int32_t port, unsigned char options,
|
|||
char *response = NULL, *login = NULL, *pass = NULL;
|
||||
unsigned long response_len;
|
||||
char res = 0;
|
||||
char database[256];
|
||||
char *database = NULL;
|
||||
|
||||
login = hydra_get_next_login();
|
||||
pass = hydra_get_next_password();
|
||||
|
||||
if (miscptr)
|
||||
strncpy(database, miscptr, sizeof(database) - 1);
|
||||
else {
|
||||
strncpy(database, DEFAULT_DB, sizeof(database) - 1);
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] using default db 'mysql'\n");
|
||||
}
|
||||
database[sizeof(database) - 1] = 0;
|
||||
database = miscptr;
|
||||
|
||||
/* read server greeting */
|
||||
res = hydra_mysql_init(sock);
|
||||
|
|
|
@ -523,6 +523,7 @@ int32_t service_pop3_init(char *ip, int32_t sp, unsigned char options, char *mis
|
|||
|
||||
p.pop3_auth_mechanism = AUTH_CLEAR;
|
||||
p.disable_tls = 1;
|
||||
p.next = NULL;
|
||||
memcpy(p.ip, ip, 36);
|
||||
|
||||
if ((options & OPTION_SSL) == 0) {
|
||||
|
|
3245
hydra-rdp.c
|
@ -15,7 +15,7 @@ int32_t start_redis(int32_t s, char *ip, int32_t port, unsigned char options, ch
|
|||
snprintf(pass_num, 50, "%d", pass_len);
|
||||
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
sprintf(buffer, "*2\r\n$4\r\nAUTH\r\n$%.250s\r\n%.250s\r\n", pass_num, pass);
|
||||
sprintf(buffer, "*2\r\n$4\r\nAUTH\r\n$%.50s\r\n%.250s\r\n", pass_num, pass);
|
||||
|
||||
if (debug)
|
||||
hydra_report(stderr, "[DEBUG] Auth:\n %s\n", buffer);
|
||||
|
@ -95,6 +95,7 @@ void service_redis_core(char *ip, int32_t sp, unsigned char options, char *miscp
|
|||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
default:
|
||||
hydra_report(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
||||
hydra_child_exit(2);
|
||||
|
@ -128,7 +129,7 @@ int32_t service_redis_init(char *ip, int32_t sp, unsigned char options, char *mi
|
|||
// performed once only.
|
||||
// return codes:
|
||||
// 0 - when the server is redis and it requires password
|
||||
// 1 - when the server is not redis or when the server does not require password
|
||||
// n - when the server is not redis or when the server does not require password
|
||||
|
||||
int32_t sock = -1;
|
||||
int32_t myport = PORT_REDIS, mysslport = PORT_REDIS_SSL;
|
||||
|
@ -150,7 +151,7 @@ int32_t service_redis_init(char *ip, int32_t sp, unsigned char options, char *mi
|
|||
printf("[VERBOSE] Initial redis password authentication test and response test ...\n");
|
||||
if (sock < 0) {
|
||||
hydra_report(stderr, "[ERROR] Can not connect to port %d on the target\n", myport);
|
||||
hydra_child_exit(1);
|
||||
return 3;
|
||||
}
|
||||
// generating ping request as redis-cli
|
||||
if (debug)
|
||||
|
@ -160,22 +161,22 @@ int32_t service_redis_init(char *ip, int32_t sp, unsigned char options, char *mi
|
|||
// $4
|
||||
// ping
|
||||
if (hydra_send(sock, buffer, strlen(buffer), 0) < 0) {
|
||||
return 1;
|
||||
return 2;
|
||||
}
|
||||
buf = hydra_receive_line(sock);
|
||||
if (debug)
|
||||
printf("[DEBUG] buf = %s\n", buf);
|
||||
// authentication test
|
||||
if (strstr(buf, "+PONG") != NULL) { // the server does not require password
|
||||
hydra_report(stderr, "[!] The server does not require password.\n");
|
||||
hydra_report(stderr, "[!] The server %s does not require password.\n", hostname);
|
||||
free(buf);
|
||||
return 1;
|
||||
return 2;
|
||||
}
|
||||
// server response test
|
||||
if (strstr(buf, "-NOAUTH Authentication required") == NULL && strstr(buf, "-ERR operation not permitted") == NULL) {
|
||||
hydra_report(stderr, "[ERROR] The server is not redis, exit.\n");
|
||||
free(buf);
|
||||
return 1;
|
||||
return 2;
|
||||
}
|
||||
if (verbose)
|
||||
printf("[VERBOSE] The redis server requires password.\n");
|
||||
|
|
|
@ -111,6 +111,7 @@ void service_rpcap(char *ip, int32_t sp, unsigned char options, char *miscptr, F
|
|||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
default:
|
||||
hydra_report(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
||||
hydra_child_exit(2);
|
||||
|
@ -153,7 +154,7 @@ int32_t service_rpcap_init(char *ip, int32_t sp, unsigned char options, char *mi
|
|||
|
||||
buf = hydra_receive_line(sock);
|
||||
|
||||
if (strstr(buf, "NULL autentication not permitted") == NULL) {
|
||||
if (strstr(buf, "NULL authentication not permitted") == NULL) {
|
||||
hydra_report(stderr, "[!] rpcap error or no need of authentication!\n");
|
||||
free(buf);
|
||||
return 1;
|
||||
|
|
68
hydra-rtsp.c
|
@ -78,10 +78,12 @@ void create_core_packet(int32_t control, char *ip, int32_t port) {
|
|||
}
|
||||
int32_t start_rtsp(int32_t s, char *ip, int32_t port, unsigned char options, char *miscptr, FILE * fp) {
|
||||
char *empty = "";
|
||||
char *login, *pass, buffer[500], buffer2[500];
|
||||
|
||||
char *login, *pass, buffer[1030], buffer2[500];
|
||||
char *lresp;
|
||||
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
memset(buffer2, 0, sizeof(buffer2));
|
||||
|
||||
if (strlen(login = hydra_get_next_login()) == 0)
|
||||
login = empty;
|
||||
if (strlen(pass = hydra_get_next_password()) == 0)
|
||||
|
@ -95,12 +97,13 @@ int32_t start_rtsp(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
lresp = hydra_receive_line(s);
|
||||
|
||||
if (lresp == NULL) {
|
||||
fprintf(stderr, "[ERROR] no server reply");
|
||||
hydra_report(stderr, "[ERROR] no server reply\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (is_NotFound(lresp)) {
|
||||
printf("[INFO] Server does not need credentials\n");
|
||||
free(lresp);
|
||||
hydra_report(stderr, "[INFO] Server does not need credentials\n");
|
||||
hydra_completed_pair_found();
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) {
|
||||
return 3;
|
||||
|
@ -112,52 +115,63 @@ int32_t start_rtsp(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
|
||||
if (use_Basic_Auth(lresp) == 1) {
|
||||
|
||||
sprintf(buffer2, "%.260s:%.260s", login, pass);
|
||||
free(lresp);
|
||||
sprintf(buffer2, "%.249s:%.249s", login, pass);
|
||||
hydra_tobase64((unsigned char *) buffer2, strlen(buffer2), sizeof(buffer2));
|
||||
|
||||
sprintf(buffer, "%sAuthorization: : Basic %s\r\n\r\n", packet2, buffer2);
|
||||
sprintf(buffer, "%.500sAuthorization: : Basic %.500s\r\n\r\n", packet2, buffer2);
|
||||
|
||||
if (debug) {
|
||||
hydra_report(stderr, "C:%s\n", buffer);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (use_Digest_Auth(lresp) == 1) {
|
||||
char *dbuf = NULL;
|
||||
char aux[500] = "";
|
||||
char *pbuffer = hydra_strcasestr(lresp, "WWW-Authenticate: Digest ");
|
||||
|
||||
if (use_Digest_Auth(lresp) == 1) {
|
||||
char *dbuf = NULL;
|
||||
char aux[500] = "";
|
||||
|
||||
char *pbuffer = hydra_strcasestr(lresp, "WWW-Authenticate: Digest ");
|
||||
|
||||
strncpy(aux, pbuffer + strlen("WWW-Authenticate: Digest "), sizeof(buffer));
|
||||
aux[sizeof(aux) - 1] = '\0';
|
||||
strncpy(aux, pbuffer + strlen("WWW-Authenticate: Digest "), sizeof(aux));
|
||||
aux[sizeof(aux) - 1] = '\0';
|
||||
free(lresp);
|
||||
#ifdef LIBOPENSSL
|
||||
sasl_digest_md5(dbuf, login, pass, aux, miscptr, "rtsp", hydra_address2string(ip), port, "");
|
||||
sasl_digest_md5(dbuf, login, pass, aux, miscptr, "rtsp", hydra_address2string(ip), port, "");
|
||||
#else
|
||||
printf("[ERROR] Digest auth required but compiled without OpenSSL/MD5 support\n");
|
||||
return 3;
|
||||
hydra_report(stderr, "[ERROR] Digest auth required but compiled without OpenSSL/MD5 support\n");
|
||||
return 3;
|
||||
#endif
|
||||
|
||||
if (dbuf == NULL) {
|
||||
fprintf(stderr, "[ERROR] digest generation failed\n");
|
||||
return 3;
|
||||
}
|
||||
sprintf(buffer, "%sAuthorization: Digest %s\r\n\r\n", packet2, dbuf);
|
||||
if (dbuf == NULL) {
|
||||
hydra_report(stderr, "[ERROR] digest generation failed\n");
|
||||
return 3;
|
||||
}
|
||||
sprintf(buffer, "%.500sAuthorization: Digest %.500s\r\n\r\n", packet2, dbuf);
|
||||
|
||||
if (debug) {
|
||||
hydra_report(stderr, "C:%s\n", buffer);
|
||||
if (debug) {
|
||||
hydra_report(stderr, "C:%s\n", buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (strlen(buffer) == 0) {
|
||||
hydra_report(stderr, "[ERROR] could not identify HTTP authentication used\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (hydra_send(s, buffer, strlen(buffer), 0) < 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
lresp = NULL;
|
||||
|
||||
lresp = hydra_receive_line(s);
|
||||
|
||||
if (lresp == NULL) {
|
||||
hydra_report(stderr, "[ERROR] no server reply\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((is_NotFound(lresp))) {
|
||||
|
||||
free(lresp);
|
||||
hydra_completed_pair_found();
|
||||
|
||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0) {
|
||||
|
@ -165,8 +179,8 @@ int32_t start_rtsp(int32_t s, char *ip, int32_t port, unsigned char options, cha
|
|||
}
|
||||
return 1;
|
||||
|
||||
|
||||
}
|
||||
free(lresp);
|
||||
hydra_completed_pair();
|
||||
}
|
||||
|
||||
|
|
22
hydra-smb.c
|
@ -1212,7 +1212,7 @@ int32_t start_smb(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
if (strlen(pass = hydra_get_next_password()) == 0)
|
||||
pass = empty;
|
||||
|
||||
strcpy(ipaddr_str, hydra_address2string(ip));
|
||||
strncpy(ipaddr_str, hydra_address2string(ip), sizeof(ipaddr_str) - 1);
|
||||
|
||||
SMBSessionRet = SMBSessionSetup(s, login, pass, miscptr);
|
||||
if (SMBSessionRet == -1)
|
||||
|
@ -1240,38 +1240,32 @@ int32_t start_smb(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
hydra_report(stderr, "[ERROR] Invalid parameter status received, either the account or the method used are not valid\n");
|
||||
hydra_completed_pair_skip();
|
||||
} else if (SMBerr == 0x00006E) { /* Valid password, GPO Disabling Remote Connections Using NULL Passwords */
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] Valid password, GPO Disabling Remote Connections Using NULL Passwords\n");
|
||||
hydra_report(stdout, "[%d][smb] Host: %s Account: %s Valid password, GPO Disabling Remote Connections Using NULL Passwords\n", port, ipaddr_str, login);
|
||||
hydra_report_found_host(port, ip, "smb", fp);
|
||||
hydra_completed_pair_found();
|
||||
} else if (SMBerr == 0x00015B) { /* Valid password, GPO "Deny access to this computer from the network" */
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] Valid password, GPO Deny access to this computer from the network\n");
|
||||
hydra_report(stdout, "[%d][smb] Host: %s Account: %s Valid password, GPO Deny access to this computer from the network\n", port, ipaddr_str, login);
|
||||
hydra_report_found_host(port, ip, "smb", fp);
|
||||
hydra_completed_pair_found();
|
||||
} else if (SMBerr == 0x000193) { /* Valid password, account expired */
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] Valid password, account expired\n");
|
||||
hydra_report(stdout, "[%d][smb] Host: %s Account: %s Valid password, account expired\n", port, ipaddr_str, login);
|
||||
hydra_report_found_host(port, ip, "smb", fp);
|
||||
hydra_completed_pair_found();
|
||||
} else if ((SMBerr == 0x000224) || (SMBerr == 0xC20002)) { /* Valid password, account expired */
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] Valid password, password expired and must be changed on next logon\n");
|
||||
hydra_report(stdout, "[%d][smb] Host: %s Account: %s Valid password, password expired and must be changed on next logon\n", port, ipaddr_str, login);
|
||||
hydra_report_found_host(port, ip, "smb", fp);
|
||||
hydra_completed_pair_found();
|
||||
} else if ((SMBerr == 0x00006F) || (SMBerr == 0xC10002)) { /* Invalid logon hours */
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] Valid password, but logon hours invalid\n");
|
||||
hydra_report(stdout, "[%d][smb] Host: %s Account: %s Valid password, but logon hours invalid\n", port, ipaddr_str, login);
|
||||
hydra_report_found_host(port, ip, "smb", fp);
|
||||
hydra_completed_pair_found();
|
||||
} else if (SMBerr == 0x050001) { /* AS/400 -- Incorrect password */
|
||||
if (verbose)
|
||||
fprintf(stderr, "[%d][smb] Host: %s Account: %s Error: Incorrect password or account disabled\n", port, ipaddr_str, login);
|
||||
hydra_report(stdout, "[%d][smb] Host: %s Account: %s Error: Incorrect password or account disabled\n", port, ipaddr_str, login);
|
||||
if ((miscptr) && (strstr(miscptr, "LM")))
|
||||
hydra_report(stderr, "[INFO] LM dialect may be disabled, try LMV2 instead\n");
|
||||
hydra_completed_pair_skip();
|
||||
} else if (SMBerr == 0x000024) { /* change password on next login [success] */
|
||||
fprintf(stderr, "[%d][smb] Host: %s Account: %s Error: ACCOUNT_CHANGE_PASSWORD\n", port, ipaddr_str, login);
|
||||
hydra_report(stdout, "[%d][smb] Host: %s Account: %s Error: ACCOUNT_CHANGE_PASSWORD\n", port, ipaddr_str, login);
|
||||
hydra_completed_pair_found();
|
||||
} else if (SMBerr == 0x00006D) { /* STATUS_LOGON_FAILURE */
|
||||
hydra_completed_pair();
|
||||
|
|
|
@ -216,8 +216,8 @@ void service_smtp_enum(char *ip, int32_t sp, unsigned char options, char *miscpt
|
|||
smtp_enum_cmd = RCPT;
|
||||
}
|
||||
if (debug) {
|
||||
hydra_report(stdout, "[VERBOSE] ");
|
||||
switch (smtp_enum_cmd) {
|
||||
hydra_report(stdout, "[VERBOSE] ");
|
||||
case VRFY:
|
||||
hydra_report(stdout, "using SMTP VRFY command\n");
|
||||
break;
|
||||
|
|
|
@ -111,7 +111,7 @@ void password_to_key_md5(u_char * password, /* IN */
|
|||
|
||||
if (mylen < 8) {
|
||||
memset(bpass, 0, sizeof(bpass));
|
||||
strcpy(bpass, password);
|
||||
strncpy(bpass, password, sizeof(bpass) - 1);
|
||||
while (mylen < 8) {
|
||||
strcat(bpass, password);
|
||||
mylen += passwordlen;
|
||||
|
|
|
@ -126,6 +126,7 @@ void service_ssh(char *ip, int32_t sp, unsigned char options, char *miscptr, FIL
|
|||
ssh_finalize();
|
||||
ssh_free(session);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
case 3:
|
||||
ssh_disconnect(session);
|
||||
ssh_finalize();
|
||||
|
@ -133,12 +134,14 @@ void service_ssh(char *ip, int32_t sp, unsigned char options, char *miscptr, FIL
|
|||
if (verbose)
|
||||
fprintf(stderr, "[ERROR] ssh protocol error\n");
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
case 4:
|
||||
ssh_disconnect(session);
|
||||
ssh_finalize();
|
||||
ssh_free(session);
|
||||
fprintf(stderr, "[ERROR] ssh target does not support password auth\n");
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
default:
|
||||
ssh_disconnect(session);
|
||||
ssh_finalize();
|
||||
|
|
|
@ -124,18 +124,21 @@ void service_sshkey(char *ip, int32_t sp, unsigned char options, char *miscptr,
|
|||
ssh_finalize();
|
||||
ssh_free(session);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
case 3:
|
||||
ssh_disconnect(session);
|
||||
ssh_finalize();
|
||||
ssh_free(session);
|
||||
fprintf(stderr, "[ERROR] ssh protocol error\n");
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
case 4:
|
||||
ssh_disconnect(session);
|
||||
ssh_finalize();
|
||||
ssh_free(session);
|
||||
fprintf(stderr, "[ERROR] ssh target does not support pubkey auth\n");
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
default:
|
||||
ssh_disconnect(session);
|
||||
ssh_finalize();
|
||||
|
|
34
hydra-svn.c
|
@ -6,12 +6,19 @@
|
|||
/* needed on openSUSE */
|
||||
#define _GNU_SOURCE
|
||||
|
||||
#if !defined PATH_MAX && defined HAVE_SYS_PARAM_H
|
||||
#include <sys/param.h>
|
||||
#endif
|
||||
|
||||
#include <svn_version.h>
|
||||
#include <svn_client.h>
|
||||
#include <svn_cmdline.h>
|
||||
#include <svn_pools.h>
|
||||
#include <svn_config.h>
|
||||
#include <svn_fs.h>
|
||||
#if SVN_VER_MINOR > 7
|
||||
#include <svn_path.h>
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -54,7 +61,9 @@ int32_t start_svn(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
//int32_t ipv6 = 0;
|
||||
char URL[1024];
|
||||
char URLBRANCH[256];
|
||||
#if SVN_VER_MINOR > 7
|
||||
const char *canonical;
|
||||
#endif
|
||||
apr_pool_t *pool;
|
||||
svn_error_t *err;
|
||||
svn_opt_revision_t revision;
|
||||
|
@ -78,17 +87,23 @@ int32_t start_svn(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
|
||||
err = svn_config_ensure(NULL, pool);
|
||||
if (err) {
|
||||
svn_pool_destroy(pool);
|
||||
svn_handle_error2(err, stderr, FALSE, "hydra: ");
|
||||
return 4;
|
||||
}
|
||||
|
||||
//if ((err = svn_client_create_context(&ctx, pool))) {
|
||||
#if SVN_VER_MINOR > 7
|
||||
if ((err = svn_client_create_context2(&ctx, NULL, pool))) {
|
||||
#else
|
||||
if ((err = svn_client_create_context(&ctx, pool))) {
|
||||
#endif
|
||||
svn_pool_destroy(pool);
|
||||
svn_handle_error2(err, stderr, FALSE, "hydra: ");
|
||||
return 4;
|
||||
}
|
||||
|
||||
if ((err = svn_config_get_config(&(ctx->config), NULL, pool))) {
|
||||
svn_pool_destroy(pool);
|
||||
svn_handle_error2(err, stderr, FALSE, "hydra: ");
|
||||
return 4;
|
||||
}
|
||||
|
@ -105,11 +120,16 @@ int32_t start_svn(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
revision.kind = svn_opt_revision_head;
|
||||
snprintf(URL, sizeof(URL), "svn://%s:%d/%s", hydra_address2string_beautiful(ip), port, URLBRANCH);
|
||||
dirents = SVN_DIRENT_KIND;
|
||||
#if SVN_VER_MINOR > 9
|
||||
canonical = svn_uri_canonicalize(URL, pool);
|
||||
err = svn_client_list4(canonical, &revision, &revision, NULL, svn_depth_unknown, dirents, FALSE, FALSE, (svn_client_list_func2_t) print_dirdummy, NULL, ctx, pool);
|
||||
#elif SVN_VER_MINOR > 7
|
||||
canonical = svn_uri_canonicalize(URL, pool);
|
||||
//err = svn_client_list2(canonical, &revision, &revision, svn_depth_unknown, dirents, FALSE, print_dirdummy, NULL, ctx, pool);
|
||||
err = svn_client_list3(canonical, &revision, &revision, svn_depth_unknown, dirents, FALSE, FALSE, (svn_client_list_func2_t) print_dirdummy, NULL, ctx, pool);
|
||||
#else
|
||||
err = svn_client_list2(URL, &revision, &revision, svn_depth_unknown, dirents, FALSE, print_dirdummy, NULL, ctx, pool);
|
||||
#endif
|
||||
|
||||
svn_pool_clear(pool);
|
||||
svn_pool_destroy(pool);
|
||||
|
||||
if (err) {
|
||||
|
@ -207,6 +227,14 @@ int32_t service_svn_init(char *ip, int32_t sp, unsigned char options, char *misc
|
|||
// 0 all OK
|
||||
// -1 error, hydra will exit, so print a good error message here
|
||||
|
||||
#ifdef LIBSVN
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] detected subversion library v%d.%d\n", SVN_VER_MAJOR, SVN_VER_MINOR);
|
||||
if (SVN_VER_MAJOR != 1 && SVN_VER_MINOR >= 5) {
|
||||
hydra_report(stderr, "[ERROR] unsupported subversion library v%d.%d, exiting!\n", SVN_VER_MAJOR, SVN_VER_MINOR);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -134,6 +134,7 @@ void service_vmauthd(char *ip, int32_t sp, unsigned char options, char *miscptr,
|
|||
if (sock >= 0)
|
||||
sock = hydra_disconnect(sock);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
default:
|
||||
hydra_report(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
||||
hydra_child_exit(2);
|
||||
|
|
|
@ -77,6 +77,7 @@ int32_t start_vnc(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
case 0x0:
|
||||
hydra_report(stderr, "[ERROR] VNC server told us to quit %c\n", buf[3]);
|
||||
hydra_child_exit(0);
|
||||
break;
|
||||
case 0x1:
|
||||
hydra_report(fp, "VNC server does not require authentication.\n");
|
||||
if (fp != stdout)
|
||||
|
@ -84,6 +85,7 @@ int32_t start_vnc(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
hydra_report_found_host(port, ip, "vnc", fp);
|
||||
hydra_completed_pair_found();
|
||||
hydra_child_exit(2);
|
||||
break;
|
||||
case 0x2:
|
||||
//VNC security type supported is the only type supported for now
|
||||
if (vnc_client_version == RFB37) {
|
||||
|
@ -108,7 +110,7 @@ int32_t start_vnc(int32_t s, char *ip, int32_t port, unsigned char options, char
|
|||
}
|
||||
break;
|
||||
default:
|
||||
hydra_report(stderr, "[ERROR] unknown VNC security type\n");
|
||||
hydra_report(stderr, "[ERROR] unknown VNC security type 0x%x\n", buf2[3]);
|
||||
hydra_child_exit(2);
|
||||
}
|
||||
|
||||
|
@ -194,8 +196,8 @@ void service_vnc(char *ip, int32_t sp, unsigned char options, char *miscptr, FIL
|
|||
}
|
||||
if (verbose)
|
||||
hydra_report(stderr, "[VERBOSE] Server banner is %s\n", buf);
|
||||
if (((strstr(buf, "RFB 004.001") != NULL) || (strstr(buf, "RFB 003.007") != NULL) || (strstr(buf, "RFB 003.008") != NULL))) {
|
||||
//using proto version 003.008 to talk to server 004.001 same for 3.7 and 3.8
|
||||
if (((strstr(buf, "RFB 005.000") != NULL) || (strstr(buf, "RFB 004") != NULL) || (strstr(buf, "RFB 003.007") != NULL) || (strstr(buf, "RFB 003.008") != NULL))) {
|
||||
//using proto version 003.007 to talk to server 005.xxx and 004.xxx same for 3.7 and 3.8
|
||||
vnc_client_version = RFB37;
|
||||
free(buf);
|
||||
buf = strdup("RFB 003.007\n");
|
||||
|
|
2
hydra.1
|
@ -1,6 +1,6 @@
|
|||
.TH "HYDRA" "1" "01/01/2019"
|
||||
.SH NAME
|
||||
hydra \- a very fast network logon cracker which support many different services
|
||||
hydra \- a very fast network logon cracker which supports many different services
|
||||
.SH SYNOPSIS
|
||||
.B hydra
|
||||
[[[\-l LOGIN|\-L FILE] [\-p PASS|\-P FILE|\-x OPT \-y]] | [\-C FILE]]
|
||||
|
|
244
hydra.c
|
@ -30,6 +30,7 @@ void usage_svn(const char* service);
|
|||
void usage_ncp(const char* service);
|
||||
void usage_firebird(const char* service);
|
||||
void usage_mysql(const char* service);
|
||||
void usage_mongodb(const char* service);
|
||||
void usage_irc(const char* service);
|
||||
void usage_postgres(const char* service);
|
||||
void usage_telnet(const char* service);
|
||||
|
@ -109,6 +110,8 @@ extern void service_oracle_sid(char *ip, int32_t sp, unsigned char options, char
|
|||
extern int32_t service_oracle_sid_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
extern void service_sip(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
extern int32_t service_sip_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
#endif
|
||||
#ifdef LIBFREERDP2
|
||||
extern void service_rdp(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
extern int32_t service_rdp_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
#endif
|
||||
|
@ -146,7 +149,14 @@ extern int32_t service_oracle_init(char *ip, int32_t sp, unsigned char options,
|
|||
extern void service_radmin2(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
extern int32_t service_radmin2_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
#endif
|
||||
|
||||
#ifdef LIBMCACHED
|
||||
extern void service_mcached(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
extern int32_t service_mcached_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
#endif
|
||||
#ifdef LIBMONGODB
|
||||
extern void service_mongodb(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
extern int32_t service_mongodb_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
#endif
|
||||
|
||||
extern int32_t service_adam6500_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
extern int32_t service_cisco_init(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE * fp, int32_t port, char *hostname);
|
||||
|
@ -186,7 +196,7 @@ extern int32_t service_rpcap_init(char *ip, int32_t sp, unsigned char options, c
|
|||
|
||||
// ADD NEW SERVICES HERE
|
||||
char *SERVICES =
|
||||
"adam6500 asterisk afp cisco cisco-enable cvs firebird ftp ftps http[s]-{head|get|post} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] mssql mysql ncp nntp oracle oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap rsh rtsp s7-300 sapr3 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp";
|
||||
"adam6500 asterisk afp cisco cisco-enable cvs firebird ftp[s] http[s]-{head|get|post} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] memcached mongodb mssql mysql ncp nntp oracle oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap rsh rtsp s7-300 sapr3 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp";
|
||||
|
||||
#define MAXBUF 520
|
||||
#define MAXLINESIZE ( ( MAXBUF / 2 ) - 4 )
|
||||
|
@ -204,9 +214,11 @@ char *SERVICES =
|
|||
#define RESTOREFILE "./hydra.restore"
|
||||
|
||||
#define PROGRAM "Hydra"
|
||||
#define VERSION "v8.8"
|
||||
#define VERSION "v9.1-dev"
|
||||
#define AUTHOR "van Hauser/THC"
|
||||
#define EMAIL "<vh@thc.org>"
|
||||
#define AUTHOR2 "David Maciejak"
|
||||
#define EMAIL2 "<david.maciejak@gmail.com>"
|
||||
#define RESOURCE "https://github.com/vanhauser-thc/thc-hydra"
|
||||
|
||||
extern char *hydra_strcasestr(const char *haystack, const char *needle);
|
||||
|
@ -295,7 +307,7 @@ typedef struct {
|
|||
} hydra_portlist;
|
||||
|
||||
// external vars
|
||||
extern char HYDRA_EXIT[5];
|
||||
extern char *HYDRA_EXIT;
|
||||
#if !defined(ANDROID) && !defined(__BIONIC__)
|
||||
extern int32_t errno;
|
||||
#endif
|
||||
|
@ -381,7 +393,13 @@ static const struct {
|
|||
{ "ldap3", service_ldap_init, service_ldap3, usage_ldap },
|
||||
{ "ldap3-crammd5", service_ldap_init, service_ldap3_cram_md5, usage_ldap },
|
||||
{ "ldap3-digestmd5", service_ldap_init, service_ldap3_digest_md5, usage_ldap },
|
||||
#ifdef LIBMCACHED
|
||||
{"memcached", service_mcached_init, service_mcached, NULL},
|
||||
#endif
|
||||
SERVICE(mssql),
|
||||
#ifdef LIBMONGODB
|
||||
SERVICE3("mongodb", mongodb),
|
||||
#endif
|
||||
#ifdef HAVE_MATH_H
|
||||
SERVICE3("mysql", mysql),
|
||||
#endif
|
||||
|
@ -404,7 +422,7 @@ static const struct {
|
|||
#endif
|
||||
SERVICE(redis),
|
||||
SERVICE(rexec),
|
||||
#ifdef LIBOPENSSL
|
||||
#ifdef LIBFREERDP2
|
||||
SERVICE3("rdp", rdp),
|
||||
#endif
|
||||
SERVICE(rlogin),
|
||||
|
@ -459,7 +477,7 @@ void help(int32_t ext) {
|
|||
#ifdef HAVE_MATH_H
|
||||
" [-x MIN:MAX:CHARSET]"
|
||||
#endif
|
||||
" [-c TIME] [-ISOuvVd46] "
|
||||
" [-c TIME] [-ISOuvVd46] [-m MODULE_OPT] "
|
||||
//"[server service [OPT]]|"
|
||||
"[service://server[:PORT][/OPT]]\n");
|
||||
PRINT_NORMAL(ext, "\nOptions:\n");
|
||||
|
@ -493,10 +511,12 @@ void help(int32_t ext) {
|
|||
" -4 / -6 use IPv4 (default) / IPv6 addresses (put always in [] also in -M)\n"
|
||||
" -v / -V / -d verbose mode / show login+pass for each attempt / debug mode \n"
|
||||
" -O use old SSL v2 and v3\n"
|
||||
" -K do not redo failed attempts (good for -M mass scanning)\n"
|
||||
" -q do not print messages about connection errors\n",
|
||||
MAXTASKS, WAITTIME, conwait
|
||||
);
|
||||
PRINT_NORMAL(ext, " -U service module usage details\n"
|
||||
" -m OPT options specific for a module, see -U output for information\n"
|
||||
" -h more command line options (COMPLETE HELP)\n"
|
||||
" server the target: DNS, IP or 192.168.0.0/24 (this OR the -M option)\n"
|
||||
" service the service to crack (see below for supported protocols)\n"
|
||||
|
@ -575,7 +595,7 @@ void hydra_debug(int32_t force, char *string) {
|
|||
if (!debug && !force)
|
||||
return;
|
||||
|
||||
printf("[DEBUG] Code: %s Time: %lu\n", string, (uint64_t) time(NULL));
|
||||
printf("[DEBUG] Code: %s Time: %" hPRIu64 "\n", string, (uint64_t) time(NULL));
|
||||
printf("[DEBUG] Options: mode %d ssl %d restore %d showAttempt %d tasks %d max_use %d tnp %d tpsal %d tprl %d exit_found %d miscptr %s service %s\n",
|
||||
hydra_options.mode, hydra_options.ssl, hydra_options.restore,
|
||||
hydra_options.showAttempt, hydra_options.tasks, hydra_options.max_use,
|
||||
|
@ -583,7 +603,7 @@ void hydra_debug(int32_t force, char *string) {
|
|||
hydra_options.try_password_reverse_login, hydra_options.exit_found,
|
||||
STR_NULL(hydra_options.miscptr), hydra_options.service);
|
||||
|
||||
printf("[DEBUG] Brains: active %d targets %d finished %d todo_all %lu todo %lu sent %lu found %lu countlogin %lu sizelogin %lu countpass %lu sizepass %lu\n",
|
||||
printf("[DEBUG] Brains: active %d targets %d finished %d todo_all %" hPRIu64 " todo %" hPRIu64 " sent %" hPRIu64 " found %" hPRIu64 " countlogin %" hPRIu64 " sizelogin %" hPRIu64 " countpass %" hPRIu64 " sizepass %" hPRIu64 "\n",
|
||||
hydra_brains.active, hydra_brains.targets, hydra_brains.finished,
|
||||
hydra_brains.todo_all + total_redo_count, hydra_brains.todo,
|
||||
hydra_brains.sent, hydra_brains.found,
|
||||
|
@ -595,7 +615,7 @@ void hydra_debug(int32_t force, char *string) {
|
|||
for (i = 0; i < hydra_brains.targets; i++) {
|
||||
hydra_target* target = hydra_targets[i];
|
||||
printf
|
||||
("[DEBUG] Target %d - target %s ip %s login_no %lu pass_no %lu sent %lu pass_state %d redo_state %d (%d redos) use_count %d failed %d done %d fail_count %d login_ptr %s pass_ptr %s\n",
|
||||
("[DEBUG] Target %d - target %s ip %s login_no %" hPRIu64 " pass_no %" hPRIu64 " sent %" hPRIu64 " pass_state %d redo_state %d (%d redos) use_count %d failed %d done %d fail_count %d login_ptr %s pass_ptr %s\n",
|
||||
i, STR_NULL(target->target), hydra_address2string_beautiful(target->ip),
|
||||
target->login_no, target->pass_no, target->sent,
|
||||
target->pass_state, target->redo_state, target->redo,
|
||||
|
@ -649,7 +669,7 @@ void hydra_restore_write(int32_t print_msg) {
|
|||
}
|
||||
|
||||
if ((f = fopen(RESTOREFILE, "w")) == NULL) {
|
||||
fprintf(stderr, "[ERROR] Can not create restore file (%s) - \n", RESTOREFILE);
|
||||
fprintf(stderr, "[ERROR] Can not create restore file (%s) - ", RESTOREFILE);
|
||||
perror("");
|
||||
process_restore = 0;
|
||||
return;
|
||||
|
@ -1027,15 +1047,17 @@ void fill_mem(char *ptr, FILE * fd, int32_t colonmode) {
|
|||
char tmp[MAXBUF + 4] = "", *ptr2;
|
||||
uint32_t len;
|
||||
int32_t only_one_empty_line = 0;
|
||||
|
||||
int read_flag = 0;
|
||||
#ifdef HAVE_ZLIB
|
||||
gzFile fp = gzdopen(fileno(fd), "r");
|
||||
|
||||
while (!gzeof(fp)) {
|
||||
while (!gzeof(fp) && !read_flag) {
|
||||
if (gzgets(fp, tmp, MAXLINESIZE) != NULL) {
|
||||
#else
|
||||
FILE *fp = fd;
|
||||
|
||||
while (!feof(fp)) {
|
||||
while (!feof(fp) && !read_flag) {
|
||||
if (fgets(tmp, MAXLINESIZE, fp) != NULL) {
|
||||
#endif
|
||||
if (tmp[0] != 0) {
|
||||
|
@ -1063,6 +1085,8 @@ void fill_mem(char *ptr, FILE * fd, int32_t colonmode) {
|
|||
ptr++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
read_flag = 1;
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_ZLIB
|
||||
|
@ -1111,8 +1135,17 @@ void hydra_service_init(int32_t target_no) {
|
|||
else
|
||||
hydra_targets[target_no]->done = TARGET_ERROR;
|
||||
hydra_brains.finished++;
|
||||
if (hydra_brains.targets == 1)
|
||||
if (hydra_brains.targets == 1) {
|
||||
if (hydra_brains.ofp != NULL && hydra_brains.ofp != stdout) {
|
||||
if (hydra_options.outfile_format == FORMAT_JSONV1) {
|
||||
char json_error[120];
|
||||
snprintf(json_error, sizeof(json_error), "[ERROR] unexpected result connecting to target %s port %d", hydra_address2string_beautiful(t->ip), t->port);
|
||||
fprintf(hydra_brains.ofp, "\n\t],\n\"success\": false,\n\"errormessages\": [ \"%s\" ],\n\"quantityfound\": %" hPRIu64 " }\n", json_error, hydra_brains.found);
|
||||
}
|
||||
fclose(hydra_brains.ofp);
|
||||
}
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1240,6 +1273,8 @@ int32_t hydra_lookup_port(char *service) {
|
|||
{"oracle-listener", PORT_ORACLE, PORT_ORACLE_SSL},
|
||||
{"oracle-sid", PORT_ORACLE, PORT_ORACLE_SSL},
|
||||
{"oracle", PORT_ORACLE, PORT_ORACLE_SSL},
|
||||
{"memcached", PORT_MCACHED, PORT_MCACHED_SSL},
|
||||
{"mongodb", PORT_MONGODB, PORT_MONGODB},
|
||||
{"mssql", PORT_MSSQL, PORT_MSSQL_SSL},
|
||||
{"mysql", PORT_MYSQL, PORT_MYSQL_SSL},
|
||||
{"postgres", PORT_POSTGRES, PORT_POSTGRES_SSL},
|
||||
|
@ -1348,7 +1383,7 @@ void hydra_kill_head(int32_t head_no, int32_t killit, int32_t fail) {
|
|||
void hydra_increase_fail_count(int32_t target_no, int32_t head_no) {
|
||||
int32_t i, k, maxfail = 0;
|
||||
|
||||
if (target_no < 0)
|
||||
if (target_no < 0 || hydra_options.skip_redo)
|
||||
return;
|
||||
|
||||
if (hydra_targets[target_no]->ok) {
|
||||
|
@ -1370,6 +1405,7 @@ void hydra_increase_fail_count(int32_t target_no, int32_t head_no) {
|
|||
if (k <= 1) {
|
||||
// we need to put this in a list, otherwise we fail one login+pw test
|
||||
if (hydra_targets[target_no]->done == TARGET_ACTIVE
|
||||
&& hydra_options.skip_redo == 0
|
||||
&& hydra_targets[target_no]->redo <= hydra_options.max_use * 2
|
||||
&& ((hydra_heads[head_no]->current_login_ptr != empty_login && hydra_heads[head_no]->current_pass_ptr != empty_login)
|
||||
|| (hydra_heads[head_no]->current_login_ptr != NULL && hydra_heads[head_no]->current_pass_ptr != NULL))) {
|
||||
|
@ -1402,6 +1438,7 @@ void hydra_increase_fail_count(int32_t target_no, int32_t head_no) {
|
|||
} else {
|
||||
// we need to put this in a list, otherwise we fail one login+pw test
|
||||
if (hydra_targets[target_no]->done == TARGET_ACTIVE
|
||||
&& hydra_options.skip_redo == 0
|
||||
&& hydra_targets[target_no]->redo <= hydra_options.max_use * 2
|
||||
&& ((hydra_heads[head_no]->current_login_ptr != empty_login && hydra_heads[head_no]->current_pass_ptr != empty_login)
|
||||
|| (hydra_heads[head_no]->current_login_ptr != NULL && hydra_heads[head_no]->current_pass_ptr != NULL))) {
|
||||
|
@ -1508,14 +1545,14 @@ int32_t hydra_send_next_pair(int32_t target_no, int32_t head_no) {
|
|||
|
||||
if (debug)
|
||||
printf
|
||||
("[DEBUG] send_next_pair_init target %d, head %d, redo %d, redo_state %d, pass_state %d. loop_mode %d, curlogin %s, curpass %s, tlogin %s, tpass %s, logincnt %lu/%lu, passcnt %lu/%lu, loop_cnt %d\n",
|
||||
("[DEBUG] send_next_pair_init target %d, head %d, redo %d, redo_state %d, pass_state %d. loop_mode %d, curlogin %s, curpass %s, tlogin %s, tpass %s, logincnt %" hPRIu64 "/%" hPRIu64 ", passcnt %" hPRIu64 "/%" hPRIu64 ", loop_cnt %d\n",
|
||||
target_no, head_no, hydra_targets[target_no]->redo, hydra_targets[target_no]->redo_state, hydra_targets[target_no]->pass_state, hydra_options.loop_mode,
|
||||
hydra_heads[head_no]->current_login_ptr, hydra_heads[head_no]->current_pass_ptr, hydra_targets[target_no]->login_ptr, hydra_targets[target_no]->pass_ptr,
|
||||
hydra_targets[target_no]->login_no, hydra_brains.countlogin, hydra_targets[target_no]->pass_no, hydra_brains.countpass, loop_cnt);
|
||||
|
||||
if (loop_cnt > (hydra_brains.countlogin * 2) + 1 && loop_cnt > (hydra_brains.countpass * 2) + 1) {
|
||||
if (debug)
|
||||
printf("[DEBUG] too many loops in send_next_pair, returning -1 (loop_cnt %d, sent %lu, todo %lu)\n", loop_cnt, hydra_targets[target_no]->sent, hydra_brains.todo);
|
||||
printf("[DEBUG] too many loops in send_next_pair, returning -1 (loop_cnt %d, sent %" hPRIu64 ", todo %" hPRIu64 ")\n", loop_cnt, hydra_targets[target_no]->sent, hydra_brains.todo);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1525,7 +1562,7 @@ int32_t hydra_send_next_pair(int32_t target_no, int32_t head_no) {
|
|||
snpdone = 1;
|
||||
} else {
|
||||
if (debug && (hydra_heads[head_no]->current_login_ptr != NULL || hydra_heads[head_no]->current_pass_ptr != NULL))
|
||||
printf("[COMPLETED] target %s - login \"%s\" - pass \"%s\" - child %d - %lu of %lu\n",
|
||||
printf("[COMPLETED] target %s - login \"%s\" - pass \"%s\" - child %d - %" hPRIu64 " of %" hPRIu64 "\n",
|
||||
hydra_targets[target_no]->target, hydra_heads[head_no]->current_login_ptr, hydra_heads[head_no]->current_pass_ptr, head_no,
|
||||
hydra_targets[target_no]->sent, hydra_brains.todo + hydra_targets[target_no]->redo);
|
||||
hydra_heads[head_no]->redo = 0;
|
||||
|
@ -1835,7 +1872,7 @@ int32_t hydra_send_next_pair(int32_t target_no, int32_t head_no) {
|
|||
return 0; // not prevent disabling it, if its needed its already done in the above line
|
||||
}
|
||||
if (debug || hydra_options.showAttempt) {
|
||||
printf("[%sATTEMPT] target %s - login \"%s\" - pass \"%s\" - %lu of %lu [child %d] (%d/%d)\n",
|
||||
printf("[%sATTEMPT] target %s - login \"%s\" - pass \"%s\" - %" hPRIu64 " of %" hPRIu64 " [child %d] (%d/%d)\n",
|
||||
hydra_targets[target_no]->redo_state ? "REDO-" : snp_is_redo ? "RE-" : "", hydra_targets[target_no]->target, hydra_heads[head_no]->current_login_ptr,
|
||||
hydra_heads[head_no]->current_pass_ptr, hydra_targets[target_no]->sent, hydra_brains.todo + hydra_targets[target_no]->redo, head_no, hydra_targets[target_no]->redo_state ? hydra_targets[target_no]->redo_state - 1 : 0, hydra_targets[target_no]->redo);
|
||||
}
|
||||
|
@ -2047,7 +2084,7 @@ void process_proxy_line(int32_t type, char *string) {
|
|||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
char *proxy_string = NULL, *device = NULL, *memcheck, *cmdtarget = NULL;
|
||||
char *proxy_string = NULL, *device = NULL, *memcheck;
|
||||
char *outfile_format_tmp;
|
||||
FILE *lfp = NULL, *pfp = NULL, *cfp = NULL, *ifp = NULL, *rfp = NULL, *proxyfp;
|
||||
size_t countinfile = 1, sizeinfile = 0;
|
||||
|
@ -2064,7 +2101,7 @@ int main(int argc, char *argv[]) {
|
|||
struct sockaddr_in6 *ipv6 = NULL;
|
||||
struct sockaddr_in *ipv4 = NULL;
|
||||
|
||||
printf("%s %s (c) 2019 by %s - Please do not use in military or secret service organizations, or for illegal purposes.\n\n", PROGRAM, VERSION, AUTHOR);
|
||||
printf("%s %s (c) 2019 by %s & %s - Please do not use in military or secret service organizations, or for illegal purposes.\n\n", PROGRAM, VERSION, AUTHOR, AUTHOR2);
|
||||
#ifndef LIBAFP
|
||||
SERVICES = hydra_string_replace(SERVICES, "afp ", "");
|
||||
strcat(unsupported, "afp ");
|
||||
|
@ -2073,6 +2110,14 @@ int main(int argc, char *argv[]) {
|
|||
SERVICES = hydra_string_replace(SERVICES, "firebird ", "");
|
||||
strcat(unsupported, "firebird ");
|
||||
#endif
|
||||
#ifndef LIBMCACHED
|
||||
SERVICES = hydra_string_replace(SERVICES, "memcached ", "");
|
||||
strcat(unsupported, "memcached ");
|
||||
#endif
|
||||
#ifndef LIBMONGODB
|
||||
SERVICES = hydra_string_replace(SERVICES, "mongodb ", "");
|
||||
strcat(unsupported, "mongodb ");
|
||||
#endif
|
||||
#ifndef LIBMYSQLCLIENT
|
||||
SERVICES = hydra_string_replace(SERVICES, "mysql ", "mysql(v4) ");
|
||||
strcat(unsupported, "mysql5 ");
|
||||
|
@ -2107,9 +2152,10 @@ int main(int argc, char *argv[]) {
|
|||
SERVICES = hydra_string_replace(SERVICES, "svn ", "");
|
||||
strcat(unsupported, "svn ");
|
||||
#endif
|
||||
|
||||
#ifndef LIBOPENSSL
|
||||
// for ftps
|
||||
SERVICES = hydra_string_replace(SERVICES, " ftps", "");
|
||||
SERVICES = hydra_string_replace(SERVICES, "ftp[s]", "ftp");
|
||||
// for pop3
|
||||
SERVICES = hydra_string_replace(SERVICES, "pop3[s]", "pop3");
|
||||
// for imap
|
||||
|
@ -2126,8 +2172,6 @@ int main(int argc, char *argv[]) {
|
|||
SERVICES = hydra_string_replace(SERVICES, "[-{cram|digest}md5]", "");
|
||||
// for sip
|
||||
SERVICES = hydra_string_replace(SERVICES, " sip", "");
|
||||
// for rdp
|
||||
SERVICES = hydra_string_replace(SERVICES, " rdp", "");
|
||||
// for oracle-listener
|
||||
SERVICES = hydra_string_replace(SERVICES, " oracle-listener", "");
|
||||
// general
|
||||
|
@ -2136,6 +2180,12 @@ int main(int argc, char *argv[]) {
|
|||
SERVICES = hydra_string_replace(SERVICES, " oracle-sid", "");
|
||||
strcat(unsupported, "SSL-services (ftps, sip, rdp, oracle-services, ...) ");
|
||||
#endif
|
||||
|
||||
#ifndef LIBFREERDP2
|
||||
// for rdp
|
||||
SERVICES = hydra_string_replace(SERVICES, " rdp", "");
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MATH_H
|
||||
if (strlen(unsupported) > 0)
|
||||
strcat(unsupported, "and ");
|
||||
|
@ -2181,7 +2231,7 @@ int main(int argc, char *argv[]) {
|
|||
help(1);
|
||||
if (argc < 2)
|
||||
help(0);
|
||||
while ((i = getopt(argc, argv, "hIq64Rrde:vVl:fFg:L:p:OP:o:b:M:C:t:T:m:w:W:s:SUux:yc:")) >= 0) {
|
||||
while ((i = getopt(argc, argv, "hIq64Rrde:vVl:fFg:L:p:OP:o:b:M:C:t:T:m:w:W:s:SUux:yc:K")) >= 0) {
|
||||
switch (i) {
|
||||
case 'h':
|
||||
help(1);
|
||||
|
@ -2189,6 +2239,9 @@ int main(int argc, char *argv[]) {
|
|||
case 'q':
|
||||
quiet = 1;
|
||||
break;
|
||||
case 'K':
|
||||
hydra_options.skip_redo = 1;
|
||||
break;
|
||||
case 'O':
|
||||
old_ssl = 1;
|
||||
break;
|
||||
|
@ -2270,11 +2323,11 @@ int main(int argc, char *argv[]) {
|
|||
break;
|
||||
case 'b':
|
||||
outfile_format_tmp = optarg;
|
||||
if (0==strcasecmp(outfile_format_tmp,"text"))
|
||||
if (strcasecmp(outfile_format_tmp,"text") == 0)
|
||||
hydra_options.outfile_format = FORMAT_PLAIN_TEXT;
|
||||
else if (0==strcasecmp(outfile_format_tmp,"json")) // latest json formatting.
|
||||
else if (strcasecmp(outfile_format_tmp,"json") == 0) // latest json formatting.
|
||||
hydra_options.outfile_format = FORMAT_JSONV1;
|
||||
else if (0==strcasecmp(outfile_format_tmp,"jsonv1"))
|
||||
else if (strcasecmp(outfile_format_tmp,"jsonv1") == 0)
|
||||
hydra_options.outfile_format = FORMAT_JSONV1;
|
||||
else {
|
||||
fprintf(stderr, "[ERROR] Output file format must be (text, json, jsonv1)\n");
|
||||
|
@ -2371,6 +2424,9 @@ int main(int argc, char *argv[]) {
|
|||
if (!setupterm(NULL, 1, NULL) && (tigetnum("colors") <= 0)) {
|
||||
colored_output = 0;
|
||||
}
|
||||
if (cur_term) {
|
||||
del_curterm(cur_term);
|
||||
}
|
||||
}
|
||||
#else
|
||||
//don't want border line effect so disabling color output
|
||||
|
@ -2430,7 +2486,7 @@ int main(int argc, char *argv[]) {
|
|||
// check if targetdef follow syntax <service-name>://<target>[:<port-number>][/<parameters>] or it's a syntax error
|
||||
char *targetdef = strdup(argv[optind]);
|
||||
char *service_pos, *target_pos, *port_pos = NULL, *param_pos = NULL;
|
||||
cmdtarget = argv[optind];
|
||||
cmdlinetarget = argv[optind];
|
||||
|
||||
if ((targetdef != NULL) && (strstr(targetdef, "://") != NULL)) {
|
||||
service_pos = strstr(targetdef, "://");
|
||||
|
@ -2483,7 +2539,7 @@ int main(int argc, char *argv[]) {
|
|||
printf("[DEBUG] opt:%d argc:%d mod:%s tgt:%s port:%u misc:%s\n", optind, argc, hydra_options.service, hydra_options.server, hydra_options.port, hydra_options.miscptr);
|
||||
} else {
|
||||
hydra_options.server = NULL;
|
||||
hydra_options.service = NULL;
|
||||
hydra_options.service = NULL;
|
||||
|
||||
if (modusage) {
|
||||
hydra_options.service = targetdef;
|
||||
|
@ -2532,7 +2588,7 @@ int main(int argc, char *argv[]) {
|
|||
if (strcmp(hydra_options.service, "afp") == 0 || strcmp(hydra_options.service, "firebird") == 0 || strncmp(hydra_options.service, "mysql", 5) == 0 ||
|
||||
strcmp(hydra_options.service, "ncp") == 0 || strcmp(hydra_options.service, "oracle") == 0 || strcmp(hydra_options.service, "postgres") == 0 ||
|
||||
strncmp(hydra_options.service, "ssh", 3) == 0 || strcmp(hydra_options.service, "sshkey") == 0 || strcmp(hydra_options.service, "svn") == 0 ||
|
||||
strcmp(hydra_options.service, "sapr3") == 0) {
|
||||
strcmp(hydra_options.service, "sapr3") == 0 || strcmp(hydra_options.service, "memcached") == 0 || strcmp(hydra_options.service, "mongodb") == 0) {
|
||||
fprintf(stderr, "[WARNING] module %s does not support HYDRA_PROXY* !\n", hydra_options.service);
|
||||
proxy_string = NULL;
|
||||
}
|
||||
|
@ -2609,6 +2665,24 @@ int main(int argc, char *argv[]) {
|
|||
fprintf(stderr, "[WARNING] The icq module is not working with the modern protocol version! (somebody else will need to fix this as I don't care for icq)\n");
|
||||
i = 1;
|
||||
}
|
||||
if (strcmp(hydra_options.service, "memcached") == 0)
|
||||
#ifdef LIBMCACHED
|
||||
i = 1;
|
||||
#else
|
||||
bail("Compiled without LIBMCACHED support, module not available!");
|
||||
#endif
|
||||
|
||||
if (strcmp(hydra_options.service, "mongodb") == 0)
|
||||
#ifdef LIBMONGODB
|
||||
{
|
||||
i = 1;
|
||||
if (hydra_options.miscptr == NULL || (strlen(hydra_options.miscptr) == 0))
|
||||
fprintf(stderr, "[INFO] The mongodb db wasn't passed so using admin by default\n");
|
||||
}
|
||||
#else
|
||||
bail("Compiled without LIBMONGODB support, module not available!");
|
||||
#endif
|
||||
|
||||
if (strcmp(hydra_options.service, "mysql") == 0) {
|
||||
i = 1;
|
||||
if (hydra_options.tasks > 4) {
|
||||
|
@ -2665,6 +2739,7 @@ int main(int argc, char *argv[]) {
|
|||
#else
|
||||
bail("Compiled without LIBNCP support, module not available!");
|
||||
#endif
|
||||
|
||||
if (strcmp(hydra_options.service, "pcanywhere") == 0)
|
||||
i = 1;
|
||||
if (strcmp(hydra_options.service, "http-proxy") == 0) {
|
||||
|
@ -2720,10 +2795,15 @@ int main(int argc, char *argv[]) {
|
|||
#endif
|
||||
}
|
||||
if ((strcmp(hydra_options.service, "smb") == 0) || (strcmp(hydra_options.service, "smbnt") == 0) ||
|
||||
(strcmp(hydra_options.service, "sip") == 0) || (strcmp(hydra_options.service, "rdp") == 0) ||
|
||||
(strcmp(hydra_options.service, "sip") == 0) ||
|
||||
(strcmp(hydra_options.service, "oracle-listener") == 0) || (strcmp(hydra_options.service, "oracle-sid") == 0)) {
|
||||
#ifndef LIBOPENSSL
|
||||
bail("Compiled without OPENSSL support, module not available!");
|
||||
#endif
|
||||
}
|
||||
if (strcmp(hydra_options.service, "rdp") == 0){
|
||||
#ifndef LIBFREERDP2
|
||||
bail("Compiled without FREERDP2 support, module not available!");
|
||||
#endif
|
||||
}
|
||||
if (strcmp(hydra_options.service, "pcnfs") == 0) {
|
||||
|
@ -3022,17 +3102,15 @@ int main(int argc, char *argv[]) {
|
|||
if (strcmp(hydra_options.service, "irc") == 0)
|
||||
i = 1;
|
||||
if (strcmp(hydra_options.service, "rdp") == 0) {
|
||||
//if (hydra_options.tasks > 4)
|
||||
// fprintf(stderr, "[WARNING] rdp servers often don't like many connections, use -t 1 or -t 4 to reduce the number of parallel connections and -W 1 or -W 3 to wait between connection to allow the server to recover\n");
|
||||
//if (hydra_options.tasks > 4) {
|
||||
// fprintf(stderr, "[INFO] Reduced number of tasks to 4 (rdp does not like many parallel connections)\n");
|
||||
// hydra_options.tasks = 4;
|
||||
//}
|
||||
//if (conwait == 0)
|
||||
// hydra_options.conwait = conwait = 1;
|
||||
//printf("[WARNING] the rdp module is currently reported to be unreliable, most likely against new Windows version. Please test, report - and if possible, fix.\n");
|
||||
printf("[ERROR] the rdp module does not support the current protocol, hence it is disabled. If you want to add it, please contact vh@thc.org\n");
|
||||
exit(-1);
|
||||
if (hydra_options.tasks > 4)
|
||||
fprintf(stderr, "[WARNING] rdp servers often don't like many connections, use -t 1 or -t 4 to reduce the number of parallel connections and -W 1 or -W 3 to wait between connection to allow the server to recover\n");
|
||||
if (hydra_options.tasks > 4) {
|
||||
fprintf(stderr, "[INFO] Reduced number of tasks to 4 (rdp does not like many parallel connections)\n");
|
||||
hydra_options.tasks = 4;
|
||||
}
|
||||
if (conwait == 0)
|
||||
hydra_options.conwait = conwait = 1;
|
||||
printf("[WARNING] the rdp module is experimental. Please test, report - and if possible, fix.\n");
|
||||
i = 1;
|
||||
}
|
||||
if (strcmp(hydra_options.service, "radmin2") == 0) {
|
||||
|
@ -3117,9 +3195,19 @@ int main(int argc, char *argv[]) {
|
|||
hydra_options.max_use = MAXTASKS;
|
||||
}
|
||||
// script kiddie patch
|
||||
if (hydra_options.server != NULL && (hydra_strcasestr(hydra_options.server, "gmail.") != NULL || hydra_strcasestr(hydra_options.server, "googlemail.") != NULL))
|
||||
fprintf(stderr, "[WARNING] Google Mail has bruteforce detection and sends false positives. You are not doing anything illegal right?!\n");
|
||||
|
||||
if (hydra_options.server != NULL && (
|
||||
hydra_strcasestr(hydra_options.server, ".outlook.com") != NULL ||
|
||||
hydra_strcasestr(hydra_options.server, ".hotmail.com") != NULL ||
|
||||
hydra_strcasestr(hydra_options.server, ".yahoo.") != NULL ||
|
||||
hydra_strcasestr(hydra_options.server, ".gmx.") != NULL ||
|
||||
hydra_strcasestr(hydra_options.server, ".web.de") != NULL ||
|
||||
hydra_strcasestr(hydra_options.server, ".gmail.") != NULL ||
|
||||
hydra_strcasestr(hydra_options.server, "googlemail.") != NULL
|
||||
)) {
|
||||
fprintf(stderr, "[WARNING] Google Mail and others have bruteforce and hydra detection and sends false positives. You are not doing anything illegal right?!\n");
|
||||
fprintf(stderr, "[WARNING] !read the above!\n");
|
||||
sleep(5);
|
||||
}
|
||||
if (hydra_options.colonfile == NULL) {
|
||||
if (hydra_options.loginfile != NULL) {
|
||||
if ((lfp = fopen(hydra_options.loginfile, "r")) == NULL) {
|
||||
|
@ -3133,11 +3221,11 @@ int main(int argc, char *argv[]) {
|
|||
exit(-1);
|
||||
}
|
||||
if (hydra_brains.countlogin > MAX_LINES) {
|
||||
fprintf(stderr, "[ERROR] Maximum number of logins is %d, this file has %lu entries.\n", MAX_LINES, hydra_brains.countlogin);
|
||||
fprintf(stderr, "[ERROR] Maximum number of logins is %d, this file has %" hPRIu64 " entries.\n", MAX_LINES, hydra_brains.countlogin);
|
||||
exit(-1);
|
||||
}
|
||||
if (hydra_brains.sizelogin > MAX_BYTES) {
|
||||
fprintf(stderr, "[ERROR] Maximum size of the login file is %d, this file has %lu bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizelogin);
|
||||
fprintf(stderr, "[ERROR] Maximum size of the login file is %d, this file has %" hPRIu64 " bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizelogin);
|
||||
exit(-1);
|
||||
}
|
||||
login_ptr = malloc(hydra_brains.sizelogin + hydra_brains.countlogin + 8);
|
||||
|
@ -3162,11 +3250,11 @@ int main(int argc, char *argv[]) {
|
|||
exit(-1);
|
||||
}
|
||||
if (hydra_brains.countpass > MAX_LINES) {
|
||||
fprintf(stderr, "[ERROR] Maximum number of passwords is %d, this file has %lu entries.\n", MAX_LINES, hydra_brains.countpass);
|
||||
fprintf(stderr, "[ERROR] Maximum number of passwords is %d, this file has %" hPRIu64 " entries.\n", MAX_LINES, hydra_brains.countpass);
|
||||
exit(-1);
|
||||
}
|
||||
if (hydra_brains.sizepass > MAX_BYTES) {
|
||||
fprintf(stderr, "[ERROR] Maximum size of the password file is %d, this file has %lu bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizepass);
|
||||
fprintf(stderr, "[ERROR] Maximum size of the password file is %d, this file has %" hPRIu64 " bytes.\n", MAX_BYTES, (uint64_t) hydra_brains.sizepass);
|
||||
exit(-1);
|
||||
}
|
||||
pass_ptr = malloc(hydra_brains.sizepass + hydra_brains.countpass + 8);
|
||||
|
@ -3209,11 +3297,11 @@ int main(int argc, char *argv[]) {
|
|||
exit(-1);
|
||||
}
|
||||
if (hydra_brains.countlogin > MAX_LINES / 2) {
|
||||
fprintf(stderr, "[ERROR] Maximum number of colon file entries is %d, this file has %lu entries.\n", MAX_LINES / 2, hydra_brains.countlogin);
|
||||
fprintf(stderr, "[ERROR] Maximum number of colon file entries is %d, this file has %" hPRIu64 " entries.\n", MAX_LINES / 2, hydra_brains.countlogin);
|
||||
exit(-1);
|
||||
}
|
||||
if (hydra_brains.sizelogin > MAX_BYTES / 2) {
|
||||
fprintf(stderr, "[ERROR] Maximum size of the colon file is %d, this file has %lu bytes.\n", MAX_BYTES / 2, (uint64_t) hydra_brains.sizelogin);
|
||||
fprintf(stderr, "[ERROR] Maximum size of the colon file is %d, this file has %" hPRIu64 " bytes.\n", MAX_BYTES / 2, (uint64_t) hydra_brains.sizelogin);
|
||||
exit(-1);
|
||||
}
|
||||
csv_ptr = malloc(hydra_brains.sizelogin + 2 * hydra_brains.countlogin + 8);
|
||||
|
@ -3301,9 +3389,9 @@ int main(int argc, char *argv[]) {
|
|||
fprintf(stderr, "Error: no target server given, nor -M option used\n");
|
||||
exit(-1);
|
||||
} else if (index(hydra_options.server, '/') != NULL) {
|
||||
if (cmdtarget == NULL)
|
||||
if (cmdlinetarget == NULL)
|
||||
bail("You seem to mix up \"service://target:port/options\" syntax with \"target service options\" syntax. Read the README on how to use hydra correctly!");
|
||||
if (strstr(cmdtarget, "://") != NULL) {
|
||||
if (strstr(cmdlinetarget, "://") != NULL) {
|
||||
tmpptr = index(hydra_options.server, '/');
|
||||
if (tmpptr != NULL)
|
||||
*tmpptr = 0;
|
||||
|
@ -3436,7 +3524,7 @@ int main(int argc, char *argv[]) {
|
|||
bail("No login/password combination given!");
|
||||
if (hydra_brains.todo < hydra_options.tasks) {
|
||||
if (verbose && hydra_options.tasks != TASKS)
|
||||
printf("[VERBOSE] More tasks defined than login/pass pairs exist. Tasks reduced to %lu\n", hydra_brains.todo);
|
||||
printf("[VERBOSE] More tasks defined than login/pass pairs exist. Tasks reduced to %" hPRIu64 "\n", hydra_brains.todo);
|
||||
hydra_options.tasks = hydra_brains.todo;
|
||||
}
|
||||
}
|
||||
|
@ -3471,18 +3559,18 @@ int main(int argc, char *argv[]) {
|
|||
if (hydra_options.ssl)
|
||||
options = options | OPTION_SSL;
|
||||
|
||||
printf("[DATA] max %d task%s per %d server%s, overall %d task%s, %lu login tr",
|
||||
printf("[DATA] max %d task%s per %d server%s, overall %d task%s, %" hPRIu64 " login tr",
|
||||
hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s",
|
||||
hydra_brains.targets, hydra_brains.targets == 1 ? "" : "s",
|
||||
hydra_options.max_use, hydra_options.max_use == 1 ? "" : "s",
|
||||
hydra_brains.todo);
|
||||
printf("%s", hydra_brains.todo == 1 ? "y" : "ies");
|
||||
if (hydra_options.colonfile == NULL) {
|
||||
printf(" (l:%lu/p:%lu), ~%lu tr",
|
||||
printf(" (l:%" hPRIu64 "/p:%" hPRIu64 "), ~%" hPRIu64 " tr",
|
||||
(uint64_t) hydra_brains.countlogin, (uint64_t) hydra_brains.countpass,
|
||||
math2);
|
||||
} else {
|
||||
printf(", ~%lu tr", math2);
|
||||
printf(", ~%" hPRIu64 " tr", math2);
|
||||
}
|
||||
printf("%s", math2 == 1 ? "y" : "ies");
|
||||
printf(" per task\n");
|
||||
|
@ -3504,23 +3592,29 @@ int main(int argc, char *argv[]) {
|
|||
// printf("[DATA] with additional data %s\n", hydra_options.miscptr);
|
||||
|
||||
if (hydra_options.outfile_ptr != NULL) {
|
||||
if ((hydra_brains.ofp = fopen(hydra_options.outfile_ptr, "a+")) == NULL) {
|
||||
char outfile_open_type[] = "a+"; //Default open in a+ mode
|
||||
if (hydra_options.outfile_format == FORMAT_JSONV1 && hydra_options.restore != 1) {
|
||||
outfile_open_type[0] = 'w'; //Creat new outfile, if using JSON output and not using -R. The open mode should be "w+".
|
||||
}
|
||||
if ((hydra_brains.ofp = fopen(hydra_options.outfile_ptr, outfile_open_type)) == NULL) {
|
||||
perror("[ERROR] Error creating outputfile");
|
||||
exit(-1);
|
||||
}
|
||||
if (hydra_options.outfile_format == FORMAT_JSONV1) {
|
||||
fprintf(hydra_brains.ofp, "{ \"generator\": {\n"
|
||||
if (hydra_options.restore != 1) { // No JSON head while using -R
|
||||
fprintf(hydra_brains.ofp, "{ \"generator\": {\n"
|
||||
"\t\"software\": \"%s\", \"version\": \"%s\", \"built\": \"%s\",\n"
|
||||
"\t\"server\": \"%s\", \"service\": \"%s\", \"jsonoutputversion\": \"1.00\",\n"
|
||||
"\t\"commandline\": \"%s",
|
||||
PROGRAM, VERSION, hydra_build_time(),
|
||||
hydra_options.server == NULL ? hydra_options.infile_ptr : hydra_options.server, hydra_options.service, prg);
|
||||
for (i = 1; i < argc; i++) {
|
||||
char *t = hydra_string_replace(argv[i],"\"","\\\"");
|
||||
fprintf(hydra_brains.ofp, " %s", t);
|
||||
free(t);
|
||||
for (i = 1; i < argc; i++) {
|
||||
char *t = hydra_string_replace(argv[i],"\"","\\\"");
|
||||
fprintf(hydra_brains.ofp, " %s", t);
|
||||
free(t);
|
||||
}
|
||||
fprintf(hydra_brains.ofp, "\"\n\t},\n\"results\": [");
|
||||
}
|
||||
fprintf(hydra_brains.ofp, "\"\n\t},\n\"results\": [");
|
||||
} else { // else default is plain text aka == 0
|
||||
fprintf(hydra_brains.ofp, "# %s %s run at %s on %s %s (%s", PROGRAM, VERSION, hydra_build_time(),
|
||||
hydra_options.server == NULL ? hydra_options.infile_ptr : hydra_options.server, hydra_options.service, prg);
|
||||
|
@ -3683,7 +3777,7 @@ int main(int argc, char *argv[]) {
|
|||
for (head_no = 0; head_no < hydra_options.max_use; head_no++) {
|
||||
if (debug > 1 && hydra_heads[head_no]->active != HEAD_DISABLED)
|
||||
printf("[DEBUG] head_no[%d] to target_no %d active %d\n", head_no, hydra_heads[head_no]->target_no, hydra_heads[head_no]->active);
|
||||
|
||||
|
||||
switch (hydra_heads[head_no]->active) {
|
||||
case HEAD_DISABLED:
|
||||
break;
|
||||
|
@ -3839,7 +3933,7 @@ int main(int argc, char *argv[]) {
|
|||
case 'C': // head reports connect error
|
||||
fck = write(hydra_heads[head_no]->sp[0], "Q", 1);
|
||||
if (debug) {
|
||||
printf("[ATTEMPT-ERROR] target %s - login \"%s\" - pass \"%s\" - child %d - %lu of %lu\n",
|
||||
printf("[ATTEMPT-ERROR] target %s - login \"%s\" - pass \"%s\" - child %d - %" hPRIu64 " of %" hPRIu64 "\n",
|
||||
hydra_targets[hydra_heads[head_no]->target_no]->target, hydra_heads[head_no]->current_login_ptr, hydra_heads[head_no]->current_pass_ptr, head_no,
|
||||
hydra_targets[hydra_heads[head_no]->target_no]->sent, hydra_brains.todo);
|
||||
}
|
||||
|
@ -3918,7 +4012,7 @@ int main(int argc, char *argv[]) {
|
|||
for (j = 0; j < hydra_options.max_use; j++)
|
||||
if (hydra_heads[j]->active >= HEAD_UNUSED)
|
||||
k++;
|
||||
printf("[STATUS] %.2f tries/min, %lu tries in %02lu:%02luh, %lu to do in %02lu:%02luh, %d active\n", (1.0 * hydra_brains.sent) / (((elapsed_status - starttime) * 1.0) / 60), // tries/min
|
||||
printf("[STATUS] %.2f tries/min, %" hPRIu64 " tries in %02" hPRIu64 ":%02" hPRIu64 "h, %" hPRIu64 " to do in %02" hPRIu64 ":%02" hPRIu64 "h, %d active\n", (1.0 * hydra_brains.sent) / (((elapsed_status - starttime) * 1.0) / 60), // tries/min
|
||||
hydra_brains.sent, // tries
|
||||
(uint64_t) ((elapsed_status - starttime) / 3600), // hours
|
||||
(uint64_t) (((elapsed_status - starttime) % 3600) / 60), // minutes
|
||||
|
@ -3963,16 +4057,16 @@ int main(int argc, char *argv[]) {
|
|||
fprintf(stderr, "[ERROR] illegal target result value (%d=>%d)\n", i, hydra_targets[i]->done);
|
||||
}
|
||||
|
||||
printf("%d of %d target%s%scompleted, %lu valid password",
|
||||
printf("%d of %d target%s%scompleted, %" hPRIu64 " valid password",
|
||||
hydra_brains.targets - j - k - error, hydra_brains.targets, hydra_brains.targets == 1 ? " " : "s ",
|
||||
hydra_brains.found > 0 ? "successfully " : "", hydra_brains.found);
|
||||
printf("%s", hydra_brains.found == 1 ? "" : "s");
|
||||
printf("%s", hydra_brains.found < 2 ? "" : "s");
|
||||
printf(" found\n");
|
||||
|
||||
error += j;
|
||||
k = 0;
|
||||
for (j = 0; j < hydra_options.max_use; j++)
|
||||
if (hydra_heads[j]->active == HEAD_ACTIVE)
|
||||
for (i = 0; i < hydra_options.max_use; i++)
|
||||
if (hydra_heads[i]->active == HEAD_ACTIVE)
|
||||
k++;
|
||||
|
||||
if (error == 0 && k == 0) {
|
||||
|
@ -4017,13 +4111,9 @@ int main(int argc, char *argv[]) {
|
|||
strncat(json_error,tmp_str,STRMAX);
|
||||
strncat(json_error,"\"",STRMAX);
|
||||
error = 1;
|
||||
if (*json_error) {
|
||||
strncat(json_error,", ", STRMAX);
|
||||
}
|
||||
error = 1;
|
||||
}
|
||||
if (error) {
|
||||
snprintf(tmp_str, STRMAX, "[ERROR] %d target%s did not complete", j, j == 1 ? "" : "s");
|
||||
snprintf(tmp_str, STRMAX, "[ERROR] %d target%s did not complete", j, j < 1 ? "" : "s");
|
||||
fprintf(stderr, "%s\n", tmp_str);
|
||||
if (*json_error) {
|
||||
strncat(json_error,", ", STRMAX);
|
||||
|
@ -4037,7 +4127,7 @@ int main(int argc, char *argv[]) {
|
|||
printf("%s (%s) finished at %s\n", PROGRAM, RESOURCE, hydra_build_time());
|
||||
if (hydra_brains.ofp != NULL && hydra_brains.ofp != stdout) {
|
||||
if (hydra_options.outfile_format == FORMAT_JSONV1) {
|
||||
fprintf(hydra_brains.ofp, "\n\t],\n\"success\": %s,\n\"errormessages\": [ %s ],\n\"quantityfound\": %lu }\n",
|
||||
fprintf(hydra_brains.ofp, "\n\t],\n\"success\": %s,\n\"errormessages\": [ %s ],\n\"quantityfound\": %" hPRIu64 " }\n",
|
||||
(error ? "false" : "true"), json_error, hydra_brains.found);
|
||||
}
|
||||
fclose(hydra_brains.ofp);
|
||||
|
|
13
hydra.h
|
@ -3,11 +3,18 @@
|
|||
#include <stdio.h>
|
||||
#ifdef __sun
|
||||
#include <sys/int_types.h>
|
||||
#elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)
|
||||
#elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX) || defined(__APPLE__)
|
||||
#include <inttypes.h>
|
||||
#else
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
#if defined(_INTTYPES_H) || defined(__CLANG_INTTYPES_H)
|
||||
#define hPRIu64 PRIu64
|
||||
#else
|
||||
#define hPRIu64 "lu"
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <unistd.h>
|
||||
|
@ -144,6 +151,9 @@
|
|||
#define PORT_RPCAP 2002
|
||||
#define PORT_RPCAP_SSL 2002
|
||||
#define PORT_RADMIN2 4899
|
||||
#define PORT_MCACHED 11211
|
||||
#define PORT_MCACHED_SSL 11211
|
||||
#define PORT_MONGODB 27017
|
||||
|
||||
#define False 0
|
||||
#define True 1
|
||||
|
@ -211,6 +221,7 @@ typedef struct {
|
|||
char *service;
|
||||
char bfg;
|
||||
_Bool rainy;
|
||||
int32_t skip_redo;
|
||||
} hydra_option;
|
||||
|
||||
#define _HYDRA_H
|
||||
|
|
|
@ -28,7 +28,7 @@ void help() {
|
|||
printf(" -u upcase characters (A,B,C,D, etc.)\n");
|
||||
printf(" -n numbers (1,2,3,4, etc.)\n");
|
||||
printf(" -p printable characters (which are not -l/-n/-p, e.g. $,!,/,(,*, etc.)\n");
|
||||
printf(" -s special characters - all others not withint the sets above\n");
|
||||
printf(" -s special characters - all others not within the sets above\n");
|
||||
printf("\n%s reads passwords in and prints those which meet the requirements.\n", PROGRAM);
|
||||
printf("The return code is the number of valid passwords found, 0 if none was found.\n");
|
||||
printf("Use for security: check passwords, if 0 is returned, reject password choice.\n");
|
||||
|
|
634
rdp.h
|
@ -1,634 +0,0 @@
|
|||
/*
|
||||
david: this file is based on header files from rdesktop project
|
||||
|
||||
rdesktop: A Remote Desktop Protocol client.
|
||||
Master include file
|
||||
Copyright (C) Matthew Chapman 1999-2008
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
*/
|
||||
|
||||
#include "hydra-mod.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#ifdef _WIN32
|
||||
#define WINVER 0x0400
|
||||
#include <windows.h>
|
||||
#include <winsock.h>
|
||||
#include <time.h>
|
||||
#define DIR int32_t
|
||||
#else
|
||||
#include <dirent.h>
|
||||
#include <sys/time.h>
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#endif
|
||||
#include <limits.h> /* PATH_MAX */
|
||||
#ifdef HAVE_SYSEXITS_H
|
||||
#include <sysexits.h>
|
||||
#endif
|
||||
|
||||
#include <sys/stat.h> /* stat */
|
||||
#include <sys/time.h> /* gettimeofday */
|
||||
#include <sys/times.h> /* times */
|
||||
#include <openssl/rsa.h>
|
||||
#include <openssl/hmac.h>
|
||||
|
||||
//fixme
|
||||
|
||||
/* The system could not log you on. Make sure your User name and domain are correct [FAILED] */
|
||||
#define LOGON_MESSAGE_FAILED_XP "\x00\x00\x01\x06\x02\x06\x04\x09\x05\x05\x04\x06\x06\x05\x02\x04\x07\x06"
|
||||
#define LOGON_MESSAGE_FAILED_2K3 "\x00\x00\x01\x08\x02\x07\x03\x07\x04\x07\x05\x05\x01\x05\x04\x07\x03\x05"
|
||||
#define LOGON_MESSAGE_FAILED_2K8 "not needed"
|
||||
|
||||
#define LOGON_MESSAGE_2K "\x00\x00\x01\x06\x02\x07\x04\x0a\x05\x08\x06\x0a\x01\x05\x07\x0a\x08\x0b\x05\x03\x09\x07\x01\x07\x0a\x07\x0b\x09\xff\x00\x1c"
|
||||
|
||||
/* The local policy of this system does not permit you to logon interactively. [SUCCESS] */
|
||||
#define LOGON_MESSAGE_NO_INTERACTIVE_XP "\x00\x00\x01\x06\x02\x06\x04\x09\x05\x02\x06\x06\x07\x05\x04\x06\x08\x05"
|
||||
#define LOGON_MESSAGE_NO_INTERACTIVE_2K3 "??"
|
||||
|
||||
/* Unable to log you on because your account has been locked out [FAILED] */
|
||||
#define LOGON_MESSAGE_LOCKED_XP "\x00\x00\x01\x07\x02\x06\x03\x06\x04\x06\x05\x02\x07\x09\x08\x04\x04\x09"
|
||||
#define LOGON_MESSAGE_LOCKED_2K3 "??"
|
||||
|
||||
/* Your account has been disabled. Please see your system administrator. [ERROR] */
|
||||
/* Your account has expired. Please see your system administrator. [ERROR] */
|
||||
#define LOGON_MESSAGE_DISABLED_XP "\x00\x00\x01\x06\x02\x06\x03\x06\x05\x07\x06\x06\x06\x05\x01\x05\x02\x06"
|
||||
#define LOGON_MESSAGE_DISABLED_2K3 "??"
|
||||
|
||||
/* Your password has expired and must be changed. [SUCCESS] */
|
||||
#define LOGON_MESSAGE_EXPIRED_XP "\x00\x00\x01\x06\x02\x06\x03\x06\x05\x07\x06\x06\x07\x06\x07\x05\x08\x05"
|
||||
#define LOGON_MESSAGE_EXPIRED_2K3 "??"
|
||||
|
||||
/* You are required to change your password at first logon. [SUCCESS] */
|
||||
#define LOGON_MESSAGE_MUST_CHANGE_XP "\x00\x00\x01\x06\x02\x06\x04\x09\x05\x06\x06\x04\x05\x09\x06\x04\x07\x06"
|
||||
#define LOGON_MESSAGE_MUST_CHANGE_2K3 "??"
|
||||
|
||||
/* The terminal server has exceeded the maximum number of allowed connections. [SUCCESS] */
|
||||
#define LOGON_MESSAGE_MSTS_MAX_2K3 "\x00\x00\x01\x06\x02\x07\x01\x07\x05\x07\x24\x0a\x25\x0a\x0b\x07\x0b\x06\x26"
|
||||
|
||||
|
||||
#define DEBUG(args) { if (debug) {hydra_report(stderr, "[DEBUG] "); printf args; }}
|
||||
#define DEBUG_RDP5(args){ if (debug) {hydra_report(stderr, "[DEBUG] RDP5 "); printf args; }}
|
||||
|
||||
#define STRNCPY(dst,src,n) { strncpy(dst,src,n-1); dst[n-1] = 0; }
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(x,y) (((x) < (y)) ? (x) : (y))
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(x,y) (((x) > (y)) ? (x) : (y))
|
||||
#endif
|
||||
|
||||
/* timeval macros */
|
||||
#ifndef timerisset
|
||||
#define timerisset(tvp)\
|
||||
((tvp)->tv_sec || (tvp)->tv_usec)
|
||||
#endif
|
||||
#ifndef timercmp
|
||||
#define timercmp(tvp, uvp, cmp)\
|
||||
((tvp)->tv_sec cmp (uvp)->tv_sec ||\
|
||||
(tvp)->tv_sec == (uvp)->tv_sec &&\
|
||||
(tvp)->tv_usec cmp (uvp)->tv_usec)
|
||||
#endif
|
||||
#ifndef timerclear
|
||||
#define timerclear(tvp)\
|
||||
((tvp)->tv_sec = (tvp)->tv_usec = 0)
|
||||
#endif
|
||||
|
||||
/* If configure does not define the endianess, try
|
||||
to find it out */
|
||||
#if !defined(L_ENDIAN) && !defined(B_ENDIAN)
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define L_ENDIAN
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define B_ENDIAN
|
||||
#else
|
||||
#error Unknown endianness. Edit rdp.h.
|
||||
#endif
|
||||
#endif /* B_ENDIAN, L_ENDIAN from configure */
|
||||
|
||||
/* No need for alignment on x86 and amd64 */
|
||||
#if !defined(NEED_ALIGN)
|
||||
#if !(defined(__x86__) || defined(__x86_64__) || \
|
||||
defined(__AMD64__) || defined(_M_IX86) || \
|
||||
defined(__i386__))
|
||||
#define NEED_ALIGN
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Parser state */
|
||||
typedef struct stream
|
||||
{
|
||||
unsigned char *p;
|
||||
unsigned char *end;
|
||||
unsigned char *data;
|
||||
uint32_t size;
|
||||
|
||||
/* Offsets of various headers */
|
||||
unsigned char *iso_hdr;
|
||||
unsigned char *mcs_hdr;
|
||||
unsigned char *sec_hdr;
|
||||
unsigned char *rdp_hdr;
|
||||
unsigned char *channel_hdr;
|
||||
|
||||
}
|
||||
*STREAM;
|
||||
|
||||
#define s_push_layer(s,h,n) { (s)->h = (s)->p; (s)->p += n; }
|
||||
#define s_pop_layer(s,h) (s)->p = (s)->h;
|
||||
#define s_mark_end(s) (s)->end = (s)->p;
|
||||
#define s_check(s) ((s)->p <= (s)->end)
|
||||
#define s_check_rem(s,n) ((s)->p + n <= (s)->end)
|
||||
#define s_check_end(s) ((s)->p == (s)->end)
|
||||
|
||||
#if defined(L_ENDIAN) && !defined(NEED_ALIGN)
|
||||
#define in_uint16_le(s,v) { v = *(uint16 *)((s)->p); (s)->p += 2; }
|
||||
#define in_uint32_le(s,v) { v = *(uint32 *)((s)->p); (s)->p += 4; }
|
||||
#define out_uint16_le(s,v) { *(uint16 *)((s)->p) = v; (s)->p += 2; }
|
||||
#define out_uint32_le(s,v) { *(uint32 *)((s)->p) = v; (s)->p += 4; }
|
||||
|
||||
#else
|
||||
#define in_uint16_le(s,v) { v = *((s)->p++); v += *((s)->p++) << 8; }
|
||||
#define in_uint32_le(s,v) { in_uint16_le(s,v) \
|
||||
v += *((s)->p++) << 16; v += *((s)->p++) << 24; }
|
||||
#define out_uint16_le(s,v) { *((s)->p++) = (v) & 0xff; *((s)->p++) = ((v) >> 8) & 0xff; }
|
||||
#define out_uint32_le(s,v) { out_uint16_le(s, (v) & 0xffff); out_uint16_le(s, ((v) >> 16) & 0xffff); }
|
||||
#endif
|
||||
|
||||
#if defined(B_ENDIAN) && !defined(NEED_ALIGN)
|
||||
#define in_uint16_be(s,v) { v = *(uint16 *)((s)->p); (s)->p += 2; }
|
||||
#define in_uint32_be(s,v) { v = *(uint32 *)((s)->p); (s)->p += 4; }
|
||||
#define out_uint16_be(s,v) { *(uint16 *)((s)->p) = v; (s)->p += 2; }
|
||||
#define out_uint32_be(s,v) { *(uint32 *)((s)->p) = v; (s)->p += 4; }
|
||||
|
||||
#define B_ENDIAN_PREFERRED
|
||||
#define in_uint16(s,v) in_uint16_be(s,v)
|
||||
#define in_uint32(s,v) in_uint32_be(s,v)
|
||||
#define out_uint16(s,v) out_uint16_be(s,v)
|
||||
#define out_uint32(s,v) out_uint32_be(s,v)
|
||||
|
||||
#else
|
||||
#define in_uint16_be(s,v) { v = *((s)->p++); next_be(s,v); }
|
||||
#define in_uint32_be(s,v) { in_uint16_be(s,v); next_be(s,v); next_be(s,v); }
|
||||
#define out_uint16_be(s,v) { *((s)->p++) = ((v) >> 8) & 0xff; *((s)->p++) = (v) & 0xff; }
|
||||
#define out_uint32_be(s,v) { out_uint16_be(s, ((v) >> 16) & 0xffff); out_uint16_be(s, (v) & 0xffff); }
|
||||
#endif
|
||||
|
||||
#ifndef B_ENDIAN_PREFERRED
|
||||
#define in_uint16(s,v) in_uint16_le(s,v)
|
||||
#define in_uint32(s,v) in_uint32_le(s,v)
|
||||
#define out_uint16(s,v) out_uint16_le(s,v)
|
||||
#define out_uint32(s,v) out_uint32_le(s,v)
|
||||
#endif
|
||||
|
||||
#define in_uint8(s,v) v = *((s)->p++);
|
||||
#define in_uint8p(s,v,n) { v = (s)->p; (s)->p += n; }
|
||||
#define in_uint8a(s,v,n) { memcpy(v,(s)->p,n); (s)->p += n; }
|
||||
#define in_uint8s(s,n) (s)->p += n;
|
||||
#define out_uint8(s,v) *((s)->p++) = v;
|
||||
#define out_uint8p(s,v,n) { memcpy((s)->p,v,n); (s)->p += n; }
|
||||
#define out_uint8a(s,v,n) out_uint8p(s,v,n);
|
||||
#define out_uint8s(s,n) { memset((s)->p,0,n); (s)->p += n; }
|
||||
|
||||
#define next_be(s,v) v = ((v) << 8) + *((s)->p++);
|
||||
|
||||
typedef unsigned char uint8;
|
||||
typedef signed char sint8;
|
||||
typedef unsigned short uint16;
|
||||
typedef signed short sint16;
|
||||
typedef uint32_t uint32;
|
||||
typedef int32_t sint32;
|
||||
|
||||
typedef struct _BOUNDS
|
||||
{
|
||||
sint16 left;
|
||||
sint16 top;
|
||||
sint16 right;
|
||||
sint16 bottom;
|
||||
|
||||
}
|
||||
BOUNDS;
|
||||
|
||||
/* PSTCACHE */
|
||||
typedef uint8 HASH_KEY[8];
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 256
|
||||
#endif
|
||||
|
||||
#define RDP_ORDER_STANDARD 0x01
|
||||
#define RDP_ORDER_SECONDARY 0x02
|
||||
#define RDP_ORDER_BOUNDS 0x04
|
||||
#define RDP_ORDER_CHANGE 0x08
|
||||
#define RDP_ORDER_DELTA 0x10
|
||||
#define RDP_ORDER_LASTBOUNDS 0x20
|
||||
#define RDP_ORDER_SMALL 0x40
|
||||
#define RDP_ORDER_TINY 0x80
|
||||
|
||||
enum RDP_ORDER_TYPE
|
||||
{
|
||||
RDP_ORDER_DESTBLT = 0,
|
||||
RDP_ORDER_PATBLT = 1,
|
||||
RDP_ORDER_SCREENBLT = 2,
|
||||
RDP_ORDER_LINE = 9,
|
||||
RDP_ORDER_RECT = 10,
|
||||
RDP_ORDER_DESKSAVE = 11,
|
||||
RDP_ORDER_MEMBLT = 13,
|
||||
RDP_ORDER_TRIBLT = 14,
|
||||
RDP_ORDER_POLYGON = 20,
|
||||
RDP_ORDER_POLYGON2 = 21,
|
||||
RDP_ORDER_POLYLINE = 22,
|
||||
RDP_ORDER_ELLIPSE = 25,
|
||||
RDP_ORDER_ELLIPSE2 = 26,
|
||||
RDP_ORDER_TEXT2 = 27
|
||||
};
|
||||
|
||||
enum RDP_SECONDARY_ORDER_TYPE
|
||||
{
|
||||
RDP_ORDER_RAW_BMPCACHE = 0,
|
||||
RDP_ORDER_COLCACHE = 1,
|
||||
RDP_ORDER_BMPCACHE = 2,
|
||||
RDP_ORDER_FONTCACHE = 3,
|
||||
RDP_ORDER_RAW_BMPCACHE2 = 4,
|
||||
RDP_ORDER_BMPCACHE2 = 5,
|
||||
RDP_ORDER_BRUSHCACHE = 7
|
||||
};
|
||||
|
||||
typedef struct _RECT_ORDER
|
||||
{
|
||||
sint16 x;
|
||||
sint16 y;
|
||||
sint16 cx;
|
||||
sint16 cy;
|
||||
uint32 colour;
|
||||
|
||||
}
|
||||
RECT_ORDER;
|
||||
|
||||
typedef struct _DESKSAVE_ORDER
|
||||
{
|
||||
uint32 offset;
|
||||
sint16 left;
|
||||
sint16 top;
|
||||
sint16 right;
|
||||
sint16 bottom;
|
||||
uint8 action;
|
||||
|
||||
}
|
||||
DESKSAVE_ORDER;
|
||||
|
||||
typedef struct _MEMBLT_ORDER
|
||||
{
|
||||
uint8 colour_table;
|
||||
uint8 cache_id;
|
||||
sint16 x;
|
||||
sint16 y;
|
||||
sint16 cx;
|
||||
sint16 cy;
|
||||
uint8 opcode;
|
||||
sint16 srcx;
|
||||
sint16 srcy;
|
||||
uint16 cache_idx;
|
||||
|
||||
}
|
||||
MEMBLT_ORDER;
|
||||
|
||||
#define MAX_DATA 256
|
||||
#define MAX_TEXT 256
|
||||
|
||||
typedef struct _TEXT2_ORDER
|
||||
{
|
||||
uint8 font;
|
||||
uint8 flags;
|
||||
uint8 opcode;
|
||||
uint8 mixmode;
|
||||
uint32 bgcolour;
|
||||
uint32 fgcolour;
|
||||
sint16 clipleft;
|
||||
sint16 cliptop;
|
||||
sint16 clipright;
|
||||
sint16 clipbottom;
|
||||
sint16 boxleft;
|
||||
sint16 boxtop;
|
||||
sint16 boxright;
|
||||
sint16 boxbottom;
|
||||
sint16 x;
|
||||
sint16 y;
|
||||
uint8 length;
|
||||
uint8 text[MAX_TEXT];
|
||||
|
||||
}
|
||||
TEXT2_ORDER;
|
||||
|
||||
typedef struct _RDP_ORDER_STATE
|
||||
{
|
||||
uint8 order_type;
|
||||
BOUNDS bounds;
|
||||
|
||||
RECT_ORDER rect;
|
||||
DESKSAVE_ORDER desksave;
|
||||
MEMBLT_ORDER memblt;
|
||||
TEXT2_ORDER text2;
|
||||
}
|
||||
RDP_ORDER_STATE;
|
||||
|
||||
#define WINDOWS_CODEPAGE "UTF-16LE"
|
||||
|
||||
/* ISO PDU codes */
|
||||
enum ISO_PDU_CODE
|
||||
{
|
||||
ISO_PDU_CR = 0xE0, /* Connection Request */
|
||||
ISO_PDU_CC = 0xD0, /* Connection Confirm */
|
||||
ISO_PDU_DR = 0x80, /* Disconnect Request */
|
||||
ISO_PDU_DT = 0xF0, /* Data */
|
||||
ISO_PDU_ER = 0x70 /* Error */
|
||||
};
|
||||
|
||||
/* MCS PDU codes */
|
||||
enum MCS_PDU_TYPE
|
||||
{
|
||||
MCS_EDRQ = 1, /* Erect Domain Request */
|
||||
MCS_DPUM = 8, /* Disconnect Provider Ultimatum */
|
||||
MCS_AURQ = 10, /* Attach User Request */
|
||||
MCS_AUCF = 11, /* Attach User Confirm */
|
||||
MCS_CJRQ = 14, /* Channel Join Request */
|
||||
MCS_CJCF = 15, /* Channel Join Confirm */
|
||||
MCS_SDRQ = 25, /* Send Data Request */
|
||||
MCS_SDIN = 26 /* Send Data Indication */
|
||||
};
|
||||
|
||||
#define MCS_CONNECT_INITIAL 0x7f65
|
||||
#define MCS_CONNECT_RESPONSE 0x7f66
|
||||
|
||||
#define BER_TAG_BOOLEAN 1
|
||||
#define BER_TAG_INTEGER 2
|
||||
#define BER_TAG_OCTET_STRING 4
|
||||
#define BER_TAG_RESULT 10
|
||||
#define MCS_TAG_DOMAIN_PARAMS 0x30
|
||||
|
||||
#define MCS_GLOBAL_CHANNEL 1003
|
||||
#define MCS_USERCHANNEL_BASE 1001
|
||||
|
||||
/* RDP secure transport constants */
|
||||
#define SEC_RANDOM_SIZE 32
|
||||
#define SEC_MODULUS_SIZE 64
|
||||
#define SEC_MAX_MODULUS_SIZE 256
|
||||
#define SEC_PADDING_SIZE 8
|
||||
#define SEC_EXPONENT_SIZE 4
|
||||
|
||||
#define SEC_CLIENT_RANDOM 0x0001
|
||||
#define SEC_ENCRYPT 0x0008
|
||||
#define SEC_LOGON_INFO 0x0040
|
||||
#define SEC_LICENCE_NEG 0x0080
|
||||
#define SEC_REDIRECT_ENCRYPT 0x0C00
|
||||
|
||||
#define SEC_TAG_SRV_INFO 0x0c01
|
||||
#define SEC_TAG_SRV_CRYPT 0x0c02
|
||||
#define SEC_TAG_SRV_CHANNELS 0x0c03
|
||||
|
||||
#define SEC_TAG_CLI_INFO 0xc001
|
||||
#define SEC_TAG_CLI_CRYPT 0xc002
|
||||
#define SEC_TAG_CLI_CHANNELS 0xc003
|
||||
#define SEC_TAG_CLI_4 0xc004
|
||||
|
||||
#define SEC_TAG_PUBKEY 0x0006
|
||||
#define SEC_TAG_KEYSIG 0x0008
|
||||
|
||||
#define SEC_RSA_MAGIC 0x31415352 /* RSA1 */
|
||||
|
||||
/* RDP PDU codes */
|
||||
enum RDP_PDU_TYPE
|
||||
{
|
||||
RDP_PDU_DEMAND_ACTIVE = 1,
|
||||
RDP_PDU_CONFIRM_ACTIVE = 3,
|
||||
RDP_PDU_REDIRECT = 4, /* MS Server 2003 Session Redirect */
|
||||
RDP_PDU_DEACTIVATE = 6,
|
||||
RDP_PDU_DATA = 7
|
||||
};
|
||||
|
||||
enum RDP_DATA_PDU_TYPE
|
||||
{
|
||||
RDP_DATA_PDU_UPDATE = 2,
|
||||
RDP_DATA_PDU_CONTROL = 20,
|
||||
RDP_DATA_PDU_POINTER = 27,
|
||||
RDP_DATA_PDU_INPUT = 28,
|
||||
RDP_DATA_PDU_SYNCHRONISE = 31,
|
||||
RDP_DATA_PDU_BELL = 34,
|
||||
RDP_DATA_PDU_CLIENT_WINDOW_STATUS = 35,
|
||||
RDP_DATA_PDU_LOGON = 38, /* PDUTYPE2_SAVE_SESSION_INFO */
|
||||
RDP_DATA_PDU_FONT2 = 39,
|
||||
RDP_DATA_PDU_KEYBOARD_INDICATORS = 41,
|
||||
RDP_DATA_PDU_DISCONNECT = 47
|
||||
};
|
||||
|
||||
enum RDP_SAVE_SESSION_PDU_TYPE
|
||||
{
|
||||
INFOTYPE_LOGON = 0,
|
||||
INFOTYPE_LOGON_LONG = 1,
|
||||
INFOTYPE_LOGON_PLAINNOTIFY = 2,
|
||||
INFOTYPE_LOGON_EXTENDED_INF = 3
|
||||
};
|
||||
|
||||
enum RDP_LOGON_INFO_EXTENDED_TYPE
|
||||
{
|
||||
LOGON_EX_AUTORECONNECTCOOKIE = 1,
|
||||
LOGON_EX_LOGONERRORS = 2
|
||||
};
|
||||
|
||||
enum RDP_CONTROL_PDU_TYPE
|
||||
{
|
||||
RDP_CTL_REQUEST_CONTROL = 1,
|
||||
RDP_CTL_GRANT_CONTROL = 2,
|
||||
RDP_CTL_DETACH = 3,
|
||||
RDP_CTL_COOPERATE = 4
|
||||
};
|
||||
|
||||
enum RDP_UPDATE_PDU_TYPE
|
||||
{
|
||||
RDP_UPDATE_ORDERS = 0,
|
||||
RDP_UPDATE_BITMAP = 1,
|
||||
RDP_UPDATE_PALETTE = 2,
|
||||
RDP_UPDATE_SYNCHRONIZE = 3
|
||||
};
|
||||
|
||||
/* RDP bitmap cache (version 2) constants */
|
||||
#define BMPCACHE2_C0_CELLS 0x78
|
||||
#define BMPCACHE2_C1_CELLS 0x78
|
||||
#define BMPCACHE2_C2_CELLS 0x150
|
||||
#define BMPCACHE2_NUM_PSTCELLS 0x9f6
|
||||
|
||||
#define PDU_FLAG_FIRST 0x01
|
||||
#define PDU_FLAG_LAST 0x02
|
||||
|
||||
/* RDP capabilities */
|
||||
#define RDP_CAPSET_GENERAL 1 /* Maps to generalCapabilitySet in T.128 page 138 */
|
||||
#define RDP_CAPLEN_GENERAL 0x18
|
||||
#define OS_MAJOR_TYPE_UNIX 4
|
||||
#define OS_MINOR_TYPE_XSERVER 7
|
||||
|
||||
#define RDP_CAPSET_BITMAP 2
|
||||
#define RDP_CAPLEN_BITMAP 0x1C
|
||||
|
||||
#define RDP_CAPSET_ORDER 3
|
||||
#define RDP_CAPLEN_ORDER 0x58
|
||||
|
||||
#define RDP_CAPSET_BMPCACHE 4
|
||||
#define RDP_CAPLEN_BMPCACHE 0x28
|
||||
|
||||
#define RDP_CAPSET_CONTROL 5
|
||||
#define RDP_CAPLEN_CONTROL 0x0C
|
||||
|
||||
#define RDP_CAPSET_ACTIVATE 7
|
||||
#define RDP_CAPLEN_ACTIVATE 0x0C
|
||||
|
||||
#define RDP_CAPSET_POINTER 8
|
||||
#define RDP_CAPLEN_POINTER 0x08
|
||||
#define RDP_CAPLEN_NEWPOINTER 0x0a
|
||||
|
||||
#define RDP_CAPSET_SHARE 9
|
||||
#define RDP_CAPLEN_SHARE 0x08
|
||||
|
||||
#define RDP_CAPSET_COLCACHE 10
|
||||
#define RDP_CAPLEN_COLCACHE 0x08
|
||||
|
||||
#define RDP_CAPSET_BRUSHCACHE 15
|
||||
#define RDP_CAPLEN_BRUSHCACHE 0x08
|
||||
|
||||
#define RDP_CAPSET_BMPCACHE2 19
|
||||
#define RDP_CAPLEN_BMPCACHE2 0x28
|
||||
|
||||
#define RDP_SOURCE "MSTSC"
|
||||
|
||||
/* Logon flags */
|
||||
#define RDP_LOGON_AUTO 0x0008
|
||||
#define RDP_LOGON_NORMAL 0x0033
|
||||
#define RDP_LOGON_COMPRESSION 0x0080 /* mppc compression with 8kB histroy buffer */
|
||||
#define RDP_LOGON_BLOB 0x0100
|
||||
#define RDP_LOGON_COMPRESSION2 0x0200 /* rdp5 mppc compression with 64kB history buffer */
|
||||
#define RDP_LOGON_LEAVE_AUDIO 0x2000
|
||||
|
||||
#define RDP5_DISABLE_NOTHING 0x00
|
||||
#define RDP5_NO_WALLPAPER 0x01
|
||||
#define RDP5_NO_FULLWINDOWDRAG 0x02
|
||||
#define RDP5_NO_MENUANIMATIONS 0x04
|
||||
#define RDP5_NO_THEMING 0x08
|
||||
#define RDP5_NO_CURSOR_SHADOW 0x20
|
||||
#define RDP5_NO_CURSORSETTINGS 0x40 /* disables cursor blinking */
|
||||
|
||||
/* compression types */
|
||||
#define RDP_MPPC_BIG 0x01
|
||||
#define RDP_MPPC_COMPRESSED 0x20
|
||||
#define RDP_MPPC_RESET 0x40
|
||||
#define RDP_MPPC_FLUSH 0x80
|
||||
#define RDP_MPPC_DICT_SIZE 65536
|
||||
|
||||
#define RDP5_COMPRESSED 0x80
|
||||
|
||||
#ifndef _SSL_H
|
||||
#define _SSL_H
|
||||
|
||||
#include <openssl/rc4.h>
|
||||
#include <openssl/md5.h>
|
||||
#include <openssl/sha.h>
|
||||
#include <openssl/bn.h>
|
||||
#include <openssl/x509v3.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/rsa.h>
|
||||
|
||||
#if defined(OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x0090800f)
|
||||
#define D2I_X509_CONST const
|
||||
#else
|
||||
#define D2I_X509_CONST
|
||||
#endif
|
||||
|
||||
#define SSL_RC4 RC4_KEY
|
||||
#define SSL_SHA1 SHA_CTX
|
||||
#define SSL_MD5 MD5_CTX
|
||||
#define SSL_CERT X509
|
||||
#define SSL_RKEY RSA
|
||||
#endif
|
||||
|
||||
/* for win8 */
|
||||
#define KBD_FLAG_DOWN 0x4000
|
||||
#define KBD_FLAG_UP 0x8000
|
||||
#define RDP_KEYRELEASE (KBD_FLAG_DOWN | KBD_FLAG_UP)
|
||||
#define FASTPATH_INPUT_KBDFLAGS_RELEASE 1
|
||||
#define FASTPATH_INPUT_EVENT_SCANCODE 0
|
||||
#define FASTPATH_INPUT_EVENT_MOUSE 1
|
||||
#define RDP_INPUT_MOUSE 0x8001
|
||||
#define RDP_INPUT_SCANCODE 4
|
||||
|
||||
/* iso.c */
|
||||
STREAM iso_init(int32_t length);
|
||||
void iso_send(STREAM s);
|
||||
STREAM iso_recv(uint8 * rdpver);
|
||||
BOOL iso_connect(char *server, char *username, BOOL reconnect);
|
||||
void iso_disconnect(void);
|
||||
void iso_reset_state(void);
|
||||
/* mcs.c */
|
||||
STREAM mcs_init(int32_t length);
|
||||
void mcs_send_to_channel(STREAM s, uint16 channel);
|
||||
void mcs_send(STREAM s);
|
||||
STREAM mcs_recv(uint16 * channel, uint8 * rdpver);
|
||||
BOOL mcs_connect(char *server, STREAM mcs_data, char *username, BOOL reconnect);
|
||||
void mcs_disconnect(void);
|
||||
void mcs_reset_state(void);
|
||||
/* orders.c */
|
||||
void process_orders(STREAM s, uint16 num_orders);
|
||||
void reset_order_state(void);
|
||||
/* rdesktop.c */
|
||||
void generate_random(uint8 * random);
|
||||
void *xmalloc(int32_t size);
|
||||
void exit_if_null(void *ptr);
|
||||
char *xstrdup(const char *s);
|
||||
void *xrealloc(void *oldmem, size_t size);
|
||||
void error(char *format, ...);
|
||||
void warning(char *format, ...);
|
||||
void unimpl(char *format, ...);
|
||||
void hexdump(unsigned char *p, uint32_t len);
|
||||
/* rdp.c */
|
||||
static void process_demand_active(STREAM s);
|
||||
static BOOL process_data_pdu(STREAM s, uint32 * ext_disc_reason);
|
||||
/* secure.c */
|
||||
void sec_hash_48(uint8 * out, uint8 * in, uint8 * salt1, uint8 * salt2, uint8 salt);
|
||||
void sec_hash_16(uint8 * out, uint8 * in, uint8 * salt1, uint8 * salt2);
|
||||
void buf_out_uint32(uint8 * buffer, uint32 value);
|
||||
void sec_sign(uint8 * signature, int32_t siglen, uint8 * session_key, int32_t keylen, uint8 * data,
|
||||
int32_t datalen);
|
||||
void sec_decrypt(uint8 * data, int32_t length);
|
||||
STREAM sec_init(uint32 flags, int32_t maxlen);
|
||||
void sec_send_to_channel(STREAM s, uint32 flags, uint16 channel);
|
||||
void sec_send(STREAM s, uint32 flags);
|
||||
void sec_process_mcs_data(STREAM s);
|
||||
STREAM sec_recv(uint8 * rdpver);
|
||||
BOOL sec_connect(char *server, char *username, BOOL reconnect);
|
||||
void sec_disconnect(void);
|
||||
void sec_reset_state(void);
|
||||
/* tcp.c */
|
||||
STREAM tcp_init(uint32 maxlen);
|
||||
void tcp_send(STREAM s);
|
||||
STREAM tcp_recv(STREAM s, uint32 length);
|
||||
BOOL tcp_connect(char *server);
|
||||
void tcp_disconnect(void);
|
||||
char *tcp_get_address(void);
|
||||
void tcp_reset_state(void);
|
1
sasl.h
|
@ -19,6 +19,7 @@
|
|||
#define AUTH_BASIC 11
|
||||
#define AUTH_LM 12
|
||||
#define AUTH_LMv2 13
|
||||
#define AUTH_UNASSIGNED 14
|
||||
|
||||
#if LIBIDN
|
||||
#include <stringprep.h>
|
||||
|
|
814
web/CHANGES
|
@ -1,814 +0,0 @@
|
|||
Changelog for hydra
|
||||
-------------------
|
||||
|
||||
|
||||
Release 8.8
|
||||
* New web page: https://github.com/vanhauser-thc/thc-hydra
|
||||
* added PROBLEMS file with known issues
|
||||
* rdp: disabled the module as it does not support the current protocol. If you want to add it contact me
|
||||
* ldap: fixed a dumb strlen on a potential null pointer
|
||||
* http-get/http-post:
|
||||
- now supports H=/h= parameters same as http-form (thanks to mathewmarcus@github for the patch)
|
||||
- 403/404 errors are now always registered as failed attempts
|
||||
* mysql module: a non-default port was not working, fixed
|
||||
* added -w timeout support to ssh module
|
||||
* fixed various memory leaks in http-form module
|
||||
* corrected hydra return code to be 0 on success
|
||||
* added patch from debian maintainers which fixes spellings
|
||||
* fixed weird crash on x64 systems
|
||||
* many warning fixes by crondaemon
|
||||
|
||||
|
||||
Release 8.6
|
||||
* added radmin2 module by catatonic prime - great work!
|
||||
* smb module now checks if SMBv1 is supported by the server and if signing is required
|
||||
* http-form module now supports URLs up to 6000 bytes (thanks to petrock6@github for the patch)
|
||||
* Fix for SSL connections that failed with error:00000000:lib(0):func(0):reason(0) (thanks gaia@github for reporting)
|
||||
* Added new command line option:
|
||||
-c TIME: seconds between login attempts (over all threads, so -t 1 is recommended)
|
||||
* Options put after -R (for loading a restore file) are now honored (and were disallowed before)
|
||||
* merged several patches by Diadlo@github to make the code easier readable. thanks for that!
|
||||
* merged a patch by Diadlo@github that moves the help output to the invididual module
|
||||
|
||||
|
||||
Release 8.5
|
||||
* New command line option:
|
||||
-b : format option for -o output file (json only so far, happy for patches supporting others :) ) - thanks to veggiespam for the patch
|
||||
* ./configure now honors the CC enviroment variable if present
|
||||
* Fix for the restore file crash on some x64 platforms (finally! thanks to lukas227!)
|
||||
* Changed the format of the restore file to detect cross platform copies
|
||||
* Fixed a bug in the NCP module
|
||||
* Favor strrchr() over rindex()
|
||||
* Added refactoring patch by diadlo
|
||||
* Updated man page with missing command line options
|
||||
|
||||
|
||||
Release 8.4
|
||||
! Reports came in that the rdp module is not working reliable sometimes, most likely against new Windows versions. please test, report and if possible send a fix
|
||||
* Proxy support re-implemented:
|
||||
- HYDRA_PROXY[_HTTP] environment can be a text file with up to 64 entries
|
||||
- HYDRA_PROXY_AUTH was deprecated, set login/password in HTTP_PROXY[_HTTP]
|
||||
* New protocol: adam6500 - this one is work in progress, please test and report
|
||||
* New protocol: rpcap - thanks to Petar Kaleychev <petar.kaleychev@gmail.com>
|
||||
* New command line options:
|
||||
-y : disables -x 1aA interpretation, thanks to crondaemon for the patch
|
||||
-I : ignore an existing hydra.restore file (don't wait for 10 seconds)
|
||||
* hydra-svn: works now with the current libsvn version
|
||||
* hydra-ssh: initial check for password auth support now uses login supplied
|
||||
* Fixed dpl4hydra to be able to update from the web again
|
||||
* Fixed crash when -U was used without any service (thanks to thecarterb for reporting)
|
||||
* Updated default password lists
|
||||
* The protocols vnc, xmpp, telnet, imap, nntp and pcanywhere got accidentially long sleep commands due a patch in 8.2, fixed
|
||||
* Added special error message for clueless users :)
|
||||
|
||||
|
||||
Release 8.3
|
||||
* Support for upcoming OpenSSL 1.1 added. needs testing.
|
||||
* Fixed hydra redo bug (issue #113)
|
||||
* Updated xhydra for new hydra features and options
|
||||
* Some more command line error checking
|
||||
* Ensured unneeded sockets are closed
|
||||
|
||||
Release 8.2
|
||||
* Added RTSP module, thanks to jjavi89 for supplying!
|
||||
* Added patch for ssh that fixes hydra stopping to connect, thanks to ShantonRU for the patch
|
||||
* Added new -O option to hydra to support SSL servers that do not suport TLS
|
||||
* Added xhydra gtk patche by Petar Kaleychev to support modules that do not use usernames
|
||||
* Added patch to redis for initial service checking by Petar Kaleychev - thanks a lot!
|
||||
* Added support in hydra-http for http-post (content length 0)
|
||||
* Fixed important bug in http-*://server/url command line processing
|
||||
* Added SSL SNI support
|
||||
* Fixed bug in HTTP Form redirection following - thanks for everyone who reported and especially to Hayden Young for setting up a test page for debugging
|
||||
* Better library finding in ./configure for SVN + support for Darwin Homebrew (and further enhanced)
|
||||
* Fixed http-form module crash that only occurs on *BSD/OSX systems. Thanks to zdk for reporting!
|
||||
* Fixed for SSL connection to support TLSv1.2 etc.
|
||||
* Support for different RSA keylengths, thanks to fann95 for the patch
|
||||
* Fixed a bug where the cisco-enable module was not working with the password-only logon mode
|
||||
* Fixed an out of memory bug in http-form
|
||||
* Fixed imap PLAIN method
|
||||
* Fixed -x option to bail if it would generate too many passwords (more than 4 billion)
|
||||
* Added warning if HYDRA_PROXY_CONNECT environment is detected, that is an outdated setting
|
||||
* Added --fhs switch to configure (for Linux distribution usage)
|
||||
* ... your patch?
|
||||
|
||||
|
||||
Release 8.1
|
||||
* David Maciejak, my co-maintainer moved to a different job and country and can not help with Hydra anymore - sadly! Wish you all the best!
|
||||
* Added patch from Ander Juaristi which adds h/H header options for http-form-*, great work, thanks!
|
||||
* Fixed the -M option, works now with many many targets :-)
|
||||
* -M option now supports ports, add a colon in between: "host:port", or, if IPv6, "[ipv6ipaddress]:port"
|
||||
* Found login:password combinations are now printed with the name specified (hostname or IP), not always IP
|
||||
* Fixed for cisco-enable if an intial Login/Password is used (thanks to joswr1te for reporting)
|
||||
* Added patch by tux-mind for better MySQL compilation and an Android patches and Makefile. Thanks!
|
||||
* Added xhydra gtk patches by Petar Kaleychev to support -h, -U, -f, -F, -q and -e r options, thanks!
|
||||
* Added patch for teamspeak to better identify server errors and auth failures (thanks to Petar Kaleychev)
|
||||
* Fixed a crash in the cisco module (thanks to Anatoly Mamaev for reporting)
|
||||
* Small fix for HTTP form module for redirect pages where a S= string match would not work (thanks to mkosmach for reporting)
|
||||
* Updated configure to detect subversion packages on current Cygwin
|
||||
* Fixed RDP module to support the port option (thanks to and.enshin(at)gmail.com)
|
||||
|
||||
|
||||
Release 8.0
|
||||
! Development moved to a public github repository: https://github.com/vanhauser-thc/thc-hydra
|
||||
* Added module for redis (submitted by Alejandro Ramos, thanks!)
|
||||
* Added patch which adds Unicode support for the SMB module (thanks to Max Kosmach)
|
||||
* Added initial interactive password authentication test for ssh (thanks to Joshua Houghton)
|
||||
* Added patch for xhydra that adds bruteforce generator to the GUI (thanks to Petar Kaleychev)
|
||||
* Target on the command line can now be a CIDR definition, e.g. 192.168.0.0/24
|
||||
* with -M <targetfile>, you can now specify a port for each entry (use "target:port" per line)
|
||||
* Verified that hydra compiles cleanly on QNX / Blackberry 10 :-)
|
||||
* Bugfixes for -x option:
|
||||
- password tries were lost when connection errors happened (thanks to Vineet Kumar for reporting)
|
||||
- fixed crash when used together with -e option
|
||||
* Fixed a bug that hydra would not compile without libssh (introduced in v7.6)
|
||||
* Various bugfixes if many targets where attacked in parallel
|
||||
* Cygwin's Postgresql is working again, hence configure detection re-enabled
|
||||
* Added gcc compilation security options (if detected to be supported by configure script)
|
||||
* Enhancements to the secure compilation options
|
||||
* Checked code with cppcheck and fixed some minor issues.
|
||||
* Checked code with Coverity. Fixed a lot of small and medium issues.
|
||||
|
||||
|
||||
Release 7.6
|
||||
* Added a wizard script for hydra based on a script by Shivang Desai <shivang.ice.2010@gmail.com>
|
||||
* Added module for Siemens S7-300 (submitted by Alexander Timorin and Sergey Gordeychik, thanks!)
|
||||
* HTTP HEAD/GET: MD5 digest auth was not working, fixed (thanks to Paul Kenyon)
|
||||
* SMTP Enum: HELO is now always sent, better 500 error detection
|
||||
* hydra main:
|
||||
- fixed a bug in the IPv6 address parsing when a port was supplied
|
||||
- added info message for pop3, imap and smtp protocol usage
|
||||
* hydra GTK: missed some services, added
|
||||
* dpl4hydra.sh:
|
||||
- added Siemens S7-300 common passwords to default password list
|
||||
- more broad searching in the list
|
||||
* Performed code indention on all C files :-)
|
||||
* Makefile patch to ensure .../etc directory is there (thanks to vonnyfly)
|
||||
|
||||
|
||||
Release 7.5
|
||||
* Moved the license from GPLv3 to AGPLv3 (see LICENSE file)
|
||||
* Added module for Asterisk Call Manager
|
||||
* Added support for Android where some functions are not available
|
||||
* hydra main:
|
||||
- reduced the screen output if run without -h, full screen with -h
|
||||
- fix for IPv6 and port parsing with service://[ipv6address]:port/OPTIONS
|
||||
- fixed -o output (thanks to www417)
|
||||
- warning if HYDRA_PROXY is defined but the module does not use it
|
||||
- fixed an issue with large input files and long entries
|
||||
* hydra library:
|
||||
- SSL connections are now fixed to SSLv3 as some SSL servers fail otherwise, report if this gives you problems
|
||||
- removed support for old OPENSSL libraries
|
||||
* HTTP Form module:
|
||||
- login and password values are now encoded if special characters are present
|
||||
- ^USER^ and ^PASS^ are now also supported in H= header values
|
||||
- if you the colon as a value in your option string, you can now escape it with \: - but do not encode a \ with \\
|
||||
* Mysql module: protocol 10 is now supported
|
||||
* SMTP, POP3, IMAP modules: Disabled the TLS in default. TLS must now be
|
||||
defined as an option "TLS" if required. This increases performance.
|
||||
* Cisco module: fixed a small bug (thanks to Vitaly McLain)
|
||||
* Postgres module: libraries on Cygwin are buggy at the moment, module is therefore
|
||||
disabled on Cygwin
|
||||
|
||||
|
||||
Release 7.4.3 FIX RELEASES for bugs introduced in 7.4
|
||||
* Quickfix for people who do not have libssh installed (won't compile otherwise)
|
||||
* Quickfix for http-get/http-head and irc module which would not run due a new feature.
|
||||
* Fix for the ssh module that breaks an endless loop if a service becomes unavailable (thanks to shark0der(at)gmail(dot)com for reporting)
|
||||
|
||||
|
||||
Release 7.4
|
||||
* New module: SSHKEY - for testing for ssh private keys (thanks to deadbyte(at)toucan-system(dot)com!)
|
||||
* Added support for win8 and win2012 server to the RDP module
|
||||
* Better target distribution if -M is used
|
||||
* Added colored output (needs libcurses)
|
||||
* Better library detection for current Cygwin and OS X
|
||||
* Fixed the -W option
|
||||
* Fixed a bug when the -e option was used without -u, -l, -L or -C, only half of the logins were tested
|
||||
* Fixed HTTP Form module false positive when no answer was received from the server
|
||||
* Fixed SMB module return code for invalid hours logon and LM auth disabled
|
||||
* Fixed http-{get|post-form} from xhydra
|
||||
* Added OS/390 mainframe 64bit support (thanks to dan(at)danny(dot)cz)
|
||||
* Added limits to input files for -L, -P, -C and -M - people were using unhealthy large files! ;-)
|
||||
* Added debug mode option to usage (thanks to Anold Black)
|
||||
|
||||
|
||||
Release 7.3
|
||||
* Hydra main:
|
||||
- Added -F switch to quit all targets if one pair was found (for -M)
|
||||
- Fixed a bug where hydra would terminate after reporting a successful
|
||||
login when an account would accept any password
|
||||
- Fixed a bug with very large wordlists (thanks to sheepdestroyer for reporting!)
|
||||
- Enhanced the module help
|
||||
* configure script:
|
||||
- Added fix Oracle library inclusion, thanks to Brandon Archer!
|
||||
- Added --nostrip option to prevent binary stripping (requested by Fedora
|
||||
maintainer)
|
||||
* Added a Makefile patch by the Debian maintainers to support their
|
||||
SecurityHardeningBuildFlags for the wheezy build as requested
|
||||
* dpl4hydra: added install directory support
|
||||
* All code: message cleanups
|
||||
* SNMP module
|
||||
- originally already supported write and v2 although this was not in the
|
||||
module help output. Added :-)
|
||||
- added SNMPv3 MD5/SHA1 authentication support, though beta still
|
||||
* HTTP module:
|
||||
- fixed HTTP NTLM auth session
|
||||
- implemented errata fix for HTTP digest md5-sess algorithm
|
||||
- set default path to /
|
||||
* HTTP Form module:
|
||||
- set default path to /
|
||||
- support HTTP/1.0 redirects
|
||||
- fix failed condition check when pcre is not used
|
||||
* IMAP module: fixed auth detection
|
||||
* POP3 module: Updated auth and capability detection
|
||||
* Oracle module: fixed bad handling
|
||||
* Oracle listener module: fixed hash size handling
|
||||
* Telnet/Cisco/Cisco-enable modules: support "press ENTER" prompts
|
||||
* FTP module:
|
||||
- Fixed a bug where 530 messages were incorrectly handled
|
||||
- Clarification for the usage of ftps
|
||||
* Mysql module: added patch from Redhat/Fedora that fixes compile problems
|
||||
* Added IDN and PCRE support for Cygwin
|
||||
|
||||
|
||||
Release 7.2
|
||||
* Speed-up http modules auth mechanism detection
|
||||
* Fixed -C colonfile mode when empty login/passwords were used (thanks to
|
||||
will(at)configitnow(dot)com for reporting)
|
||||
* The -f switch was not working for postgres, afp, socks5, firebird and ncp,
|
||||
thanks to Richard Whitcroft for reporting!
|
||||
* Fixed NTLM auth in http-proxy/http-proxy-url module
|
||||
* Fixed URL when being redirected in http-form module, thanks to gash(at)chaostreff(dot)at
|
||||
* Fix MSSQL success login condition, thanks to whistle_master(at)live(dot)com
|
||||
* Fix http form module: optional headers and 3xx status redirect, thx to Gash
|
||||
* Fix in configure script for --prefix option, thanks to dazzlepod
|
||||
* Update of the dpl4hydra script by Roland Kessler, thanks!
|
||||
* Small fix for hydra man page, thanks to brad(at)comstyle(dot)com
|
||||
|
||||
|
||||
Release 7.1
|
||||
* Added HTTP Proxy URL enumeration module
|
||||
* Added SOCKS4/SOCKS5 proxy support with authentication
|
||||
* Added IPv6 support for SOCKS5 module
|
||||
* Added -e r option to try the reversed login as password
|
||||
* Rewrote -x functionality as the code caused too much trouble (thanks to
|
||||
murder.net7(at)gmail.com for reporting one of the issues)
|
||||
* Fixed a bug with multiple hosts (-M) and http modules against targets that
|
||||
are virtual servers. Well spotted by Tyler Krpata!
|
||||
* Fixed SVN IPv6 support and updated deprecated calls
|
||||
* Fixed RDP failed child connection returned value and false positive issues
|
||||
reported by Wangchaohui, thanks!
|
||||
* Fixed restore file functionality, was not working together with -o option
|
||||
* Fix in http-form module for bug introduced in 7.0
|
||||
* Fixed xhydra specific parameter value for http-proxy module
|
||||
* minor enhancements
|
||||
|
||||
|
||||
Release 7.0
|
||||
* New main engine for hydra: better performance, flexibility and stability
|
||||
* New option -u - loop around users, not passwords
|
||||
* Option -e now also works with -x and -C
|
||||
* Added RDP module, domain can be passed as argument
|
||||
* Added other_domain option to smb module to test trusted domains
|
||||
* Small enhancement for http and http-proxy module for standard ignoring servers
|
||||
* Lots of bugfixes, especially with many tasks, multiple targets and restore file
|
||||
* Fixes for a few http-form issues
|
||||
* Fix smb module NTLM hash use
|
||||
* Fixed Firebird module deprecated API call
|
||||
* Fixed for dpl4hydra to work on old sed implementations (OS/X ...)
|
||||
* Fixed makefile to install dpl4hydra (thx @sitecrea)
|
||||
* Fixed local buffer overflow in debug output function (required -d to be used)
|
||||
* Fixed xhydra running warnings and correct quit action event
|
||||
|
||||
|
||||
Release 6.5
|
||||
* Improved HTTP form module: getting cookie, fail or success condition, follow
|
||||
multiple redirections, support cookie gathering URL, multiple user defined
|
||||
headers
|
||||
* Added interface support for IPv6, needed for connecting to link local fe80::
|
||||
addresses. Works only on Linux and OS/X. Information for Solaris and *BSD welcome
|
||||
* Added -W waittime between connects option
|
||||
* The -x bruteforce mode now allows for generated password amounts > 2 billion
|
||||
* Fix if -L was used together with -x
|
||||
* Fixes for http- modules when the http-...://target/options format was used
|
||||
* Fixed a bug in the restore file write function that could lead to a crash
|
||||
* Fixed XMPP module jabber init request and challenge response check, thx "F e L o R e T"
|
||||
* Fix: if a proxy was used, unresolveable targets were disabled. now its fine
|
||||
* Fix for service://host/ usage if a colon was used after the URI without a
|
||||
port defined
|
||||
|
||||
|
||||
Release 6.4
|
||||
* Update SIP module to extract and use external IP addr return from server error to bypass NAT
|
||||
* Update SIP module to use SASL lib
|
||||
* Update email modules to check clear mode when TLS mode failed
|
||||
* Update Oracle Listener module to work with Oracle DB 9.2
|
||||
* Update LDAP module to support Windows 2008 active directory simple auth
|
||||
* Fix to the connection adaptation engine which would loose planned attempts
|
||||
* Fix make script for CentOS, reported by ya0wei
|
||||
* Print error when a service limits connections and few pairs have to be tested
|
||||
* Improved Mysql module to only init/close when needed
|
||||
* Added patch from the FreeBSD maintainers
|
||||
* Module usage help does not need a target to be specified anymore
|
||||
* Configure script now honors /etc/ld.so.conf.d/ directory
|
||||
* Add more SMB dialects
|
||||
|
||||
|
||||
Release 6.3
|
||||
* Added patch by Petar Kaleychev which adds nice icons to cygwin hydra files
|
||||
* Added patch by Gauillaume Rousse which fixes a warning display
|
||||
* New Oracle module (for databases via OCI, for TNS Listener passwd, for SID enumeration)
|
||||
* New SMTP user enum module (using VRFY, EXPN or RCPT command)
|
||||
* Memory leak fix for -x bruteforcing option reported by Alex Lau
|
||||
* Fix for svn module, for some versions it needs one more lib, thanks to the
|
||||
Debian team for reporting!
|
||||
* Fix ssh module, on connection refused a credential could be lost
|
||||
* Fix http-form module, a redirect was not always followed
|
||||
* QA on all modules for memory leaks
|
||||
* Better gtk detection (to not even try xhydra compilation when its useless)
|
||||
* First blant attempt for configuring to x64 systems (Linux and *BSD)
|
||||
* Updated network password cracker comparison on the web page (for hydra and new ncrack)
|
||||
* Indented all source code
|
||||
|
||||
|
||||
Release 6.2
|
||||
* Added a patch by Jan Dlabal which adds password generation bruteforcing (no more password files :-) )
|
||||
* Forgot to rename ssh2 to ssh in xhydra, fixed
|
||||
* Add support for CRAM-MD5 and DIGEST-MD5 auth to ldap module
|
||||
* Fix SASL PLAIN auth method issue
|
||||
* Add TLS negotiation support for smtp-auth, pop3, imap, ftp and ldap
|
||||
* Added man pages from Debian maintainers
|
||||
* Checked Teamspeak module, works on TS2 protocol
|
||||
* Add support for SCRAM-SHA1 (RFC 5802), first auth cracker to support it, yeah !
|
||||
* New module: XMPP with TLS negotiation and LOGIN, PLAIN, CRAM-MD5, DIGEST-MD5, SCRAM-SHA1 support
|
||||
* Add SCRAM-SHA1 auth to IMAP module
|
||||
* Add module usage help (-U)
|
||||
* Add support for RFC 4013: Internationalized Strings in SASL ("SASLPrep")
|
||||
* Rename smtpauth module to smtp
|
||||
* Add SASL + TLS support for NNTP
|
||||
* Bugfix SASL DIGEST-MD5, response could be wrong sometime, mainly on 64bits systems
|
||||
* Bugfix rlogin module, some auth failure could not be detected accurately
|
||||
* Bugfix rsh module, some auth failure could not be detected accurately
|
||||
* New module: IRC is not dead ! use to find general server password and /oper credential
|
||||
* Add SSL support for VMware Authentication Daemon module
|
||||
* Bugfix CVS module, should work now, why does nobody report this ??
|
||||
* Bugfix Telnet module, when line mode is not available
|
||||
* Add support for new syntax <service-name>://<target>[:<port-number>][/<parameters>]
|
||||
* Add TLS support for SIP
|
||||
* STILL OPEN: Fixed a problem in hydra where a login+pw test was lost when an arm/child was quitting
|
||||
|
||||
|
||||
Release 6.1
|
||||
* More license updates for the files for the Debian guys
|
||||
* Fix for the configure script to correctly detect postgresql
|
||||
* Add checks for libssh v0.4 and support for ssh v1
|
||||
* Merge all latest crypto code in sasl files
|
||||
* Fix SVN compilation issue on openSUSE (tested with v11.3)
|
||||
|
||||
|
||||
Release 6.0
|
||||
* Added GPL exception clause to license to allow linking to OpenSSL - Debian people need this
|
||||
* IPv6 support finally added. Note: sip and socks5 modules do not support IPv6 yet
|
||||
* Changes to code and configure script to ensure clean compile on Solaris 11,
|
||||
OSX, FreeBSD 8.1, Cygwin and Linux
|
||||
* Bugfix for SIP module, thanks to yori(at)counterhackchallenges(dot)com
|
||||
* Compile fixes for systems without OpenSSL or old OpenSSL installations
|
||||
* Eliminated compile time warnings
|
||||
* xhydra updates to support the new features (david@)
|
||||
* Added CRAM-MD5, DIGEST-MD5 auth mechanism to the smtp-auth module (david@)
|
||||
* Added LOGIN, PLAIN, CRAM-(MD5,SHA1,SHA256) and DIGEST-MD5 auth mechanisms to the imap and pop3 modules (david@)
|
||||
* Added APOP auth to POP3 module (david@)
|
||||
* Added NTLM and DIGEST-MD5 to http-auth module and DIGEST-MD5 to http-proxy module (david@)
|
||||
* Fixed VNC module for None and VLC auth (david@)
|
||||
* Fixes for LDAP module (david@)
|
||||
* Bugfix Telnet module linemode option negotiation using win7 (david@)
|
||||
* Bugfix SSH module when max auth connection is reached (david@)
|
||||
|
||||
|
||||
Release 5.9
|
||||
* Update for the subversion module for newer SVN versions (thanks to David Maciejak @ GMAIL dot com)
|
||||
* Another patch by David to add the PLAIN auth mechanism to the smtp-auth module
|
||||
* mysql module now has two implementations and uses a library when found (again
|
||||
thanks to David Maciejak @ GMAIL dot com - what would hydra be without him)
|
||||
* camiloculpian @ gmail dot com submitted a logo for hydra - looks cool, thanks!
|
||||
* better FTP 530 error code detection
|
||||
* bugfix for the SVN module for non-standard ports (again david@)
|
||||
|
||||
|
||||
Release 5.8
|
||||
* Added Apple Filing Protocol (thank to "never tired" David Maciejak @ GMAIL dot com)
|
||||
* Fixed a big bug in the SSL option (-S)
|
||||
|
||||
|
||||
Release 5.7
|
||||
* Added ncp support plus minor fixes (by David Maciejak @ GMAIL dot com)
|
||||
* Added an old patch to fix a memory from SSL and speed it up too from kan(at)dcit.cz
|
||||
* Removed unnecessary compiler warnings
|
||||
* Enhanced the SSH2 module based on an old patch from aris(at)0xbadc0de.be
|
||||
* Fixed small local defined overflow in the teamspeak module. Does it still work anyway??
|
||||
|
||||
|
||||
Release 5.6 PRIVATE VERSION
|
||||
###########
|
||||
* Moved to GPLv3 License (lots of people wanted that)
|
||||
* Upgraded ssh2 module to libssh-0.4.x (thanks to aris (at) 0xbadc0de.be for
|
||||
the 0.2 basis)
|
||||
* Added firebird support (by David Maciejak @ GMAIL dot com)
|
||||
* Added SIP MD5 auth patch (by Jean-Baptiste Aviat <jba [at] hsc [dot] `french tld`)
|
||||
* Removed Palm and ARM support
|
||||
* Fix for cygwin which falsely detected postgres library when there was none.
|
||||
* Several small bugfixes
|
||||
|
||||
|
||||
Release 5.4
|
||||
###########
|
||||
* Fixes to the http modules as some Apache installations are picky
|
||||
* The MySQL module also works with mysqld-5.0, updated
|
||||
* Added AS/400 return code checks to pop3 module
|
||||
* Fixed memory leaks in the http-form module.
|
||||
* Implemented a proposal by Jean-Baptiste.BEAUFRETON (at) turbomeca.fr to
|
||||
check for "530 user unknown" message in the ftp module
|
||||
* Added a performance patch by alejandro.mendiondo (at) baicom.com. This one
|
||||
needs stability testing!
|
||||
* Beautification to remove compiler warnings of modern gcc
|
||||
|
||||
|
||||
Release 5.3
|
||||
###########
|
||||
* Added NTLM support modules for pop3, imap, smtp-auth and http-proxy.
|
||||
Work done by ilo (at) reversing.org. THANKS!
|
||||
* Added a http form module, thanks to phil (at) irmplc.com
|
||||
* Fixed a bug in the vnc module (thanks to kan (at) dcit.cz)
|
||||
* Input files may *not* contain null bytes. I might fix that in the future
|
||||
but currently I have enough other things on my todo sheet.
|
||||
Thanks to didiln (at) gmail.com for reporting.
|
||||
|
||||
|
||||
Release 5.2
|
||||
###########
|
||||
* Again again some fixes for the ssh2 module. This is the last try. If it
|
||||
finally does not work reliable, I am throwing out that library!
|
||||
Thanks to bykhe@mymail.ch for the patch
|
||||
* Added a new module: VMWare-Auth! Thanks to david.maciejak@gmail.com!
|
||||
|
||||
|
||||
Release 5.1
|
||||
###########
|
||||
* Again some fixed for the ssh2 module. Sorry. And still it might not work
|
||||
in all occasions. The libssh is not as mature as we all wish it would be :-(
|
||||
* HYDRA_PROXY_AUTH was never used ... weird that nobody reported that. fixed.
|
||||
* Fixed bug in the base64 encoding function
|
||||
* Added an md5.h include which is needed since openssl 0.9.8
|
||||
* Added an enhacement to the FTP module, thanks to piotr_sobolewski@o2.pl
|
||||
* Fixed a bug when not using passwords and just -e n/s
|
||||
|
||||
|
||||
Release 5.0
|
||||
###########
|
||||
! THIS IS A THC - TAX - 10TH ANNIVERSARY RELEASE ! HAVE FUN !
|
||||
* Increadible speed-up for most modules :-)
|
||||
* Added module for PC-Anywhere, thanks to david.maciejak(at)kyxar.fr!
|
||||
* Added module for SVN, thanks to david.maciejak(at)kyxar.fr!
|
||||
* Added --disable-xhydra option to configure, thanks to david.maciejak(at)kyxar.fr!
|
||||
- he is becoming the top supporter :-)
|
||||
* Added module for SIP (VoIP), thanks to gh0st(at)staatsfeind.org
|
||||
* Added support for newer sap r/3 rfcsdk
|
||||
* Added check to the telnet module to work with Cisco AAA
|
||||
* Fix for the VNC module, thanks to xmag
|
||||
* Small enhancement to the mysql plugin by pjohnson(at)bosconet.org
|
||||
|
||||
|
||||
Release 4.7
|
||||
###########
|
||||
* Updated ssh2 support to libssh v0.11 - you *must* use this version if
|
||||
you want to use ssh2! download from http://www.0xbadc0de.be/?part=libssh
|
||||
This hopefully fixes problems on/against Sun machines.
|
||||
After fixing, I also received a patch from david maciejak - thanks :-)
|
||||
* Added an attack module for rlogin and rsh, thanks to
|
||||
david.maciejak(at)kyxar.fr!
|
||||
* Added an attack module for the postgres database, thanks to
|
||||
diaul(at)devilopers.org! (and again: david maciejak sent on in as well)
|
||||
* JoMo-Kun sent in an update for his smbnt module. cool new features:
|
||||
win2k native mode, xp anonymous account detection, machine name as password
|
||||
* Hopefully made VNC 3.7 protocol versions to work. please report.
|
||||
* Switched http and https service module to http-head, http-get and
|
||||
https-get, https-head. Some web servers want HEAD, others only GET
|
||||
* An initial password for cisco-enable is now not required anymore. Some
|
||||
people had console access without password, so this was necessary.
|
||||
* Fixed a bug in xhydra which did not allow custom ports > 100
|
||||
! Soon to come: v5.0 - some cool new features to arrive on your pentest
|
||||
machine!
|
||||
|
||||
|
||||
Release 4.6
|
||||
###########
|
||||
* Snakebyte delivered a module for Teamspeak
|
||||
* Snakebyte updated the rexec module for the Hydra Palm version
|
||||
* Snakebyte updated xhydra to support the new Telnet success response option
|
||||
* Clarified the Licence
|
||||
* Updated the ldap module to support v3, note that "ldap" is now specified as
|
||||
"ldap2" or "ldap3". Added wrong version detection.
|
||||
|
||||
|
||||
Release 4.5
|
||||
###########
|
||||
* The configure script now detects Cygwin automatically :-)
|
||||
* The telnet module now handles the OPT special input. Specify the string
|
||||
which is displayed after successfully a login. Use this if you have false
|
||||
positives.
|
||||
* Made smtp-auth module more flexible in EHLO/HELO handling
|
||||
* Fixed some glitches in the SAP/R3 module (correct sysnr, better port
|
||||
handling) thanks to ngregoire@exaprobe.com !
|
||||
* Fixed some glitches in the http/https module
|
||||
* Fixed a big bug in snakebyte's snmp module
|
||||
* Warning msg is now displayed if the deprecated icq module is used
|
||||
* Added warning message to the ssh2 module during compilation as many people
|
||||
use the newest libssh version which is broken.
|
||||
|
||||
|
||||
Release 4.4
|
||||
###########
|
||||
* Fixed another floating point exception *sigh*
|
||||
* Fixed -C colon mode
|
||||
* Added EHLO support for the smtp-auth module, required for some smtpd
|
||||
|
||||
|
||||
Release 4.3
|
||||
###########
|
||||
* Fixed a divide by zero bug in the status report function
|
||||
* Added functionality for skipping accounts (cvs is so nice to report this)
|
||||
* Snakebyte sent in a patch for cvs for skipping nonexisting accounts
|
||||
* <lerrahn@syss.de> sent in a patch to fix proxy support for the HTTP module
|
||||
without proxy authentication
|
||||
|
||||
|
||||
Release 4.2
|
||||
###########
|
||||
* Snakebyte sent in modules for SNMP and CVS - great work!
|
||||
* Snakebyte also expanded the gtk gui to support the two new modules
|
||||
* Justin <connectjunkie@gmail.com> sent in a module for smtp-auth ... thanks!
|
||||
* master_up@post.cz sent in some few patches to fix small glitches
|
||||
* Incorporated a check from the openbsd port
|
||||
|
||||
|
||||
Release 4.1
|
||||
###########
|
||||
* Snakebyte wrote a very nice GTK GUI for hydra! enjoy!
|
||||
* due a bug, sometimes hydra would kill process -1 ... baaaad boy!
|
||||
* found passwords are now also printed to stdout if -o option is used
|
||||
* <je@sekure.net> reported that hydra wouldn't complain on ssh2 option if
|
||||
compiled without support, fixed
|
||||
* <llevier@argosnet.com> made an official port for FreeBSD and sent me a
|
||||
diff to exchange the MD4 of libdes to openssl
|
||||
* <vh@helith.net> noticed that hydra will crash on big wordlists as
|
||||
the result of the mallocs there were not checked, fixed
|
||||
* Snakebyte expanded his PalmOS Version of hydra to nntp and fixed vnc
|
||||
* Increased the wait time for children from 5 to 15 seconds, as e.g.
|
||||
snakebyte reported detection problems
|
||||
* Fixed some display glitches
|
||||
|
||||
|
||||
Release v4.0
|
||||
############
|
||||
#
|
||||
# This is a summary of changes of the D1 to D5 beta releases and shows
|
||||
# what makes v4.0 different from 3.1.
|
||||
# Have fun. Lots of it.
|
||||
#
|
||||
# By the way: I need someone to program a nice GTK frontend for hydra,
|
||||
# would YOU like to do that and receive the fame? Send an email to vh@thc.org !
|
||||
#
|
||||
* For the first time there is not only a UNIX/source release but additionally:
|
||||
! Windows release (cygwin compile with dll's)
|
||||
! PalmPilot release
|
||||
! ARM processor release (for all your Zaurus, iPaq etc. running Linux)
|
||||
* There are new service attack modules:
|
||||
! ms-sql
|
||||
! sap r/3 (requires a library)
|
||||
! ssh v2 (requires a library)
|
||||
* Enhancements/Fixes to service attack modules:
|
||||
! vnc module didnt work correctly, fixed
|
||||
! mysql module supports newer versions now
|
||||
! http module received a minor fix and has better virtual host support now
|
||||
! http-proxy supports now an optional URL
|
||||
! socks5 checks now for false positives and daemons without authentication
|
||||
* The core code (hydra.c) was rewritten from scratch
|
||||
! rewrote the internal distribution functions from scratch. code is now
|
||||
safer, less error prone, easier to read.
|
||||
! multiple target support rewritten which now includes intelligent load
|
||||
balancing based on success, error and load rate
|
||||
! intelligently detect maximum connect numbers for services (per server if
|
||||
multiple targets are used)
|
||||
! intelligent restore file writing
|
||||
! Faster (up to 15%)
|
||||
! Full Cygwin and Cygwin IPv6 support
|
||||
* added new tool: pw-inspector - it can be used to just try passwords which
|
||||
matches the target's password policy
|
||||
#
|
||||
# This should be more than enough! :-)
|
||||
#
|
||||
|
||||
... the rest below is history ...
|
||||
|
||||
###########################################################################
|
||||
#
|
||||
# New Hydra v4.0 code branch
|
||||
#
|
||||
Release D5
|
||||
* added patches by kan@dcit.cz which enhance the proxy module and provide
|
||||
a small fix for the http module
|
||||
* small beautifcations to make the compiler happy
|
||||
! This is the final beta version before public release
|
||||
- please test everything!
|
||||
|
||||
Release D4
|
||||
* Tick made an update to his configure-arm
|
||||
* snakebyte@gmx.de added imap, vnc and cisco module support to PalmPilot
|
||||
* fixed VNC module
|
||||
* enhanced mysql module to work also with 4.0.x (and all future protocol 10
|
||||
mysql protocol types)
|
||||
* enhanced socks5 module to identify daemons which do not require
|
||||
authentication, and false positive check (otherwise dante would report all
|
||||
tries as successful)
|
||||
* fixed a bug in configure for D3 which resulted in compile problems on
|
||||
several platforms requiring libcrypto
|
||||
|
||||
Release D3
|
||||
* added sapr3 attack module (requires libsdk.a and saprfc.h)
|
||||
* added ssh2 attack module (requires libssh)
|
||||
* snakebyte@gmx.de added telnet module support for PalmPilot
|
||||
* fixed the mssql module, should work now
|
||||
* fixed -e option bug
|
||||
* fixed -C option bug (didnt work at all!!)
|
||||
* fixed double detection (with -e option) plus added simple dictionary
|
||||
double detection
|
||||
* target port is now displayed on start
|
||||
|
||||
Release D2
|
||||
* added better virtual host support to the www/http/https/ssl module
|
||||
(based on a patch from alla@scanit.be)
|
||||
* added ARM support (does not work for libdes yet, ssl works), done by
|
||||
Tick <tick@thc.org>
|
||||
* added Palm support (well, in reality it is more a rewrite which can use
|
||||
the hydra-modules), done by snakebyte <snakebyte@gmx.de>
|
||||
* added ms-sql attack module (code based on perl script form HD Moore
|
||||
<hdm@digitaloffense.net>, thanks for contributing)
|
||||
|
||||
Release D1 (3 March 2003)
|
||||
* rewrote the internal distribution functions from scratch. code is now
|
||||
safer, less error prone, easier to read.
|
||||
* multiple target support rewritten which now includes intelligent load
|
||||
balancing based on success, error and load rate
|
||||
* intelligently detect maximum connect numbers for services (per server if
|
||||
multiple targets are used)
|
||||
* intelligent restore file writing
|
||||
* Faster (up to 15%)
|
||||
* Full Cygwin and Cygwin IPv6 support
|
||||
* added new tool: pw-inspector - it can be used to just try passwords which
|
||||
matches the target's password policy
|
||||
|
||||
###########################################################################
|
||||
|
||||
v3.0 (FEBRUARY 2004) PUBLIC RELEASE
|
||||
* added a restore function to enable you to continue aborted/crashed
|
||||
sessions. Just type "hydra -R" to continue a session.
|
||||
NOTE: this does not work with the -M option! This feature is then disabled!
|
||||
* added a module for http proxy authentication cracking ("http-proxy") :-)
|
||||
* added HTTP and SSL/CONNECT proxy support. SSL/CONNECT proxy support works
|
||||
for *all* TCP protocols, you just need to find a proxy which allows you to
|
||||
CONNECT on port 23 ...
|
||||
The environment variable HYDRA_PROXY_HTTP defines the web proxy. The
|
||||
following syntax is valid: HYDRA_PROXY_HTTP="http://123.45.67.89:8080/"
|
||||
Same for HYDRA_PROXY_CONNECT.
|
||||
If you require authentication for the proxy, use the HYDRA_PROXY_AUTH
|
||||
environment variable:
|
||||
HYDRA_PROXY_AUTH="login:password"
|
||||
* fixed parallel host scanning engine (thanks to m0j0.j0j0 for reporting)
|
||||
* A status, speed and time to completion report is now printed every minute.
|
||||
* finally updated the README
|
||||
|
||||
v2.9 (FEBRUARY 2004) PRIVATE RELEASE
|
||||
...
|
||||
|
||||
v2.8 (JANUARY 2004) PRIVATE RELEASE
|
||||
...
|
||||
|
||||
v2.7 (JANUARY 2004) PUBLIC RELEASE
|
||||
* small fix for the parallel host code (thanks to m0j0@foofus.net)
|
||||
|
||||
v2.6 (DECEMBER 2003) PUBLIC RELEASE
|
||||
* fixed a compiling problem for picky compilers.
|
||||
|
||||
v2.5 (NOVEMBER 2003) PUBLIC RELEASE
|
||||
* added a big patch from m0j0@foofus.net which adds:
|
||||
- AAA authentication to the cisco-enable module
|
||||
- Running the attacks on hosts in parallel
|
||||
- new smbnt module, which uses lanman hashes for authentication, needs libdes
|
||||
! great work and thanks !
|
||||
* changed code to compile easily on FreeBSD
|
||||
* changed configure to compile easily on MacOS X - Panther (cool OS btw ...)
|
||||
|
||||
v2.4 (AUGUST 2003) PUBLIC RELEASE
|
||||
* public release
|
||||
=== 2.3 stuff===
|
||||
* added mysql module (thanks to mcbethh@u-n-f.com)
|
||||
* small fix in vnc (thanks to the Nessus team)
|
||||
* added credits for vnc-module (FX/Phenolite)
|
||||
* new ./configure script for better Solaris and *BSD support (copied from amap)
|
||||
* updated to new email/www addresses => www.thc.org
|
||||
|
||||
v2.2 (OCTOBER 2002) PUBLIC RELEASE
|
||||
* fixed a bug in the -P passwordfile handling ... uhhh ... thanks to all
|
||||
the many people who reported that bug!
|
||||
* added check if a password in -P passwordfile was already done via the
|
||||
-e n|s switch
|
||||
|
||||
v2.1 (APRIL 2002) PUBLIC RELEASE
|
||||
* added ldap cracking mode (thanks to myself, eh ;-)
|
||||
* added -e option to try null passwords ("-e n") and passwords equal to the
|
||||
login ("-e s"). When specifying -e, -p/-P is optional (and vice versa)
|
||||
* when a login is found, hydra will now go on with the next login
|
||||
|
||||
v2.0 (APRIL 2002) PRIVATE RELEASE
|
||||
! with v1.1.14 of Nessus, Hydra is a Nessus plugin!
|
||||
* incorporated code to make hydra a nessus plugin (thanks to deraison@cvs.nessus.org !)
|
||||
* added smb/samba/CIFS cracking mode (thanks to deraison@cvs.nessus.org !)
|
||||
* added cisco-enable cracking mode (thanks to J.Marx@secunet.de !)
|
||||
* minor enhancements and fixes
|
||||
|
||||
v1.7 (MARCH 2002) PRIVATE RELEASE
|
||||
* configure change to better detect OpenSSL
|
||||
* ported to Solaris
|
||||
|
||||
v1.6 (FEBRUARY 2002) PUBLIC RELEASE
|
||||
* added socks5 support (thanks to bigbud@weed.tc !)
|
||||
|
||||
v1.5 (DECEMBER 2001) PRIVATE RELEASE
|
||||
* added -S option for SSL support (for all TCP based protocols)
|
||||
* added -f option to stop attacking once a valid login/pw has been discovered
|
||||
* made modules more hydra-mod compliant
|
||||
* configure stuff thrown out - was not really used and too complicated,
|
||||
wrote my own, lets hope it works everywhere ;-)
|
||||
|
||||
v1.4 (DECEMBER 2001) PUBLIC RELEASE
|
||||
* added REXEC cracking module
|
||||
* added NNTP cracking module
|
||||
* added VNC cracking module (plus the 3DES library, which is needed) - some
|
||||
of the code ripped from FX/Phenolite :-) thanks a lot
|
||||
* added PCNFS cracking module
|
||||
* added ICQ cracking module (thanks to ocsic <pisco@private.as>!!)
|
||||
* for the pcnfs cracking module, I had to add the hydra_connect_udp function
|
||||
* added several compactibility stuff to work with all the M$ crap
|
||||
|
||||
v1.3 (September 2001) PUBLIC RELEASE
|
||||
* uh W2K telnetd sends null bytes in negotiation mode. workaround implemented.
|
||||
* Rewrote the finish functions which would sometimes hang. Shutdowns are faster
|
||||
now as well.
|
||||
* Fixed the line count (it was always one to much)
|
||||
* Put more information in the outpufile (-o)
|
||||
* Removed some configure crap.
|
||||
|
||||
v1.2 (August 2001) PRIVATE RELEASE
|
||||
* Fixed a BIG bug which resulted in accounts being checked serveral times. ugh
|
||||
* Fixed the bug which showed the wrong password for a telnet hack. Works for
|
||||
me. please test.
|
||||
* Added http basic authentication cracking. Works for me. please test.
|
||||
* Fixed the ftp cracker module for occasions where a long welcome message was
|
||||
displayed for ftp.
|
||||
* Removed some compiler warnings.
|
||||
|
||||
v1.1 (May 2001) PUBLIC RELEASE
|
||||
* Added wait+reconnect functionality to hydra-mod
|
||||
* Additional wait+reconnect for cisco module
|
||||
* Added small waittimes to all attack modules to prevent too fast reconnects
|
||||
* Added cisco Username/Password support to the telnet module
|
||||
* Fixed a deadlock in the modules, plus an additional one in the telnet module
|
||||
|
||||
v1.0 (April 2001) PUBLIC RELEASE
|
||||
* Verified that all service modules really work, no fix necessary ;-)
|
||||
... so let's make it public
|
||||
* Changed the LICENCE
|
||||
|
||||
v0.6 (April 2001) PRIVATE RELEASE
|
||||
* Added hydra-cisco.c for the cisco 3 times "Password:" type
|
||||
* Added hydra-imap.c for the imap service
|
||||
* Fixed a bug in hydra-mod.c: empty logins resulted in an empty
|
||||
hydra_get_next_password() :-(, additionally the blocking/recv works better
|
||||
now. (no, not better - perfect ;-)
|
||||
* Fixed a bug in hydra-telnet.c: too many false alarms for success due some
|
||||
mis-thinking on my side and I also implemented a more flexible checking
|
||||
* Fixed hydra-ftp.c to allow more weird reactions
|
||||
* Fixed all ;-) memory leaks
|
||||
|
||||
v0.5 (December 2000) PUBLIC RELEASE
|
||||
* NOTE WE HAVE GOT A NEW WWW ADDRESS -> www.thehackerschoice.com
|
||||
* added telnet protocol
|
||||
* exchanged snprintf with sprintf(%.250s) to let it compile on more platforms
|
||||
but still have buffer overflow protection.
|
||||
* fixed a bug in Makefile.in (introduced by Plasmo ,-)
|
||||
|
||||
v0.4 (August 2000) PUBLIC RELEASE
|
||||
* Plasmoid added a ./configure script. thanks!
|
||||
|
||||
v0.3 (August 2000)
|
||||
* first release
|
530
web/README
|
@ -1,530 +0,0 @@
|
|||
|
||||
H Y D R A
|
||||
|
||||
(c) 2001-2019 by van Hauser / THC
|
||||
<vh@thc.org> https://github.com/vanhauser-thc/thc-hydra
|
||||
many modules were written by David (dot) Maciejak @ gmail (dot) com
|
||||
BFG code by Jan Dlabal <dlabaljan@gmail.com>
|
||||
|
||||
Licensed under AGPLv3 (see LICENSE file)
|
||||
|
||||
Please do not use in military or secret service organizations,
|
||||
or for illegal purposes.
|
||||
|
||||
|
||||
|
||||
INTRODUCTION
|
||||
------------
|
||||
Number one of the biggest security holes are passwords, as every password
|
||||
security study shows.
|
||||
This tool is a proof of concept code, to give researchers and security
|
||||
consultants the possibility to show how easy it would be to gain unauthorized
|
||||
access from remote to a system.
|
||||
|
||||
THIS TOOL IS FOR LEGAL PURPOSES ONLY!
|
||||
|
||||
There are already several login hacker tools available, however, none does
|
||||
either support more than one protocol to attack or support parallized
|
||||
connects.
|
||||
|
||||
It was tested to compile cleanly on Linux, Windows/Cygwin, Solaris,
|
||||
FreeBSD/OpenBSD, QNX (Blackberry 10) and MacOS.
|
||||
|
||||
Currently this tool supports the following protocols:
|
||||
Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP,
|
||||
HTTP-FORM-GET, HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY,
|
||||
HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTPS-POST,
|
||||
HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener,
|
||||
Oracle SID, Oracle, PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin,
|
||||
Rsh, RTSP, SAP/R3, SIP, SMB, SMTP, SMTP Enum, SNMP v1+v2+v3, SOCKS5,
|
||||
SSH (v1 and v2), SSHKEY, Subversion, Teamspeak (TS2), Telnet, VMware-Auth,
|
||||
VNC and XMPP.
|
||||
|
||||
However the module engine for new services is very easy so it won't take a
|
||||
long time until even more services are supported.
|
||||
Your help in writing, enhancing or fixing modules is highly appreciated!! :-)
|
||||
|
||||
|
||||
|
||||
WHERE TO GET
|
||||
------------
|
||||
You can always find the newest release/production version of hydra at its
|
||||
project page at https://github.com/vanhauser-thc/thc-hydra/releases
|
||||
If you are interested in the current development state, the public development
|
||||
repository is at Github:
|
||||
svn co https://github.com/vanhauser-thc/thc-hydra
|
||||
or
|
||||
git clone https://github.com/vanhauser-thc/thc-hydra
|
||||
Use the development version at your own risk. It contains new features and
|
||||
new bugs. Things might not work!
|
||||
|
||||
|
||||
|
||||
HOW TO COMPILE
|
||||
--------------
|
||||
To configure, compile and install hydra, just type:
|
||||
|
||||
```
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
```
|
||||
|
||||
If you want the ssh module, you have to setup libssh (not libssh2!) on your
|
||||
system, get it from http://www.libssh.org, for ssh v1 support you also need
|
||||
to add "-DWITH_SSH1=On" option in the cmake command line.
|
||||
IMPORTANT: If you compile on MacOS then you must do this - do not install libssh via brew!
|
||||
|
||||
If you use Ubuntu/Debian, this will install supplementary libraries needed
|
||||
for a few optional modules (note that some might not be available on your distribution):
|
||||
|
||||
```
|
||||
apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev \
|
||||
libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev \
|
||||
firebird-dev
|
||||
```
|
||||
|
||||
This enables all optional modules and features with the exception of Oracle,
|
||||
SAP R/3, NCP and the apple filing protocol - which you will need to download and
|
||||
install from the vendor's web sites.
|
||||
|
||||
For all other Linux derivates and BSD based systems, use the system
|
||||
software installer and look for similarly named libraries like in the
|
||||
command above. In all other cases, you have to download all source libraries
|
||||
and compile them manually.
|
||||
|
||||
|
||||
|
||||
SUPPORTED PLATFORMS
|
||||
-------------------
|
||||
- All UNIX platforms (Linux, *BSD, Solaris, etc.)
|
||||
- MacOS (basically a BSD clone)
|
||||
- Windows with Cygwin (both IPv4 and IPv6)
|
||||
- Mobile systems based on Linux, MacOS or QNX (e.g. Android, iPhone, Blackberry 10, Zaurus, iPaq)
|
||||
|
||||
|
||||
|
||||
HOW TO USE
|
||||
----------
|
||||
If you just enter `hydra`, you will see a short summary of the important
|
||||
options available.
|
||||
Type `./hydra -h` to see all available command line options.
|
||||
|
||||
Note that NO login/password file is included. Generate them yourself.
|
||||
A default password list is however present, use "dpl4hydra.sh" to generate
|
||||
a list.
|
||||
|
||||
For Linux users, a GTK GUI is available, try `./xhydra`
|
||||
|
||||
For the command line usage, the syntax is as follows:
|
||||
For attacking one target or a network, you can use the new "://" style:
|
||||
hydra [some command line options] PROTOCOL://TARGET:PORT/MODULE-OPTIONS
|
||||
The old mode can be used for these too, and additionally if you want to
|
||||
specify your targets from a text file, you *must* use this one:
|
||||
|
||||
```
|
||||
hydra [some command line options] [-s PORT] TARGET PROTOCOL [MODULE-OPTIONS]
|
||||
```
|
||||
|
||||
Via the command line options you specify which logins to try, which passwords,
|
||||
if SSL should be used, how many parallel tasks to use for attacking, etc.
|
||||
|
||||
PROTOCOL is the protocol you want to use for attacking, e.g. ftp, smtp,
|
||||
http-get or many others are available
|
||||
TARGET is the target you want to attack
|
||||
MODULE-OPTIONS are optional values which are special per PROTOCOL module
|
||||
|
||||
FIRST - select your target
|
||||
you have three options on how to specify the target you want to attack:
|
||||
1. a single target on the command line: just put the IP or DNS address in
|
||||
2. a network range on the command line: CIDR specification like "192.168.0.0/24"
|
||||
3. a list of hosts in a text file: one line per entry (see below)
|
||||
|
||||
SECOND - select your protocol
|
||||
Try to avoid telnet, as it is unreliable to detect a correct or false login attempt.
|
||||
Use a port scanner to see which protocols are enabled on the target.
|
||||
|
||||
THIRD - check if the module has optional parameters
|
||||
hydra -U PROTOCOL
|
||||
e.g. hydra -U smtp
|
||||
|
||||
FOURTH - the destination port
|
||||
this is optional! if no port is supplied the default common port for the
|
||||
PROTOCOL is used.
|
||||
If you specify SSL to use ("-S" option), the SSL common port is used by default.
|
||||
|
||||
|
||||
If you use "://" notation, you must use "[" "]" brackets if you want to supply
|
||||
IPv6 addresses or CIDR ("192.168.0.0/24") notations to attack:
|
||||
hydra [some command line options] ftp://[192.168.0.0/24]/
|
||||
hydra [some command line options] -6 smtps://[2001:db8::1]/NTLM
|
||||
|
||||
Note that everything hydra does is IPv4 only!
|
||||
If you want to attack IPv6 addresses, you must add the "-6" command line option.
|
||||
All attacks are then IPv6 only!
|
||||
|
||||
If you want to supply your targets via a text file, you can not use the ://
|
||||
notation but use the old style and just supply the protocol (and module options):
|
||||
hydra [some command line options] -M targets.txt ftp
|
||||
You can supply also the port for each target entry by adding ":<port>" after a
|
||||
target entry in the file, e.g.:
|
||||
|
||||
```
|
||||
foo.bar.com
|
||||
target.com:21
|
||||
unusual.port.com:2121
|
||||
default.used.here.com
|
||||
127.0.0.1
|
||||
127.0.0.1:2121
|
||||
```
|
||||
|
||||
Note that if you want to attach IPv6 targets, you must supply the -6 option
|
||||
and *must* put IPv6 addresses in brackets in the file(!) like this:
|
||||
|
||||
```
|
||||
foo.bar.com
|
||||
target.com:21
|
||||
[fe80::1%eth0]
|
||||
[2001::1]
|
||||
[2002::2]:8080
|
||||
[2a01:24a:133:0:00:123:ff:1a]
|
||||
```
|
||||
|
||||
LOGINS AND PASSWORDS
|
||||
--------------------
|
||||
You have many options on how to attack with logins and passwords
|
||||
With -l for login and -p for password you tell hydra that this is the only
|
||||
login and/or password to try.
|
||||
With -L for logins and -P for passwords you supply text files with entries.
|
||||
e.g.:
|
||||
|
||||
```
|
||||
hydra -l admin -p password ftp://localhost/
|
||||
hydra -L default_logins.txt -p test ftp://localhost/
|
||||
hydra -l admin -P common_passwords.txt ftp://localhost/
|
||||
hydra -L logins.txt -P passwords.txt ftp://localhost/
|
||||
```
|
||||
|
||||
Additionally, you can try passwords based on the login via the "-e" option.
|
||||
The "-e" option has three parameters:
|
||||
|
||||
```
|
||||
s - try the login as password
|
||||
n - try an empty password
|
||||
r - reverse the login and try it as password
|
||||
```
|
||||
|
||||
If you want to, e.g. try "try login as password and "empty password", you
|
||||
specify "-e sn" on the command line.
|
||||
|
||||
But there are two more modes for trying passwords than -p/-P:
|
||||
You can use text file which where a login and password pair is separated by a colon,
|
||||
e.g.:
|
||||
|
||||
```
|
||||
admin:password
|
||||
test:test
|
||||
foo:bar
|
||||
```
|
||||
|
||||
This is a common default account style listing, that is also generated by the
|
||||
dpl4hydra.sh default account file generator supplied with hydra.
|
||||
You use such a text file with the -C option - note that in this mode you
|
||||
can not use -l/-L/-p/-P options (-e nsr however you can).
|
||||
Example:
|
||||
|
||||
```
|
||||
hydra -C default_accounts.txt ftp://localhost/
|
||||
```
|
||||
|
||||
And finally, there is a bruteforce mode with the -x option (which you can not
|
||||
use with -p/-P/-C):
|
||||
|
||||
```
|
||||
-x minimum_length:maximum_length:charset
|
||||
```
|
||||
|
||||
the charset definition is `a` for lowercase letters, `A` for uppercase letters,
|
||||
`1` for numbers and for anything else you supply it is their real representation.
|
||||
Examples:
|
||||
|
||||
```
|
||||
-x 1:3:a generate passwords from length 1 to 3 with all lowercase letters
|
||||
-x 2:5:/ generate passwords from length 2 to 5 containing only slashes
|
||||
-x 5:8:A1 generate passwords from length 5 to 8 with uppercase and numbers
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
hydra -l ftp -x 3:3:a ftp://localhost/
|
||||
```
|
||||
|
||||
SPECIAL OPTIONS FOR MODULES
|
||||
---------------------------
|
||||
Via the third command line parameter (TARGET SERVICE OPTIONAL) or the -m
|
||||
command line option, you can pass one option to a module.
|
||||
Many modules use this, a few require it!
|
||||
|
||||
To see the special option of a module, type:
|
||||
|
||||
hydra -U <module>
|
||||
|
||||
e.g.
|
||||
|
||||
./hydra -U http-post-form
|
||||
|
||||
The special options can be passed via the -m parameter, as 3rd command line
|
||||
option or in the service://target/option format.
|
||||
|
||||
Examples (they are all equal):
|
||||
|
||||
```
|
||||
./hydra -l test -p test -m PLAIN 127.0.0.1 imap
|
||||
./hydra -l test -p test 127.0.0.1 imap PLAIN
|
||||
./hydra -l test -p test imap://127.0.0.1/PLAIN
|
||||
```
|
||||
|
||||
RESTORING AN ABORTED/CRASHED SESSION
|
||||
------------------------------------
|
||||
When hydra is aborted with Control-C, killed or crashes, it leaves a
|
||||
"hydra.restore" file behind which contains all necessary information to
|
||||
restore the session. This session file is written every 5 minutes.
|
||||
NOTE: the hydra.restore file can NOT be copied to a different platform (e.g.
|
||||
from little endian to big endian, or from Solaris to AIX)
|
||||
|
||||
HOW TO SCAN/CRACK OVER A PROXY
|
||||
------------------------------
|
||||
The environment variable HYDRA_PROXY_HTTP defines the web proxy (this works
|
||||
just for the http services!).
|
||||
The following syntax is valid:
|
||||
|
||||
```
|
||||
HYDRA_PROXY_HTTP="http://123.45.67.89:8080/"
|
||||
HYDRA_PROXY_HTTP="http://login:password@123.45.67.89:8080/"
|
||||
HYDRA_PROXY_HTTP="proxylist.txt"
|
||||
```
|
||||
|
||||
The last example is a text file containing up to 64 proxies (in the same
|
||||
format definition as the other examples).
|
||||
|
||||
For all other services, use the HYDRA_PROXY variable to scan/crack.
|
||||
It uses the same syntax. eg:
|
||||
|
||||
```
|
||||
HYDRA_PROXY=[connect|socks4|socks5]://[login:password@]proxy_addr:proxy_port
|
||||
```
|
||||
|
||||
for example:
|
||||
|
||||
```
|
||||
HYDRA_PROXY=connect://proxy.anonymizer.com:8000
|
||||
HYDRA_PROXY=socks4://auth:pw@127.0.0.1:1080
|
||||
HYDRA_PROXY=socksproxylist.txt
|
||||
```
|
||||
|
||||
ADDITIONAL HINTS
|
||||
----------------
|
||||
* sort your password files by likelihood and use the -u option to find
|
||||
passwords much faster!
|
||||
* uniq your dictionary files! this can save you a lot of time :-)
|
||||
cat words.txt | sort | uniq > dictionary.txt
|
||||
* if you know that the target is using a password policy (allowing users
|
||||
only to choose a password with a minimum length of 6, containing a least one
|
||||
letter and one number, etc. use the tool pw-inspector which comes along
|
||||
with the hydra package to reduce the password list:
|
||||
cat dictionary.txt | pw-inspector -m 6 -c 2 -n > passlist.txt
|
||||
|
||||
|
||||
RESULTS OUTPUT
|
||||
--------------
|
||||
|
||||
The results are output to stdio along with the other information. Via the -o
|
||||
command line option, the results can also be written to a file. Using -b,
|
||||
the format of the output can be specified. Currently, these are supported:
|
||||
|
||||
* `text` - plain text format
|
||||
* `jsonv1` - JSON data using version 1.x of the schema (defined below).
|
||||
* `json` - JSON data using the latest version of the schema, currently there
|
||||
is only version 1.
|
||||
|
||||
If using JSON output, the results file may not be valid JSON if there are
|
||||
serious errors in booting Hydra.
|
||||
|
||||
|
||||
JSON Schema
|
||||
-----------
|
||||
Here is an example of the JSON output. Notes on some of the fields:
|
||||
|
||||
* `errormessages` - an array of zero or more strings that are normally printed
|
||||
to stderr at the end of the Hydra's run. The text is very free form.
|
||||
* `success` - indication if Hydra ran correctly without error (**NOT** if
|
||||
passwords were detected). This parameter is either the JSON value `true`
|
||||
or `false` depending on completion.
|
||||
* `quantityfound` - How many username+password combinations discovered.
|
||||
* `jsonoutputversion` - Version of the schema, 1.00, 1.01, 1.11, 2.00,
|
||||
2.03, etc. Hydra will make second tuple of the version to always be two
|
||||
digits to make it easier for downstream processors (as opposed to v1.1 vs
|
||||
v1.10). The minor-level versions are additive, so 1.02 will contain more
|
||||
fields than version 1.00 and will be backward compatible. Version 2.x will
|
||||
break something from version 1.x output.
|
||||
|
||||
Version 1.00 example:
|
||||
```
|
||||
{
|
||||
"errormessages": [
|
||||
"[ERROR] Error Message of Something",
|
||||
"[ERROR] Another Message",
|
||||
"These are very free form"
|
||||
],
|
||||
"generator": {
|
||||
"built": "2019-03-01 14:44:22",
|
||||
"commandline": "hydra -b jsonv1 -o results.json ... ...",
|
||||
"jsonoutputversion": "1.00",
|
||||
"server": "127.0.0.1",
|
||||
"service": "http-post-form",
|
||||
"software": "Hydra",
|
||||
"version": "v8.5"
|
||||
},
|
||||
"quantityfound": 2,
|
||||
"results": [
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"login": "bill@example.com",
|
||||
"password": "bill",
|
||||
"port": 9999,
|
||||
"service": "http-post-form"
|
||||
},
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"login": "joe@example.com",
|
||||
"password": "joe",
|
||||
"port": 9999,
|
||||
"service": "http-post-form"
|
||||
}
|
||||
],
|
||||
"success": false
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
SPEED
|
||||
-----
|
||||
through the parallelizing feature, this password cracker tool can be very
|
||||
fast, however it depends on the protocol. The fastest are generally POP3
|
||||
and FTP.
|
||||
Experiment with the task option (-t) to speed things up! The higher - the
|
||||
faster ;-) (but too high - and it disables the service)
|
||||
|
||||
|
||||
|
||||
STATISTICS
|
||||
----------
|
||||
Run against a SuSE Linux 7.2 on localhost with a "-C FILE" containing
|
||||
295 entries (294 tries invalid logins, 1 valid). Every test was run three
|
||||
times (only for "1 task" just once), and the average noted down.
|
||||
|
||||
```
|
||||
P A R A L L E L T A S K S
|
||||
SERVICE 1 4 8 16 32 50 64 100 128
|
||||
------- --------------------------------------------------------------------
|
||||
telnet 23:20 5:58 2:58 1:34 1:05 0:33 0:45* 0:25* 0:55*
|
||||
ftp 45:54 11:51 5:54 3:06 1:25 0:58 0:46 0:29 0:32
|
||||
pop3 92:10 27:16 13:56 6:42 2:55 1:57 1:24 1:14 0:50
|
||||
imap 31:05 7:41 3:51 1:58 1:01 0:39 0:32 0:25 0:21
|
||||
```
|
||||
|
||||
(*)
|
||||
Note: telnet timings can be VERY different for 64 to 128 tasks! e.g. with
|
||||
128 tasks, running four times resulted in timings between 28 and 97 seconds!
|
||||
The reason for this is unknown...
|
||||
|
||||
guesses per task (rounded up):
|
||||
|
||||
295 74 38 19 10 6 5 3 3
|
||||
|
||||
guesses possible per connect (depends on the server software and config):
|
||||
|
||||
telnet 4
|
||||
ftp 6
|
||||
pop3 1
|
||||
imap 3
|
||||
|
||||
|
||||
|
||||
BUGS & FEATURES
|
||||
---------------
|
||||
Hydra:
|
||||
Email me or David if you find bugs or if you have written a new module.
|
||||
vh@thc.org (and put "antispam" in the subject line)
|
||||
|
||||
|
||||
You should use PGP to encrypt emails to vh@thc.org :
|
||||
|
||||
```
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v3.3.3 (vh@thc.org)
|
||||
|
||||
mQINBFIp+7QBEADQcJctjohuYjBxq7MELAlFDvXRTeIqqh8kqHPOR018xKL09pZT
|
||||
KiBWFBkU48xlR3EtV5fC1yEt8gDEULe5o0qtK1aFlYBtAWkflVNjDrs+Y2BpjITQ
|
||||
FnAPHw0SOOT/jfcvmhNOZMzMU8lIubAVC4cVWoSWJbLTv6e0DRIPiYgXNT5Quh6c
|
||||
vqhnI1C39pEo/W/nh3hSa16oTc5dtTLbi5kEbdzml78TnT0OASmWLI+xtYKnP+5k
|
||||
Xv4xrXRMVk4L1Bv9WpCY/Jb6J8K8SJYdXPtbaIi4VjgVr5gvg9QC/d/QP2etmw3p
|
||||
lJ1Ldv63x6nXsxnPq6MSOOw8+QqKc1dAgIA43k6SU4wLq9TB3x0uTKnnB8pA3ACI
|
||||
zPeRN9LFkr7v1KUMeKKEdu8jUut5iKUJVu63lVYxuM5ODb6Owt3+UXgsSaQLu9nI
|
||||
DZqnp/M6YTCJTJ+cJANN+uQzESI4Z2m9ITg/U/cuccN/LIDg8/eDXW3VsCqJz8Bf
|
||||
lBSwMItMhs/Qwzqc1QCKfY3xcNGc4aFlJz4Bq3zSdw3mUjHYJYv1UkKntCtvvTCN
|
||||
DiomxyBEKB9J7KNsOLI/CSst3MQWSG794r9ZjcfA0EWZ9u6929F2pGDZ3LiS7Jx5
|
||||
n+gdBDMe0PuuonLIGXzyIuMrkfoBeW/WdnOxh+27eemcdpCb68XtQCw6UQARAQAB
|
||||
tB52YW4gSGF1c2VyICgyMDEzKSA8dmhAdGhjLm9yZz6JAjkEEwECACMCGwMCHgEC
|
||||
F4AFAlIp/QcGCwkIAwcCBhUKCQgLAgUWAwIBAAAKCRDI8AEqhCFiv2R9D/9qTCJJ
|
||||
xCH4BUbWIUhw1zRkn9iCVSwZMmfaAhz5PdVTjeTelimMh5qwK2MNAjpR7vCCd3BH
|
||||
Z2VLB2Eoz9MOgSCxcMOnCDJjtCdCOeaxiASJt8qLeRMwdMOtznM8MnKCIO8X4oo4
|
||||
qH8eNj83KgpI50ERBCj/EMsgg07vSyZ9i1UXjFofFnbHRWSW9yZO16qD4F6r4SGz
|
||||
dsfXARcO3QRI5lbjdGqm+g+HOPj1EFLAOxJAQOygz7ZN5fj+vPp+G/drONxNyVKp
|
||||
QFtENpvqPdU9CqYh8ssazXTWeBi/TIs0q0EXkzqo7CQjfNb6tlRsg18FxnJDK/ga
|
||||
V/1umTg41bQuVP9gGmycsiNI8Atr5DWqaF+O4uDmQxcxS0kX2YXQ4CSQJFi0pml5
|
||||
slAGL8HaAUbV7UnQEqpayPyyTEx1i0wK5ZCHYjLBfJRZCbmHX7SbviSAzKdo5JIl
|
||||
Atuk+atgW3vC3hDTrBu5qlsFCZvbxS21PJ+9zmK7ySjAEFH/NKFmx4B8kb7rPAOM
|
||||
0qCTv0pD/e4ogJCxVrqQ2XcCSJWxJL31FNAMnBZpVzidudNURG2v61h3ckkSB/fP
|
||||
JnkRy/yxYWrdFBYkURImxD8iFD1atj1n3EI5HBL7p/9mHxf1DVJWz7rYQk+3czvs
|
||||
IhBz7xGBz4nhpCi87VDEYttghYlJanbiRfNh3okCOAQTAQIAIgUCUin7tAIbAwYL
|
||||
CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQyPABKoQhYr8OIA//cvkhoKay88yS
|
||||
AjMQypach8C5CvP7eFCT11pkCt1DMAO/8Dt6Y/Ts10dPjohGdIX4PkoLTkQDwBDJ
|
||||
HoLO75oqj0CYLlqDI4oHgf2uzd0Zv8f/11CQQCtut5oEK72mGNzv3GgVqg60z2KR
|
||||
2vpxvGQmDwpDOPP620tf/LuRQgBpks7uazcbkAE2Br09YrUQSCBNHy8kirHW5m5C
|
||||
nupMrcvuFx7mHKW1z3FuhM8ijG7oRmcBWfVoneQgIT3l2WBniXg1mKFhuUSV8Erc
|
||||
XIcc11qsKshyqh0GWb2JfeXbAcTW8/4IwrCP+VfAyLO9F9khP6SnCmcNF9EVJyR6
|
||||
Aw+JMNRin7PgvsqbFhpkq9N+gVBAufz3DZoMTEbsMTtW4lYG6HMWhza2+8G9XyaL
|
||||
ARAWhkNVsmQQ5T6qGkI19thB6E/T6ZorTxqeopNVA7VNK3RVlKpkmUu07w5bTD6V
|
||||
l3Ti6XfcSQqzt6YX2/WUE8ekEG3rSesuJ5fqjuTnIIOjBxr+pPxkzdoazlu2zJ9F
|
||||
n24fHvlU20TccEWXteXj9VFzV/zbPEQbEqmE16lV+bO8U7UHqCOdE83OMrbNKszl
|
||||
7LSCbFhCDtflUsyClBt/OPnlLEHgEE1j9QkqdFFy90l4HqGwKvx7lUFDnuF8LYsb
|
||||
/hcP4XhqjiGcjTPYBDK254iYrpOSMZSIRgQQEQIABgUCUioGfQAKCRBDlBVOdiii
|
||||
tuddAJ4zMrge4qzajScIQcXYgIWMXVenCQCfYTNQPGkHVyp3dMhJ0NR21TYoYMC5
|
||||
Ag0EUin7tAEQAK5/AEIBLlA/TTgjUF3im6nu/rkWTM7/gs5H4W0a04kF4UPhaJUR
|
||||
gCNlDfUnBFA0QD7Jja5LHYgLdoHXiFelPhGrbZel/Sw6sH2gkGCBtFMrVkm3u7tt
|
||||
x3AZlprqqRH68Y5xTCEjGRncCAmaDgd2apgisJqXpu0dRDroFYpJFNH3vw9N2a62
|
||||
0ShNakYP4ykVG3jTDC4MSl2q3BO5dzn8GYFHU0CNz6nf3gZR+48BG+zmAT77peTS
|
||||
+C4Mbd6LmMmB0cuS2kYiFRwE2B69UWguLHjpXFcu9/85JJVCl2CIab7l5hpqGmgw
|
||||
G/yW8HFK04Yhew7ZJOXJfUYlv1EZzR5bOsZ8Z9inC6hvFmxuCYCFnvkiEI+pOxPA
|
||||
oeNOkMaT/W4W+au0ZVt3Hx+oD0pkJb5if0jrCaoAD4gpWOte6LZA8mAbKTxkHPBr
|
||||
rA9/JFis5CVNI688O6eDiJqCCJjPOQA+COJI+0V+tFa6XyHPB4LxA46RxtumUZMC
|
||||
v/06sDJlXMNpZbSd5Fq95YfZd4l9Vr9VrvKXfbomn+akwUymP8RDyc6Z8BzjF4Y5
|
||||
02m6Ts0J0MnSYfEDqJPPZbMGB+GAgAqLs7FrZJQzOZTiOXOSIJsKMYsPIDWE8lXv
|
||||
s77rs0rGvgvQfWzPsJlMIx6ryrMnAsfOkzM2GChGNX9+pABpgOdYII4bABEBAAGJ
|
||||
Ah8EGAECAAkFAlIp+7QCGwwACgkQyPABKoQhYr+hrg/9Er0+HN78y6UWGFHu/KVK
|
||||
d8M6ekaqjQndQXmzQaPQwsOHOvWdC+EtBoTdR3VIjAtX96uvzCRV3sb0XPB9S9eP
|
||||
gRrO/t5+qTVTtjua1zzjZsMOr1SxhBgZ5+0U2aoY1vMhyIjUuwpKKNqj2uf+uj5Y
|
||||
ZQbCNklghf7EVDHsYQ4goB9gsNT7rnmrzSc6UUuJOYI2jjtHp5BPMBHh2WtUVfYP
|
||||
8JqDfQ+eJQr5NCFB24xMW8OxMJit3MGckUbcZlUa1wKiTb0b76fOjt0y/+9u1ykd
|
||||
X+i27DAM6PniFG8BfqPq/E3iU20IZGYtaAFBuhhDWR3vGY4+r3OxdlFAJfBG9XDD
|
||||
aEDTzv1XF+tEBo69GFaxXZGdk9//7qxcgiya4LL9Kltuvs82+ZzQhC09p8d3YSQN
|
||||
cfaYObm4EwbINdKP7cr4anGFXvsLC9urhow/RNBLiMbRX/5qBzx2DayXtxEnDlSC
|
||||
Mh7wCkNDYkSIZOrPVUFOCGxu7lloRgPxEetM5x608HRa3hDHoe5KvUBmmtavB/aR
|
||||
zlGuZP1S6Y7S13ytiULSzTfUxJmyGYgNo+4ygh0i6Dudf9NLmV+i9aEIbLbd6bni
|
||||
1B/y8hBSx3SVb4sQVRe3clBkfS1/mYjlldtYjzOwcd02x599KJlcChf8HnWFB7qT
|
||||
zB3yrr+vYBT0uDWmxwPjiJs=
|
||||
=ytEf
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
```
|
206
web/index.html
|
@ -1,206 +0,0 @@
|
|||
<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
|
||||
<meta name="keywords" content="Network Login Authentication Password Cracker Bruteforce THC Hydra">
|
||||
<title>THC-HYDRA - fast and flexible network login hacker</title></head>
|
||||
<body bgcolor="#ffffff">
|
||||
<pre>
|
||||
<table border="0">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<img src="xhydra.png" width=300 height=300>
|
||||
</td>
|
||||
<td>
|
||||
<pre>
|
||||
<h2> THC-Hydra</h2>
|
||||
<h4>
|
||||
A very fast network logon cracker which support many different services.
|
||||
See feature sets and services coverage <a href="network_password_cracker_comparison.html">page</a> - incl. a speed comparison against ncrack and medusa<br>
|
||||
</h4><h3>
|
||||
Current Version: 8.6
|
||||
Last update 2017-07-21
|
||||
</h3>
|
||||
</pre>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</pre><pre>
|
||||
|
||||
[0x00] News and Changelog
|
||||
|
||||
<b>
|
||||
Check out the feature sets and services coverage <a href="network_password_cracker_comparison.html">page</a> - including a speed comparison against ncrack and medusa (yes, we win :-) )
|
||||
Development code is available at a public github repository: <a href="https://github.com/vanhauser-thc/thc-hydra">https://github.com/vanhauser-thc/thc-hydra</a>
|
||||
There is a new section below for online tutorials.
|
||||
Read below for Linux compilation notes.
|
||||
</b>
|
||||
|
||||
CHANGELOG for 8.6
|
||||
===================
|
||||
! Development moved to a public github repository: https://github.com/vanhauser-thc/thc-hydra
|
||||
|
||||
! Reports came in that the rdp module is not working reliable sometimes, most likely against new Windows versions. please test, report and if possible send a fix
|
||||
* added radmin2 module by catatonic prime - great work!
|
||||
* smb module now checks if SMBv1 is supported by the server and if signing is required
|
||||
* http-form module now supports URLs up to 6000 bytes (thanks to petrock6@github for the patch)
|
||||
* Fix for SSL connections that failed with error:00000000:lib(0):func(0):reason(0) (thanks gaia@github for reporting)
|
||||
* Added new command line option:
|
||||
-c TIME: seconds between login attempts (over all threads, so -t 1 is recommended)
|
||||
* Options put after -R (for loading a restore file) are now honored (and were disallowed before)
|
||||
* merged several patches by Diadlo@github to make the code easier readable. thanks for that!
|
||||
* merged a patch by Diadlo@github that moves the help output to the invididual module
|
||||
|
||||
You can also take a look at the full <a href="CHANGES">CHANGES</a> file
|
||||
|
||||
|
||||
[0x01] Introduction
|
||||
|
||||
Welcome to the mini website of the THC Hydra project.
|
||||
|
||||
Number one of the biggest security holes are passwords, as every password security study shows.
|
||||
Hydra is a parallized login cracker which supports numerous protocols to attack. New modules
|
||||
are easy to add, beside that, it is flexible and very fast.
|
||||
|
||||
Hydra was tested to compile on Linux, Windows/Cygwin, Solaris 11, FreeBSD 8.1, OpenBSD, OSX,
|
||||
QNX/Blackberry, and is made available under GPLv3 with a special OpenSSL license expansion.
|
||||
|
||||
Currently this tool supports:
|
||||
Asterisk, AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET, HTTP-FORM-POST,
|
||||
HTTP-GET, HTTP-HEAD, HTTP-POST, HTTP-PROXY, HTTPS-FORM-GET, HTTPS-FORM-POST, HTTPS-GET, HTTPS-POST, HTTPS-HEAD,
|
||||
HTTP-Proxy, ICQ, IMAP, IRC, LDAP, MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle,
|
||||
PC-Anywhere, PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, RTSP, S7-300, SAP/R3, SIP, SMB, SMTP,
|
||||
SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2), Telnet, VMware-Auth, VNC and XMPP.
|
||||
|
||||
For HTTP, POP3, IMAP and SMTP, several login mechanisms like plain and MD5 digest etc. are supported.
|
||||
|
||||
This tool is a proof of concept code, to give researchers and security consultants the
|
||||
possiblity to show how easy it would be to gain unauthorized access from remote to a system.
|
||||
|
||||
The program was written van Hauser and is additiionally supported by David Maciejak.
|
||||
|
||||
|
||||
[0x02] Screenshots
|
||||
|
||||
<a href="hydra_target.jpg"><img src="hydra_target.jpg"></a>
|
||||
(1) Target selection
|
||||
|
||||
<a href="hydra_pass.jpg"><img src="hydra_pass.jpg"></a>
|
||||
(2) Login/Password setup
|
||||
|
||||
<a href="hydra_start.jpg"><img src="hydra_start.jpg"></a>
|
||||
(3) Hydra start and output
|
||||
|
||||
|
||||
[0x03] Documentation
|
||||
|
||||
Hydra comes with a rather long <a href="README">README file</a> that describes the
|
||||
details about the usage and special options.
|
||||
|
||||
But sometimes detailed online help can vastly improve your efficency.
|
||||
The following links on the global internet are a recommended read.
|
||||
|
||||
General usage and options: <a target="_blank" href="http://www.aldeid.com/wiki/Thc-hydra">http://www.aldeid.com/wiki/Thc-hydra</a>
|
||||
<a target="_blank" href="http://resources.infosecinstitute.com/online-dictionary-attack-with-hydra/">http://resources.infosecinstitute.com/online-dictionary-attack-with-hydra/</a>
|
||||
|
||||
HTTP basic auth: <a target="_blank" href="https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29">https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29</a>
|
||||
<a target="_blank" href="http://www.sillychicken.co.nz/Security/how-to-brute-force-your-router-in-windows.html">http://www.sillychicken.co.nz/Security/how-to-brute-force-your-router-in-windows.html</a>
|
||||
|
||||
HTTP form based auth: <a target="_blank" href="http://www.art0.org/security/performing-a-dictionary-attack-on-an-http-login-form-using-hydra">http://www.art0.org/security/performing-a-dictionary-attack-on-an-http-login-form-using-hydra</a>
|
||||
<a target="_blank" href="http://insidetrust.blogspot.com/2011/08/using-hydra-to-dictionary-attack-web.html">http://insidetrust.blogspot.com/2011/08/using-hydra-to-dictionary-attack-web.html</a>
|
||||
<a target="_blank" href="http://www.sillychicken.co.nz/Security/how-to-brute-force-http-forms-in-windows.html">http://www.sillychicken.co.nz/Security/how-to-brute-force-http-forms-in-windows.html</a>
|
||||
<a target="_blank" href="https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29">https://www.owasp.org/index.php/Testing_for_Brute_Force_%28OWASP-AT-004%29</a>
|
||||
|
||||
Multiple protocols: <a target="_blank" href="http://wiki.bywire.org/Hydra">http://wiki.bywire.org/Hydra</a>
|
||||
<a target="_blank" href="http://www.attackvector.org/brute-force-with-thc-hydra/">http://www.attackvector.org/brute-force-with-thc-hydra/</a>
|
||||
<a target="_blank" href="http://www.madirish.net/content/hydra-brute-force-utility">http://www.madirish.net/content/hydra-brute-force-utility</a>
|
||||
|
||||
Telnet: <a target="_blank" href="http://www.theprohack.com/2009/04/basics-of-cracking-ftp-and-telnet.html">http://www.theprohack.com/2009/04/basics-of-cracking-ftp-and-telnet.html</a>
|
||||
<a target="_blank" href="http://www.adeptus-mechanicus.com/codex/bflog/bflog.html">http://www.adeptus-mechanicus.com/codex/bflog/bflog.html</a>
|
||||
|
||||
For those people testing with <a href="http://www.dvwa.co.uk/">DVWA</a>, this is what you want:
|
||||
hydra -l admin -p password <TARGET> http-get-form "/dvwa/login.php:username=^USER^&password=^PASS^&submit=Login:Login failed"
|
||||
|
||||
If you find other good ones, just email them in ( vh(at)thc(dot)org ).
|
||||
|
||||
|
||||
[0x04] Disclaimer
|
||||
|
||||
1. Please do not use in military or secret service organizations or for illegal purposes.
|
||||
2. The Affero General Public License Version 3 (AGPLv3) applies to this code.
|
||||
3. A special license expansion for OpenSSL is included which is required for the Debian people
|
||||
|
||||
|
||||
[0x05] The Art of Downloading: Source and Binaries
|
||||
|
||||
1. PRODUCTION/RELEASE VERSION:
|
||||
The source code of state-of-the-art Hydra: <a href="http://www.thc.org/releases/hydra-8.6.tar.gz">hydra-8.6.tar.gz</a>
|
||||
(compiles on all UNIX based platforms - even MacOS X, Cygwin on Windows, ARM-Linux, Android, iPhone, Blackberry 10, etc.)
|
||||
|
||||
2. DEVELOPMENT VERSION:
|
||||
You can download and compile the current development version of hydra always in its public GITHUB repository:
|
||||
<a href="https://github.com/vanhauser-thc/thc-hydra">https://github.com/vanhauser-thc/thc-hydra</a> by either
|
||||
svn co https://github.com/vanhauser-thc/thc-hydra
|
||||
or
|
||||
git clone https://github.com/vanhauser-thc/thc-hydra.git
|
||||
Note that this is the development state! New features - and new bugs. Things might not work!
|
||||
|
||||
3. The source code of an old, deprecated version of Hydra <b>ONLY in case v7.x gives you problems</b> on unusual and old platforms:
|
||||
<a href="http://www.thc.org/releases/hydra-5.9.1-src.tar.gz">hydra-5.9.1-src.tar.gz</a>
|
||||
|
||||
4. The Win32/Cywin binary release: --- not anymore ---
|
||||
Install cygwin from <a href="http://www.cygwin.com/">http://www.cygwin.com</a>
|
||||
and compile it yourself. If you do not have cygwin installed - how
|
||||
do you think you will do proper securiy testing? duh ...
|
||||
|
||||
5. ARM and Palm binaries here are old and not longer maintained:
|
||||
ARM: <a href="http://www.thc.org/thc-hydra/hydra-5.0-arm.tar.gz">hydra-5.0-arm.tar.gz</a>
|
||||
Palm: <a href="http://www.thc.org/thc-hydra/hydra-4.6-palm.zip">hydra-4.6-palm.zip</a>
|
||||
|
||||
|
||||
[0x06] Compilation Help
|
||||
|
||||
Hydra compiles fine on all platforms that have gcc - Linux, all BSD, Mac OS/X, Cygwin on Windows, Solaris, etc.
|
||||
It should even compile on historical SunOS, Ultrix etc. platforms :-)
|
||||
|
||||
There are many optional modules for network protocols like SSH, SVN etc. that require libraries.
|
||||
If they are not found, these optional libraries will not be supported in your binary.
|
||||
|
||||
If you are on Linux, the following commands install all necessary libraries:
|
||||
|
||||
Ubuntu/Debian: apt-get install libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird2.1-dev libncp-dev libncurses5-dev
|
||||
Redhat/Fedora: yum install openssl-devel pcre-devel ncpfs-devel postgresql-devel libssh-devel subversion-devel libncurses-devel
|
||||
OpenSuSE: zypper install libopenssl-devel pcre-devel libidn-devel ncpfs-devel libssh-devel postgresql-devel subversion-devel libncurses-devel
|
||||
|
||||
This enables all optional modules and features with the exception of Oracle, SAP R/3 and the
|
||||
Apple filing protocol - which you will need to download and install from the vendor's web sites.
|
||||
For Oracle this is (install the basic and SDK packages): <a href="http://www.oracle.com/technetwork/database/features/instant-client/index.html">http://www.oracle.com/technetwork/database/features/instant-client/index.html</a>
|
||||
|
||||
For all other Linux derivates and BSD based systems, use the system software installer and look for
|
||||
similar named libraries like in the command above.
|
||||
In all other cases you have to download all source libraries and compile them manually;
|
||||
the configure script output tells you what is missing and where to get it from.
|
||||
|
||||
|
||||
[0x07] Development & Contributions
|
||||
|
||||
Your contributions are more than welcomed!
|
||||
|
||||
If you find bugs, coded enhancements or wrote a new attack module for a service,
|
||||
please send them to vh (at) thc (dot) org
|
||||
|
||||
Interesting attack modules would be:
|
||||
OSPF, BGP, PIM, PPTP, ...
|
||||
(or anything else you might be able to do (and is not there yet))
|
||||
|
||||
Please note that you can also download and commit via github: <a href="https://github.com/vanhauser-thc/thc-hydra">https://github.com/vanhauser-thc/thc-hydra</a>
|
||||
|
||||
|
||||
Comments and suggestions are welcome.
|
||||
|
||||
Yours sincerly,
|
||||
|
||||
van Hauser
|
||||
The Hackers Choice
|
||||
http://www.thc.org/thc-hydra
|
||||
|
||||
</pre>
|
||||
</body></html>
|
|
@ -1,917 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html dir="ltr" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
|
||||
|
||||
<!-- inspired from http://wiki.inspircd.org/Comparison_Of_Features and MediaWiki-->
|
||||
<!-- Author David Maciejak, for any inquiries please contact us -->
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
<meta name="keywords" content="Comparison Of Features,Comparison Of Services, Network Authentication Password Cracker Bruteforce THC">
|
||||
<link rel="shortcut icon" href="http://www.thc.org/favicon.ico">
|
||||
<link rel="copyright" href="http://www.gnu.org/copyleft/fdl.html">
|
||||
<title>State of network password cracker art - Comparison Of Features and Services - hydra</title>
|
||||
|
||||
<link rel="stylesheet" href="commonPrint.css" type="text/css" media="print">
|
||||
<link rel="stylesheet" href="main.css" type="text/css" media="screen">
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
<div id="globalWrapper">
|
||||
<div id="column-content">
|
||||
<div id="content">
|
||||
<a name="top" id="top"></a>
|
||||
<h1 class="firstHeading">Comparison of Features and Services Coverage</h1>
|
||||
|
||||
|
||||
|
||||
<div id="bodyContent">
|
||||
<div id="contentSub"></div>
|
||||
<table id="toc" class="toc" summary="Contents"><tbody><tr><td><div id="toctitle"><h2>Contents</h2></div>
|
||||
<ul>
|
||||
<li class="toclevel-1"><a href="#Introduction"><span class="tocnumber">1</span> <span class="toctext">Introduction</span></a>
|
||||
<ul>
|
||||
<li class="toclevel-2"><a href="#Code_Comparison"><span class="tocnumber">1.1</span> <span class="toctext">Code Comparison</span></a></li>
|
||||
<li class="toclevel-2"><a href="#Feature_table"><span class="tocnumber">1.2</span> <span class="toctext">Features Table</span></a></li>
|
||||
<li class="toclevel-2"><a href="#Services_Support"><span class="tocnumber">1.3</span> <span class="toctext">Services Coverage</span></a></li>
|
||||
<li class="toclevel-2"><a href="#Speed_Comparison"><span class="tocnumber">1.4</span> <span class="toctext">Speed Comparison</span></a></li>
|
||||
<li class="toclevel-2"><a href="#Notes"><span class="tocnumber">1.5</span> <span class="toctext">Notes</span></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</td></tr></tbody></table>
|
||||
<a name="Introduction" id="Introduction"></a><h2> <span class="mw-headline"> Introduction </span></h2>
|
||||
<p>Hydra is born more than 10 years ago, this page is used as a recap of the functionalities it provides, but also
|
||||
the differences in feature sets, services coverage and code between the most
|
||||
popular network authentication cracker tools available. Each feature is compared against
|
||||
<a href="http://www.thc.org/thc-hydra/" title="Hydra">Hydra</a> as of the current version. This table is updated as new
|
||||
features are added to the project. If you find any inaccuracies
|
||||
on this page please do not hesitate to contact us.
|
||||
<p>Below, <img alt="Yes" src="Tick.png" border="0" height="17" width="20"></a> means it is supported, <img alt="No" src="Cross.png" border="0" height="18" width="22"></a> means it is not supported, <img alt="Unknown" src="Unknown.png" border="0" height="22" width="22"></a> means the support is partial
|
||||
</p>
|
||||
</p>
|
||||
|
||||
<a name="Code_Comparison" id="Code_Comparison"></a><h3> <span class="mw-headline"> Code Comparison </span></h3>
|
||||
<p>This table just lists latest available versions and platforms compatibility.</p>
|
||||
<table style="background-color: rgb(250, 250, 250); color: black; border: 1px solid rgb(204, 204, 204); border-collapse: collapse; border-spacing: 0pt;">
|
||||
<tbody><tr>
|
||||
<td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Code
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Hydra
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Medusa
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Ncrack
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Version
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> 8.6
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> 2.2
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> 0.4 alpha
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Last Update
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> July 2017
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> November 2015
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> April 2011
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Supported Platforms
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> Linux, *BSD, Solaris, Mac OS X, any Unix, Windows (Cygwin)
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> Linux, *BSD, Solaris and Mac OS X
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> Linux, *BSD, Mac OS X, Windows
|
||||
</td></tr>
|
||||
<tr>
|
||||
</tbody></table><br>
|
||||
|
||||
<a name="Feature_table" id="Feature_table"></a><h3> <span class="mw-headline"> Features Table </span></h3>
|
||||
<p>This table lists the feature sets of each tools.
|
||||
</p>
|
||||
<table style="background-color: rgb(250, 250, 250); color: black; border: 1px solid rgb(204, 204, 204); border-collapse: collapse; border-spacing: 0pt;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Feature
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Hydra
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Medusa
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Ncrack
|
||||
</td></tr>
|
||||
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> License
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> AGPLv3
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> GPLv2
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> GPLv2 + Nmap terms
|
||||
</td></tr>
|
||||
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> IPv6 Support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Graphic User Interface
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Internationalized support (RFC 4013)
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> HTTP proxy support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> SOCKS proxy support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> # of supported protocols
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> 51
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> 22
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> 7
|
||||
</td></tr>
|
||||
|
||||
|
||||
|
||||
</tbody></table><br>
|
||||
|
||||
<a name="Services_Support" id="Services_Support"></a><h3> <span class="mw-headline"> Services Coverage </span></h3>
|
||||
<p>This table lists the services coverage of each tools. For each services, many authentication methods are possible. If you require other ways or find issues in Hydra, please
|
||||
contact us as the service depends on RFC implementations, some adjustements may be needed.
|
||||
</p>
|
||||
<table style="background-color: rgb(250, 250, 250); color: black; border: 1px solid rgb(204, 204, 204); border-collapse: collapse; border-spacing: 0pt;">
|
||||
<tbody><tr>
|
||||
<td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Service
|
||||
</td>
|
||||
<td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Details
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Hydra
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Medusa
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Ncrack
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> ADAM-6500
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"><a title="Apple Filing Protocol">AFP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"><a title="Asterisk Call Manager">Asterisk</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Cisco Password
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Cisco Enable
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> CVS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Firebird
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=2> <a title="File Transfer Protocol">FTP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>AUTH TLS & FTP over SSL</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>AUTH TLS & FTP over SSL</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=5> <a title="Hypertext Transfer Protocol">HTTP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Method(s)</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">GET, HEAD, POST
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">GET
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">GET
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Basic Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">DIGEST-MD5 Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">NTLM Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">HTTPS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">HTTPS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">HTTPS
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=2> HTTP Form
|
||||
<td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Method(s)</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">GET, POST
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">GET, POST
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">HTTPS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">HTTPS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=4> HTTP Proxy
|
||||
<td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Basic Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">DIGEST-MD5 Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">NTLM Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">HTTPS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> HTTP PROXY URL Enumeration
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> ICQ
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v5
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20"> <sup>1</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=10> <a title="Internet Message Access Protocol">IMAP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">LOGIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH LOGIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH PLAIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-SHA1 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-SHA256 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH DIGEST-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH NTLM support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH SCRAM-SHA1 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>IMAPS & STARTTLS</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>IMAPS & STARTTLS</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22"></a>
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=2> <a title="Internet Relay Chat">IRC</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">General server password
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">OPER mode password
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=4> <a title="Lightweight Directory Access Protocol">LDAP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v2, Simple support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v3, Simple support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v3, AUTH CRAM-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v3, AUTH DIGEST-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> MS-SQL
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=3> MySQL
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v3.x
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v4.x
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v5.x
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"><a title="NetWare Core Protocol for Novell">NCP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=7> <a title="Network News Transfer Protocol">NNTP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">USER support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH LOGIN support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH PLAIN support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-MD5 support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH DIGEST-MD5 support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH NTLM support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>STARTTLS & NNTP over SSL</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=3> Oracle
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Database</td></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22"> <sup>2</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">TNS Listener</td></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SID Enumeration</td></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> <a title="PC-Network File System">PC-NFS</a>
|
||||
</td><td></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=2> pcAnywhere
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Native Authentication
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20"> <sup>1</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">OS Based Authentication (MS)
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=10> POP3
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">USER support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">APOP support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH LOGIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH PLAIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-SHA1 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-SHA256 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH DIGEST-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH NTLM support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL Support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>POP3S & STARTTLS</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>POP3S & STARTTLS</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>POP3S</font>
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> PostgreSQL
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"><a title="Radmin2">Asterisk</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=3> <a title="Remote Desktop Protocol">RDP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Windows Workstation
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22"> <sup>2</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Windows Server
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22"> <sup>2</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Partial" src="Unknown.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Domain Auth
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22"> <sup>2</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> REDIS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> REXEC
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> RLOGIN
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> RPCAP
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> RSH
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> RTSP
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> SAP R/3
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20"> <sup>1</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Siemens S7-300
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=2> <a title="Session Initiation Protocol">SIP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20"> <sup>1</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>SIP over SSL</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=8> SMB
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">NetBIOS Mode</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">W2K Native Mode</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Hash mode</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">Clear Text Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">LMv1 Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">LMv2 Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">NTLMv1 Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">NTLMv2 Auth</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=6> <a title="Simple Mail Transfer Protocol">SMTP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH LOGIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH PLAIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH DIGEST-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH NTLM support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>SMTPS & STARTTLS</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><font color=green>SMTPS & STARTTLS</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=3> SMTP User Enum
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">VRFY cmd</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">EXPN cmd</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">RCPT TO cmd</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=3> SNMP
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v1
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v2c
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v3
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Partial (MD5/SHA1 auth only)" src="Unknown.png" border="0" height="18" width="22"><font color=green>(MD5/SHA1 auth only)</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> SOCKS
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v5, Password Auth
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=2> SSH
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v1</td></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v2</td></td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> SSH Keys
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v1, v2
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Subversion (SVN)
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> TeamSpeak
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">TS2
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20"> <sup>1</sup>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> Telnet
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=5> <a title="Extensible Messaging and Presence Protocol">XMPP</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH LOGIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH PLAIN support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH CRAM-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH DIGEST-MD5 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">AUTH SCRAM-SHA1 support</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=2> VMware Auth Daemon
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">v1.00 / v1.10
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">SSL support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
<tr style="border-top: 2px solid rgb(204, 204, 204);">
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;" ROWSPAN=4> <a title="Virtual Network Computing">VNC</a>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">RFB 3.x password support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">RFB 3.x user+password support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Partial" src="Unknown.png" border="0" height="18" width="22"><font color=green>(UltraVNC only)</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">RFB 4.x password support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Yes" src="Tick.png" border="0" height="17" width="20">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
<tr><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;">RFB 4.x user+password support
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="Partial" src="Unknown.png" border="0" height="18" width="22"><font color=green>(UltraVNC only)</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"><img alt="No" src="Cross.png" border="0" height="18" width="22">
|
||||
</td></tr>
|
||||
|
||||
|
||||
</tbody></table><br>
|
||||
|
||||
<a name="Speed_Comparison" id="Speed_Comparison"></a><h3> <span class="mw-headline"> Speed Comparison </span></h3>
|
||||
<p>This table gives some speed data (in second) for 2 popular services supported by each cracking tool (as of September 2011). The value displayed is the min value of 3 consecutive runs.
|
||||
Each tool was configured to run 1, 4 and 16 task(s)/job(s) at a time. A login and password lists corresponding to 20 attempts was used. The smaller the value the better.</p>
|
||||
<table style="background-color: rgb(250, 250, 250); color: black; border: 1px solid rgb(204, 204, 204); border-collapse: collapse; border-spacing: 0pt;">
|
||||
<tbody><tr>
|
||||
<td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Speed (in s)
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Hydra
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Medusa
|
||||
</td><td style="padding: 2px 4px; background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); text-align: center; font-weight: bold;"> Ncrack
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> 1 Task / FTP module
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=green>11.93</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=darkorange>12.97</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>18.01</font>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> 4 Tasks / FTP module
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=green>4.20</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=darkorange>5.24</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>9.01</font>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> 16 Tasks / FTP module
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=green>2.44</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=darkorange>2.71</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>12.01</font>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> 1 Task / SSH v2 module
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=green>32.56</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=darkorange>33.84</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>45.02</font>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> 4 Tasks / SSH v2 module
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=green>10.95</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>Broken</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>Missed</font>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td style="background-color: rgb(236, 236, 236); border: 1px solid rgb(204, 204, 204); padding: 2px 4px; font-weight: bold;"> 16 Tasks / SSH v2 module
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=green>5.14</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>Broken</font>
|
||||
</td><td style="border: 1px solid rgb(204, 204, 204); padding: 2px 4px; text-align: center;"> <font color=red>Missed</font>
|
||||
</td></tr>
|
||||
|
||||
</tbody></table><br>
|
||||
|
||||
|
||||
<a name="Notes" id="Notes"></a><h3> <span class="mw-headline"> Notes </span></h3>
|
||||
<ol><li>These Hydra modules have not been checked with latest version of softwares/protocols available.
|
||||
</li>
|
||||
<li>Medusa support is relying on a script or a wrapper.
|
||||
</li></ol>
|
||||
|
||||
<div class="printfooter">
|
||||
|
||||
<div class="visualClear"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="visualClear"></div>
|
||||
<div id="footer">
|
||||
<div id="f-copyrightico"><a href="http://www.gnu.org/copyleft/fdl.html"><img src="gnu-fdl.png" alt="GNU Free Documentation License 1.2"></a></div>
|
||||
<ul id="f-list">
|
||||
<li id="lastmod"> Modified May 2012</li>
|
||||
<li id="copyright">Licensed under GNU FDL 1.2</li>
|
||||
<li id="about"><a href="http://www.thc.org/thc-hydra/" title="Hydra">Back to Hydra main site</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body></html>
|
|
@ -1,267 +0,0 @@
|
|||
/*
|
||||
** MediaWiki Print style sheet for CSS2-capable browsers.
|
||||
** Copyright Gabriel Wicke, http://www.aulinx.de/
|
||||
**
|
||||
** Derived from the plone (http://plone.org/) styles
|
||||
** Copyright Alexander Limi
|
||||
*/
|
||||
|
||||
/* Thanks to A List Apart (http://alistapart.com/) for useful extras */
|
||||
a.stub,
|
||||
a.new{ color:#ba0000; text-decoration:none; }
|
||||
|
||||
#toc {
|
||||
/*border:1px solid #2f6fab;*/
|
||||
border:1px solid #aaaaaa;
|
||||
background-color:#f9f9f9;
|
||||
padding:5px;
|
||||
}
|
||||
.tocindent {
|
||||
margin-left: 2em;
|
||||
}
|
||||
.tocline {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
/* images */
|
||||
div.floatright {
|
||||
float: right;
|
||||
clear: right;
|
||||
margin: 0;
|
||||
position:relative;
|
||||
border: 0.5em solid White;
|
||||
border-width: 0.5em 0 0.8em 1.4em;
|
||||
}
|
||||
div.floatright p { font-style: italic;}
|
||||
div.floatleft {
|
||||
float: left;
|
||||
margin: 0.3em 0.5em 0.5em 0;
|
||||
position:relative;
|
||||
border: 0.5em solid White;
|
||||
border-width: 0.5em 1.4em 0.8em 0;
|
||||
}
|
||||
div.floatleft p { font-style: italic; }
|
||||
/* thumbnails */
|
||||
div.thumb {
|
||||
margin-bottom: 0.5em;
|
||||
border-style: solid; border-color: White;
|
||||
width: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
div.thumb div {
|
||||
border:1px solid #cccccc;
|
||||
padding: 3px !important;
|
||||
background-color:#f9f9f9;
|
||||
font-size: 94%;
|
||||
text-align: center;
|
||||
}
|
||||
div.thumb div a img {
|
||||
border:1px solid #cccccc;
|
||||
}
|
||||
div.thumb div div.thumbcaption {
|
||||
border: none;
|
||||
padding: 0.3em 0 0.1em 0;
|
||||
}
|
||||
div.magnify { display: none; }
|
||||
div.tright {
|
||||
float: right;
|
||||
clear: right;
|
||||
border-width: 0.5em 0 0.8em 1.4em;
|
||||
}
|
||||
div.tleft {
|
||||
float: left;
|
||||
margin-right:0.5em;
|
||||
border-width: 0.5em 1.4em 0.8em 0;
|
||||
}
|
||||
img.thumbborder {
|
||||
border: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
/* table standards */
|
||||
table.rimage {
|
||||
float:right;
|
||||
width:1pt;
|
||||
position:relative;
|
||||
margin-left:1em;
|
||||
margin-bottom:1em;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
body {
|
||||
background: White;
|
||||
/*font-size: 11pt !important;*/
|
||||
color: Black;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.noprint,
|
||||
div#jump-to-nav,
|
||||
div.top,
|
||||
div#column-one,
|
||||
#colophon,
|
||||
.editsection,
|
||||
.toctoggle,
|
||||
.tochidden,
|
||||
div#f-poweredbyico,
|
||||
div#f-copyrightico,
|
||||
li#viewcount,
|
||||
li#about,
|
||||
li#disclaimer,
|
||||
li#privacy {
|
||||
/* Hides all the elements irrelevant for printing */
|
||||
display: none;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: square;
|
||||
}
|
||||
|
||||
#content {
|
||||
background: none;
|
||||
border: none ! important;
|
||||
padding: 0 ! important;
|
||||
margin: 0 ! important;
|
||||
}
|
||||
#footer {
|
||||
background : white;
|
||||
color : black;
|
||||
border-top: 1px solid black;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
p, .documentDescription {
|
||||
margin: 1em 0 ! important;
|
||||
line-height: 1.2em;
|
||||
}
|
||||
|
||||
.tocindent p {
|
||||
margin: 0 0 0 0 ! important;
|
||||
}
|
||||
|
||||
pre {
|
||||
border: 1pt dashed black;
|
||||
white-space: pre;
|
||||
font-size: 8pt;
|
||||
overflow: auto;
|
||||
padding: 1em 0;
|
||||
background : white;
|
||||
color : black;
|
||||
}
|
||||
|
||||
table.listing,
|
||||
table.listing td {
|
||||
border: 1pt solid black;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
a {
|
||||
color: Black !important;
|
||||
background: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
a:link, a:visited {
|
||||
color: #520;
|
||||
background: transparent;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#content a.external.text:after, #content a.external.autonumber:after {
|
||||
/* Expand URLs for printing */
|
||||
content: " (" attr(href) ") ";
|
||||
}
|
||||
|
||||
#globalWrapper {
|
||||
width: 100% !important;
|
||||
min-width: 0 !important;
|
||||
}
|
||||
|
||||
#content {
|
||||
background : white;
|
||||
color : black;
|
||||
}
|
||||
|
||||
#column-content {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
#column-content #content {
|
||||
padding: 1em;
|
||||
margin: 0 !important;
|
||||
}
|
||||
/* MSIE/Win doesn't understand 'inherit' */
|
||||
a, a.external, a.new, a.stub {
|
||||
color: black ! important;
|
||||
text-decoration: none ! important;
|
||||
}
|
||||
|
||||
/* Continue ... */
|
||||
a, a.external, a.new, a.stub {
|
||||
color: inherit ! important;
|
||||
text-decoration: inherit ! important;
|
||||
}
|
||||
|
||||
img { border: none; }
|
||||
img.tex { vertical-align: middle; }
|
||||
span.texhtml { font-family: serif; }
|
||||
|
||||
#siteNotice { display: none; }
|
||||
|
||||
table.gallery {
|
||||
border: 1px solid #cccccc;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
background-color:#ffffff;
|
||||
}
|
||||
|
||||
table.gallery tr {
|
||||
vertical-align:top;
|
||||
}
|
||||
|
||||
div.gallerybox {
|
||||
border: 1px solid #cccccc;
|
||||
margin: 2px;
|
||||
background-color:#f9f9f9;
|
||||
width: 150px;
|
||||
}
|
||||
|
||||
div.gallerybox div.thumb {
|
||||
text-align: center;
|
||||
border: 1px solid #cccccc;
|
||||
margin: 2px;
|
||||
}
|
||||
|
||||
div.gallerytext {
|
||||
font-size: 94%;
|
||||
padding: 2px 4px;
|
||||
}
|
||||
|
||||
/*
|
||||
** Diff rendering
|
||||
*/
|
||||
table.diff { background:white; }
|
||||
td.diff-otitle { background:#ffffff; }
|
||||
td.diff-ntitle { background:#ffffff; }
|
||||
td.diff-addedline {
|
||||
background:#ccffcc;
|
||||
font-size: smaller;
|
||||
border: solid 2px black;
|
||||
}
|
||||
td.diff-deletedline {
|
||||
background:#ffffaa;
|
||||
font-size: smaller;
|
||||
border: dotted 2px black;
|
||||
}
|
||||
td.diff-context {
|
||||
background:#eeeeee;
|
||||
font-size: smaller;
|
||||
}
|
||||
.diffchange {
|
||||
color: silver;
|
||||
font-weight: bold;
|
||||
text-decoration: underline;
|
||||
}
|
|
@ -1,2 +0,0 @@
|
|||
/* generated user stylesheet */
|
||||
a.new, #quickbar a.new { color: #CC2200; }
|
|
@ -1 +0,0 @@
|
|||
/* CSS placed here will affect the print output */
|
|
@ -1 +0,0 @@
|
|||
/** CSS placed here will be applied to all skins */
|
|
@ -1,20 +0,0 @@
|
|||
/** <pre><nowiki> */
|
||||
#footer { text-align: center; border: none; padding: 0; }
|
||||
#p-cactions li.selected { border-color: #708090; padding: 0 0 .2em 0; font-weight: bold; }
|
||||
pre
|
||||
{
|
||||
generic-family: "Envy Code R", "Liberation Mono", Consolas, "Lucida Console", monospace;
|
||||
|
||||
/* border: 1px solid #dbdbdb; */
|
||||
|
||||
border: 1px solid #cfcfcf;
|
||||
background-color: #fefefe;
|
||||
line-height: 1.1em;
|
||||
padding: 0.55em;
|
||||
/*
|
||||
-moz-border-radius-topright: 0.5em;
|
||||
-webkit-border-top-right-radius: 0.5em;
|
||||
border-radius-topright: 0.5em;
|
||||
*/
|
||||
}
|
||||
/** </nowiki></pre> */
|
|
@ -1,320 +0,0 @@
|
|||
/**
|
||||
* CSS in this file is used by *all* skins (that have any CSS at all). Be
|
||||
* careful what you put in here, since what looks good in one skin may not in
|
||||
* another, but don't ignore the poor non-Monobook users either.
|
||||
*/
|
||||
.mw-plusminus-null { color: #aaa; }
|
||||
|
||||
.texvc { direction: ltr; unicode-bidi: embed; }
|
||||
img.tex { vertical-align: middle; }
|
||||
span.texhtml { font-family: serif; }
|
||||
|
||||
/* add a bit of margin space between the preview and the toolbar */
|
||||
/* this replaces the ugly <p><br /></p> we used to insert into the page source */
|
||||
#wikiPreview.ontop { margin-bottom: 1em; }
|
||||
|
||||
/* Stop floats from intruding into edit area in previews */
|
||||
#toolbar, #wpTextbox1 { clear: both; }
|
||||
|
||||
div#mw-js-message {
|
||||
margin: 1em 5%;
|
||||
padding: 0.5em 2.5%;
|
||||
border: solid 1px #ddd;
|
||||
background-color: #fcfcfc;
|
||||
}
|
||||
|
||||
/* Edit section links */
|
||||
.editsection {
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
/**
|
||||
* File histories
|
||||
*/
|
||||
table.filehistory {
|
||||
border:1px solid #ccc;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
|
||||
table.filehistory th,
|
||||
table.filehistory td {
|
||||
padding: 0 0.2em 0 0.2em;
|
||||
vertical-align:top;
|
||||
border:1px solid #ccc;
|
||||
}
|
||||
table.filehistory th {
|
||||
text-align: left;
|
||||
}
|
||||
table.filehistory td.mw-imagepage-filesize,
|
||||
table.filehistory th.mw-imagepage-filesize {
|
||||
white-space:nowrap;
|
||||
}
|
||||
|
||||
table.filehistory td.filehistory-selected {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/*
|
||||
* rev_deleted stuff
|
||||
*/
|
||||
li span.deleted, span.history-deleted {
|
||||
text-decoration: line-through;
|
||||
color: #888;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Forms
|
||||
*/
|
||||
body.ltr td.mw-label { text-align: right; }
|
||||
body.ltr td.mw-input { text-align: left; }
|
||||
body.ltr td.mw-submit { text-align: left; }
|
||||
body.rtl td.mw-label { text-align: left; }
|
||||
body.rtl td.mw-input { text-align: right; }
|
||||
body.rtl td.mw-submit { text-align: right; }
|
||||
|
||||
td.mw-label { vertical-align: top; }
|
||||
td.mw-submit { white-space: nowrap; }
|
||||
|
||||
/**
|
||||
* Image captions
|
||||
*/
|
||||
body.rtl .thumbcaption { text-align:right; }
|
||||
body.rtl .magnify { float:left; }
|
||||
|
||||
body.ltr .thumbcaption { text-align:left; }
|
||||
body.ltr .magnify { float:right; }
|
||||
|
||||
/**
|
||||
* Hidden categories
|
||||
*/
|
||||
.mw-hidden-cats-hidden { display: none; }
|
||||
.catlinks-allhidden { display: none; }
|
||||
|
||||
/* Convenience links to edit block, delete and protect reasons */
|
||||
p.mw-ipb-conveniencelinks, p.mw-protect-editreasons,
|
||||
p.mw-filedelete-editreasons, p.mw-delete-editreasons {
|
||||
font-size: 90%;
|
||||
float: right;
|
||||
}
|
||||
|
||||
/* Search results */
|
||||
div.searchresult {
|
||||
font-size: 95%;
|
||||
width:38em;
|
||||
}
|
||||
.mw-search-results li {
|
||||
padding-bottom: 1em;
|
||||
list-style:none;
|
||||
}
|
||||
.mw-search-result-data {
|
||||
color: green;
|
||||
font-size: 97%;
|
||||
}
|
||||
|
||||
td#mw-search-menu {
|
||||
padding-left:6em;
|
||||
font-size:85%;
|
||||
}
|
||||
|
||||
div#mw-search-interwiki {
|
||||
float: right;
|
||||
width: 18em;
|
||||
border-style: solid;
|
||||
border-color: #AAAAAA;
|
||||
border-width: 1px;
|
||||
margin-top: 2ex;
|
||||
}
|
||||
|
||||
div#mw-search-interwiki li {
|
||||
font-size: 95%;
|
||||
}
|
||||
|
||||
.mw-search-interwiki-more {
|
||||
float: right;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
span.searchalttitle {
|
||||
font-size: 95%;
|
||||
}
|
||||
|
||||
div.searchdidyoumean {
|
||||
font-size: 127%;
|
||||
margin-bottom: 1ex;
|
||||
margin-top: 1ex;
|
||||
/* Note that this color won't affect the link, as desired. */
|
||||
color: #c00;
|
||||
}
|
||||
|
||||
div.searchdidyoumean em {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.searchmatch {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.searchresults {
|
||||
border:1px solid darkblue;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
|
||||
/*
|
||||
* UserRights stuff
|
||||
*/
|
||||
.mw-userrights-disabled {
|
||||
color: #888;
|
||||
}
|
||||
|
||||
table.mw-userrights-groups * td,table.mw-userrights-groups * th {
|
||||
padding-right: 1.5em;
|
||||
}
|
||||
|
||||
/*
|
||||
* OpenSearch ajax suggestions
|
||||
*/
|
||||
.os-suggest {
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 0px;
|
||||
background-color: white;
|
||||
background-color: Window;
|
||||
border-style: solid;
|
||||
border-color: #AAAAAA;
|
||||
border-width: 1px;
|
||||
z-index:99;
|
||||
visibility:hidden;
|
||||
font-size:95%;
|
||||
}
|
||||
|
||||
table.os-suggest-results {
|
||||
font-size: 95%;
|
||||
cursor: pointer;
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
td.os-suggest-result, td.os-suggest-result-hl {
|
||||
white-space: nowrap;
|
||||
background-color: white;
|
||||
background-color: Window;
|
||||
color: black;
|
||||
color: WindowText;
|
||||
padding: 2px;
|
||||
}
|
||||
td.os-suggest-result-hl,
|
||||
td.os-suggest-result-hl-webkit {
|
||||
background-color: #4C59A6;
|
||||
color: white;
|
||||
}
|
||||
td.os-suggest-result-hl {
|
||||
/* System colors are misimplemented in Safari 3.0 and earlier,
|
||||
making highlighted text illegible... */
|
||||
background-color: Highlight;
|
||||
color: HighlightText;
|
||||
}
|
||||
|
||||
.os-suggest-toggle {
|
||||
position: relative;
|
||||
left: 1ex;
|
||||
font-size: 65%;
|
||||
}
|
||||
.os-suggest-toggle-def {
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
font-size: 65%;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
/* Page history styling */
|
||||
/* the auto-generated edit comments */
|
||||
.autocomment { color: gray; }
|
||||
#pagehistory .history-user {
|
||||
margin-left: 0.4em;
|
||||
margin-right: 0.2em;
|
||||
}
|
||||
#pagehistory span.minor { font-weight: bold; }
|
||||
#pagehistory li { border: 1px solid white; }
|
||||
#pagehistory li.selected {
|
||||
background-color: #f9f9f9;
|
||||
border: 1px dashed #aaa;
|
||||
}
|
||||
|
||||
/*
|
||||
* Special:ListGroupRights styling
|
||||
* Special:Statistics styling
|
||||
*/
|
||||
|
||||
table.mw-listgrouprights-table,
|
||||
table.mw-statistics-table {
|
||||
border: 1px solid #ccc;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
table.mw-listgrouprights-table tr {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
table.mw-listgrouprights-table td, table.mw-listgrouprights-table th,
|
||||
table.mw-statistics-table td, table.mw-statistics-table th {
|
||||
padding: 0.5em 0.2em 0.5em 0.2em;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
td.mw-statistics-numbers {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* Special:SpecialPages styling */
|
||||
h4.mw-specialpagesgroup {
|
||||
background-color: #dcdcdc;
|
||||
padding: 2px;
|
||||
margin: .3em 0em 0em 0em;
|
||||
}
|
||||
.mw-specialpagerestricted {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#shared-image-dup, #shared-image-conflict {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Special:EmailUser styling */
|
||||
table.mw-emailuser-table {
|
||||
width: 98%;
|
||||
}
|
||||
td#mw-emailuser-sender, td#mw-emailuser-recipient {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/*
|
||||
* Recreating deleted page warning
|
||||
* Reupload file warning
|
||||
* Page protection warning
|
||||
* incl. log entries for these warnings
|
||||
*/
|
||||
div.mw-warning-with-logexcerpt {
|
||||
padding: 3px;
|
||||
margin-bottom: 3px;
|
||||
border: 2px solid #2F6FAB;
|
||||
}
|
||||
div.mw-warning-with-logexcerpt ul li {
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* (show/hide) revision deletion links */
|
||||
span.mw-revdelundel-link,
|
||||
strong.mw-revdelundel-link {
|
||||
font-family: monospace;
|
||||
font-size: smaller
|
||||
}
|
Before Width: | Height: | Size: 1,002 B |
Before Width: | Height: | Size: 871 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 213 KiB |
BIN
web/xhydra.png
Before Width: | Height: | Size: 213 KiB |
BIN
xhydra.jpg
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 66 KiB |