Merge branch 'master' into feature/new_targets

This commit is contained in:
Siddharth Dushantha 2024-05-04 18:02:16 +00:00 committed by GitHub
commit a7f94d6ee6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 189 additions and 87 deletions

View file

@ -34,13 +34,12 @@ jobs:
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
pip install ruff flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint With flake8
- name: Lint With Ruff
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
ruff check . --output-format=github --select=E9,F63,F7,F82
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Sherlock Site Detect Tests

View file

@ -854,5 +854,42 @@
"url": "https://ebio.gg/{}",
"urlMain": "https:/ebio.gg",
"username_claimed": "dev"
},
"metacritic": {
"errorMsg": "User not found",
"errorType": "message",
"regexCheck": "^(?![-_].)[A-Za-z0-9-_]{3,15}$",
"url": "https://www.metacritic.com/user/{}",
"urlMain": "https://www.metacritic.com/",
"username_claimed": "blue"
},
"Oracle Communities": {
"errorType": "status_code",
"url": "https://community.oracle.com/people/{}",
"urlMain": "https://community.oracle.com",
"username_claimed": "dev"
},
"HexRPG": {
"errorMsg": "Error : User ",
"errorType": "message",
"regexCheck": "^[a-zA-Z0-9_ ]{3,20}$",
"url": "https://www.hexrpg.com/userinfo/{}",
"urlMain": "https://www.hexrpg.com/",
"username_claimed": "blue"
},
"G2G": {
"errorType": "response_url",
"errorUrl": "https://www.g2g.com/{}",
"regexCheck": "^[A-Za-z][A-Za-z0-9_]{2,11}$",
"url": "https://www.g2g.com/{}",
"urlMain": "https://www.g2g.com/",
"username_claimed": "user"
},
"BitCoinForum": {
"errorMsg": "The user whose profile you are trying to view does not exist.",
"errorType": "message",
"url": "https://bitcoinforum.com/profile/{}",
"urlMain": "https://bitcoinforum.com",
"username_claimed": "bitcoinforum.com"
}
}

View file

