moriarty-project 0.1.6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- moriarty/__init__.py +5 -0
- moriarty/adapters/__init__.py +0 -0
- moriarty/agent/__init__.py +0 -0
- moriarty/assets/modules/.gitkeep +0 -0
- moriarty/assets/modules/asia/douban.yaml +19 -0
- moriarty/assets/modules/asia/kakao.yaml +19 -0
- moriarty/assets/modules/asia/line.yaml +19 -0
- moriarty/assets/modules/asia/mixi.yaml +19 -0
- moriarty/assets/modules/asia/naver.yaml +19 -0
- moriarty/assets/modules/asia/qq.yaml +19 -0
- moriarty/assets/modules/asia/vk.yaml +19 -0
- moriarty/assets/modules/asia/wechat.yaml +19 -0
- moriarty/assets/modules/asia/weibo.yaml +19 -0
- moriarty/assets/modules/asia/xiaohongshu.yaml +19 -0
- moriarty/assets/modules/behance.yaml +47 -0
- moriarty/assets/modules/business/crunchbase.yaml +27 -0
- moriarty/assets/modules/business/fiverr.yaml +32 -0
- moriarty/assets/modules/business/freelancer.yaml +27 -0
- moriarty/assets/modules/business/glassdoor.yaml +27 -0
- moriarty/assets/modules/business/guru.yaml +26 -0
- moriarty/assets/modules/business/indeed.yaml +25 -0
- moriarty/assets/modules/business/monster.yaml +25 -0
- moriarty/assets/modules/business/peopleperhour.yaml +26 -0
- moriarty/assets/modules/business/toptal.yaml +28 -0
- moriarty/assets/modules/business/upwork.yaml +27 -0
- moriarty/assets/modules/business/ziprecruiter.yaml +25 -0
- moriarty/assets/modules/content/buymeacoffee.yaml +27 -0
- moriarty/assets/modules/content/gumroad.yaml +27 -0
- moriarty/assets/modules/content/ko-fi.yaml +32 -0
- moriarty/assets/modules/content/onlyfans.yaml +27 -0
- moriarty/assets/modules/content/patreon.yaml +33 -0
- moriarty/assets/modules/content/substack.yaml +32 -0
- moriarty/assets/modules/creative/500px.yaml +31 -0
- moriarty/assets/modules/creative/artstation.yaml +33 -0
- moriarty/assets/modules/creative/deviantart.yaml +32 -0
- moriarty/assets/modules/creative/flickr.yaml +31 -0
- moriarty/assets/modules/creative/pexels.yaml +26 -0
- moriarty/assets/modules/creative/unsplash.yaml +26 -0
- moriarty/assets/modules/creative/vimeo.yaml +31 -0
- moriarty/assets/modules/crypto/binance.yaml +27 -0
- moriarty/assets/modules/crypto/bitcointalk.yaml +33 -0
- moriarty/assets/modules/crypto/coinbase.yaml +26 -0
- moriarty/assets/modules/crypto/etherscan.yaml +32 -0
- moriarty/assets/modules/crypto/foundation.yaml +28 -0
- moriarty/assets/modules/crypto/kraken.yaml +27 -0
- moriarty/assets/modules/crypto/mirror.yaml +27 -0
- moriarty/assets/modules/crypto/niftygateway.yaml +26 -0
- moriarty/assets/modules/crypto/opensea.yaml +32 -0
- moriarty/assets/modules/crypto/rarible.yaml +27 -0
- moriarty/assets/modules/crypto/superrare.yaml +29 -0
- moriarty/assets/modules/dating/bumble.yaml +25 -0
- moriarty/assets/modules/dating/grindr.yaml +27 -0
- moriarty/assets/modules/dating/happn.yaml +25 -0
- moriarty/assets/modules/dating/her.yaml +27 -0
- moriarty/assets/modules/dating/hinge.yaml +25 -0
- moriarty/assets/modules/dating/match.yaml +25 -0
- moriarty/assets/modules/dating/meetme.yaml +27 -0
- moriarty/assets/modules/dating/okcupid.yaml +25 -0
- moriarty/assets/modules/dating/pof.yaml +25 -0
- moriarty/assets/modules/dating/tinder.yaml +25 -0
- moriarty/assets/modules/dating-nsfw/adultfriendfinder.yaml +28 -0
- moriarty/assets/modules/dating-nsfw/ashley-madison.yaml +26 -0
- moriarty/assets/modules/design/adobe-portfolio.yaml +27 -0
- moriarty/assets/modules/design/carbonmade.yaml +27 -0
- moriarty/assets/modules/design/cgsociety.yaml +27 -0
- moriarty/assets/modules/design/coroflot.yaml +27 -0
- moriarty/assets/modules/design/figma.yaml +27 -0
- moriarty/assets/modules/design/sketch.yaml +26 -0
- moriarty/assets/modules/dev/bitbucket.yaml +35 -0
- moriarty/assets/modules/dev/codeforces.yaml +32 -0
- moriarty/assets/modules/dev/codepen.yaml +34 -0
- moriarty/assets/modules/dev/hackerone.yaml +32 -0
- moriarty/assets/modules/dev/hackthebox.yaml +27 -0
- moriarty/assets/modules/dev/huggingface.yaml +27 -0
- moriarty/assets/modules/dev/kaggle.yaml +32 -0
- moriarty/assets/modules/dev/leetcode.yaml +32 -0
- moriarty/assets/modules/dev/replit.yaml +31 -0
- moriarty/assets/modules/dribbble.yaml +53 -0
- moriarty/assets/modules/ecommerce/etsy.yaml +32 -0
- moriarty/assets/modules/education/duolingo.yaml +32 -0
- moriarty/assets/modules/education/edx.yaml +26 -0
- moriarty/assets/modules/education/khanacademy.yaml +26 -0
- moriarty/assets/modules/education/lynda.yaml +27 -0
- moriarty/assets/modules/education/memrise.yaml +27 -0
- moriarty/assets/modules/education/pluralsight.yaml +27 -0
- moriarty/assets/modules/education/skillshare.yaml +27 -0
- moriarty/assets/modules/education/udacity.yaml +27 -0
- moriarty/assets/modules/email/github_email.yaml +40 -0
- moriarty/assets/modules/email/gravatar.yaml +23 -0
- moriarty/assets/modules/europe/badoo.yaml +19 -0
- moriarty/assets/modules/europe/lovoo.yaml +19 -0
- moriarty/assets/modules/europe/myspace.yaml +19 -0
- moriarty/assets/modules/europe/netlog.yaml +19 -0
- moriarty/assets/modules/europe/ok.yaml +19 -0
- moriarty/assets/modules/europe/skyrock.yaml +19 -0
- moriarty/assets/modules/europe/studivz.yaml +19 -0
- moriarty/assets/modules/europe/tuenti.yaml +19 -0
- moriarty/assets/modules/europe/viadeo.yaml +19 -0
- moriarty/assets/modules/europe/xing.yaml +19 -0
- moriarty/assets/modules/fitness/fitbit.yaml +27 -0
- moriarty/assets/modules/fitness/garmin.yaml +27 -0
- moriarty/assets/modules/fitness/myfitnesspal.yaml +27 -0
- moriarty/assets/modules/fitness/strava.yaml +33 -0
- moriarty/assets/modules/fitness/zwift.yaml +28 -0
- moriarty/assets/modules/food/allrecipes.yaml +27 -0
- moriarty/assets/modules/food/tasty.yaml +27 -0
- moriarty/assets/modules/food/yelp.yaml +32 -0
- moriarty/assets/modules/food/zomato.yaml +28 -0
- moriarty/assets/modules/forums/4chan.yaml +26 -0
- moriarty/assets/modules/forums/8kun.yaml +26 -0
- moriarty/assets/modules/forums/9gag.yaml +26 -0
- moriarty/assets/modules/forums/discourse.yaml +26 -0
- moriarty/assets/modules/forums/disqus.yaml +31 -0
- moriarty/assets/modules/forums/hackernews.yaml +32 -0
- moriarty/assets/modules/forums/launchpad.yaml +27 -0
- moriarty/assets/modules/forums/phpbb.yaml +25 -0
- moriarty/assets/modules/forums/quora.yaml +32 -0
- moriarty/assets/modules/forums/serverfault.yaml +27 -0
- moriarty/assets/modules/forums/slashdot.yaml +28 -0
- moriarty/assets/modules/forums/stackexchange.yaml +32 -0
- moriarty/assets/modules/forums/superuser.yaml +27 -0
- moriarty/assets/modules/forums/vbulletin.yaml +25 -0
- moriarty/assets/modules/forums/xenforo.yaml +25 -0
- moriarty/assets/modules/forums-nsfw/kiwifarms.yaml +25 -0
- moriarty/assets/modules/forums-nsfw/lolcow.yaml +26 -0
- moriarty/assets/modules/gaming/apextracker.yaml +27 -0
- moriarty/assets/modules/gaming/battlenet.yaml +26 -0
- moriarty/assets/modules/gaming/chess.yaml +30 -0
- moriarty/assets/modules/gaming/discord-public.yaml +27 -0
- moriarty/assets/modules/gaming/dotabuff.yaml +32 -0
- moriarty/assets/modules/gaming/epicgames.yaml +25 -0
- moriarty/assets/modules/gaming/faceit.yaml +33 -0
- moriarty/assets/modules/gaming/fortnitetracker.yaml +32 -0
- moriarty/assets/modules/gaming/gog.yaml +26 -0
- moriarty/assets/modules/gaming/itch.yaml +32 -0
- moriarty/assets/modules/gaming/kongregate.yaml +25 -0
- moriarty/assets/modules/gaming/minecraft.yaml +31 -0
- moriarty/assets/modules/gaming/opgg.yaml +32 -0
- moriarty/assets/modules/gaming/origin.yaml +26 -0
- moriarty/assets/modules/gaming/playstation.yaml +30 -0
- moriarty/assets/modules/gaming/roblox.yaml +31 -0
- moriarty/assets/modules/gaming/xbox.yaml +25 -0
- moriarty/assets/modules/github.yaml +68 -0
- moriarty/assets/modules/gitlab.yaml +60 -0
- moriarty/assets/modules/instagram.yaml +48 -0
- moriarty/assets/modules/latam/fotolog.yaml +27 -0
- moriarty/assets/modules/latam/orkut.yaml +26 -0
- moriarty/assets/modules/latam/taringa.yaml +27 -0
- moriarty/assets/modules/learning/coursera.yaml +26 -0
- moriarty/assets/modules/learning/udemy.yaml +26 -0
- moriarty/assets/modules/linkedin.yaml +40 -0
- moriarty/assets/modules/marketplaces/depop.yaml +28 -0
- moriarty/assets/modules/marketplaces/ebay.yaml +32 -0
- moriarty/assets/modules/marketplaces/grailed.yaml +27 -0
- moriarty/assets/modules/marketplaces/mercari.yaml +26 -0
- moriarty/assets/modules/marketplaces/poshmark.yaml +27 -0
- moriarty/assets/modules/marketplaces/reverb.yaml +27 -0
- moriarty/assets/modules/marketplaces/vinted.yaml +28 -0
- moriarty/assets/modules/medium.yaml +44 -0
- moriarty/assets/modules/music/audiomack.yaml +26 -0
- moriarty/assets/modules/music/bandcamp.yaml +30 -0
- moriarty/assets/modules/music/beatport.yaml +28 -0
- moriarty/assets/modules/music/deezer.yaml +26 -0
- moriarty/assets/modules/music/discogs.yaml +32 -0
- moriarty/assets/modules/music/genius.yaml +26 -0
- moriarty/assets/modules/music/lastfm.yaml +30 -0
- moriarty/assets/modules/music/mixcloud.yaml +26 -0
- moriarty/assets/modules/music/reverbnation.yaml +31 -0
- moriarty/assets/modules/music/soundcloud.yaml +31 -0
- moriarty/assets/modules/music/spotify.yaml +26 -0
- moriarty/assets/modules/music/tidal.yaml +26 -0
- moriarty/assets/modules/nsfw/adultwork.yaml +27 -0
- moriarty/assets/modules/nsfw/bongacams.yaml +28 -0
- moriarty/assets/modules/nsfw/cam4.yaml +28 -0
- moriarty/assets/modules/nsfw/chaturbate.yaml +28 -0
- moriarty/assets/modules/nsfw/clips4sale.yaml +27 -0
- moriarty/assets/modules/nsfw/extralunchmoney.yaml +27 -0
- moriarty/assets/modules/nsfw/fansly.yaml +28 -0
- moriarty/assets/modules/nsfw/fetlife.yaml +28 -0
- moriarty/assets/modules/nsfw/iwantclips.yaml +27 -0
- moriarty/assets/modules/nsfw/justforfans.yaml +28 -0
- moriarty/assets/modules/nsfw/loyalfans.yaml +28 -0
- moriarty/assets/modules/nsfw/manyvids.yaml +27 -0
- moriarty/assets/modules/nsfw/myfreecams.yaml +28 -0
- moriarty/assets/modules/nsfw/niteflirt.yaml +26 -0
- moriarty/assets/modules/nsfw/pornhub.yaml +32 -0
- moriarty/assets/modules/nsfw/redtube.yaml +27 -0
- moriarty/assets/modules/nsfw/stripchat.yaml +28 -0
- moriarty/assets/modules/nsfw/xhamster.yaml +27 -0
- moriarty/assets/modules/nsfw/xvideos.yaml +27 -0
- moriarty/assets/modules/nsfw/youporn.yaml +27 -0
- moriarty/assets/modules/photography/eyeem.yaml +25 -0
- moriarty/assets/modules/photography/fotki.yaml +25 -0
- moriarty/assets/modules/photography/photobucket.yaml +26 -0
- moriarty/assets/modules/photography/smugmug.yaml +25 -0
- moriarty/assets/modules/photography/vsco.yaml +27 -0
- moriarty/assets/modules/pinterest.yaml +40 -0
- moriarty/assets/modules/podcasts/anchor.yaml +26 -0
- moriarty/assets/modules/podcasts/castbox.yaml +26 -0
- moriarty/assets/modules/podcasts/podbean.yaml +26 -0
- moriarty/assets/modules/professional/about.yaml +31 -0
- moriarty/assets/modules/professional/academia.yaml +27 -0
- moriarty/assets/modules/professional/angellist.yaml +27 -0
- moriarty/assets/modules/professional/calendly.yaml +26 -0
- moriarty/assets/modules/professional/issuu.yaml +27 -0
- moriarty/assets/modules/professional/mendeley.yaml +27 -0
- moriarty/assets/modules/professional/notion.yaml +27 -0
- moriarty/assets/modules/professional/orcid.yaml +27 -0
- moriarty/assets/modules/professional/producthunt.yaml +31 -0
- moriarty/assets/modules/professional/researchgate.yaml +32 -0
- moriarty/assets/modules/professional/scribd.yaml +27 -0
- moriarty/assets/modules/professional/slideshare.yaml +31 -0
- moriarty/assets/modules/professional/trello.yaml +26 -0
- moriarty/assets/modules/professional/typeform.yaml +27 -0
- moriarty/assets/modules/reddit.yaml +46 -0
- moriarty/assets/modules/regional/amino.yaml +27 -0
- moriarty/assets/modules/regional/ask-fm.yaml +32 -0
- moriarty/assets/modules/regional/babycenter.yaml +26 -0
- moriarty/assets/modules/regional/cafemom.yaml +27 -0
- moriarty/assets/modules/regional/care2.yaml +27 -0
- moriarty/assets/modules/regional/diaspora.yaml +26 -0
- moriarty/assets/modules/regional/ello.yaml +27 -0
- moriarty/assets/modules/regional/gaia.yaml +27 -0
- moriarty/assets/modules/regional/habbo.yaml +27 -0
- moriarty/assets/modules/regional/imvu.yaml +27 -0
- moriarty/assets/modules/regional/lemmy.yaml +27 -0
- moriarty/assets/modules/regional/peertube.yaml +26 -0
- moriarty/assets/modules/regional/pixelfed.yaml +27 -0
- moriarty/assets/modules/regional/plurk.yaml +26 -0
- moriarty/assets/modules/regional/recroom.yaml +27 -0
- moriarty/assets/modules/regional/secondlife.yaml +26 -0
- moriarty/assets/modules/regional/vine-archive.yaml +27 -0
- moriarty/assets/modules/regional/vrchat.yaml +27 -0
- moriarty/assets/modules/regional/weheartit.yaml +27 -0
- moriarty/assets/modules/social/anilist.yaml +27 -0
- moriarty/assets/modules/social/beacons.yaml +26 -0
- moriarty/assets/modules/social/blogger.yaml +27 -0
- moriarty/assets/modules/social/crunchyroll.yaml +27 -0
- moriarty/assets/modules/social/discord.yaml +27 -0
- moriarty/assets/modules/social/dreamwidth.yaml +26 -0
- moriarty/assets/modules/social/facebook.yaml +34 -0
- moriarty/assets/modules/social/goodreads.yaml +32 -0
- moriarty/assets/modules/social/imdb.yaml +27 -0
- moriarty/assets/modules/social/kitsu.yaml +27 -0
- moriarty/assets/modules/social/letterboxd.yaml +32 -0
- moriarty/assets/modules/social/linktree.yaml +26 -0
- moriarty/assets/modules/social/livejournal.yaml +27 -0
- moriarty/assets/modules/social/mastodon.yaml +30 -0
- moriarty/assets/modules/social/minds.yaml +25 -0
- moriarty/assets/modules/social/myanimelist.yaml +32 -0
- moriarty/assets/modules/social/ravelry.yaml +27 -0
- moriarty/assets/modules/social/snapchat.yaml +25 -0
- moriarty/assets/modules/social/telegram.yaml +35 -0
- moriarty/assets/modules/social/tiktok.yaml +35 -0
- moriarty/assets/modules/social/trakt.yaml +28 -0
- moriarty/assets/modules/social/wattpad.yaml +32 -0
- moriarty/assets/modules/social/wordpress-com.yaml +26 -0
- moriarty/assets/modules/sports/espn.yaml +26 -0
- moriarty/assets/modules/sports/untappd.yaml +32 -0
- moriarty/assets/modules/stackoverflow.yaml +47 -0
- moriarty/assets/modules/steam.yaml +47 -0
- moriarty/assets/modules/streaming/caffeine.yaml +25 -0
- moriarty/assets/modules/streaming/dlive.yaml +27 -0
- moriarty/assets/modules/streaming/trovo.yaml +25 -0
- moriarty/assets/modules/travel/airbnb.yaml +26 -0
- moriarty/assets/modules/travel/booking.yaml +26 -0
- moriarty/assets/modules/travel/couchsurfing.yaml +27 -0
- moriarty/assets/modules/travel/tripadvisor.yaml +32 -0
- moriarty/assets/modules/tumblr.yaml +40 -0
- moriarty/assets/modules/twitch.yaml +48 -0
- moriarty/assets/modules/twitter.yaml +39 -0
- moriarty/assets/modules/youtube.yaml +42 -0
- moriarty/assets/templates/cves/CVE-2017-5638.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2018-7600.yaml +30 -0
- moriarty/assets/templates/cves/CVE-2019-11510.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2019-19781.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2020-14882.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2020-14883.yaml +29 -0
- moriarty/assets/templates/cves/CVE-2020-3452.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2020-5902.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2021-21972.yaml +31 -0
- moriarty/assets/templates/cves/CVE-2021-21985.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2021-26084.yaml +30 -0
- moriarty/assets/templates/cves/CVE-2021-41773.yaml +25 -0
- moriarty/assets/templates/cves/CVE-2021-42013.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2021-44228.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2022-0185.yaml +21 -0
- moriarty/assets/templates/cves/CVE-2022-1388.yaml +36 -0
- moriarty/assets/templates/cves/CVE-2022-22954.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2022-22965.yaml +31 -0
- moriarty/assets/templates/cves/CVE-2022-26134.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2023-22515.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2023-22527.yaml +29 -0
- moriarty/assets/templates/cves/CVE-2023-23752.yaml +33 -0
- moriarty/assets/templates/cves/CVE-2023-27350.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2023-2868.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2023-34362.yaml +27 -0
- moriarty/assets/templates/cves/CVE-2023-3519.yaml +28 -0
- moriarty/assets/templates/cves/CVE-2023-4966.yaml +27 -0
- moriarty/assets/templates/default-logins/admin-weak.yaml +40 -0
- moriarty/assets/templates/default-logins/wordpress-default.yaml +38 -0
- moriarty/assets/templates/exposures/aws-credentials.yaml +35 -0
- moriarty/assets/templates/exposures/backup-files.yaml +36 -0
- moriarty/assets/templates/exposures/database-files.yaml +34 -0
- moriarty/assets/templates/exposures/docker-exposed.yaml +31 -0
- moriarty/assets/templates/exposures/env-exposed.yaml +41 -0
- moriarty/assets/templates/exposures/git-exposed.yaml +41 -0
- moriarty/assets/templates/exposures/phpinfo.yaml +36 -0
- moriarty/assets/templates/exposures/svn-exposed.yaml +28 -0
- moriarty/assets/templates/fuzzing/api-endpoints.yaml +39 -0
- moriarty/assets/templates/fuzzing/common-files.yaml +37 -0
- moriarty/assets/templates/fuzzing/open-redirect-fuzz.yaml +35 -0
- moriarty/assets/templates/fuzzing/xss-search-fuzz.yaml +29 -0
- moriarty/assets/templates/git-config.yaml +18 -0
- moriarty/assets/templates/misconfigurations/cors-misconfiguration.yaml +30 -0
- moriarty/assets/templates/misconfigurations/debug-enabled.yaml +29 -0
- moriarty/assets/templates/misconfigurations/directory-listing.yaml +33 -0
- moriarty/assets/templates/misconfigurations/jwt-none-algo.yaml +30 -0
- moriarty/assets/templates/misconfigurations/ssl-tls-weak.yaml +23 -0
- moriarty/assets/templates/vulnerabilities/lfi-basic.yaml +31 -0
- moriarty/assets/templates/vulnerabilities/open-redirect.yaml +31 -0
- moriarty/assets/templates/vulnerabilities/rce-basic.yaml +34 -0
- moriarty/assets/templates/vulnerabilities/sqli-error.yaml +39 -0
- moriarty/assets/templates/vulnerabilities/ssrf-basic.yaml +31 -0
- moriarty/assets/templates/vulnerabilities/xss-reflected.yaml +38 -0
- moriarty/assets/templates/vulnerabilities/xxe-basic.yaml +30 -0
- moriarty/assets/wordlists/subdomains-1000.txt +1063 -0
- moriarty/cli/__init__.py +3 -0
- moriarty/cli/app.py +120 -0
- moriarty/cli/async_utils.py +19 -0
- moriarty/cli/dns.py +83 -0
- moriarty/cli/domain_cmd.py +572 -0
- moriarty/cli/email.py +383 -0
- moriarty/cli/email_investigate.py +224 -0
- moriarty/cli/intelligence.py +329 -0
- moriarty/cli/output.py +62 -0
- moriarty/cli/rdap.py +94 -0
- moriarty/cli/state.py +38 -0
- moriarty/cli/tls.py +91 -0
- moriarty/cli/user.py +227 -0
- moriarty/core/cache_backend.py +223 -0
- moriarty/core/config_manager.py +303 -0
- moriarty/correlator/__init__.py +0 -0
- moriarty/data/__init__.py +81 -0
- moriarty/data/ioc/__init__.py +142 -0
- moriarty/data/ioc/matcher.py +254 -0
- moriarty/data/ioc/types.py +267 -0
- moriarty/data/local_intelligence.py +507 -0
- moriarty/data/signature_loaders/__init__.py +103 -0
- moriarty/data/signature_loaders/base.py +54 -0
- moriarty/data/signature_loaders/ioc_feed.py +356 -0
- moriarty/data/signature_loaders/wappalyzer.py +112 -0
- moriarty/dsl/__init__.py +0 -0
- moriarty/dsl/loader.py +99 -0
- moriarty/dsl/schema.py +47 -0
- moriarty/export/__init__.py +0 -0
- moriarty/intelligence/__init__.py +27 -0
- moriarty/intelligence/__main__.py +150 -0
- moriarty/intelligence/config.py +395 -0
- moriarty/intelligence/ioc.py +267 -0
- moriarty/intelligence/signatures.py +550 -0
- moriarty/intelligence/storage.py +501 -0
- moriarty/interop/__init__.py +0 -0
- moriarty/logging/__init__.py +0 -0
- moriarty/logging/config.py +47 -0
- moriarty/models/__init__.py +16 -0
- moriarty/models/assertion.py +24 -0
- moriarty/models/entity.py +22 -0
- moriarty/models/evidence.py +37 -0
- moriarty/models/relation.py +24 -0
- moriarty/models/types.py +28 -0
- moriarty/modules/__init__.py +0 -0
- moriarty/modules/avatar_hash.py +184 -0
- moriarty/modules/directory_fuzzer.py +322 -0
- moriarty/modules/dns_scan.py +40 -0
- moriarty/modules/domain_scanner.py +620 -0
- moriarty/modules/email_check.py +98 -0
- moriarty/modules/email_investigate.py +267 -0
- moriarty/modules/email_security.py +274 -0
- moriarty/modules/googlemaps_lookup.py +106 -0
- moriarty/modules/headless_executor.py +201 -0
- moriarty/modules/orchestrator.py +60 -0
- moriarty/modules/passive_recon.py +444 -0
- moriarty/modules/phone_extractor.py +151 -0
- moriarty/modules/pipeline_orchestrator.py +726 -0
- moriarty/modules/port_scanner.py +129 -0
- moriarty/modules/rdap.py +61 -0
- moriarty/modules/rdap_extended.py +188 -0
- moriarty/modules/stealth_mode.py +610 -0
- moriarty/modules/subdomain_discovery.py +595 -0
- moriarty/modules/technology_profiler.py +361 -0
- moriarty/modules/template_executor.py +239 -0
- moriarty/modules/template_scanner.py +1048 -0
- moriarty/modules/tls_scan.py +46 -0
- moriarty/modules/tls_validator.py +188 -0
- moriarty/modules/vuln_scanner.py +483 -0
- moriarty/modules/waf_detector.py +585 -0
- moriarty/modules/wayback_discovery.py +234 -0
- moriarty/modules/web_crawler.py +163 -0
- moriarty/net/__init__.py +0 -0
- moriarty/net/dns_cache.py +175 -0
- moriarty/net/dns_client.py +188 -0
- moriarty/net/rdap_client.py +52 -0
- moriarty/net/smtp_client.py +114 -0
- moriarty/net/tls_client.py +111 -0
- moriarty/parsers/__init__.py +0 -0
- moriarty/parsers/html_parser.py +136 -0
- moriarty/tests/__init__.py +0 -0
- moriarty/tests/test_email_service.py +17 -0
- moriarty/tests/test_models.py +46 -0
- moriarty/tests/test_orchestrator.py +30 -0
- moriarty/tests/test_tls_client.py +18 -0
- moriarty_project-0.1.6.dist-info/METADATA +388 -0
- moriarty_project-0.1.6.dist-info/RECORD +418 -0
- moriarty_project-0.1.6.dist-info/WHEEL +4 -0
- moriarty_project-0.1.6.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,106 @@
|
|
1
|
+
"""Busca de reviews no Google Maps."""
|
2
|
+
import re
|
3
|
+
from dataclasses import dataclass
|
4
|
+
from typing import List, Optional
|
5
|
+
|
6
|
+
import httpx
|
7
|
+
import structlog
|
8
|
+
|
9
|
+
logger = structlog.get_logger(__name__)
|
10
|
+
|
11
|
+
|
12
|
+
@dataclass
|
13
|
+
class GoogleMapsReview:
|
14
|
+
"""Review do Google Maps."""
|
15
|
+
author_name: str
|
16
|
+
author_url: Optional[str]
|
17
|
+
rating: int # 1-5
|
18
|
+
text: str
|
19
|
+
time: str
|
20
|
+
profile_photo_url: Optional[str]
|
21
|
+
|
22
|
+
|
23
|
+
@dataclass
|
24
|
+
class GoogleMapsProfile:
|
25
|
+
"""Perfil de usuário no Google Maps."""
|
26
|
+
name: str
|
27
|
+
profile_url: str
|
28
|
+
reviews_count: int
|
29
|
+
photos_count: int
|
30
|
+
reviews: List[GoogleMapsReview]
|
31
|
+
local_guide_level: Optional[int] = None
|
32
|
+
|
33
|
+
|
34
|
+
class GoogleMapsLookup:
|
35
|
+
"""Busca informações no Google Maps."""
|
36
|
+
|
37
|
+
def __init__(self, timeout: float = 10.0):
|
38
|
+
self._timeout = timeout
|
39
|
+
|
40
|
+
async def search_reviewer(self, name: str) -> Optional[GoogleMapsProfile]:
|
41
|
+
"""
|
42
|
+
Busca reviews públicos de um nome no Google Maps.
|
43
|
+
|
44
|
+
Nota: Esta é uma implementação simplificada.
|
45
|
+
Google Maps requer API key para buscas completas.
|
46
|
+
"""
|
47
|
+
logger.info("googlemaps.search", name=name)
|
48
|
+
|
49
|
+
try:
|
50
|
+
# Search via Google (scraping básico - em produção usar API oficial)
|
51
|
+
async with httpx.AsyncClient(timeout=self._timeout) as client:
|
52
|
+
# Busca no Google por reviews
|
53
|
+
search_url = f"https://www.google.com/search"
|
54
|
+
params = {
|
55
|
+
"q": f"{name} google maps reviews",
|
56
|
+
}
|
57
|
+
headers = {
|
58
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
59
|
+
}
|
60
|
+
|
61
|
+
response = await client.get(search_url, params=params, headers=headers, follow_redirects=True)
|
62
|
+
|
63
|
+
# Parse HTML para extrair dados (simplificado)
|
64
|
+
html = response.text
|
65
|
+
|
66
|
+
# Extrai URLs de perfis do Google Maps
|
67
|
+
profile_urls = re.findall(r'https://www\.google\.com/maps/contrib/\d+', html)
|
68
|
+
|
69
|
+
if not profile_urls:
|
70
|
+
logger.info("googlemaps.not_found", name=name)
|
71
|
+
return None
|
72
|
+
|
73
|
+
profile_url = profile_urls[0]
|
74
|
+
|
75
|
+
# Busca o perfil
|
76
|
+
profile_response = await client.get(profile_url, headers=headers)
|
77
|
+
profile_html = profile_response.text
|
78
|
+
|
79
|
+
# Extração básica (em produção, usar parser HTML robusto)
|
80
|
+
reviews_match = re.search(r'(\d+)\s+reviews?', profile_html, re.IGNORECASE)
|
81
|
+
reviews_count = int(reviews_match.group(1)) if reviews_match else 0
|
82
|
+
|
83
|
+
photos_match = re.search(r'(\d+)\s+photos?', profile_html, re.IGNORECASE)
|
84
|
+
photos_count = int(photos_match.group(1)) if photos_match else 0
|
85
|
+
|
86
|
+
logger.info("googlemaps.found", name=name, reviews=reviews_count, photos=photos_count)
|
87
|
+
|
88
|
+
return GoogleMapsProfile(
|
89
|
+
name=name,
|
90
|
+
profile_url=profile_url,
|
91
|
+
reviews_count=reviews_count,
|
92
|
+
photos_count=photos_count,
|
93
|
+
reviews=[], # Populado com scraping mais profundo
|
94
|
+
local_guide_level=None,
|
95
|
+
)
|
96
|
+
|
97
|
+
except Exception as e:
|
98
|
+
logger.warning("googlemaps.error", name=name, error=str(e))
|
99
|
+
return None
|
100
|
+
|
101
|
+
|
102
|
+
__all__ = [
|
103
|
+
"GoogleMapsLookup",
|
104
|
+
"GoogleMapsProfile",
|
105
|
+
"GoogleMapsReview",
|
106
|
+
]
|
@@ -0,0 +1,201 @@
|
|
1
|
+
"""Executor headless para sites que requerem JavaScript."""
|
2
|
+
import asyncio
|
3
|
+
from dataclasses import dataclass
|
4
|
+
from typing import Any, Dict, List, Optional
|
5
|
+
|
6
|
+
import structlog
|
7
|
+
|
8
|
+
logger = structlog.get_logger(__name__)
|
9
|
+
|
10
|
+
|
11
|
+
@dataclass
|
12
|
+
class HeadlessResult:
|
13
|
+
"""Resultado de execução headless."""
|
14
|
+
url: str
|
15
|
+
html: str
|
16
|
+
status_code: int
|
17
|
+
screenshot: Optional[bytes] = None
|
18
|
+
console_logs: List[str] = None
|
19
|
+
network_requests: List[Dict[str, Any]] = None
|
20
|
+
|
21
|
+
|
22
|
+
class HeadlessExecutor:
|
23
|
+
"""
|
24
|
+
Executor headless usando Playwright.
|
25
|
+
|
26
|
+
Para sites que requerem JavaScript para renderizar conteúdo.
|
27
|
+
"""
|
28
|
+
|
29
|
+
def __init__(
|
30
|
+
self,
|
31
|
+
timeout: float = 30.0,
|
32
|
+
headless: bool = True,
|
33
|
+
user_agent: Optional[str] = None,
|
34
|
+
):
|
35
|
+
self._timeout = timeout
|
36
|
+
self._headless = headless
|
37
|
+
self._user_agent = user_agent
|
38
|
+
self._playwright = None
|
39
|
+
self._browser = None
|
40
|
+
|
41
|
+
async def initialize(self):
|
42
|
+
"""Inicializa Playwright e browser."""
|
43
|
+
try:
|
44
|
+
from playwright.async_api import async_playwright
|
45
|
+
|
46
|
+
logger.info("headless.init.start")
|
47
|
+
|
48
|
+
self._playwright = await async_playwright().start()
|
49
|
+
|
50
|
+
# Lança browser (Chromium por padrão)
|
51
|
+
self._browser = await self._playwright.chromium.launch(
|
52
|
+
headless=self._headless,
|
53
|
+
args=[
|
54
|
+
"--disable-blink-features=AutomationControlled",
|
55
|
+
"--no-sandbox",
|
56
|
+
"--disable-dev-shm-usage",
|
57
|
+
],
|
58
|
+
)
|
59
|
+
|
60
|
+
logger.info("headless.init.complete")
|
61
|
+
|
62
|
+
except ImportError:
|
63
|
+
logger.error("headless.init.error", error="Playwright not installed. Run: pip install playwright && playwright install chromium")
|
64
|
+
raise
|
65
|
+
|
66
|
+
async def execute(
|
67
|
+
self,
|
68
|
+
url: str,
|
69
|
+
wait_for: Optional[str] = None,
|
70
|
+
screenshot: bool = False,
|
71
|
+
) -> Optional[HeadlessResult]:
|
72
|
+
"""
|
73
|
+
Executa uma página com headless browser.
|
74
|
+
|
75
|
+
Args:
|
76
|
+
url: URL para visitar
|
77
|
+
wait_for: Seletor CSS para aguardar antes de extrair
|
78
|
+
screenshot: Se deve capturar screenshot
|
79
|
+
"""
|
80
|
+
if not self._browser:
|
81
|
+
await self.initialize()
|
82
|
+
|
83
|
+
logger.info("headless.execute.start", url=url)
|
84
|
+
|
85
|
+
try:
|
86
|
+
# Cria contexto isolado
|
87
|
+
context = await self._browser.new_context(
|
88
|
+
user_agent=self._user_agent or "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
89
|
+
viewport={"width": 1920, "height": 1080},
|
90
|
+
)
|
91
|
+
|
92
|
+
page = await context.new_page()
|
93
|
+
|
94
|
+
# Captura console logs
|
95
|
+
console_logs = []
|
96
|
+
page.on("console", lambda msg: console_logs.append(msg.text))
|
97
|
+
|
98
|
+
# Captura network requests
|
99
|
+
network_requests = []
|
100
|
+
|
101
|
+
def handle_request(request):
|
102
|
+
network_requests.append({
|
103
|
+
"url": request.url,
|
104
|
+
"method": request.method,
|
105
|
+
"resource_type": request.resource_type,
|
106
|
+
})
|
107
|
+
|
108
|
+
page.on("request", handle_request)
|
109
|
+
|
110
|
+
# Navega
|
111
|
+
response = await page.goto(url, wait_until="domcontentloaded", timeout=self._timeout * 1000)
|
112
|
+
|
113
|
+
# Aguarda seletor específico se fornecido
|
114
|
+
if wait_for:
|
115
|
+
try:
|
116
|
+
await page.wait_for_selector(wait_for, timeout=5000)
|
117
|
+
except Exception:
|
118
|
+
logger.warning("headless.wait_for.timeout", selector=wait_for)
|
119
|
+
|
120
|
+
# Aguarda JavaScript render
|
121
|
+
await page.wait_for_load_state("networkidle", timeout=10000)
|
122
|
+
|
123
|
+
# Extrai HTML
|
124
|
+
html = await page.content()
|
125
|
+
|
126
|
+
# Screenshot opcional
|
127
|
+
screenshot_data = None
|
128
|
+
if screenshot:
|
129
|
+
screenshot_data = await page.screenshot(full_page=True)
|
130
|
+
|
131
|
+
status_code = response.status if response else 0
|
132
|
+
|
133
|
+
await context.close()
|
134
|
+
|
135
|
+
logger.info("headless.execute.complete", url=url, status=status_code, html_len=len(html))
|
136
|
+
|
137
|
+
return HeadlessResult(
|
138
|
+
url=url,
|
139
|
+
html=html,
|
140
|
+
status_code=status_code,
|
141
|
+
screenshot=screenshot_data,
|
142
|
+
console_logs=console_logs,
|
143
|
+
network_requests=network_requests,
|
144
|
+
)
|
145
|
+
|
146
|
+
except Exception as e:
|
147
|
+
logger.error("headless.execute.error", url=url, error=str(e))
|
148
|
+
return None
|
149
|
+
|
150
|
+
async def close(self):
|
151
|
+
"""Fecha browser e Playwright."""
|
152
|
+
if self._browser:
|
153
|
+
await self._browser.close()
|
154
|
+
|
155
|
+
if self._playwright:
|
156
|
+
await self._playwright.stop()
|
157
|
+
|
158
|
+
logger.info("headless.closed")
|
159
|
+
|
160
|
+
|
161
|
+
class HeadlessPool:
|
162
|
+
"""Pool de browsers headless para uso concorrente."""
|
163
|
+
|
164
|
+
def __init__(self, pool_size: int = 3, timeout: float = 30.0):
|
165
|
+
self._pool_size = pool_size
|
166
|
+
self._timeout = timeout
|
167
|
+
self._executors: List[HeadlessExecutor] = []
|
168
|
+
self._semaphore = asyncio.Semaphore(pool_size)
|
169
|
+
|
170
|
+
async def initialize(self):
|
171
|
+
"""Inicializa pool de executors."""
|
172
|
+
logger.info("headless.pool.init", size=self._pool_size)
|
173
|
+
|
174
|
+
for _ in range(self._pool_size):
|
175
|
+
executor = HeadlessExecutor(timeout=self._timeout)
|
176
|
+
await executor.initialize()
|
177
|
+
self._executors.append(executor)
|
178
|
+
|
179
|
+
logger.info("headless.pool.ready", size=self._pool_size)
|
180
|
+
|
181
|
+
async def execute(self, url: str, **kwargs) -> Optional[HeadlessResult]:
|
182
|
+
"""Executa usando um executor do pool."""
|
183
|
+
async with self._semaphore:
|
184
|
+
# Pega próximo executor disponível (round-robin simplificado)
|
185
|
+
executor = self._executors[0]
|
186
|
+
return await executor.execute(url, **kwargs)
|
187
|
+
|
188
|
+
async def close(self):
|
189
|
+
"""Fecha todos os executors."""
|
190
|
+
for executor in self._executors:
|
191
|
+
await executor.close()
|
192
|
+
|
193
|
+
self._executors.clear()
|
194
|
+
logger.info("headless.pool.closed")
|
195
|
+
|
196
|
+
|
197
|
+
__all__ = [
|
198
|
+
"HeadlessExecutor",
|
199
|
+
"HeadlessPool",
|
200
|
+
"HeadlessResult",
|
201
|
+
]
|
@@ -0,0 +1,60 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import asyncio
|
4
|
+
from dataclasses import dataclass
|
5
|
+
from typing import Any, Awaitable, Callable, Generic, TypeVar
|
6
|
+
|
7
|
+
import structlog
|
8
|
+
|
9
|
+
_T = TypeVar("_T")
|
10
|
+
|
11
|
+
logger = structlog.get_logger(__name__)
|
12
|
+
|
13
|
+
|
14
|
+
@dataclass
|
15
|
+
class TaskContext:
|
16
|
+
name: str
|
17
|
+
metadata: dict[str, Any]
|
18
|
+
|
19
|
+
|
20
|
+
class Orchestrator(Generic[_T]):
|
21
|
+
"""Basic concurrency-guarded orchestrator for network workers."""
|
22
|
+
|
23
|
+
def __init__(self, concurrency: int, timeout: float) -> None:
|
24
|
+
self._semaphore = asyncio.Semaphore(concurrency)
|
25
|
+
self._timeout = timeout
|
26
|
+
|
27
|
+
async def run(self, context: TaskContext, operation: Callable[[], Awaitable[_T]]) -> _T:
|
28
|
+
async with self._semaphore:
|
29
|
+
logger.info(
|
30
|
+
"orchestrator.task.start",
|
31
|
+
task=context.name,
|
32
|
+
**context.metadata,
|
33
|
+
)
|
34
|
+
try:
|
35
|
+
result = await asyncio.wait_for(operation(), timeout=self._timeout)
|
36
|
+
except asyncio.TimeoutError:
|
37
|
+
logger.warning(
|
38
|
+
"orchestrator.task.timeout",
|
39
|
+
task=context.name,
|
40
|
+
timeout_s=self._timeout,
|
41
|
+
**context.metadata,
|
42
|
+
)
|
43
|
+
raise
|
44
|
+
except Exception:
|
45
|
+
logger.exception(
|
46
|
+
"orchestrator.task.error",
|
47
|
+
task=context.name,
|
48
|
+
**context.metadata,
|
49
|
+
)
|
50
|
+
raise
|
51
|
+
else:
|
52
|
+
logger.info(
|
53
|
+
"orchestrator.task.success",
|
54
|
+
task=context.name,
|
55
|
+
**context.metadata,
|
56
|
+
)
|
57
|
+
return result
|
58
|
+
|
59
|
+
|
60
|
+
__all__ = ["Orchestrator", "TaskContext"]
|