From 6cb5a4a96646ddf718b7e067cd9314f96cffd243 Mon Sep 17 00:00:00 2001 From: P3run Date: Tue, 7 Mar 2023 23:55:31 +0100 Subject: [PATCH 1/6] Add fotka.com --- holehe/core.py | 2 +- holehe/modules/dating/__init__.py | 0 holehe/modules/dating/fotka.py | 58 +++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 holehe/modules/dating/__init__.py create mode 100644 holehe/modules/dating/fotka.py diff --git a/holehe/core.py b/holehe/core.py index 5481c78c..e7fc5d2f 100644 --- a/holehe/core.py +++ b/holehe/core.py @@ -158,7 +158,7 @@ def export_csv(data,args,email): exit("All results have been exported to "+name_file) async def launch_module(module,email, client, out): - data={'aboutme': 'about.me', 'adobe': 'adobe.com', 'amazon': 'amazon.com', 'anydo': 'any.do', 'archive': 'archive.org', 'armurerieauxerre': 'armurerie-auxerre.com', 'atlassian': 'atlassian.com', 'babeshows': 'babeshows.co.uk', 'badeggsonline': 'badeggsonline.com', 'biosmods': 'bios-mods.com', 'biotechnologyforums': 'biotechnologyforums.com', 'bitmoji': 'bitmoji.com', 'blablacar': 'blablacar.com', 'blackworldforum': 'blackworldforum.com', 'blip': 'blip.fm', 'blitzortung': 'forum.blitzortung.org', 'bluegrassrivals': 'bluegrassrivals.com', 'bodybuilding': 'bodybuilding.com', 'buymeacoffee': 'buymeacoffee.com', 'cambridgemt': 'discussion.cambridge-mt.com', 'caringbridge': 'caringbridge.org', 'chinaphonearena': 'chinaphonearena.com', 'clashfarmer': 'clashfarmer.com', 'codecademy': 'codecademy.com', 'codeigniter': 'forum.codeigniter.com', 'codepen': 'codepen.io', 'coroflot': 'coroflot.com', 'cpaelites': 'cpaelites.com', 'cpahero': 'cpahero.com', 'cracked_to': 'cracked.to', 'crevado': 'crevado.com', 'deliveroo': 'deliveroo.com', 'demonforums': 'demonforums.net', 'devrant': 'devrant.com', 'diigo': 'diigo.com', 'discord': 'discord.com', 'docker': 'docker.com', 'dominosfr': 'dominos.fr', 'ebay': 'ebay.com', 'ello': 'ello.co', 'envato': 'envato.com', 'eventbrite': 'eventbrite.com', 'evernote': 'evernote.com', 'fanpop': 'fanpop.com', 'firefox': 'firefox.com', 'flickr': 'flickr.com', 'freelancer': 'freelancer.com', 'freiberg': 'drachenhort.user.stunet.tu-freiberg.de', 'garmin': 'garmin.com', 'github': 'github.com', 'google': 'google.com', 'gravatar': 'gravatar.com', 'imgur': 'imgur.com', 'instagram': 'instagram.com', 'issuu': 'issuu.com', 'koditv': 'forum.kodi.tv', 'komoot': 'komoot.com', 'laposte': 'laposte.fr', 'lastfm': 'last.fm', 'lastpass': 'lastpass.com', 'mail_ru': 'mail.ru', 'mybb': 'community.mybb.com', 'myspace': 'myspace.com', 'nattyornot': 'nattyornotforum.nattyornot.com', 'naturabuy': 'naturabuy.fr', 'ndemiccreations': 'forum.ndemiccreations.com', 'nextpvr': 'forums.nextpvr.com', 'nike': 'nike.com', 'odnoklassniki': 'ok.ru', 'office365': 'office365.com', 'onlinesequencer': 'onlinesequencer.net', 'parler': 'parler.com', 'patreon': 'patreon.com', 'pinterest': 'pinterest.com', 'plurk': 'plurk.com', 'pornhub': 'pornhub.com', 'protonmail': 'protonmail.ch', 'quora': 'quora.com', 'rambler': 'rambler.ru', 'redtube': 'redtube.com', 'replit': 'replit.com', 'rocketreach': 'rocketreach.co', 'samsung': 'samsung.com', 'seoclerks': 'seoclerks.com', 'sevencups': '7cups.com', 'smule': 'smule.com', 'snapchat': 'snapchat.com', 'soundcloud': 'soundcloud.com', 'sporcle': 'sporcle.com', 'spotify': 'spotify.com', 'strava': 'strava.com', 'taringa': 'taringa.net', 'teamtreehouse': 'teamtreehouse.com', 'tellonym': 'tellonym.me', 'thecardboard': 'thecardboard.org', 'therianguide': 'forums.therian-guide.com', 'thevapingforum': 'thevapingforum.com', 'tumblr': 'tumblr.com', 'tunefind': 'tunefind.com', 'twitter': 'twitter.com', 'venmo': 'venmo.com', 'vivino': 'vivino.com', 'voxmedia': 'voxmedia.com', 'vrbo': 'vrbo.com', 'vsco': 'vsco.co', 'wattpad': 'wattpad.com', 'wordpress': 'wordpress.com', 'xing': 'xing.com', 'xnxx': 'xnxx.com', 'xvideos': 'xvideos.com', 'yahoo': 'yahoo.com','hubspot': 'hubspot.com', 'pipedrive': 'pipedrive.com', 'insightly': 'insightly.com', 'nutshell': 'nutshell.com', 'zoho': 'zoho.com', 'axonaut': 'axonaut.com', 'amocrm': 'amocrm.com', 'nimble': 'nimble.com', 'nocrm': 'nocrm.io', 'teamleader': 'teamleader.eu'} + data={'aboutme': 'about.me', 'adobe': 'adobe.com', 'amazon': 'amazon.com', 'anydo': 'any.do', 'archive': 'archive.org', 'armurerieauxerre': 'armurerie-auxerre.com', 'atlassian': 'atlassian.com', 'babeshows': 'babeshows.co.uk', 'badeggsonline': 'badeggsonline.com', 'biosmods': 'bios-mods.com', 'biotechnologyforums': 'biotechnologyforums.com', 'bitmoji': 'bitmoji.com', 'blablacar': 'blablacar.com', 'blackworldforum': 'blackworldforum.com', 'blip': 'blip.fm', 'blitzortung': 'forum.blitzortung.org', 'bluegrassrivals': 'bluegrassrivals.com', 'bodybuilding': 'bodybuilding.com', 'buymeacoffee': 'buymeacoffee.com', 'cambridgemt': 'discussion.cambridge-mt.com', 'caringbridge': 'caringbridge.org', 'chinaphonearena': 'chinaphonearena.com', 'clashfarmer': 'clashfarmer.com', 'codecademy': 'codecademy.com', 'codeigniter': 'forum.codeigniter.com', 'codepen': 'codepen.io', 'coroflot': 'coroflot.com', 'cpaelites': 'cpaelites.com', 'cpahero': 'cpahero.com', 'cracked_to': 'cracked.to', 'crevado': 'crevado.com', 'deliveroo': 'deliveroo.com', 'demonforums': 'demonforums.net', 'devrant': 'devrant.com', 'diigo': 'diigo.com', 'discord': 'discord.com', 'docker': 'docker.com', 'dominosfr': 'dominos.fr', 'ebay': 'ebay.com', 'ello': 'ello.co', 'envato': 'envato.com', 'eventbrite': 'eventbrite.com', 'evernote': 'evernote.com', 'fanpop': 'fanpop.com', 'firefox': 'firefox.com', 'flickr': 'flickr.com', 'fotka': 'fotka.com', 'freelancer': 'freelancer.com', 'freiberg': 'drachenhort.user.stunet.tu-freiberg.de', 'garmin': 'garmin.com', 'github': 'github.com', 'google': 'google.com', 'gravatar': 'gravatar.com', 'imgur': 'imgur.com', 'instagram': 'instagram.com', 'issuu': 'issuu.com', 'koditv': 'forum.kodi.tv', 'komoot': 'komoot.com', 'laposte': 'laposte.fr', 'lastfm': 'last.fm', 'lastpass': 'lastpass.com', 'mail_ru': 'mail.ru', 'mybb': 'community.mybb.com', 'myspace': 'myspace.com', 'nattyornot': 'nattyornotforum.nattyornot.com', 'naturabuy': 'naturabuy.fr', 'ndemiccreations': 'forum.ndemiccreations.com', 'nextpvr': 'forums.nextpvr.com', 'nike': 'nike.com', 'odnoklassniki': 'ok.ru', 'office365': 'office365.com', 'onlinesequencer': 'onlinesequencer.net', 'parler': 'parler.com', 'patreon': 'patreon.com', 'pinterest': 'pinterest.com', 'plurk': 'plurk.com', 'pornhub': 'pornhub.com', 'protonmail': 'protonmail.ch', 'quora': 'quora.com', 'rambler': 'rambler.ru', 'redtube': 'redtube.com', 'replit': 'replit.com', 'rocketreach': 'rocketreach.co', 'samsung': 'samsung.com', 'seoclerks': 'seoclerks.com', 'sevencups': '7cups.com', 'smule': 'smule.com', 'snapchat': 'snapchat.com', 'soundcloud': 'soundcloud.com', 'sporcle': 'sporcle.com', 'spotify': 'spotify.com', 'strava': 'strava.com', 'taringa': 'taringa.net', 'teamtreehouse': 'teamtreehouse.com', 'tellonym': 'tellonym.me', 'thecardboard': 'thecardboard.org', 'therianguide': 'forums.therian-guide.com', 'thevapingforum': 'thevapingforum.com', 'tumblr': 'tumblr.com', 'tunefind': 'tunefind.com', 'twitter': 'twitter.com', 'venmo': 'venmo.com', 'vivino': 'vivino.com', 'voxmedia': 'voxmedia.com', 'vrbo': 'vrbo.com', 'vsco': 'vsco.co', 'wattpad': 'wattpad.com', 'wordpress': 'wordpress.com', 'xing': 'xing.com', 'xnxx': 'xnxx.com', 'xvideos': 'xvideos.com', 'yahoo': 'yahoo.com','hubspot': 'hubspot.com', 'pipedrive': 'pipedrive.com', 'insightly': 'insightly.com', 'nutshell': 'nutshell.com', 'zoho': 'zoho.com', 'axonaut': 'axonaut.com', 'amocrm': 'amocrm.com', 'nimble': 'nimble.com', 'nocrm': 'nocrm.io', 'teamleader': 'teamleader.eu'} try: await module(email, client, out) except Exception: diff --git a/holehe/modules/dating/__init__.py b/holehe/modules/dating/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/holehe/modules/dating/fotka.py b/holehe/modules/dating/fotka.py new file mode 100644 index 00000000..1cbdedb0 --- /dev/null +++ b/holehe/modules/dating/fotka.py @@ -0,0 +1,58 @@ +from holehe.core import * +from holehe.localuseragent import * + + +async def fotka(email, client, out): + name = "fotka" + domain = "fotka.com" + method = "login" + frequent_rate_limit=True + + def get_random_string(length): + letters = string.ascii_lowercase + result_str = ''.join(random.choice(letters) for i in range(length)) + return(result_str) + + headers = { + 'User-Agent': random.choice(ua["browsers"]["firefox"]), + 'Accept': '*/*', + 'Content-Type': 'application/x-www-form-urlencoded' + } + + data = f'login={email}&pass={get_random_string(20)}&back_url=' + + response = await client.post( + 'https://api.fotka.com/v2/zaloguj/?form_login=1', + headers=headers, + data=data) + + location = response.headers['location'] + + if 'error=-2' in location: + out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, + "rateLimit": False, + "exists": True, + "emailrecovery": None, + "phoneNumber": None, + "others": "Multiple accounts found"}) + elif 'error=-9' in location or 'error=-7' in location: + out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, + "rateLimit": False, + "exists": True, + "emailrecovery": None, + "phoneNumber": None, + "others": None}) + elif 'error=-5' in location or 'error=-6' in location: + out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, + "rateLimit": True, + "exists": False, + "emailrecovery": None, + "phoneNumber": None, + "others": None}) + else: + out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, + "rateLimit": False, + "exists": False, + "emailrecovery": None, + "phoneNumber": None, + "others": None}) From 8d0e38eb5ad7451440ce5f9e6bd6e2af81261d5c Mon Sep 17 00:00:00 2001 From: P3run Date: Wed, 8 Mar 2023 00:00:24 +0100 Subject: [PATCH 2/6] Add entry in the modules table in README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 114c89b4..5052b345 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,7 @@ Built for educational purposes only. | fanpop | fanpop.com | register | ✘ | | firefox | firefox.com | register | ✘ | | flickr | flickr.com | login | ✘ | +| fotka | fotka.com | login | ✔ | | freelancer | freelancer.com | register | ✘ | | freiberg | drachenhort.user.stunet.tu-freiberg.de | register | ✘ | | garmin | garmin.com | register | ✔ | From 89c177528b1bc1ad5e1231c975915c642c6dbe14 Mon Sep 17 00:00:00 2001 From: P3run Date: Tue, 11 Apr 2023 23:24:02 +0200 Subject: [PATCH 3/6] Remove incorrect message. --- holehe/modules/dating/fotka.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/holehe/modules/dating/fotka.py b/holehe/modules/dating/fotka.py index 1cbdedb0..95031313 100644 --- a/holehe/modules/dating/fotka.py +++ b/holehe/modules/dating/fotka.py @@ -29,12 +29,12 @@ def get_random_string(length): location = response.headers['location'] if 'error=-2' in location: - out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, + out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, "rateLimit": False, "exists": True, "emailrecovery": None, "phoneNumber": None, - "others": "Multiple accounts found"}) + "others": None}) # multiple accounts found elif 'error=-9' in location or 'error=-7' in location: out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, "rateLimit": False, From c0288ba5ea9a2c4955638c36f1e580dc4d4f9f71 Mon Sep 17 00:00:00 2001 From: P3run Date: Fri, 15 Sep 2023 21:49:59 +0200 Subject: [PATCH 4/6] Add exceptions and error messages --- holehe/modules/dating/fotka.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/holehe/modules/dating/fotka.py b/holehe/modules/dating/fotka.py index 95031313..d256a683 100644 --- a/holehe/modules/dating/fotka.py +++ b/holehe/modules/dating/fotka.py @@ -21,13 +21,27 @@ def get_random_string(length): data = f'login={email}&pass={get_random_string(20)}&back_url=' - response = await client.post( - 'https://api.fotka.com/v2/zaloguj/?form_login=1', - headers=headers, - data=data) + try: + response = await client.post( + 'https://api.fotka.com/v25453/zaloguj/?form_login=1', + headers=headers, + data=data) + except Exception: + out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, + "rateLimit": False, + "exists": False, + "emailrecovery": None, + "phoneNumber": None, + "error": True, + "others": {"errorMessage": "Unexpected error while sending request."}}) + return None + location = response.headers['location'] + print(location) + aa = input() + if 'error=-2' in location: out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, "rateLimit": False, @@ -55,4 +69,5 @@ def get_random_string(length): "exists": False, "emailrecovery": None, "phoneNumber": None, - "others": None}) + "error": True, + "others": {"errorMessage": "Couldn't find response code."}}) From 144c8b14dbcf59efbab1e709801658111efc5e0d Mon Sep 17 00:00:00 2001 From: P3run Date: Fri, 15 Sep 2023 21:51:34 +0200 Subject: [PATCH 5/6] Correct url --- holehe/modules/dating/fotka.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/holehe/modules/dating/fotka.py b/holehe/modules/dating/fotka.py index d256a683..abfa028c 100644 --- a/holehe/modules/dating/fotka.py +++ b/holehe/modules/dating/fotka.py @@ -23,7 +23,7 @@ def get_random_string(length): try: response = await client.post( - 'https://api.fotka.com/v25453/zaloguj/?form_login=1', + 'https://api.fotka.com/v2/zaloguj/?form_login=1', headers=headers, data=data) except Exception: From 39db6e00464f3aef65ff9fceecd09037545b1a9b Mon Sep 17 00:00:00 2001 From: P3run Date: Fri, 15 Sep 2023 23:14:04 +0200 Subject: [PATCH 6/6] Update logic to include more response codes --- holehe/modules/dating/fotka.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/holehe/modules/dating/fotka.py b/holehe/modules/dating/fotka.py index abfa028c..e9bf176b 100644 --- a/holehe/modules/dating/fotka.py +++ b/holehe/modules/dating/fotka.py @@ -39,9 +39,6 @@ def get_random_string(length): location = response.headers['location'] - print(location) - aa = input() - if 'error=-2' in location: out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, "rateLimit": False, @@ -63,6 +60,13 @@ def get_random_string(length): "emailrecovery": None, "phoneNumber": None, "others": None}) + elif 'error=-1' in location or 'error=-4' in location or 'error=-8' in location: + out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, + "rateLimit": False, + "exists": False, + "emailrecovery": None, + "phoneNumber": None, + "others": None}) else: out.append({"name": name,"domain":domain,"method":method,"frequent_rate_limit":frequent_rate_limit, "rateLimit": False, @@ -70,4 +74,4 @@ def get_random_string(length): "emailrecovery": None, "phoneNumber": None, "error": True, - "others": {"errorMessage": "Couldn't find response code."}}) + "others": {"errorMessage": "Invalid response code."}})