@ -1856,3 +1856,65 @@ As of 2023.12.21, Ebio returns false positives.
"username_claimed": "dev"
},
```
## HexRPG
__2024-04-07 :__ HexRPG behind authentication wall. Unable to check usernames without logging in.
```json
"HexRPG": {
"errorMsg": "Error : User ",
"errorType": "message",
"regexCheck": "^[a-zA-Z0-9_ ]{3,20}$",
"url": "https://www.hexrpg.com/userinfo/{}",
"urlMain": "https://www.hexrpg.com/",
"username_claimed": "blue"
}
```
## Oracle Communities
__2024-04-07 :__ Oracle Communities behind authentication wall. Unable to check usernames without logging in.
```json
"Oracle Communities": {
"errorType": "status_code",
"url": "https://community.oracle.com/people/{}",
"urlMain": "https://community.oracle.com",
"username_claimed": "dev"
}
```
## Metacritic
__2024-04-07 :__ Non-existent users seemingly displayed as real users with no activity. Needs adjustment.
```json
"metacritic": {
"errorMsg": "User not found",
"errorType": "message",
"regexCheck": "^(?![-_].)[A-Za-z0-9-_]{3,15}$",
"url": "https://www.metacritic.com/user/{}",
"urlMain": "https://www.metacritic.com/",
"username_claimed": "blue"
}
```
## G2G
__2024-04-10 :__ Seems to be loading profiles with some wierd javascript setup that sherlock doesn't like, leading to difficult to control false positives
```json
"G2G": {
"errorType": "response_url",
"errorUrl": "https://www.g2g.com/{}",
"regexCheck": "^[A-Za-z][A-Za-z0-9_]{2,11}$",
"url": "https://www.g2g.com/{}",
"urlMain": "https://www.g2g.com/",
"username_claimed": "user"
}
```
## Bitcoin Forum
__2024-04-24 :__ BCF seems to have gone defunct. Uncertain.
```json
"BitCoinForum": {
"errorMsg": "The user whose profile you are trying to view does not exist.",
"errorType": "message",
"url": "https://bitcoinforum.com/profile/{}",
"urlMain": "https://bitcoinforum.com",
"username_claimed": "bitcoinforum.com"
}
```

View file

@ -239,6 +239,15 @@ class QueryNotifyPrint(QueryNotify):
Fore.GREEN + f" {self.result.site_name}:" +
Fore.YELLOW + f" {msg}")
elif result.status == QueryStatus.WAF:
if self.print_all:
print(Style.BRIGHT + Fore.WHITE + "[" +
Fore.RED + "-" +
Fore.WHITE + "]" +
Fore.GREEN + f" {self.result.site_name}:" +
Fore.RED + " Blocked by bot detection" +
Fore.YELLOW + " (proxy may help)")
else:
# It should be impossible to ever get here...
raise ValueError(

View file

@ -148,15 +148,17 @@
},
"Archive of Our Own": {
"errorType": "status_code",
"regexCheck": "^[^.]*?$",
"url": "https://archiveofourown.org/users/{}",
"urlMain": "https://archiveofourown.org/",
"username_claimed": "test"
},
"Archive.org": {
"errorMsg": "cannot find account",
"errorMsg": "could not fetch an account with user item identifier",
"errorType": "message",
"url": "https://archive.org/details/@{}",
"urlMain": "https://archive.org",
"urlProbe": "https://archive.org/details/@{}?noscript=true",
"username_claimed": "blue"
},
"ArtStation": {
@ -270,13 +272,6 @@
"urlMain": "https://bitbucket.org/",
"username_claimed": "white"
},
"BitCoinForum": {
"errorMsg": "The user whose profile you are trying to view does not exist.",
"errorType": "message",
"url": "https://bitcoinforum.com/profile/{}",
"urlMain": "https://bitcoinforum.com",
"username_claimed": "bitcoinforum.com"
},
"Bitwarden Forum": {
"errorType": "status_code",
"regexCheck": "^(?![.-])[a-zA-Z0-9_.-]{3,20}$",
@ -332,8 +327,8 @@
"username_claimed": "blue"
},
"CGTrader": {
"errorMsg": "3D models for CG digital design and artwork",
"errorType": "message",
"errorType": "status_code",
"regexCheck": "^[^.]*?$",
"url": "https://www.cgtrader.com/{}",
"urlMain": "https://www.cgtrader.com",
"username_claimed": "blue"
@ -341,9 +336,10 @@
"CNET": {
"errorMsg": "null null - CNET",
"errorType": "message",
"regexCheck": "^[a-z].*$",
"url": "https://www.cnet.com/profiles/{}/",
"urlMain": "https://www.cnet.com/",
"username_claimed": "elliottcnet"
"username_claimed": "melliott"
},
"CSSBattle": {
"errorType": "status_code",
@ -525,8 +521,8 @@
"username_claimed": "blue"
},
"Contently": {
"errorMsg": "<title>Leading Content Marketing Platform | Contently</title>",
"errorType": "message",
"errorType": "response_url",
"errorUrl": "https://contently.com",
"regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$",
"url": "https://{}.contently.com/",
"urlMain": "https://contently.com/",
@ -662,6 +658,7 @@
},
"Eintracht Frankfurt Forum": {
"errorType": "status_code",
"regexCheck": "^[^.]*?$",
"url": "https://community.eintracht.de/fans/{}",
"urlMain": "https://community.eintracht.de/",
"username_claimed": "mmammu"
@ -811,14 +808,6 @@
"urlMain": "https://freesound.org/",
"username_claimed": "blue"
},
"G2G": {
"errorType": "response_url",
"errorUrl": "https://www.g2g.com/{}",
"regexCheck": "^[A-Za-z][A-Za-z0-9_]{2,11}$",
"url": "https://www.g2g.com/{}",
"urlMain": "https://www.g2g.com/",
"username_claimed": "user"
},
"GNOME VCS": {
"errorType": "response_url",
"errorUrl": "https://gitlab.gnome.org/{}",
@ -841,20 +830,21 @@
"username_claimed": "blue"
},
"GeeksforGeeks": {
"errorMsg": "<title>Login GeeksforGeeks</title>",
"errorType": "message",
"errorType": "status_code",
"url": "https://auth.geeksforgeeks.org/user/{}",
"urlMain": "https://www.geeksforgeeks.org/",
"username_claimed": "adam"
},
"Genius (Artists)": {
"errorType": "status_code",
"regexCheck": "^[a-zA-Z0-9]{5,50}$",
"url": "https://genius.com/artists/{}",
"urlMain": "https://genius.com/",
"username_claimed": "genius"
},
"Genius (Users)": {
"errorType": "status_code",
"regexCheck": "^[a-zA-Z0-9]*?$",
"url": "https://genius.com/{}",
"urlMain": "https://genius.com/",
"username_claimed": "genius"
@ -948,6 +938,7 @@
"Gumroad": {
"errorMsg": "Page not found (404) - Gumroad",
"errorType": "message",
"regexCheck": "^[^.]*?$",
"url": "https://www.gumroad.com/{}",
"urlMain": "https://www.gumroad.com/",
"username_claimed": "blue"
@ -958,14 +949,6 @@
"urlMain": "https://www.gutefrage.net/",
"username_claimed": "gutefrage"
},
"HEXRPG": {
"errorMsg": "Error : User ",
"errorType": "message",
"regexCheck": "^[a-zA-Z0-9_ ]{3,20}$",
"url": "https://www.hexrpg.com/userinfo/{}",
"urlMain": "https://www.hexrpg.com/",
"username_claimed": "blue"
},
"HackTheBox": {
"errorType": "status_code",
"url": "https://forum.hackthebox.eu/profile/{}",
@ -994,7 +977,11 @@
"username_claimed": "naveennamani877"
},
"HackerNews": {
"errorMsg": "No such user.",
"::::README::::": "First errMsg invalid, second errMsg rate limited. Not ideal. Adjust for better rate limit filtering.",
"errorMsg": [
"No such user.",
"Sorry."
],
"errorType": "message",
"url": "https://news.ycombinator.com/user?id={}",
"urlMain": "https://news.ycombinator.com/",
@ -1010,6 +997,7 @@
"HackerRank": {
"errorMsg": "Something went wrong",
"errorType": "message",
"regexCheck": "^[^.]*?$",
"url": "https://hackerrank.com/{}",
"urlMain": "https://hackerrank.com/",
"username_claimed": "satznova"
@ -1073,8 +1061,7 @@
"username_claimed": "Micheal"
},
"IFTTT": {
"errorMsg": "The requested page or file does not exist",
"errorType": "message",
"errorType": "status_code",
"regexCheck": "^[A-Za-z0-9]{3,35}$",
"url": "https://www.ifttt.com/p/{}",
"urlMain": "https://www.ifttt.com/",
@ -1212,8 +1199,11 @@
"username_claimed": "blue"
},
"Kongregate": {
"errorMsg": "Sorry, no account with that name was found.",
"errorType": "message",
"errorType": "status_code",
"headers": {
"Accept": "text/html",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0"
},
"regexCheck": "^[a-zA-Z][a-zA-Z0-9_-]*$",
"url": "https://www.kongregate.com/accounts/{}",
"urlMain": "https://www.kongregate.com/",
@ -1258,7 +1248,8 @@
"username_claimed": "blue"
},
"Linktree": {
"errorType": "status_code",
"errorMsg": "\"statusCode\":404",
"errorType": "message",
"url": "https://linktr.ee/{}",
"urlMain": "https://linktr.ee/",
"username_claimed": "anne"
@ -1338,13 +1329,6 @@
"urlProbe": "https://api.mixcloud.com/{}/",
"username_claimed": "jenny"
},
"Modelhub": {
"errorType": "status_code",
"isNSFW": true,
"url": "https://www.modelhub.com/{}/videos",
"urlMain": "https://www.modelhub.com/",
"username_claimed": "secretcrush"
},
"Monkeytype": {
"errorType": "status_code",
"url": "https://monkeytype.com/profile/{}",
@ -1487,6 +1471,7 @@
},
"OpenStreetMap": {
"errorType": "status_code",
"regexCheck": "^[^.]*?$",
"url": "https://www.openstreetmap.org/user/{}",
"urlMain": "https://www.openstreetmap.org/",
"username_claimed": "blue"
@ -1497,12 +1482,6 @@
"urlMain": "https://opensource.com/",
"username_claimed": "red"
},
"Oracle Community": {
"errorType": "status_code",
"url": "https://community.oracle.com/people/{}",
"urlMain": "https://community.oracle.com",
"username_claimed": "dev"
},
"OurDJTalk": {
"errorMsg": "The specified member cannot be found",
"errorType": "message",
@ -1566,6 +1545,7 @@
},
"Pinkbike": {
"errorType": "status_code",
"regexCheck": "^[^.]*?$",
"url": "https://www.pinkbike.com/u/{}/",
"urlMain": "https://www.pinkbike.com/",
"username_claimed": "blue"
@ -1604,8 +1584,8 @@
"username_claimed": "swiftstickler"
},
"Polymart": {
"errorMsg": "Looks like we couldn't find this user. Sorry!",
"errorType": "message",
"errorType": "response_url",
"errorUrl": "https://polymart.org/user/-1",
"url": "https://polymart.org/user/{}",
"urlMain": "https://polymart.org/",
"username_claimed": "craciu25yt"
@ -1826,6 +1806,7 @@
"username_claimed": "blue"
},
"Slides": {
"errorCode": 204,
"errorType": "status_code",
"url": "https://slides.com/{}",
"urlMain": "https://slides.com/",
@ -1892,6 +1873,7 @@
},
"Splits.io": {
"errorType": "status_code",
"regexCheck": "^[^.]*?$",
"url": "https://splits.io/users/{}",
"urlMain": "https://splits.io",
"username_claimed": "cambosteve"
@ -1940,6 +1922,7 @@
"Strava": {
"errorMsg": "Strava | Running, Cycling &amp; Hiking App - Train, Track &amp; Share",
"errorType": "message",
"regexCheck": "^[^.]*?$",
"url": "https://www.strava.com/athletes/{}",
"urlMain": "https://www.strava.com/",
"username_claimed": "blue"
@ -1972,12 +1955,15 @@
"username_claimed": "traktrain"
},
"Telegram": {
"errorMsg": "<meta property=\"og:description\" content=\"\">",
"errorMsg": [
"<title>Telegram Messenger</title>",
"If you have <strong>Telegram</strong>, you can contact <a class=\"tgme_username_link\" href=\"tg://resolve?domain="
],
"errorType": "message",
"regexCheck": "^[a-zA-Z0-9_]{5,32}[^_]$",
"regexCheck": "^[a-zA-Z0-9_]{3,32}[^_]$",
"url": "https://t.me/{}",
"urlMain": "https://t.me/",
"username_claimed": "roopeshvs"
"username_claimed": "blue"
},
"Tellonym.me": {
"errorType": "status_code",
@ -2282,7 +2268,13 @@
"username_claimed": "blue"
},
"YandexMusic": {
"errorType": "status_code",
"::::README::::": "The first and third errorMsg relate to geo-restrictions and bot detection/captchas.",
"errorMsg": [
"\u041e\u0448\u0438\u0431\u043a\u0430 404",
"<meta name=\"description\" content=\"\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u043c\u0443\u0437\u044b\u043a\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c.",
"<input type=\"submit\" class=\"CheckboxCaptcha-Button\""
],
"errorType": "message",
"url": "https://music.yandex/users/{}/playlists",
"urlMain": "https://music.yandex",
"username_claimed": "ya.playlist"
@ -2394,6 +2386,7 @@
},
"eintracht": {
"errorType": "status_code",
"regexCheck": "^[^.]*?$",
"url": "https://community.eintracht.de/fans/{}",
"urlMain": "https://eintracht.de",
"username_claimed": "blue"
@ -2497,10 +2490,11 @@
"username_claimed": "blue"
},
"jeuxvideo": {
"errorMsg": "Vous \u00eates",
"errorType": "message",
"url": "http://www.jeuxvideo.com/profil/{}?mode=infos",
"urlMain": "http://www.jeuxvideo.com",
"errorType": "status_code",
"request_method": "GET",
"url": "https://www.jeuxvideo.com/profil/{}",
"urlMain": "https://www.jeuxvideo.com",
"urlProbe": "https://www.jeuxvideo.com/profil/{}?mode=infos",
"username_claimed": "adam"
},
"kofi": {
@ -2571,14 +2565,6 @@
"urlMain": "https://www.mercadolivre.com.br",
"username_claimed": "blue"
},
"metacritic": {
"errorMsg": "User not found",
"errorType": "message",
"regexCheck": "^(?![-_].)[A-Za-z0-9-_]{3,15}$",
"url": "https://www.metacritic.com/user/{}",
"urlMain": "https://www.metacritic.com/",
"username_claimed": "blue"
},
"minds": {
"errorMsg": "\"valid\":true",
"errorType": "message",
@ -2731,6 +2717,7 @@
"isNSFW": true,
"url": "https://xhamster.com/users/{}",
"urlMain": "https://xhamster.com",
"urlProbe": "https://xhamster.com/users/{}?old_browser=true",
"username_claimed": "blue"
},
"znanylekarz.pl": {

View file

@ -14,6 +14,7 @@ class QueryStatus(Enum):
AVAILABLE = "Available" # Username Not Detected
UNKNOWN = "Unknown" # Error Occurred While Trying To Detect Username
ILLEGAL = "Illegal" # Username Not Allowable For This Site
WAF = "WAF" # Request blocked by WAF (i.e. Cloudflare)
def __str__(self):
"""Convert Object To String.

View file

@ -232,7 +232,7 @@ def sherlock(
# A user agent is needed because some sites don't return the correct
# information since they think that we are bots (Which we actually are...)
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0",
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0",
}
if "headers" in net_info:
@ -351,7 +351,6 @@ def sherlock(
# Get the expected error type
error_type = net_info["errorType"]
error_code = net_info.get("errorCode")
# Retrieve future and ensure it has finished
future = net_info["request_future"]
@ -378,9 +377,20 @@ def sherlock(
query_status = QueryStatus.UNKNOWN
error_context = None
# As WAFs advance and evolve, they will occasionally block Sherlock and lead to false positives
# and negatives. Fingerprints should be added here to filter results that fail to bypass WAFs.
# Fingerprints should be highly targetted. Comment at the end of each fingerprint to indicate target and date.
WAFHitMsgs = [
'.loading-spinner{visibility:hidden}body.no-js .challenge-running{display:none}body.dark{background-color:#222;color:#d9d9d9}body.dark a{color:#fff}body.dark a:hover{color:#ee730a;text-decoration:underline}body.dark .lds-ring div{border-color:#999 transparent transparent}body.dark .font-red{color:#b20f03}body.dark .big-button,body.dark .pow-button{background-color:#4693ff;color:#1d1d1d}body.dark #challenge-success-text{background-image:url(data:image/svg+xml;base64,', # 2024-04-08 Cloudflare
'{return l.onPageView}}),Object.defineProperty(r,"perimeterxIdentifiers",{enumerable:' # 2024-04-09 PerimeterX / Human Security
]
if error_text is not None:
error_context = error_text
elif any(hitMsg in r.text for hitMsg in WAFHitMsgs):
query_status = QueryStatus.WAF
elif error_type == "message":
# error_flag True denotes no error found in the HTML
# error_flag False denotes error found in the HTML
@ -407,13 +417,16 @@ def sherlock(
else:
query_status = QueryStatus.AVAILABLE
elif error_type == "status_code":
# Checks if the Status Code is equal to the optional "errorCode" given in 'data.json'
if error_code == r.status_code:
error_codes = net_info.get("errorCode")
query_status = QueryStatus.CLAIMED
# Type consistency, allowing for both singlets and lists in manifest
if isinstance(error_codes, int):
error_codes = [error_codes]
if error_codes is not None and r.status_code in error_codes:
query_status = QueryStatus.AVAILABLE
# Checks if the status code of the response is 2XX
elif not r.status_code >= 300 or r.status_code < 200:
query_status = QueryStatus.CLAIMED
else:
elif r.status_code >= 300 or r.status_code < 200:
query_status = QueryStatus.AVAILABLE
elif error_type == "response_url":
# For this detection method, we have turned off the redirect.

View file

@ -38,7 +38,6 @@
1. ![](https://www.google.com/s2/favicons?domain=https://www.bikemap.net/) [Bikemap](https://www.bikemap.net/)
1. ![](https://www.google.com/s2/favicons?domain=https://forum.dangerousthings.com/) [BioHacking](https://forum.dangerousthings.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://bitbucket.org/) [BitBucket](https://bitbucket.org/)
1. ![](https://www.google.com/s2/favicons?domain=https://bitcoinforum.com) [BitCoinForum](https://bitcoinforum.com)
1. ![](https://www.google.com/s2/favicons?domain=https://bitwarden.com/) [Bitwarden Forum](https://bitwarden.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.blogger.com/) [Blogger](https://www.blogger.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://bodyspace.bodybuilding.com/) [BodyBuilding](https://bodyspace.bodybuilding.com/)
@ -117,7 +116,6 @@
1. ![](https://www.google.com/s2/favicons?domain=https://freelance.habr.com/) [Freelance.habr](https://freelance.habr.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.freelancer.com/) [Freelancer](https://www.freelancer.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://freesound.org/) [Freesound](https://freesound.org/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.g2g.com/) [G2G](https://www.g2g.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://gitlab.gnome.org/) [GNOME VCS](https://gitlab.gnome.org/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.gaiaonline.com/) [GaiaOnline](https://www.gaiaonline.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.gamespot.com/) [Gamespot](https://www.gamespot.com/)
@ -139,7 +137,6 @@
1. ![](https://www.google.com/s2/favicons?domain=http://en.gravatar.com/) [Gravatar](http://en.gravatar.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.gumroad.com/) [Gumroad](https://www.gumroad.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.gutefrage.net/) [Gutefrage](https://www.gutefrage.net/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.hexrpg.com/) [HEXRPG](https://www.hexrpg.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://forum.hackthebox.eu/) [HackTheBox](https://forum.hackthebox.eu/)
1. ![](https://www.google.com/s2/favicons?domain=https://hackaday.io/) [Hackaday](https://hackaday.io/)
1. ![](https://www.google.com/s2/favicons?domain=https://hackenproof.com/) [HackenProof (Hackers)](https://hackenproof.com/)
@ -194,7 +191,6 @@
1. ![](https://www.google.com/s2/favicons?domain=https://www.memrise.com/) [Memrise](https://www.memrise.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://minecraft.net/) [Minecraft](https://minecraft.net/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.mixcloud.com/) [MixCloud](https://www.mixcloud.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.modelhub.com/) [Modelhub](https://www.modelhub.com/) **(NSFW)**
1. ![](https://www.google.com/s2/favicons?domain=https://monkeytype.com/) [Monkeytype](https://monkeytype.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://motherless.com/) [Motherless](https://motherless.com/) **(NSFW)**
1. ![](https://www.google.com/s2/favicons?domain=https://www.motorradfrage.net/) [Motorradfrage](https://www.motorradfrage.net/)
@ -218,7 +214,6 @@
1. ![](https://www.google.com/s2/favicons?domain=https://ogu.gg/) [OGUsers](https://ogu.gg/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.openstreetmap.org/) [OpenStreetMap](https://www.openstreetmap.org/)
1. ![](https://www.google.com/s2/favicons?domain=https://opensource.com/) [Opensource](https://opensource.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://community.oracle.com) [Oracle Community](https://community.oracle.com)
1. ![](https://www.google.com/s2/favicons?domain=https://ourdjtalk.com/) [OurDJTalk](https://ourdjtalk.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://pcgamer.com) [PCGamer](https://pcgamer.com)
1. ![](https://www.google.com/s2/favicons?domain=https://psnprofiles.com/) [PSNProfiles.com](https://psnprofiles.com/)
@ -366,7 +361,7 @@
1. ![](https://www.google.com/s2/favicons?domain=https://www.interpals.net/) [interpals](https://www.interpals.net/)
1. ![](https://www.google.com/s2/favicons?domain=https://irecommend.ru/) [irecommend](https://irecommend.ru/)
1. ![](https://www.google.com/s2/favicons?domain=https://jbzd.com.pl/) [jbzd.com.pl](https://jbzd.com.pl/)
1. ![](https://www.google.com/s2/favicons?domain=http://www.jeuxvideo.com) [jeuxvideo](http://www.jeuxvideo.com)
1. ![](https://www.google.com/s2/favicons?domain=https://www.jeuxvideo.com) [jeuxvideo](https://www.jeuxvideo.com)
1. ![](https://www.google.com/s2/favicons?domain=https://ko-fi.com) [kofi](https://ko-fi.com)
1. ![](https://www.google.com/s2/favicons?domain=https://www.kwork.ru/) [kwork](https://www.kwork.ru/)
1. ![](https://www.google.com/s2/favicons?domain=https://lab.pentestit.ru/) [labpentestit](https://lab.pentestit.ru/)
@ -378,7 +373,6 @@
1. ![](https://www.google.com/s2/favicons?domain=https://mastodon.xyz/) [mastodon.technology](https://mastodon.xyz/)
1. ![](https://www.google.com/s2/favicons?domain=https://mastodon.xyz/) [mastodon.xyz](https://mastodon.xyz/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.mercadolivre.com.br) [mercadolivre](https://www.mercadolivre.com.br)
1. ![](https://www.google.com/s2/favicons?domain=https://www.metacritic.com/) [metacritic](https://www.metacritic.com/)
1. ![](https://www.google.com/s2/favicons?domain=https://www.minds.com) [minds](https://www.minds.com)
1. ![](https://www.google.com/s2/favicons?domain=https://moikrug.ru/) [moikrug](https://moikrug.ru/)
1. ![](https://www.google.com/s2/favicons?domain=https://mstdn.io/) [mstdn.io](https://mstdn.io/)