mirror of
https://github.com/vanhauser-thc/thc-hydra.git
synced 2025-07-30 19:40:42 -07:00
www: normalise webtarget
This commit is contained in:
parent
08fc0fb2e2
commit
37a0eeaabe
1 changed files with 27 additions and 27 deletions
54
hydra-http.c
54
hydra-http.c
|
@ -10,7 +10,7 @@ char *http_buf = NULL;
|
||||||
static char end_condition[END_CONDITION_MAX_LEN];
|
static char end_condition[END_CONDITION_MAX_LEN];
|
||||||
int end_condition_type = -1;
|
int end_condition_type = -1;
|
||||||
|
|
||||||
int32_t webport, freemischttp = 0;
|
int32_t webport;
|
||||||
int32_t http_auth_mechanism = AUTH_UNASSIGNED;
|
int32_t http_auth_mechanism = AUTH_UNASSIGNED;
|
||||||
|
|
||||||
int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, char *miscptr, FILE *fp, char *type, ptr_header_node ptr_head) {
|
int32_t start_http(int32_t s, char *ip, int32_t port, unsigned char options, char *miscptr, FILE *fp, char *type, ptr_header_node ptr_head) {
|
||||||
|
@ -313,32 +313,16 @@ void service_http(char *ip, int32_t sp, unsigned char options, char *miscptr, FI
|
||||||
int32_t myport = PORT_HTTP, mysslport = PORT_HTTP_SSL;
|
int32_t myport = PORT_HTTP, mysslport = PORT_HTTP_SSL;
|
||||||
char *ptr, *ptr2;
|
char *ptr, *ptr2;
|
||||||
ptr_header_node ptr_head = NULL;
|
ptr_header_node ptr_head = NULL;
|
||||||
|
#ifdef AF_INET6
|
||||||
|
unsigned char addr6 [sizeof(struct in6_addr)];
|
||||||
|
#endif
|
||||||
|
|
||||||
hydra_register_socket(sp);
|
hydra_register_socket(sp);
|
||||||
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;
|
return;
|
||||||
|
|
||||||
if ((webtarget = strstr(miscptr, "://")) != NULL) {
|
if (strlen(miscptr) == 0)
|
||||||
webtarget += strlen("://");
|
|
||||||
if ((ptr2 = index(webtarget, ':')) != NULL) { /* step over port if present */
|
|
||||||
*ptr2 = 0;
|
|
||||||
ptr2++;
|
|
||||||
ptr = ptr2;
|
|
||||||
if (*ptr == '/' || (ptr = index(ptr2, '/')) != NULL)
|
|
||||||
miscptr = ptr;
|
|
||||||
else
|
|
||||||
miscptr = slash; /* to make things easier to user */
|
|
||||||
} else if ((ptr2 = index(webtarget, '/')) != NULL) {
|
|
||||||
miscptr = malloc(strlen(ptr2) + 1);
|
|
||||||
freemischttp = 1;
|
|
||||||
strcpy(miscptr, ptr2);
|
|
||||||
*ptr2 = 0;
|
|
||||||
} else
|
|
||||||
webtarget = hostname;
|
|
||||||
} else if (strlen(miscptr) == 0)
|
|
||||||
miscptr = strdup("/");
|
miscptr = strdup("/");
|
||||||
if (webtarget == NULL)
|
|
||||||
webtarget = hostname;
|
|
||||||
if (port != 0)
|
if (port != 0)
|
||||||
webport = port;
|
webport = port;
|
||||||
else if ((options & OPTION_SSL) == 0)
|
else if ((options & OPTION_SSL) == 0)
|
||||||
|
@ -346,6 +330,28 @@ void service_http(char *ip, int32_t sp, unsigned char options, char *miscptr, FI
|
||||||
else
|
else
|
||||||
webport = mysslport;
|
webport = mysslport;
|
||||||
|
|
||||||
|
/* normalise the webtarget for ipv6/port number */
|
||||||
|
webtarget = malloc(strlen(hostname) + 1 /* null */ + 6 /* :65535 */
|
||||||
|
#ifdef AF_INET6
|
||||||
|
+ 2 /* [] */
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
#ifdef AF_INET6
|
||||||
|
/* let libc decide if target is an ipv6 address */
|
||||||
|
if (inet_pton(AF_INET6, hostname, addr6)) {
|
||||||
|
ptr = webtarget + sprintf(webtarget, "[%s]", hostname);
|
||||||
|
} else {
|
||||||
|
#endif
|
||||||
|
ptr = webtarget + sprintf(webtarget, "%s", hostname);
|
||||||
|
#ifdef AF_INET6
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (options & OPTION_SSL && webport != PORT_HTTP_SSL ||
|
||||||
|
!(options & OPTION_SSL) && webport != PORT_HTTP) {
|
||||||
|
sprintf(ptr, ":%d", webport);
|
||||||
|
}
|
||||||
|
ptr = NULL;
|
||||||
|
|
||||||
/* Advance to options string */
|
/* Advance to options string */
|
||||||
ptr = miscptr;
|
ptr = miscptr;
|
||||||
while (*ptr != 0 && (*ptr != ':' || *(ptr - 1) == '\\'))
|
while (*ptr != 0 && (*ptr != ':' || *(ptr - 1) == '\\'))
|
||||||
|
@ -380,8 +386,6 @@ void service_http(char *ip, int32_t sp, unsigned char options, char *miscptr, FI
|
||||||
port = mysslport;
|
port = mysslport;
|
||||||
}
|
}
|
||||||
if (sock < 0) {
|
if (sock < 0) {
|
||||||
if (freemischttp)
|
|
||||||
free(miscptr);
|
|
||||||
if (quiet != 1)
|
if (quiet != 1)
|
||||||
fprintf(stderr, "[ERROR] Child with pid %d terminating, can not connect\n", (int32_t)getpid());
|
fprintf(stderr, "[ERROR] Child with pid %d terminating, can not connect\n", (int32_t)getpid());
|
||||||
hydra_child_exit(1);
|
hydra_child_exit(1);
|
||||||
|
@ -395,13 +399,9 @@ void service_http(char *ip, int32_t sp, unsigned char options, char *miscptr, FI
|
||||||
case 3: /* clean exit */
|
case 3: /* clean exit */
|
||||||
if (sock >= 0)
|
if (sock >= 0)
|
||||||
sock = hydra_disconnect(sock);
|
sock = hydra_disconnect(sock);
|
||||||
if (freemischttp)
|
|
||||||
free(miscptr);
|
|
||||||
hydra_child_exit(0);
|
hydra_child_exit(0);
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
if (freemischttp)
|
|
||||||
free(miscptr);
|
|
||||||
fprintf(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
fprintf(stderr, "[ERROR] Caught unknown return code, exiting!\n");
|
||||||
hydra_child_exit(0);
|
hydra_child_exit(0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue