Merge branch 'master' into v8.8-rain

This commit is contained in:
van Hauser 2019-10-17 12:19:55 +02:00 committed by GitHub
commit 4c0e2c2b45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
62 changed files with 1279 additions and 9162 deletions

View file

@ -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
View file

@ -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

View file

@ -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

View file

@ -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 \

View file

@ -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
View file

@ -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-----
```

View file

@ -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
View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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);

View file

@ -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);
}

View file

@ -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");

View file

@ -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"

View file

@ -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] != '[')

View file

@ -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);
}

View file

@ -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;
}

View file

@ -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
View 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

View file

@ -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
View 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");
}

View file

@ -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);

View file

@ -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) {

File diff suppressed because it is too large Load diff

View file

@ -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");

View file

@ -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;

View file

@ -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();
}

View file

@ -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();

View file

@ -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;

View file

@ -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;

View file

@ -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();

View file

@ -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();

View file

@ -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;
}

View file

@ -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);

View file

@ -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");

View file

@ -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
View file

@ -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
View file

@ -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

View file

@ -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
View file

@ -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
View file

@ -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>

View file

@ -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

View file

@ -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-----
```

View file

@ -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 &amp; 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>

View file

@ -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>

View file

@ -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;
}

View file

@ -1,2 +0,0 @@
/* generated user stylesheet */
a.new, #quickbar a.new { color: #CC2200; }

View file

@ -1 +0,0 @@
/* CSS placed here will affect the print output */

View file

@ -1 +0,0 @@
/** CSS placed here will be applied to all skins */

View file

@ -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> */

File diff suppressed because it is too large Load diff

View file

@ -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
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,002 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Before After
Before After