From 5222eb0b33bfdd75374b14abda7093bd7a4e3a2d Mon Sep 17 00:00:00 2001 From: vanhauser-thc Date: Sat, 10 May 2014 23:51:24 +0200 Subject: [PATCH] added patch to xhydra for -x option support --- CHANGES | 3 ++- hydra-gtk/src/callbacks.c | 13 +++++++++++-- hydra-gtk/src/interface.c | 25 ++++++++++++++++++++++++- hydra.c | 3 ++- 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 07ffd74..0a903f3 100644 --- a/CHANGES +++ b/CHANGES @@ -5,7 +5,8 @@ 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 for submitting) +* 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 , you can now specify a port for each entry (use "target:port" per line) * Verified that hydra compiles cleanly on QNX / Blackberry 10 :-) diff --git a/hydra-gtk/src/callbacks.c b/hydra-gtk/src/callbacks.c index d8ecfa0..bc19a5c 100755 --- a/hydra-gtk/src/callbacks.c +++ b/hydra-gtk/src/callbacks.c @@ -128,16 +128,25 @@ int hydra_get_options(char *options[]) { options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); } - /* get the pass, or pass list */ + /* get the pass, pass list, or generate */ + /* The "generate" button was implemented by Petar Kaleychev */ widget = lookup_widget(GTK_WIDGET(wndMain), "radioPass1"); if (gtk_toggle_button_get_active((GtkToggleButton *) widget)) { options[i++] = "-p"; widget = lookup_widget(GTK_WIDGET(wndMain), "entPass"); options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); - } else { + } + widget = lookup_widget(GTK_WIDGET(wndMain), "radioPass2"); + if (gtk_toggle_button_get_active((GtkToggleButton *) widget)) { options[i++] = "-P"; widget = lookup_widget(GTK_WIDGET(wndMain), "entPassFile"); options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); + } + widget = lookup_widget(GTK_WIDGET(wndMain), "radioGenerate"); + if (gtk_toggle_button_get_active((GtkToggleButton *) widget)) { + options[i++] = "-x"; + widget = lookup_widget(GTK_WIDGET(wndMain), "entGeneration"); + options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); } } diff --git a/hydra-gtk/src/interface.c b/hydra-gtk/src/interface.c index 912ffaa..6fdebc5 100755 --- a/hydra-gtk/src/interface.c +++ b/hydra-gtk/src/interface.c @@ -9,7 +9,9 @@ #include #include +#ifdef HAVE_UNISTD_H #include +#endif #include #include @@ -75,6 +77,8 @@ GtkWidget *create_wndMain(void) { GtkWidget *radioPass1; GSList *radioPass1_group = NULL; GtkWidget *radioPass2; + GtkWidget *radioGenerate; + GtkWidget *entGeneration; GtkWidget *labelpass; GtkWidget *frame8; GtkWidget *table5; @@ -442,7 +446,7 @@ GtkWidget *create_wndMain(void) { gtk_widget_show(frmPass); gtk_box_pack_start(GTK_BOX(vbox2), frmPass, TRUE, TRUE, 0); - table3 = gtk_table_new(2, 2, FALSE); + table3 = gtk_table_new (3, 2, FALSE); gtk_widget_set_name(table3, "table3"); gtk_widget_show(table3); gtk_container_add(GTK_CONTAINER(frmPass), table3); @@ -474,6 +478,23 @@ GtkWidget *create_wndMain(void) { gtk_table_attach(GTK_TABLE(table3), radioPass2, 0, 1, 1, 2, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), 0, 0); gtk_radio_button_set_group(GTK_RADIO_BUTTON(radioPass2), radioPass1_group); radioPass1_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radioPass2)); + radioGenerate = gtk_radio_button_new_with_mnemonic (NULL, "Generate"); + gtk_widget_set_name (radioGenerate, "radioGenerate"); + gtk_widget_show (radioGenerate); + gtk_table_attach (GTK_TABLE (table3), radioGenerate, 0, 1, 2, 3, + (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), + (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), 0, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (radioGenerate), radioPass1_group); + radioPass1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radioGenerate)); + + entGeneration = gtk_entry_new (); + gtk_widget_set_name (entGeneration, "entGeneration"); + gtk_widget_show (entGeneration); + gtk_table_attach (GTK_TABLE (table3), entGeneration, 1, 2, 2, 3, + (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), + (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), 0, 0); + gtk_tooltips_set_tip (tooltips, entGeneration, "Generate passwords", NULL); + gtk_entry_set_text (GTK_ENTRY (entGeneration), "1:1:a"); labelpass = gtk_label_new("Password"); gtk_widget_set_name(labelpass, "labelpass"); @@ -1017,6 +1038,8 @@ GtkWidget *create_wndMain(void) { GLADE_HOOKUP_OBJECT(wndMain, entPass, "entPass"); GLADE_HOOKUP_OBJECT(wndMain, radioPass1, "radioPass1"); GLADE_HOOKUP_OBJECT(wndMain, radioPass2, "radioPass2"); + GLADE_HOOKUP_OBJECT(wndMain, radioGenerate, "radioGenerate"); + GLADE_HOOKUP_OBJECT(wndMain, entGeneration, "entGeneration"); GLADE_HOOKUP_OBJECT(wndMain, labelpass, "labelpass"); GLADE_HOOKUP_OBJECT(wndMain, frame8, "frame8"); GLADE_HOOKUP_OBJECT(wndMain, table5, "table5"); diff --git a/hydra.c b/hydra.c index 49cd3e3..33c4047 100644 --- a/hydra.c +++ b/hydra.c @@ -371,7 +371,8 @@ void help(int ext) { if (ext) { printf(" hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN\n"); printf(" hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5\n"); - printf(" hydra -l admin -p password ftp://[192.168.0.0/24]\n"); + printf(" hydra -l admin -p password ftp://[192.168.0.0/24]/\n"); + printf(" hydra -L logins.txt -P pws.txt -M targets.txt ssh\n"); } exit(-1); }