From d04ba5b349a2ef221bdb97f783a656b87b8de9e7 Mon Sep 17 00:00:00 2001 From: van Hauser Date: Tue, 9 Dec 2014 23:24:15 +0100 Subject: [PATCH] xhydra patch --- CHANGES | 1 + hydra-gtk/src/callbacks.c | 41 +++++++++++++++++++++++++++++++-------- hydra-gtk/src/callbacks.h | 2 ++ hydra-gtk/src/interface.c | 14 +++++++++++-- hydra.c | 2 +- 5 files changed, 49 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index 2ed365c..3c576dd 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,7 @@ Changelog for hydra ------------------- Release 8.2-pre +* Added xhydra gtk patche by Petar Kaleychev to support modules that do not use usernames * ... your patch? diff --git a/hydra-gtk/src/callbacks.c b/hydra-gtk/src/callbacks.c index 6df7214..fc36fb1 100755 --- a/hydra-gtk/src/callbacks.c +++ b/hydra-gtk/src/callbacks.c @@ -128,16 +128,21 @@ int hydra_get_options(char *options[]) { options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); } else { - /* get the username, or username list */ - widget = lookup_widget(GTK_WIDGET(wndMain), "radioUsername1"); + /* disable usernames */ + widget = lookup_widget(GTK_WIDGET(wndMain), "chkDisUser"); if (gtk_toggle_button_get_active((GtkToggleButton *) widget)) { - options[i++] = "-l"; - widget = lookup_widget(GTK_WIDGET(wndMain), "entUsername"); - options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); } else { - options[i++] = "-L"; - widget = lookup_widget(GTK_WIDGET(wndMain), "entUsernameFile"); - options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); + /* get the username, or username list */ + widget = lookup_widget(GTK_WIDGET(wndMain), "radioUsername1"); + if (gtk_toggle_button_get_active((GtkToggleButton *) widget)) { + options[i++] = "-l"; + widget = lookup_widget(GTK_WIDGET(wndMain), "entUsername"); + options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); + } else { + options[i++] = "-L"; + widget = lookup_widget(GTK_WIDGET(wndMain), "entUsernameFile"); + options[i++] = (char *) gtk_entry_get_text((GtkEntry *) widget); + } } /* get the pass, pass list, or generate */ @@ -716,6 +721,26 @@ void on_chkColon_toggled(GtkToggleButton * togglebutton, gpointer user_data) { } } +void on_chkDisUser_toggled(GtkToggleButton * togglebutton, gpointer user_data) { + GtkWidget *radioUsername1, *radioUsername2, *entUsername, *entUsernameFile; + radioUsername1 = lookup_widget(GTK_WIDGET(wndMain), "radioUsername1");; + radioUsername2 = lookup_widget(GTK_WIDGET(wndMain), "radioUsername2"); + entUsername = lookup_widget(GTK_WIDGET(wndMain), "entUsername"); + entUsernameFile = lookup_widget(GTK_WIDGET(wndMain), "entUsernameFile"); + + if (gtk_toggle_button_get_active(togglebutton)) { + gtk_widget_set_sensitive(radioUsername1, FALSE); + gtk_widget_set_sensitive(radioUsername2, FALSE); + gtk_widget_set_sensitive(entUsername, FALSE); + gtk_widget_set_sensitive(entUsernameFile, FALSE); + } else { + gtk_widget_set_sensitive(radioUsername1, TRUE); + gtk_widget_set_sensitive(radioUsername2, TRUE); + gtk_widget_set_sensitive(entUsername, TRUE); + gtk_widget_set_sensitive(entUsernameFile, TRUE); + } +} + void on_btnClear_clicked(GtkButton * button, gpointer user_data) { GtkWidget *output; GtkTextBuffer *outputbuf; diff --git a/hydra-gtk/src/callbacks.h b/hydra-gtk/src/callbacks.h index a37db9e..dd213fa 100755 --- a/hydra-gtk/src/callbacks.h +++ b/hydra-gtk/src/callbacks.h @@ -25,3 +25,5 @@ gboolean on_entColonFile_button_press_event(GtkWidget * widget, GdkEventButton * void on_chkColon_toggled(GtkToggleButton * togglebutton, gpointer user_data); void on_btnClear_clicked(GtkButton * button, gpointer user_data); + +void on_chkDisUser_toggled(GtkToggleButton * togglebutton, gpointer user_data); diff --git a/hydra-gtk/src/interface.c b/hydra-gtk/src/interface.c index 27bdaff..bddffe5 100755 --- a/hydra-gtk/src/interface.c +++ b/hydra-gtk/src/interface.c @@ -68,6 +68,7 @@ GtkWidget *create_wndMain(void) { GtkWidget *entUsernameFile; GtkWidget *entUsername; GtkWidget *chkUsernameLoop; + GtkWidget *chkDisUser; GtkWidget *radioUsername1; GSList *radioUsername1_group = NULL; GtkWidget *radioUsername2; @@ -263,6 +264,7 @@ GtkWidget *create_wndMain(void) { cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "pcanywhere"); cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "postgres"); cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "rdp"); + cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "redis"); cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "rexec"); cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "rlogin"); cmbProtocol_items = g_list_append(cmbProtocol_items, (gpointer) "rsh"); @@ -454,9 +456,15 @@ GtkWidget *create_wndMain(void) { chkUsernameLoop = gtk_check_button_new_with_mnemonic("Loop around users"); gtk_widget_set_name(chkUsernameLoop, "chkUsernameLoop"); gtk_widget_show(chkUsernameLoop); - gtk_table_attach(GTK_TABLE(table2), chkUsernameLoop, 0, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions) (GTK_EXPAND), 0, 0); + gtk_table_attach(GTK_TABLE(table2), chkUsernameLoop, 0, 1, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions) (GTK_EXPAND), 0, 0); gtk_tooltips_set_tip(tooltips, chkUsernameLoop, "Enable this option to loop around users not passwords", NULL); + chkDisUser = gtk_check_button_new_with_mnemonic("Protocol does not require usernames"); + gtk_widget_set_name(chkDisUser, "chkDisUser"); + gtk_widget_show(chkDisUser); + gtk_table_attach(GTK_TABLE (table2), chkDisUser, 1, 2, 2, 3, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions) (GTK_EXPAND), 0, 0); + gtk_tooltips_set_tip(tooltips, chkDisUser, "Protocols like Cisco, Cisco enable, redis, Oracle listener, SNMP, S7-300, VNC etc. are not using usernames", NULL); + label8 = gtk_label_new("Username"); gtk_widget_set_name(label8, "label8"); gtk_widget_show(label8); @@ -536,7 +544,7 @@ GtkWidget *create_wndMain(void) { gtk_widget_set_name(chkColon, "chkColon"); gtk_widget_show(chkColon); gtk_table_attach(GTK_TABLE(table5), chkColon, 0, 1, 0, 1, (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK), (GtkAttachOptions) (GTK_EXPAND), 0, 0); - gtk_tooltips_set_tip(tooltips, chkColon, "\"Enable this option to use a colon file for login/password attempts", NULL); + gtk_tooltips_set_tip(tooltips, chkColon, "Enable this option to use a colon file for login/password attempts", NULL); entColonFile = gtk_entry_new(); gtk_widget_set_name(entColonFile, "entColonFile"); @@ -1030,6 +1038,7 @@ GtkWidget *create_wndMain(void) { g_signal_connect((gpointer) quit1, "button-press-event", G_CALLBACK(on_quit1_activate), NULL); g_signal_connect((gpointer) entTargetFile, "button_press_event", G_CALLBACK(on_entTargetFile_button_press_event), NULL); g_signal_connect((gpointer) entUsernameFile, "button_press_event", G_CALLBACK(on_entUsernameFile_button_press_event), NULL); + g_signal_connect((gpointer) chkDisUser, "toggled", G_CALLBACK (on_chkDisUser_toggled), NULL); g_signal_connect((gpointer) entPassFile, "button_press_event", G_CALLBACK(on_entPassFile_button_press_event), NULL); g_signal_connect((gpointer) chkColon, "toggled", G_CALLBACK(on_chkColon_toggled), NULL); g_signal_connect((gpointer) entColonFile, "button_press_event", G_CALLBACK(on_entColonFile_button_press_event), NULL); @@ -1076,6 +1085,7 @@ GtkWidget *create_wndMain(void) { GLADE_HOOKUP_OBJECT(wndMain, radioUsername1, "radioUsername1"); GLADE_HOOKUP_OBJECT(wndMain, chkUsernameLoop, "chkUsernameLoop"); GLADE_HOOKUP_OBJECT(wndMain, radioUsername2, "radioUsername2"); + GLADE_HOOKUP_OBJECT (wndMain, chkDisUser, "chkDisUser"); GLADE_HOOKUP_OBJECT(wndMain, label8, "label8"); GLADE_HOOKUP_OBJECT(wndMain, frmPass, "frmPass"); GLADE_HOOKUP_OBJECT(wndMain, table3, "table3"); diff --git a/hydra.c b/hydra.c index 12d305f..bb4edbd 100644 --- a/hydra.c +++ b/hydra.c @@ -158,7 +158,7 @@ char *SERVICES = #define RESTOREFILE "./hydra.restore" #define PROGRAM "Hydra" -#define VERSION "v8.1" +#define VERSION "v8.2-dev" #define AUTHOR "van Hauser/THC" #define EMAIL "" #define RESOURCE "http://www.thc.org/thc-hydra"