mirror of
https://github.com/vanhauser-thc/thc-hydra.git
synced 2025-08-19 21:03:52 -07:00
david sadly cant help maintain hydra anymore
This commit is contained in:
parent
63a92b9d05
commit
0a07987392
6 changed files with 666 additions and 670 deletions
2
CHANGES
2
CHANGES
|
@ -2,6 +2,8 @@ Changelog for hydra
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Release 8.1-pre
|
Release 8.1-pre
|
||||||
|
* 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 Strunk18 which adds h/H header options for http-form-*, still buggy though
|
||||||
* Fixed for cisco-enable if an intial Login/Password is used (thanks to joswr1te for reporting)
|
* 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 patch by tux-mind for better MySQL compilation and an Android patches and Makefile. Thanks!
|
||||||
* Added xhydra gtk patch by Petar Kaleychev to support -e r reverse login attempt, thanks!
|
* Added xhydra gtk patch by Petar Kaleychev to support -e r reverse login attempt, thanks!
|
||||||
|
|
2
README
2
README
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
(c) 2001-2014 by van Hauser / THC
|
(c) 2001-2014 by van Hauser / THC
|
||||||
<vh@thc.org> http://www.thc.org
|
<vh@thc.org> http://www.thc.org
|
||||||
co-maintained by David (dot) Maciejak @ gmail (dot) com
|
many modules were written by David (dot) Maciejak @ gmail (dot) com
|
||||||
BFG code by Jan Dlabal <dlabaljan@gmail.com>
|
BFG code by Jan Dlabal <dlabaljan@gmail.com>
|
||||||
|
|
||||||
Licensed under AGPLv3 (see LICENSE file)
|
Licensed under AGPLv3 (see LICENSE file)
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Hydra Form Module
|
Hydra Form Module
|
||||||
|
@ -98,8 +97,7 @@ ptr_header_node initialize(char * ip, unsigned char options, char * miscptr);
|
||||||
* Returns 1 if specified header exists, or 0 otherwise.
|
* Returns 1 if specified header exists, or 0 otherwise.
|
||||||
*/
|
*/
|
||||||
ptr_header_node header_exists(ptr_header_node * ptr_head, char *header_name, char type) {
|
ptr_header_node header_exists(ptr_header_node * ptr_head, char *header_name, char type) {
|
||||||
ptr_header_node cur_ptr = *ptr_head,
|
ptr_header_node cur_ptr = *ptr_head, found_header = NULL;
|
||||||
found_header = NULL;
|
|
||||||
|
|
||||||
for (cur_ptr = *ptr_head; cur_ptr && !found_header; cur_ptr = cur_ptr->next)
|
for (cur_ptr = *ptr_head; cur_ptr && !found_header; cur_ptr = cur_ptr->next)
|
||||||
if (cur_ptr->header && strcmp(cur_ptr->header, header_name) == 0 && cur_ptr->type == type)
|
if (cur_ptr->header && strcmp(cur_ptr->header, header_name) == 0 && cur_ptr->type == type)
|
||||||
|
@ -275,7 +273,6 @@ char * prepare_http_request(char * type, char * path, char * params, char * head
|
||||||
strcat(http_request, "?");
|
strcat(http_request, "?");
|
||||||
strcat(http_request, params);
|
strcat(http_request, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
// append the headers
|
// append the headers
|
||||||
strcat(http_request, " HTTP/1.0\r\n");
|
strcat(http_request, " HTTP/1.0\r\n");
|
||||||
strcat(http_request, headers);
|
strcat(http_request, headers);
|
||||||
|
@ -440,7 +437,6 @@ void hydra_reconnect(int s, char *ip, int port, unsigned char options) {
|
||||||
|
|
||||||
int start_http_form(int s, char *ip, int port, unsigned char options, char *miscptr, FILE * fp, char *type, ptr_header_node ptr_head) {
|
int start_http_form(int s, char *ip, int port, unsigned char options, char *miscptr, FILE * fp, char *type, ptr_header_node ptr_head) {
|
||||||
char *empty = "";
|
char *empty = "";
|
||||||
char * buffer;
|
|
||||||
char *login, *pass, clogin[256], cpass[256];
|
char *login, *pass, clogin[256], cpass[256];
|
||||||
char header[8096], *upd3variables;
|
char header[8096], *upd3variables;
|
||||||
char *http_request;
|
char *http_request;
|
||||||
|
@ -515,7 +511,6 @@ int start_http_form(int s, char *ip, int port, unsigned char options, char *misc
|
||||||
add_header(&ptr_head, "Cookie", cookie, HEADER_TYPE_DEFAULT);
|
add_header(&ptr_head, "Cookie", cookie, HEADER_TYPE_DEFAULT);
|
||||||
hydra_reconnect(s, ip, port, options);
|
hydra_reconnect(s, ip, port, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// now prepare for the "real" request
|
// now prepare for the "real" request
|
||||||
if (strcmp(type, "POST") == 0) {
|
if (strcmp(type, "POST") == 0) {
|
||||||
memset(proxy_string, 0, sizeof(proxy_string));
|
memset(proxy_string, 0, sizeof(proxy_string));
|
||||||
|
@ -551,7 +546,6 @@ int start_http_form(int s, char *ip, int port, unsigned char options, char *misc
|
||||||
}
|
}
|
||||||
hydra_reconnect(s, ip, port, options);
|
hydra_reconnect(s, ip, port, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// now prepare for the "real" request
|
// now prepare for the "real" request
|
||||||
if (strcmp(type, "POST") == 0) {
|
if (strcmp(type, "POST") == 0) {
|
||||||
snprintf(content_length, MAX_CONTENT_LENGTH - 1, "%d", (int) strlen(upd3variables));
|
snprintf(content_length, MAX_CONTENT_LENGTH - 1, "%d", (int) strlen(upd3variables));
|
||||||
|
@ -796,6 +790,7 @@ void service_http_form(char *ip, int sp, unsigned char options, char *miscptr, F
|
||||||
|
|
||||||
void service_http_get_form(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port) {
|
void service_http_get_form(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port) {
|
||||||
ptr_header_node ptr_head = initialize(ip, options, miscptr);
|
ptr_header_node ptr_head = initialize(ip, options, miscptr);
|
||||||
|
|
||||||
if (ptr_head)
|
if (ptr_head)
|
||||||
service_http_form(ip, sp, options, miscptr, fp, port, "GET", &ptr_head);
|
service_http_form(ip, sp, options, miscptr, fp, port, "GET", &ptr_head);
|
||||||
else {
|
else {
|
||||||
|
@ -806,6 +801,7 @@ void service_http_get_form(char *ip, int sp, unsigned char options, char *miscpt
|
||||||
|
|
||||||
void service_http_post_form(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port) {
|
void service_http_post_form(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port) {
|
||||||
ptr_header_node ptr_head = initialize(ip, options, miscptr);
|
ptr_header_node ptr_head = initialize(ip, options, miscptr);
|
||||||
|
|
||||||
if (ptr_head)
|
if (ptr_head)
|
||||||
service_http_form(ip, sp, options, miscptr, fp, port, "POST", &ptr_head);
|
service_http_form(ip, sp, options, miscptr, fp, port, "POST", &ptr_head);
|
||||||
else {
|
else {
|
||||||
|
@ -830,8 +826,7 @@ int service_http_form_init(char *ip, int sp, unsigned char options, char *miscpt
|
||||||
|
|
||||||
ptr_header_node initialize(char *ip, unsigned char options, char *miscptr) {
|
ptr_header_node initialize(char *ip, unsigned char options, char *miscptr) {
|
||||||
ptr_header_node ptr_head = NULL;
|
ptr_header_node ptr_head = NULL;
|
||||||
char *ptr, *ptr2;
|
char *ptr, *ptr2, *proxy_string;
|
||||||
char *proxy_string;
|
|
||||||
|
|
||||||
if (webtarget != NULL && (webtarget = strstr(miscptr, "://")) != NULL) {
|
if (webtarget != NULL && (webtarget = strstr(miscptr, "://")) != NULL) {
|
||||||
webtarget += strlen("://");
|
webtarget += strlen("://");
|
||||||
|
@ -922,7 +917,6 @@ ptr_header_node initialize(char * ip, unsigned char options, char * miscptr) {
|
||||||
success_cond = 0;
|
success_cond = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *header = NULL, *value = NULL;
|
|
||||||
while ( /*(optional1 = strtok(NULL, ":")) != NULL */ *optional1 != 0) {
|
while ( /*(optional1 = strtok(NULL, ":")) != NULL */ *optional1 != 0) {
|
||||||
switch (optional1[0]) {
|
switch (optional1[0]) {
|
||||||
case 'c': // fall through
|
case 'c': // fall through
|
||||||
|
|
2
hydra.1
2
hydra.1
|
@ -113,7 +113,7 @@ Show summary of options.
|
||||||
.br
|
.br
|
||||||
The programs are documented fully by van Hauser <vh@thc.org>
|
The programs are documented fully by van Hauser <vh@thc.org>
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
hydra was written by van Hauser / THC <vh@thc.org> and is co-maintained by David Maciejak <david.maciejak@gmail.com>.
|
hydra was written by van Hauser / THC <vh@thc.org>
|
||||||
|
|
||||||
.PP
|
.PP
|
||||||
This manual page was written by Daniel Echeverry <epsilon77@gmail.com>,
|
This manual page was written by Daniel Echeverry <epsilon77@gmail.com>,
|
||||||
|
|
60
hydra.c
60
hydra.c
|
@ -48,6 +48,7 @@ extern void service_xmpp(char *target, char *ip, int sp, unsigned char options,
|
||||||
extern void service_irc(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
extern void service_irc(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
||||||
extern void service_http_proxy_urlenum(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
extern void service_http_proxy_urlenum(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
||||||
extern void service_s7_300(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
extern void service_s7_300(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
||||||
|
|
||||||
// ADD NEW SERVICES HERE
|
// ADD NEW SERVICES HERE
|
||||||
|
|
||||||
#ifdef HAVE_MATH_H
|
#ifdef HAVE_MATH_H
|
||||||
|
@ -133,11 +134,13 @@ extern int service_vmauthd_init(char *ip, int sp, unsigned char options, char *m
|
||||||
extern int service_vnc_init(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
extern int service_vnc_init(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
||||||
extern int service_xmpp_init(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
extern int service_xmpp_init(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
||||||
extern int service_s7_300_init(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
extern int service_s7_300_init(char *ip, int sp, unsigned char options, char *miscptr, FILE * fp, int port);
|
||||||
|
|
||||||
// ADD NEW SERVICES HERE
|
// ADD NEW SERVICES HERE
|
||||||
|
|
||||||
|
|
||||||
// ADD NEW SERVICES HERE
|
// ADD NEW SERVICES HERE
|
||||||
char *SERVICES = "asterisk afp cisco cisco-enable cvs firebird ftp ftps http[s]-{head|get} 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 rdp redis rexec rlogin rsh s7-300 sapr3 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp";
|
char *SERVICES =
|
||||||
|
"asterisk afp cisco cisco-enable cvs firebird ftp ftps http[s]-{head|get} 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 rdp redis rexec rlogin rsh s7-300 sapr3 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp";
|
||||||
|
|
||||||
#define MAXBUF 520
|
#define MAXBUF 520
|
||||||
#define MAXLINESIZE ( ( MAXBUF / 2 ) - 4 )
|
#define MAXLINESIZE ( ( MAXBUF / 2 ) - 4 )
|
||||||
|
@ -158,8 +161,6 @@ char *SERVICES = "asterisk afp cisco cisco-enable cvs firebird ftp ftps http[s]-
|
||||||
#define VERSION "v8.1-dev"
|
#define VERSION "v8.1-dev"
|
||||||
#define AUTHOR "van Hauser/THC"
|
#define AUTHOR "van Hauser/THC"
|
||||||
#define EMAIL "<vh@thc.org>"
|
#define EMAIL "<vh@thc.org>"
|
||||||
#define AUTHOR2 "David Maciejak"
|
|
||||||
#define EMAIL2 "<david.maciejak@gmail.com>"
|
|
||||||
#define RESOURCE "http://www.thc.org/thc-hydra"
|
#define RESOURCE "http://www.thc.org/thc-hydra"
|
||||||
|
|
||||||
extern char *hydra_strcasestr(const char *haystack, const char *needle);
|
extern char *hydra_strcasestr(const char *haystack, const char *needle);
|
||||||
|
@ -264,6 +265,7 @@ typedef struct {
|
||||||
|
|
||||||
// external vars
|
// external vars
|
||||||
extern char HYDRA_EXIT[5];
|
extern char HYDRA_EXIT[5];
|
||||||
|
|
||||||
#if !defined(ANDROID) && !defined(__BIONIC__)
|
#if !defined(ANDROID) && !defined(__BIONIC__)
|
||||||
extern int errno;
|
extern int errno;
|
||||||
#endif
|
#endif
|
||||||
|
@ -353,9 +355,7 @@ void help(int ext) {
|
||||||
printf(" OPT some service modules support additional input (-U for module help)\n");
|
printf(" OPT some service modules support additional input (-U for module help)\n");
|
||||||
|
|
||||||
printf("\nSupported services: %s\n", SERVICES);
|
printf("\nSupported services: %s\n", SERVICES);
|
||||||
printf
|
printf("\n%s is a tool to guess/crack valid login/password pairs. Licensed under AGPL\nv3.0. The newest version is always available at %s\n", PROGRAM, RESOURCE);
|
||||||
("\n%s is a tool to guess/crack valid login/password pairs. Licensed under AGPL\nv3.0. The newest version is always available at %s\n",
|
|
||||||
PROGRAM, RESOURCE);
|
|
||||||
printf("Don't use in military or secret service organizations, or for illegal purposes.\n");
|
printf("Don't use in military or secret service organizations, or for illegal purposes.\n");
|
||||||
if (ext && strlen(unsupported) > 0) {
|
if (ext && strlen(unsupported) > 0) {
|
||||||
if (unsupported[strlen(unsupported) - 1] == ' ')
|
if (unsupported[strlen(unsupported) - 1] == ' ')
|
||||||
|
@ -565,15 +565,11 @@ void module_usage() {
|
||||||
" C=/page/uri to define a different page to gather initial cookies from\n"
|
" 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"
|
" (h|H)=My-Hdr: foo to send a user defined HTTP header with each request\n"
|
||||||
" ^USER^ and ^PASS^ can also be put into these headers!\n"
|
" ^USER^ and ^PASS^ can also be put into these headers!\n"
|
||||||
" Note that 'h' and 'H' are not the same. The former will add the user-defined header at the end"
|
" Note: 'h' will add the user-defined header at the end\n"
|
||||||
" regardless it's already being sent by Hydra or not. The latter will replace the value of that header"
|
" regardless it's already being sent by Hydra or not.\n"
|
||||||
" if it exists, by the one supplied by the user, or add the header at the end if it does not exist."
|
" 'H' will replace the value of that header if it exists, by the\n"
|
||||||
" For example: 'h=User-Agent: Googlebot' would send two 'User-Agent' headers, the one supplied by default"
|
" one supplied by the user, or add the header at the end\n"
|
||||||
" ('Mozilla/5.0 (Hydra)'), and the one supplied by the user ('Googlebot'). 'H=User-Agent: Googlebot' would"
|
"\nExamples:\n"
|
||||||
" only send a single 'User-Agent' header with the value supplied, effectively replacing the default user agent."
|
|
||||||
" This is useful to pass hidden CSRF token fields that are tied to a previously issued cookie and are unique"
|
|
||||||
" for each session. Various C/H/h parameters can be specified separated by colons and optionally intermixed."
|
|
||||||
"Examples:\n"
|
|
||||||
" \"/login.php:user=^USER^&pass=^PASS^:incorrect\"\n"
|
" \"/login.php:user=^USER^&pass=^PASS^:incorrect\"\n"
|
||||||
" \"/login.php:user=^USER^&pass=^PASS^&colon=colon\\:escape:S=authlog=.*success\"\n"
|
" \"/login.php:user=^USER^&pass=^PASS^&colon=colon\\:escape:S=authlog=.*success\"\n"
|
||||||
" \"/login.php:user=^USER^&pass=^PASS^&mid=123:authlog=.*failed\"\n"
|
" \"/login.php:user=^USER^&pass=^PASS^&mid=123:authlog=.*failed\"\n"
|
||||||
|
@ -1339,7 +1335,8 @@ int hydra_spawn_head(int head_no, int target_no) {
|
||||||
service_sip(hydra_targets[target_no]->ip, hydra_heads[head_no]->sp[1], options, hydra_options.miscptr, hydra_brains.ofp, hydra_targets[target_no]->port);
|
service_sip(hydra_targets[target_no]->ip, hydra_heads[head_no]->sp[1], options, hydra_options.miscptr, hydra_brains.ofp, hydra_targets[target_no]->port);
|
||||||
#endif
|
#endif
|
||||||
if (strcmp(hydra_options.service, "xmpp") == 0)
|
if (strcmp(hydra_options.service, "xmpp") == 0)
|
||||||
service_xmpp(hydra_targets[target_no]->target, hydra_targets[target_no]->ip, hydra_heads[head_no]->sp[1], options, hydra_options.miscptr, hydra_brains.ofp, hydra_targets[target_no]->port);
|
service_xmpp(hydra_targets[target_no]->target, hydra_targets[target_no]->ip, hydra_heads[head_no]->sp[1], options, hydra_options.miscptr, hydra_brains.ofp,
|
||||||
|
hydra_targets[target_no]->port);
|
||||||
if (strcmp(hydra_options.service, "irc") == 0)
|
if (strcmp(hydra_options.service, "irc") == 0)
|
||||||
service_irc(hydra_targets[target_no]->ip, hydra_heads[head_no]->sp[1], options, hydra_options.miscptr, hydra_brains.ofp, hydra_targets[target_no]->port);
|
service_irc(hydra_targets[target_no]->ip, hydra_heads[head_no]->sp[1], options, hydra_options.miscptr, hydra_brains.ofp, hydra_targets[target_no]->port);
|
||||||
#ifdef LIBOPENSSL
|
#ifdef LIBOPENSSL
|
||||||
|
@ -1516,14 +1513,14 @@ void hydra_increase_fail_count(int target_no, int head_no) {
|
||||||
printf("[DEBUG] hydra_increase_fail_count: %d >= %d => disable\n", hydra_targets[target_no]->fail_count,
|
printf("[DEBUG] hydra_increase_fail_count: %d >= %d => disable\n", hydra_targets[target_no]->fail_count,
|
||||||
MAXFAIL + (hydra_options.tasks <= 4 && hydra_targets[target_no]->ok ? 6 - hydra_options.tasks : 1) + (hydra_options.tasks - hydra_targets[target_no]->failed < 5
|
MAXFAIL + (hydra_options.tasks <= 4 && hydra_targets[target_no]->ok ? 6 - hydra_options.tasks : 1) + (hydra_options.tasks - hydra_targets[target_no]->failed < 5
|
||||||
&& hydra_targets[target_no]->ok ? 6 - (hydra_options.tasks -
|
&& hydra_targets[target_no]->ok ? 6 - (hydra_options.tasks -
|
||||||
hydra_targets[target_no]->
|
hydra_targets
|
||||||
failed) : 1) +
|
[target_no]->failed) : 1)
|
||||||
(hydra_targets[target_no]->ok ? 2 : -2));
|
+ (hydra_targets[target_no]->ok ? 2 : -2));
|
||||||
if (hydra_targets[target_no]->fail_count >=
|
if (hydra_targets[target_no]->fail_count >=
|
||||||
MAXFAIL + (hydra_options.tasks <= 4 && hydra_targets[target_no]->ok ? 6 - hydra_options.tasks : 1) + (hydra_options.tasks - hydra_targets[target_no]->failed < 5
|
MAXFAIL + (hydra_options.tasks <= 4 && hydra_targets[target_no]->ok ? 6 - hydra_options.tasks : 1) + (hydra_options.tasks - hydra_targets[target_no]->failed < 5
|
||||||
&& hydra_targets[target_no]->ok ? 6 - (hydra_options.tasks -
|
&& hydra_targets[target_no]->ok ? 6 - (hydra_options.tasks -
|
||||||
hydra_targets[target_no]->
|
hydra_targets
|
||||||
failed) : 1) +
|
[target_no]->failed) : 1) +
|
||||||
(hydra_targets[target_no]->ok ? 2 : -2)
|
(hydra_targets[target_no]->ok ? 2 : -2)
|
||||||
) {
|
) {
|
||||||
k = 0;
|
k = 0;
|
||||||
|
@ -1943,8 +1940,8 @@ int hydra_send_next_pair(int target_no, int head_no) {
|
||||||
}
|
}
|
||||||
if (debug || hydra_options.showAttempt) {
|
if (debug || hydra_options.showAttempt) {
|
||||||
printf("[%sATTEMPT] target %s - login \"%s\" - pass \"%s\" - %lu of %lu [child %d]\n",
|
printf("[%sATTEMPT] target %s - login \"%s\" - pass \"%s\" - %lu of %lu [child %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]->redo_state ? "REDO-" : snp_is_redo ? "RE-" : "", hydra_targets[target_no]->target, hydra_heads[head_no]->current_login_ptr,
|
||||||
hydra_targets[target_no]->sent, hydra_brains.todo + hydra_targets[target_no]->redo, head_no);
|
hydra_heads[head_no]->current_pass_ptr, hydra_targets[target_no]->sent, hydra_brains.todo + hydra_targets[target_no]->redo, head_no);
|
||||||
}
|
}
|
||||||
loop_cnt = 0;
|
loop_cnt = 0;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2045,7 +2042,7 @@ int main(int argc, char *argv[]) {
|
||||||
struct sockaddr_in6 *ipv6 = NULL;
|
struct sockaddr_in6 *ipv6 = NULL;
|
||||||
struct sockaddr_in *ipv4 = NULL;
|
struct sockaddr_in *ipv4 = NULL;
|
||||||
|
|
||||||
printf("%s %s (c) 2014 by %s & %s - Please do not use in military or secret service organizations, or for illegal purposes.\n\n", PROGRAM, VERSION, AUTHOR, AUTHOR2);
|
printf("%s %s (c) 2014 by %s - Please do not use in military or secret service organizations, or for illegal purposes.\n\n", PROGRAM, VERSION, AUTHOR);
|
||||||
#ifndef LIBPOSTGRES
|
#ifndef LIBPOSTGRES
|
||||||
SERVICES = hydra_string_replace(SERVICES, "postgres ", "");
|
SERVICES = hydra_string_replace(SERVICES, "postgres ", "");
|
||||||
strcat(unsupported, "postgres ");
|
strcat(unsupported, "postgres ");
|
||||||
|
@ -2929,7 +2926,8 @@ int main(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hydra_options.ssl == 1 && strncmp(hydra_options.service, "http-", 5 == 0) && hydra_options.port == 443)
|
if (hydra_options.ssl == 1 && strncmp(hydra_options.service, "http-", 5 == 0) && hydra_options.port == 443)
|
||||||
fprintf(stderr, "[WARNING] you specified port 443 for attacking a http service, however did not specify the -S ssl switch nor used https-..., therefore using plain HTTP\n");
|
fprintf(stderr,
|
||||||
|
"[WARNING] you specified port 443 for attacking a http service, however did not specify the -S ssl switch nor used https-..., therefore using plain HTTP\n");
|
||||||
|
|
||||||
if (hydra_options.loop_mode && hydra_options.colonfile != NULL)
|
if (hydra_options.loop_mode && hydra_options.colonfile != NULL)
|
||||||
bail("The loop mode option (-u) works with all modes - except colon files (-C)\n");
|
bail("The loop mode option (-u) works with all modes - except colon files (-C)\n");
|
||||||
|
@ -3159,6 +3157,7 @@ int main(int argc, char *argv[]) {
|
||||||
unsigned int four_from, four_to, addr_cur, addr_cur2, k, l;
|
unsigned int four_from, four_to, addr_cur, addr_cur2, k, l;
|
||||||
in_addr_t addr4;
|
in_addr_t addr4;
|
||||||
struct sockaddr_in target;
|
struct sockaddr_in target;
|
||||||
|
|
||||||
hydra_options.cidr = 1;
|
hydra_options.cidr = 1;
|
||||||
do_retry = 0;
|
do_retry = 0;
|
||||||
if ((tmpptr = malloc(strlen(hydra_options.server) + 1)) == NULL) {
|
if ((tmpptr = malloc(strlen(hydra_options.server) + 1)) == NULL) {
|
||||||
|
@ -3364,12 +3363,13 @@ int main(int argc, char *argv[]) {
|
||||||
if (hydra_options.ssl)
|
if (hydra_options.ssl)
|
||||||
options = options | OPTION_SSL;
|
options = options | OPTION_SSL;
|
||||||
if (hydra_options.colonfile != NULL)
|
if (hydra_options.colonfile != NULL)
|
||||||
printf("[DATA] max %d task%s per %d server%s, overall %d tasks, %lu login tr%s, ~%lu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s", hydra_brains.targets,
|
printf("[DATA] max %d task%s per %d server%s, overall %d tasks, %lu login tr%s, ~%lu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s",
|
||||||
hydra_brains.targets == 1 ? "" : "s", hydra_options.max_use, hydra_brains.todo, hydra_brains.todo == 1 ? "y" : "ies", math2, math2 == 1 ? "y" : "ies");
|
hydra_brains.targets, hydra_brains.targets == 1 ? "" : "s", hydra_options.max_use, hydra_brains.todo, hydra_brains.todo == 1 ? "y" : "ies", math2,
|
||||||
|
math2 == 1 ? "y" : "ies");
|
||||||
else
|
else
|
||||||
printf("[DATA] max %d task%s per %d server%s, overall %d tasks, %lu login tr%s (l:%lu/p:%lu), ~%lu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s", hydra_brains.targets,
|
printf("[DATA] max %d task%s per %d server%s, overall %d tasks, %lu login tr%s (l:%lu/p:%lu), ~%lu tr%s per task\n", hydra_options.tasks, hydra_options.tasks == 1 ? "" : "s",
|
||||||
hydra_brains.targets == 1 ? "" : "s", hydra_options.max_use, hydra_brains.todo, hydra_brains.todo == 1 ? "y" : "ies", (unsigned long int) hydra_brains.countlogin,
|
hydra_brains.targets, hydra_brains.targets == 1 ? "" : "s", hydra_options.max_use, hydra_brains.todo, hydra_brains.todo == 1 ? "y" : "ies",
|
||||||
(unsigned long int) hydra_brains.countpass, math2, math2 == 1 ? "y" : "ies");
|
(unsigned long int) hydra_brains.countlogin, (unsigned long int) hydra_brains.countpass, math2, math2 == 1 ? "y" : "ies");
|
||||||
|
|
||||||
printf("[DATA] attacking service %s on port %d\n", hydra_options.service, port);
|
printf("[DATA] attacking service %s on port %d\n", hydra_options.service, port);
|
||||||
|
|
||||||
|
|
2
xhydra.1
2
xhydra.1
|
@ -23,7 +23,7 @@ Currently this tool supports:
|
||||||
.BR pw-inspector (1).
|
.BR pw-inspector (1).
|
||||||
.br
|
.br
|
||||||
.SH AUTHOR
|
.SH AUTHOR
|
||||||
hydra was written by van Hauser <vh@thc.org> and co-maintained by David Maciejak <david.maciejak@gmail.com>.
|
hydra was written by van Hauser <vh@thc.org>
|
||||||
|
|
||||||
.PP
|
.PP
|
||||||
This manual page was written by Daniel Echeverry <epsilon77@gmail.com>,
|
This manual page was written by Daniel Echeverry <epsilon77@gmail.com>,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue