===== Sažetak ===== Sherlock je program otvorenog tipa (open-source) i dostupan je na [[https://github.com/sherlock-project/sherlock|GitHub-u]]. **Ovaj alat je stvoren kako bi pretraživao društvene mreže u potrazi za korisničkim imenom kojeg navedemo.** Sada možemo zamisliti situaciju u kojoj recimo znamo potpis osobe koja je provalila u sustav. Iz samog potpisa ništa ne znamo, no dobivanjem rezultata korisničkih imena na dosta društvenih mreža možda ćemo se uspješno pomaknuti nekoliko koraka ka ustvrđivanju identiteta pojedinca koji je provalio u sustav. > Hunt down social media accounts by username across social networks. (tekst na GitHub stranici projekta) Ovo je zbilja impresivan alat jer omogućuje pretraživanje čak 367 stranica, na kraju stranice će se nalaziti lista svih društvenih stranica koje su do sada podržane u Sherlock alatu. ===== Instalacija ===== Instalacija je vrlo jednostavna, ali zahtjeva da **imate instaliran Python**: - Preuzimanje izvornog koda: $ git clone https://github.com/sherlock-project/sherlock.git - Prebacivanje u direkotrij koji sadrži izvorni kod: $ cd sherlock - Instalacija potrebnih knjižnica za izvršavanje: $ python pip install -r requirements.txt ==== Testiranje instalacije ==== Nakon instalacije potrebno je pokrenuti testove kako bi vidjeli radi li sve kako spada s naredbama: - $ cd sherlock/sherlock - $ python -m unittest tests\all.py --verbose > Nije očekivano da testovi padaju, trebali bi svi proći (100%) no to ne ovisi samo o izvornom kodu već i o društvenim stranicama koje pretražuje sherlock. Ako neka stranica pretstavlja problem, nju se može uvrstiti u listu onih stranica koje se mogu ignorirati i to modificiranjem datoteke: test/.excluded_sites ===== Parametri ===== | **parametar** | **opis** | | -h | pomoć | | --version | prikazivanje verzije projekta | | --verbose, -v | prikaži dodatne informacije prilikom analize i pretraživanja | | --folderoutput FOLDEROUTPUT, --fo FOLDEROUTPUT | spremanje rezultata u slučaju višestrukih username-ova | | --output | spremanje rezultata u slučaju jednog username-a | | --tor, -t | šalji zahtjeve preko Tor-a, što povećava vrijeme izvršavanja i zahtjeva da je Tor instaliran i na PATH-u operacijskog sustava | | --unique-tor, -u | šalji svaki zahtjev preko novog Tor klijenta, povećava vrijeme izvršavanja i zahtjeva da je Tor instaliran i na PATH-u operacijskog sustava | | --csv | kreiranje CSV rezultata | | --xlsx | spremanje rezultata u obliku Microsoft Excel spreadsheet-a | | --site SITE_NAME | točno specificiraj koje stranice želiš pregledati | | --proxy PROXY_URL, -p PROXY_URL | šalji zahtjeve preko proxy-a | | --json JSON_FILE, -j JSON_FILE | učitaj podatke iz JSON datoteke ili s interneta | | --timeout TIMEOUT | vrijeme u sekundama, koliko će se čekati odgovor nakon slanja zahtjeva (predefinirani broj sekunda je 60) | | --print-all | ispisuj stranice i tamo gdje nije pronađeno korisničko ime | | --print-found | ispisuj stranice tamo gdje je korisničko ime pronađeno | | --no-color | ne ispisuj izlaze u boji | | --browse, -b | pretražuj rezultate u definiranom internetskom pregledniku | | --local, -l | zahtijevaj korištenje lokalne data.json datoteke | Ako želimo pretražiti niz korisničkih imena možemo napisati naredbu: $ python sherlock user1 user2 user3 ===== Primjeri izlaza ===== Na slici ispod se vidi primjer izlaza za naredbu: $ python sherlock halo {{ :racfor_wiki:seminari:1_z_0036514965.png?600 |}} Ako otvorimo bilo koji link, bilo koje društvene mreže, možemo vidjeti korisnički account. Na izlazu ispod se nalazi 9GAG account s username-om "halo". Primjetiti i samu URL putanju koja praktički govori postoji li zadaci username ukoliko postoji zadana stranica. {{ :racfor_wiki:seminari:2_z_0036514965.png?600 |}} Za pretpostaviti je da se svaka od zadanih stranica upravo pretražuje na taj način (naravno svaka posebno obrađuje izlaz, jer ne izbaci svaka stranica isti odgovor), da se pošalje URL zahtjev kojim se inače označavaju useri i na osnovu izlaza se definira postoji li korisnik s tim korisničkim imenom. Isprobajmo sada parametar "--verbose". Na slici ispod se može vidjeti da u ovom slučaju se ispisuje i vrijeme dobivanja odgovora društvene mreže na poslani upit. {{ :racfor_wiki:seminari:3_z_0036514965.png?600 |}} Pokušajmo sada dobiti tekstualni izlaz uz pomoć parametra "--output". Na slici ispod, vidi se kako u izlazu se nalaze zapravo poveznice na korisničke račune na društvenim mrežama za traženog korisnika. {{ :racfor_wiki:seminari:4_z_0036514965.png?600 |}} Ako se postavi zastavica "--csv" dobiju se malo detaljniji podaci, kao što su: * korisničko ime * ime društvene mreže na kojoj se pretražuje zadano korisničko ime * URL društvene mreže * URL korisničkog računa na društvenoj mreži * postoji li korisničko ime * HTTP status koji je dobiven kao odgovor * vrijeme potrebno za odgovor u sekundama Primjer izlaza CSV datoteke se može vidjeti ispod na slici. {{ :racfor_wiki:seminari:5_z_0036514965.png?800 |}} Za pretraživanje samo odabranih stranica koristi se zastavica "--site" nakon koje slijedi ime stranice za koje želimo ustanoviti nalazi li se tamo korisničko ime, a u slučaju da želimo odabrati više stranica možemo definirati to s naredbom: $ python sherlock --site --site ===== Dodavanje nove društvene mreže ===== Zanimljivo je kako postoji mogućnost dodavanja nove društevene mreže preko JSON file-a. Na putanji sherlock/sherlock/resources/data.json se mogu pronaći primjeri stranica koji su do sada definirani: {{ :racfor_wiki:seminari:6_z_0036514965.png?600 |}} Vidimo kako je struktura sljedeća: { "": { "errorType":, "url":, "urlMain":, "username_claimed":, "username_unclaimed": } } * "**errorType**" - govori na koji način se može otkriti postoji li korisničko ime na osnovu odgovora društevene mreže, više informacija se nalazi u odjeljku ispod * "**url**" - format URL-a s pomoću kojeg se traže korisnički računi, **taj URL mora sadržavati "{}" oznaku** u koju će se uvrstiti ime korisničkog računa kojeg pretražujemo * "**urlMain**" - URL koji vodi na naslovnu stranicu društvene mreže * "**username_claimed**" - korisničko ime koje zasigurno postoji na društvenoj mreži * "**username_unclaimed**" - korisničko ime koje zasigurno ne postoji na društvenoj mreži ==== errorType ==== Atribut "**errorType**" zapravo govori gdje treba tražiti pogrešku. Postoji nekoliko načina na koje se može ustvrditi postoji li korisničko ime ili ne, na osnovu odgovora: - "errorType": "**status_code**" - način koji se može koristiti kada društvena mreža odgovara s HTTP kodom pogreške "//404 Not Found//" i to kada joj se pošalje korisnički URL račun (u formatu koji je zadan u atributu "**url**") - "errorType": "**responseUrl**" - kada društvena mreža za url korisničkog računa preusmjerava na neki drugi URL, kada se koristi ovaj način otkrivanja pogreške, potrebno je navesti i atribut "**errorUrl**" koji sadrži URL na kojeg se preusmjerava korisnik - "errorType": "**message**" - kada na osnovu sadržaja odgovora se pokušava otkriti postojanje username-a, ovim načinom se pretražuje neki dio teksta u HTML dokumentu koji ukazuje na nepostojanje kroisničkog imena, kada se koristi ova metoda, potrebno je definirati i taj tekst koji se traži uz pomoć atributa "**errorMsg**" ==== Primjer ==== Kako bi dali primjer jedne društvene mreže možemo kreirati vlastiti **JSON** file. { "towardsdatascience": { "errorType": "message", "errorMsg": "Out of nothing, something." "url": "https://{}.medium.com", "urlMain": "https://towardsdatascience.com/", "username_claimed": "dr-mehmet-yildiz", "username_unclaimed": "nematakvogusernamea" } } Za svako dodavanje društvene mreže u bazu provjeravanja možemo slijediti sljedeće korake: - Prvi korak je otkriti kako izgleda URL na korisničkim računima (na slikama se vidi kako se prvi dio URL-a se mijenja) {{ :racfor_wiki:seminari:7_z_0036514965.png?600 |}} {{ :racfor_wiki:seminari:8_z_0036514965.png?600 |}} - zapisati atribut "**url**" tako da na mjestima gdje se nalazi korisničko ime u URL-u se postavi oznaka "**{}**" - Otići na početnu stranicu i dodati njen url u atribut "**urlMain**" - Potrebno je definirati jednog korisnika u atribut "**username_claimed**" a koji zasigurno postoji - Potrebno je definirati jedno korisničko ime za koje smatramo da ne postoji i probavanjem pronaći jednog username-a koji zaista ne postoji - Pogledati koji je odgovor društvene mreže na poslani upit i postupiti u skladu s pravilima koja su definirana u odjeljku "**errorType" ** U slučaju koji se nalazi u primjeru, dobije se odgovor kao na slici. {{ :racfor_wiki:seminari:9_z_0036514965.png?600 |}} Možemo vidjeti kako se dobije neki odgovor pa tip "**status_code**" ne dolazi u obzir. Isto tako niti "**responseUrl**" jer ako se pogleda URL stranice ona je ostala ista. Jedino što ukazuje na pogrešku jest tekst koji se pojavio, stoga je "**errorType**": "**message**". Sada postoji dilema treba li koristiti tekst "//PAGE NOT FOUND//" ili "//404//" ili "//Out of nothing, something.//" ili nešto sasvim drugo, za atribut "**errorMsg**". Ja sam se odlučio koristiti "//Out of nothing, something//". Kada se uputi naredba: $ python sherlock halo --json dobije se odgovor kao na slici: {{ :racfor_wiki:seminari:10_z_0036514965.png?600 |}} Dok s naredbom: $ python sherlock mike --json dobije se odgovor o postajanju user-a, odgovor je na slici: {{ :racfor_wiki:seminari:11_z_0036514965.png?600 |}} -------- Lista do sada podržanih stranica: > //2Dimensions, 3dnews, 7Cups, 9GAG, About.me, Academia.edu, Airbit, Airliners, Alik.cz, AllMyLinks, Anilist, Apple Developer, Apple Discussions, Archive of Our Own, Archive.org, Arduino, ArtStation, Asciinema, Ask Fedora, AskFM, Audiojungle, Autofrage, Avizo, BLIP.fm, BOOTH, Bandcamp, Bazar.cz, Behance, Bezuzyteczna, BiggerPockets, Bikemap, BinarySearch, BioHacking, BitBucket, BitCoinForum, Bitwarden Forum, Blogger, BodyBuilding, BongaCams, Bookcrossing, BraveCommunity, BuyMeACoffee, BuzzFeed, CGTrader, CNET, CTAN, Carbonmade, Career.habr, Championat, Chatujme.cz, ChaturBate, Chess, CloudflareCommunity, Clozemaster, Clubhouse, Codecademy, Codechef, Codepen, Codewars, Coil, ColourLovers, Contently, Coroflot, Cracked, Crevado, Crowdin, Cryptomator Forum, Cults3D, DEV Community, DailyMotion, DeviantART, Discogs, Discuss.Elastic.co, Disqus, Docker Hub, Dribbble, Duolingo, Enjin, Envato Forum, Etsy, Euw, EyeEm, F3.cool, Facebook, Fameswap, Fandom, Finanzfrage, Fiverr, Flickr, Flightradar24, Flipboard, Football, FortniteTracker, Fosstodon, Freelance.habr, Freelancer, Freesound, G2G, GNOME VCS, GaiaOnline, GeeksforGeeks, Gamespot, Genius (Artists), Genius (Users), Gesundheitsfrage, GetMyUni, Giphy, GitBook, GitHub, GitLab, Gitee, GoodReads, Google Play, Gradle, Grailed, Gravatar, Gumroad, GunsAndAmmo, Gutefrage, HEXRPG, HackTheBox, Hackaday, HackerEarth, HackerNews, HackerOne, HackerRank, Harvard Scholar, Hashnode, Houzz, HubPages, Hubski, ICQ, IFTTT, ImgUp.cz, Imgur, Instagram, Instructables, Ionic Forum, Issuu, Itch.io, Itemfix, Jellyfin Weblate, Jimdo, Joplin Forum, KEAKR, Kaggle, Keybase, Kik, Kongregate, LOR, Launchpad, LeetCode, LessWrong, Letterboxd, Lichess, Linktree, Listed, LiveJournal, Lobsters, Lolchess, LottieFiles, Mapify, Medium, Memrise, Minecraft, MixCloud, Motorradfrage, Munzee, MyAnimeList, MyMiniFactory, Myspace, NICommunityForum, NationStates Nation, NationStates Region, Naver, Needrom, Newgrounds, Nextcloud Forum, Nightbot, Ninja Kiwi, NotABug.org, Nyaa.si, OGUsers, OK, OnlyFans, OpenStreetMap, Opensource, Oracle Community, OurDJTalk, PCGamer, PSNProfiles.com, Packagist, Pastebin, Patreon, PepperIT, Periscope, Pinkbike, PlayStore, Pokemon Showdown, Polarsteps, Polygon, Polymart, Pornhub, ProductHunt, PromoDJ, PyPi, Quizlet, Rajce.net, Rate Your Music, Rclone Forum, Redbubble, Reddit, Reisefrage, Replit.com, ResearchGate, ReverbNation, Roblox, RoyalCams, RubyGems, Rumble, RuneScape, SWAPD, Sbazar.cz, Scratch, Scribd, ShitpostBot5000, Shpock, Signal, Sketchfab, Slack, Slant, Slashdot, SlideShare, Slides, Smule, Snapchat, SoundCloud, SourceForge, SoylentNews, Speedrun.com, Splice, Splits.io, Sporcle, Sportlerfrage, SportsRU, Star Citizen, SteamGroup, Strava, SublimeForum, TETR.IO, TLDR Legal, TRAKTRAIN, Telegram, Tellonym.me, Tenor, ThemeForest, TikTok, Tinder, TradingView, Trakt, TrashboxRU, Trello, TryHackMe, Twitch, Twitter, Typeracer, Ultimate-Guitar, Unsplash, VK, VSCO, Velomania, Vero, Vimeo, Virgool, VirusTotal, WICG Forum, Warrior Forum, Wattpad, We Heart It, WebNode, Weblate, Whonix Forum, Wikidot, Wikipedia, Windy, Wix, WolframalphaForum, WordPress, WordPressOrg, Wordnik, Wykop, Xbox Gamertag, Xvideos, YandexMusic, YouNow, YouPic, YouPorn, Zhihu, akniga, aminoapp, authorSTREAM, babyRU, babyblogRU, ebio.gg, chaos.social, couchsurfing, d3RU, dailykos, datingRU, devRant, drive2, eGPU, eintracht, fixya, fl, forum_guns, forumhouseRU, freecodecamp, furaffinity, geocaching, gfycat, habr, hackster, hunting, iMGSRC.RU, igromania, interpals, irecommend, jbzd.com.pl, jeuxvideo, kofi, koo, kwork, labpentestit, last.fm, leasehackr, livelib, mastodon.cloud, mastodon.social, mastodon.xyz, mercadolivre, metacritic, minds, moikrug, mstdn.io, nairaland.com, nnRU, note, npm, opennet, osu!, phpRU, pikabu, pr0gramm, prog.hu, satsisRU, sessionize, skyrock, social.tchncs.de, spletnik, svidbook, toster, uid, wiki.vg, xHamster, znanylekarz.pl, zoomit// ====== Zaključak ====== Poznato je da određeni **zlonamjerni IT stručnjaci** (popularno zvani "//hakeri//") znaju ostaviti neke inicijale ili svoj potpis. Za pretpostaviti je da će se oni u svojim krugovima nastojati oglašavati i svojim virtualnim kolegama davati do znanja da su postigli određene pomake i uspijehe. Naravno da je vrlo teško ustvrditi iz samo tog imena ili potpisa tko stoji iza napada, no logičan slijed događaja je pokušati pronaći gdje još stoji taj potpis. Malo je vjerojatno da će se različiti IT stručnjaci potpisivati na isti način, već žele biti preopoznatljivi i jedinstveni u svojim krugovima. Stoga bi bilo dobro imati alat koji bi bio u mogućnosti pretraživati zbilja puno stranica u potrazi za stranicom odnosno korisničkim imenom istim kao i potpis. U tom slučaju tu **Sherlock** dolazi na scenu. ====== Literatura ====== [1] [[https://github.com/sherlock-project/sherlock | Sherlock GitHub]] [2] [[https://github.com/sherlock-project/sherlock/wiki/Adding-Sites-To-Sherlock | Adding new sites to the Sherlock site list]] [3] [[https://towardsdatascience.com/ | Social media example]]