summaryrefslogtreecommitdiff
path: root/network/hydra/patches
diff options
context:
space:
mode:
Diffstat (limited to 'network/hydra/patches')
-rw-r--r--network/hydra/patches/hydra-5.4-Makefile_am.patch13
-rw-r--r--network/hydra/patches/hydra-5.4-configure_fixups.patch127
-rw-r--r--network/hydra/patches/hydra-5.4-libssh-0.4.patch187
-rw-r--r--network/hydra/patches/hydra-http-form.patch18
4 files changed, 345 insertions, 0 deletions
diff --git a/network/hydra/patches/hydra-5.4-Makefile_am.patch b/network/hydra/patches/hydra-5.4-Makefile_am.patch
new file mode 100644
index 0000000000..3739d1fb20
--- /dev/null
+++ b/network/hydra/patches/hydra-5.4-Makefile_am.patch
@@ -0,0 +1,13 @@
+diff -Nur hydra-5.4-src.orig/Makefile.am hydra-5.4-src/Makefile.am
+--- hydra-5.4-src.orig/Makefile.am 2006-05-05 09:10:44.000000000 -0500
++++ hydra-5.4-src/Makefile.am 2009-07-05 11:23:02.983188212 -0500
+@@ -2,7 +2,8 @@
+ # Makefile for Hydra - (c) 2001-2006 by van Hauser / THC <vh@thc.org>
+ #
+
+-OPTS=-I. -Wall -O2
++EXTRA_CFLAGS=
++OPTS=-I. -Wall $(EXTRA_CFLAGS)
+ # -ggdb -pedantic
+ LIBS=-lm
+ DIR=/bin
diff --git a/network/hydra/patches/hydra-5.4-configure_fixups.patch b/network/hydra/patches/hydra-5.4-configure_fixups.patch
new file mode 100644
index 0000000000..a622d7618b
--- /dev/null
+++ b/network/hydra/patches/hydra-5.4-configure_fixups.patch
@@ -0,0 +1,127 @@
+diff -Nur hydra-5.4-src.orig/configure hydra-5.4-src/configure
+--- hydra-5.4-src.orig/configure 2006-01-20 07:44:15.000000000 -0600
++++ hydra-5.4-src/configure 2009-07-05 21:21:59.288865180 -0500
+@@ -35,11 +35,12 @@
+ MANDIR=""
+ XHYDRA_SUPPORT=""
+ LIBDIRS=`cat /etc/ld.so.conf 2> /dev/null`
++EXTRA_LIBDIRS?=
+ STRIP="strip"
+ echo
+
+ echo "Checking for openssl (libssl/ssl.h) ..."
+-for i in $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib \
++for i in $EXTRA_LIBDIRS $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib \
+ /*ssl /usr/*ssl /opt/*ssl /usr/local/*ssl /opt/local/*ssl \
+ /*ssl/lib /usr/*ssl/lib /opt/*ssl/lib /usr/local/*ssl/lib /opt/local/*ssl/lib .
+ do
+@@ -97,7 +98,7 @@
+ fi
+
+ echo "Checking for Postgres (libpq) ..."
+-for i in $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
++for i in $EXTRA_LIBDIRS $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
+ do
+ if [ "X" = "X$POSTGRES_PATH" ]; then
+ if [ -f "$i/libpq.so" -o -f "$i/libpq.dylib" ]; then
+@@ -118,11 +119,11 @@
+ echo " ... NOT found, module postgres disabled"
+ fi
+
+-echo "Checking for SVN (ibsvn_client-1 libapr-0.so libaprutil-0.so) ..."
+-for i in $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
++echo "Checking for SVN (ibsvn_client-1 libapr-1.so libaprutil-1.so) ..."
++for i in $EXTRA_LIBDIRS $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
+ do
+ if [ "X" = "X$SVN_PATH" ]; then
+- if [ -f "$i/libsvn_client-1.so" ]&&[ -f "$i/libapr-0.so" ]&&[ -f "$i/libaprutil-0.so" ]; then
++ if [ -f "$i/libsvn_client-1.so" ]&&[ -f "$i/libapr-1.so" ]&&[ -f "$i/libaprutil-1.so" ]; then
+ SVN_PATH="$i"
+ fi
+ fi
+@@ -143,7 +144,7 @@
+ fi
+
+ echo "Checking for SAP/R3 (librfc/saprfc.h) ..."
+-for i in $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
++for i in $EXTRA_LIBDIRS $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
+ do
+ if [ "X" = "X$SAPR3_PATH" ]; then
+ if [ -f "$i/librfc.a" -o -f "$i/librfc.dylib" -o "$i/librfc32.dll" ]; then
+@@ -183,7 +184,7 @@
+ fi
+
+ echo "Checking for libssh (libssh/libssh.h) ..."
+-for i in $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
++for i in $EXTRA_LIBDIRS $LIBDIRS /lib /usr/lib /usr/local/lib /opt/local/lib .
+ do
+ if [ "X" = "X$SSH_PATH" ]; then
+ if [ -f "$i/libssh.so" -o -f "$i/libssh.dylib" ]; then
+@@ -202,8 +203,8 @@
+ fi
+ fi
+ if [ "X" = "X$APR_IPATH" ]; then
+- if [ -d "$i/apr-0" ]; then
+- APR_IPATH="$i/apr-0"
++ if [ -d "$i/apr-1" ]; then
++ APR_IPATH="$i/apr-1"
+ fi
+ fi
+ done
+@@ -220,8 +221,8 @@
+ fi
+ fi
+ if [ "X" = "X$APR_IPATH" ]; then
+- if [ -d "$i/apr-0" ]; then
+- APR_IPATH="$i/apr-0"
++ if [ -d "$i/apr-1" ]; then
++ APR_IPATH="$i/apr-1"
+ fi
+ fi
+ done
+@@ -243,11 +244,11 @@
+
+ if [ -n "$SSH_PATH" ]; then
+ echo " ... found"
+- echo 'NOTE: ensure that you have libssh v0.11 installed!! Get it from http://0xbadc0de.be !'
++ echo 'NOTE: ensure that you have libssh v0.4 installed!! Get it from http://0xbadc0de.be !'
+ fi
+ if [ "X" = "X$SSH_PATH" ]; then
+ echo " ... NOT found, module ssh2 disabled"
+- echo 'Get it from http://0xbadc0de.be/ - use v0.11!'
++ echo 'Get it from http://0xbadc0de.be/ - use v0.4 or later!'
+ fi
+ if [ "$SSH_IPATH" = "/usr/include" ]; then
+ SSH_IPATH=""
+@@ -262,7 +263,7 @@
+ SYS=`uname -s`
+ if [ "$SYS" = "SunOS" ]; then
+ echo "Checking for Solaris libraries ..."
+- for i in /lib /usr/lib /usr/local/lib $LIBDIRS .
++ for i in /lib /usr/lib /usr/local/lib $EXTRA_LIBDIRS $LIBDIRS .
+ do
+ if [ "X" = "X$NSL_PATH" ]; then
+ if [ -f "$i/libnsl.so" ]; then
+@@ -334,6 +335,9 @@
+ if [ -n "$SSH_PATH" ]; then
+ XDEFINES="$XDEFINES -DLIBSSH"
+ fi
++
++XDEFINES="$XDEFINES -D_GNU_SOURCE"
++
+ OLDPATH=""
+ for i in $SSL_PATH $CRYPTO_PATH $SSH_PATH $NSL_PATH $SOCKET_PATH $RESOLV_PATH $SAPR3_PATH $POSTGRES_PATH $SVN_PATH; do
+ if [ "$OLDPATH" = "$i" ]; then
+@@ -379,10 +383,10 @@
+ XLIBS="$XLIBS -lpq"
+ fi
+ if [ -n "$SVN_PATH" ]; then
+- XLIBS="$XLIBS -lsvn_client-1 -lapr-0 -laprutil-0"
++ XLIBS="$XLIBS -lsvn_client-1 -lapr-1 -laprutil-1"
+ fi
+ if [ -n "$SVN_PATH" ]; then
+- XLIBS="$XLIBS -lsvn_client-1 -lapr-0 -laprutil-0"
++ XLIBS="$XLIBS -lsvn_client-1 -lapr-1 -laprutil-1"
+ fi
+ if [ -n "$SSH_PATH" ]; then
+ XLIBS="$XLIBS -lssh"
diff --git a/network/hydra/patches/hydra-5.4-libssh-0.4.patch b/network/hydra/patches/hydra-5.4-libssh-0.4.patch
new file mode 100644
index 0000000000..d0933e4751
--- /dev/null
+++ b/network/hydra/patches/hydra-5.4-libssh-0.4.patch
@@ -0,0 +1,187 @@
+diff -Naur hydra-5.4-src.orig/hydra-ssh2.c hydra-5.4-src/hydra-ssh2.c
+--- hydra-5.4-src.orig/hydra-ssh2.c 2007-03-22 14:04:29.000000000 +0000
++++ hydra-5.4-src/hydra-ssh2.c 2009-12-18 03:12:56.000000000 +0000
+@@ -7,12 +7,51 @@
+ }
+ #else
+
+-#warning "If compilation of hydra-ssh2 fails, you are not using v0.11. Download from http://www.0xbadc0de.be/"
++#warning "If compilation of hydra-ssh2 fails, you are not using v0.4. Download from http://www.libssh.org/"
+
+ #include <libssh/libssh.h>
+
+ extern char *HYDRA_EXIT;
+
++/* try to authenticate with one password */
++static int
++try_password(ssh_session ssh_session, char *password){
++ int auth_state;
++ int i;
++ /* printf("ssh-trying pass \"%s\"\n",password); */
++ /* We try keyboard-interactive when it's supported. kbdint is
++ * what openssh tries first when logging somewhere.
++ */
++ auth_state = ssh_userauth_kbdint(ssh_session, NULL, NULL);
++ if(auth_state == SSH_AUTH_INFO){
++ i=0;
++ /* we feed 10 password responses at max. Keybint is challenge-response
++ * based so the server could ask unrelated questions
++ */
++ while(auth_state == SSH_AUTH_INFO && i<10){
++ ssh_userauth_kbdint_setanswer(ssh_session, i, password);
++ auth_state = ssh_userauth_kbdint(ssh_session, NULL, NULL);
++ i++;
++ }
++ /* Partial authentication is specific to SSH : the password is valid but
++ * an other authentication token is needed (generaly private key)
++ */
++ if(auth_state == SSH_AUTH_PARTIAL)
++ auth_state = SSH_AUTH_SUCCESS;
++ if(auth_state == SSH_AUTH_INFO)
++ auth_state = SSH_AUTH_ERROR;
++ return auth_state;
++ }
++ if(auth_state == SSH_AUTH_ERROR)
++ return auth_state;
++ /* Keyboard-interactive is not supported so we run through the password
++ * method */
++ auth_state = ssh_userauth_password(ssh_session, NULL, password);
++ if(auth_state == SSH_AUTH_PARTIAL)
++ auth_state = SSH_AUTH_SUCCESS;
++ return auth_state;
++}
++
+ int
+ start_ssh2(int s, unsigned long int ip, int port, unsigned char options, char *miscptr, FILE * fp)
+ {
+@@ -21,17 +60,17 @@
+ char *buf;
+ char *rc;
+ struct sockaddr_in targetip;
+- SSH_SESSION *ssh_session;
+- SSH_OPTIONS *ssh_opt;
++ ssh_session ssh_session;
++ char buffer[64], firstlogin[128];
+ int auth_state;
+- int i = 0;
++ const int btrue = 1;
+
+ if (strlen(login = hydra_get_next_login()) == 0)
+ login = empty;
+ if (strlen(pass = hydra_get_next_password()) == 0)
+ pass = empty;
+
+- ssh_opt=options_new();
++ ssh_session=ssh_new();
+ memset(&targetip, 0, sizeof(targetip));
+ memcpy(&targetip.sin_addr.s_addr, &ip, 4);
+ targetip.sin_family = AF_INET;
+@@ -41,16 +80,18 @@
+ buf = malloc(20);
+ inet_ntop(AF_INET, &targetip.sin_addr, buf, 20);
+ #endif
+- options_set_wanted_method(ssh_opt,KEX_COMP_C_S,"none");
+- options_set_wanted_method(ssh_opt,KEX_COMP_S_C,"none");
+- options_set_port(ssh_opt, port);
+- options_set_host(ssh_opt, buf);
+- options_set_username(ssh_opt, login);
+-
+- if ((ssh_session = ssh_connect(ssh_opt)) == NULL) {
++ snprintf(firstlogin,sizeof(firstlogin),"%s",login);
++ ssh_options_set(ssh_session, SSH_OPTIONS_SSH1, &btrue);
++ ssh_options_set(ssh_session, SSH_OPTIONS_PORT, &port);
++ ssh_options_set(ssh_session, SSH_OPTIONS_HOST, buf);
++ ssh_options_set(ssh_session, SSH_OPTIONS_USER, login);
++ /* printf("ssh-connecting with login \"%s\"\n",login); */
++ if (ssh_connect(ssh_session) == SSH_ERROR) {
+ rc = ssh_get_error(ssh_session);
+ if ((rc != NULL) && (rc[0] != '\0')) {
+- if (strncmp("connect:", ssh_get_error(ssh_session), strlen("connect:")) == 0)
++ snprintf(buffer,sizeof(buffer),"%s",rc);
++ ssh_disconnect(ssh_session);
++ if (strncmp("connect:", buffer, strlen("connect:")) == 0)
+ return 3;
+ else
+ return 4;
+@@ -60,43 +101,54 @@
+ free(buf);
+ buf = NULL;
+ #endif
+-
+- do {
+- /* why this crap? */
+- auth_state = ssh_userauth_kbdint(ssh_session, login, NULL);
+- while (i < 10 && auth_state == SSH_AUTH_INFO) {
+- ssh_userauth_kbdint_setanswer(ssh_session, i, pass);
+- auth_state = ssh_userauth_kbdint(ssh_session, login, NULL);
+- i++;
+- }
+-
+- if (auth_state == SSH_AUTH_SUCCESS || ssh_userauth_password(ssh_session, login, pass) == SSH_AUTH_SUCCESS) {
+- ssh_disconnect(ssh_session); /* this automagically frees the ssh_opt buffer */
+- hydra_report_found_host(port, ip, "ssh2", fp);
+- hydra_completed_pair_found();
+- if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
+- return 2;
+- /* free(ssh_opt); */ /* DOUBLE FREE ! */
++ /* None method is important since it can flag passwordless servers */
++ auth_state=ssh_userauth_none(ssh_session, login);
++ if(auth_state == SSH_AUTH_SUCCESS){
++ /* passwordless server */
++ hydra_report_found_host(port, ip, "ssh2", fp);
++ hydra_completed_pair_found();
++ ssh_disconnect(ssh_session);
++ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
++ return 2;
++ else
+ return 1;
+- } else {
+- if (ssh_error_code(ssh_session) == 1) {
+- hydra_completed_pair();
++ }
++
++ do {
++ auth_state=try_password(ssh_session, pass);
++ if (auth_state == SSH_AUTH_SUCCESS) {
++ ssh_disconnect(ssh_session); /* this automagically frees the ssh_opt buffer */
++ hydra_report_found_host(port, ip, "ssh2", fp);
++ hydra_completed_pair_found();
+ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
+ return 2;
++ return 1;
+ } else {
+- ssh_disconnect(ssh_session); /* this automagically frees the ssh_opt buffer */
+- hydra_completed_pair(); /* really? */
+- if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
++ if (auth_state == SSH_AUTH_DENIED) {
++ hydra_completed_pair();
++ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0){
++ ssh_disconnect(ssh_session);
+ return 2;
+- /* free(ssh_opt); */ /* DOUBLE FREE ! */
++ }
++ /* set a new password to try */
++ login=hydra_get_next_login();
++ if(strcmp(login,firstlogin) != 0){
++ /* we can't try a new login without a new session. */
++ ssh_disconnect(ssh_session);
++ //hydra_completed_pair_skip();
++ return 1;
++ }
++ pass=hydra_get_next_password();
++ /* try again using same session */
++ } else {
++ ssh_disconnect(ssh_session); /* this automagically frees the ssh_opt buffer */
++ /* there was an error. The password was not really tried.*/
++ //hydra_completed_pair_skip();
+ return 1;
+ }
+ }
+ } while(1);
+
+- /* not reached */
+-
+- /* free(ssh_opt); */ /* risk of double free */
+ return 1;
+ }
+
diff --git a/network/hydra/patches/hydra-http-form.patch b/network/hydra/patches/hydra-http-form.patch
new file mode 100644
index 0000000000..6dde09cdf1
--- /dev/null
+++ b/network/hydra/patches/hydra-http-form.patch
@@ -0,0 +1,18 @@
+--- hydra-http-form.old 2008-02-06 09:42:49.000000000 +0000
++++ hydra-http-form.c 2008-02-06 09:43:45.000000000 +0000
+@@ -149,7 +149,6 @@
+ }
+
+ if (hydra_send(s, buffer, strlen(buffer), 0) < 0) {
+- free(updvariables);
+ free(upd2variables);
+ return 1;
+ }
+@@ -183,7 +182,6 @@
+ */
+
+ free(buf);
+- free(updvariables);
+ free(upd2variables);
+
+ if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)