mirror of
https://github.com/vanhauser-thc/thc-hydra.git
synced 2025-07-05 20:41:39 -07:00
oracle: add success condition and fix skipped tries
This commit is contained in:
parent
09a247412b
commit
11a96e5d32
1 changed files with 20 additions and 18 deletions
|
@ -19,6 +19,7 @@ void dummy_oracle() { printf("\n"); }
|
||||||
|
|
||||||
#include <oci.h>
|
#include <oci.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
extern char *HYDRA_EXIT;
|
extern char *HYDRA_EXIT;
|
||||||
|
|
||||||
|
@ -84,7 +85,9 @@ int32_t start_oracle(int32_t s, char *ip, int32_t port, unsigned char options, c
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool success = true;
|
||||||
if (OCILogon(o_environment, o_error, &o_servicecontext, (const OraText *)login, strlen(login), (const OraText *)pass, strlen(pass), (const OraText *)buffer, strlen(buffer))) {
|
if (OCILogon(o_environment, o_error, &o_servicecontext, (const OraText *)login, strlen(login), (const OraText *)pass, strlen(pass), (const OraText *)buffer, strlen(buffer))) {
|
||||||
|
success = false;
|
||||||
OCIErrorGet(o_error, 1, NULL, &o_errorcode, o_errormsg, sizeof(o_errormsg), OCI_HTYPE_ERROR);
|
OCIErrorGet(o_error, 1, NULL, &o_errorcode, o_errormsg, sizeof(o_errormsg), OCI_HTYPE_ERROR);
|
||||||
// database: oracle_error: ORA-01017: invalid username/password; logon
|
// database: oracle_error: ORA-01017: invalid username/password; logon
|
||||||
// denied database: oracle_error: ORA-12514: TNS:listener does not currently
|
// denied database: oracle_error: ORA-12514: TNS:listener does not currently
|
||||||
|
@ -107,31 +110,26 @@ int32_t start_oracle(int32_t s, char *ip, int32_t port, unsigned char options, c
|
||||||
return 3;
|
return 3;
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
// ORA-28002: the password will expire within 7 days
|
||||||
if (o_error) {
|
if (strstr((const char *)o_errormsg, "ORA-28002") != NULL) {
|
||||||
OCIHandleFree((dvoid *)o_error, OCI_HTYPE_ERROR);
|
hydra_report(stderr, "[INFO] ORACLE account %s password will expire soon.\n", login);
|
||||||
|
success = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
hydra_completed_pair();
|
if (success) {
|
||||||
// by default, set in sqlnet.ora, the trace file is generated in pwd to log
|
|
||||||
// any errors happening, as we don't care, we are deleting the file set
|
|
||||||
// these parameters to not generate the file LOG_DIRECTORY_CLIENT =
|
|
||||||
// /dev/null LOG_FILE_CLIENT = /dev/null
|
|
||||||
|
|
||||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
|
||||||
return 3;
|
|
||||||
return 2;
|
|
||||||
} else {
|
|
||||||
OCILogoff(o_servicecontext, o_error);
|
OCILogoff(o_servicecontext, o_error);
|
||||||
if (o_error) {
|
|
||||||
OCIHandleFree((dvoid *)o_error, OCI_HTYPE_ERROR);
|
|
||||||
}
|
|
||||||
hydra_report_found_host(port, ip, "oracle", fp);
|
hydra_report_found_host(port, ip, "oracle", fp);
|
||||||
hydra_completed_pair_found();
|
hydra_completed_pair_found();
|
||||||
|
} else {
|
||||||
|
hydra_completed_pair();
|
||||||
|
}
|
||||||
|
if (o_error) {
|
||||||
|
OCIHandleFree((dvoid *)o_error, OCI_HTYPE_ERROR);
|
||||||
}
|
}
|
||||||
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
if (memcmp(hydra_get_next_pair(), &HYDRA_EXIT, sizeof(HYDRA_EXIT)) == 0)
|
||||||
return 3;
|
return 3;
|
||||||
return 1;
|
return success ? 1 : 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
void service_oracle(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE *fp, int32_t port, char *hostname) {
|
void service_oracle(char *ip, int32_t sp, unsigned char options, char *miscptr, FILE *fp, int32_t port, char *hostname) {
|
||||||
|
@ -167,11 +165,15 @@ void service_oracle(char *ip, int32_t sp, unsigned char options, char *miscptr,
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
next_run = start_oracle(sock, ip, port, options, miscptr, fp);
|
next_run = start_oracle(sock, ip, port, options, miscptr, fp);
|
||||||
hydra_child_exit(0);
|
|
||||||
break;
|
break;
|
||||||
case 3: /* clean exit */
|
case 3: /* clean exit */
|
||||||
if (sock >= 0)
|
if (sock >= 0)
|
||||||
sock = hydra_disconnect(sock);
|
sock = hydra_disconnect(sock);
|
||||||
|
|
||||||
|
// by default, set in sqlnet.ora, the trace file is generated in pwd to log
|
||||||
|
// any errors happening, as we don't care, we are deleting the file set
|
||||||
|
// these parameters to not generate the file LOG_DIRECTORY_CLIENT =
|
||||||
|
// /dev/null LOG_FILE_CLIENT = /dev/null
|
||||||
unlink("sqlnet.log");
|
unlink("sqlnet.log");
|
||||||
hydra_child_exit(0);
|
hydra_child_exit(0);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue