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,267 @@
|
|
1
|
+
"""Módulo de tipos e validação de IOCs (Indicadores de Comprometimento)."""
|
2
|
+
|
3
|
+
import re
|
4
|
+
import ipaddress
|
5
|
+
from enum import Enum
|
6
|
+
from dataclasses import dataclass, field
|
7
|
+
from datetime import datetime
|
8
|
+
from typing import Dict, List, Any, Optional, Union, Pattern, TypeVar, Type, ClassVar
|
9
|
+
|
10
|
+
# Expressões regulares para validação de IOCs
|
11
|
+
DOMAIN_PATTERN = r'^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$'
|
12
|
+
URL_PATTERN = r'^https?://[^\s/$.?#].[^\s]*$'
|
13
|
+
EMAIL_PATTERN = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
|
14
|
+
CVE_PATTERN = r'^CVE-\d{4}-\d{4,7}$'
|
15
|
+
MD5_PATTERN = r'^[a-fA-F0-9]{32}$'
|
16
|
+
SHA1_PATTERN = r'^[a-fA-F0-9]{40}$'
|
17
|
+
SHA256_PATTERN = r'^[a-fA-F0-9]{64}$'
|
18
|
+
SSDEEP_PATTERN = r'^\d+:[a-zA-Z0-9/+]{20,}:[a-zA-Z0-9/+]{20,}$'
|
19
|
+
YARA_PATTERN = r'^rule\s+[a-zA-Z0-9_]+\s*{.*?}'
|
20
|
+
BITCOIN_PATTERN = r'^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$'
|
21
|
+
|
22
|
+
class IOCType(str, Enum):
|
23
|
+
"""Tipos de IOCs suportados."""
|
24
|
+
IP = "ip"
|
25
|
+
DOMAIN = "domain"
|
26
|
+
URL = "url"
|
27
|
+
HASH = "hash"
|
28
|
+
EMAIL = "email"
|
29
|
+
CVE = "cve"
|
30
|
+
BTC = "btc"
|
31
|
+
MD5 = "md5"
|
32
|
+
SHA1 = "sha1"
|
33
|
+
SHA256 = "sha256"
|
34
|
+
SSDEEP = "ssdeep"
|
35
|
+
YARA = "yara"
|
36
|
+
SNORT = "snort"
|
37
|
+
SURICATA = "suricata"
|
38
|
+
CUSTOM = "custom"
|
39
|
+
|
40
|
+
class ThreatType(str, Enum):
|
41
|
+
"""Tipos de ameaças."""
|
42
|
+
MALWARE = "malware"
|
43
|
+
PHISHING = "phishing"
|
44
|
+
EXPLOIT = "exploit"
|
45
|
+
C2 = "c2"
|
46
|
+
SCANNER = "scanner"
|
47
|
+
SPAM = "spam"
|
48
|
+
ABUSE = "abuse"
|
49
|
+
UNKNOWN = "unknown"
|
50
|
+
|
51
|
+
@dataclass
|
52
|
+
class IOC:
|
53
|
+
"""Classe base para Indicadores de Comprometimento (IOCs)."""
|
54
|
+
|
55
|
+
value: str
|
56
|
+
ioc_type: IOCType
|
57
|
+
threat_type: ThreatType = ThreatType.UNKNOWN
|
58
|
+
source: str = "unknown"
|
59
|
+
first_seen: datetime = field(default_factory=datetime.utcnow)
|
60
|
+
last_seen: datetime = field(default_factory=datetime.utcnow)
|
61
|
+
confidence: int = 50 # 0-100
|
62
|
+
tags: List[str] = field(default_factory=list)
|
63
|
+
metadata: Dict[str, Any] = field(default_factory=dict)
|
64
|
+
|
65
|
+
# Cache para expressões regulares compiladas
|
66
|
+
_regex_cache: ClassVar[Dict[str, Pattern]] = {}
|
67
|
+
|
68
|
+
def __post_init__(self):
|
69
|
+
# Garante que o tipo seja uma instância de IOCType
|
70
|
+
if isinstance(self.ioc_type, str):
|
71
|
+
self.ioc_type = IOCType(self.ioc_type.lower())
|
72
|
+
|
73
|
+
if isinstance(self.threat_type, str):
|
74
|
+
self.threat_type = ThreatType(self.threat_type.lower())
|
75
|
+
|
76
|
+
# Valida o valor do IOC com base no tipo
|
77
|
+
self._validate()
|
78
|
+
|
79
|
+
def _validate(self):
|
80
|
+
"""Valida o valor do IOC com base no tipo."""
|
81
|
+
if not self.value:
|
82
|
+
raise ValueError("O valor do IOC não pode estar vazio")
|
83
|
+
|
84
|
+
validators = {
|
85
|
+
IOCType.IP: self._validate_ip,
|
86
|
+
IOCType.DOMAIN: self._validate_domain,
|
87
|
+
IOCType.URL: self._validate_url,
|
88
|
+
IOCType.EMAIL: self._validate_email,
|
89
|
+
IOCType.CVE: self._validate_cve,
|
90
|
+
IOCType.BTC: self._validate_btc,
|
91
|
+
IOCType.MD5: self._validate_md5,
|
92
|
+
IOCType.SHA1: self._validate_sha1,
|
93
|
+
IOCType.SHA256: self._validate_sha256,
|
94
|
+
IOCType.SSDEEP: self._validate_ssdeep,
|
95
|
+
IOCType.YARA: self._validate_yara,
|
96
|
+
}
|
97
|
+
|
98
|
+
validator = validators.get(self.ioc_type)
|
99
|
+
if validator and not validator():
|
100
|
+
raise ValueError(f"Valor inválido para IOC do tipo {self.ioc_type}: {self.value}")
|
101
|
+
|
102
|
+
def _get_cached_regex(self, pattern: str) -> Pattern:
|
103
|
+
"""Obtém uma expressão regular compilada do cache ou compila uma nova."""
|
104
|
+
if pattern not in self._regex_cache:
|
105
|
+
self._regex_cache[pattern] = re.compile(pattern, re.IGNORECASE)
|
106
|
+
return self._regex_cache[pattern]
|
107
|
+
|
108
|
+
def _validate_ip(self) -> bool:
|
109
|
+
"""Valida um endereço IP."""
|
110
|
+
try:
|
111
|
+
ipaddress.ip_address(self.value)
|
112
|
+
return True
|
113
|
+
except ValueError:
|
114
|
+
return False
|
115
|
+
|
116
|
+
def _validate_domain(self) -> bool:
|
117
|
+
"""Valida um domínio."""
|
118
|
+
if not self.value or len(self.value) > 253:
|
119
|
+
return False
|
120
|
+
|
121
|
+
# Verifica se o domínio corresponde ao padrão
|
122
|
+
if not self._get_cached_regex(DOMAIN_PATTERN).match(self.value):
|
123
|
+
return False
|
124
|
+
|
125
|
+
# Verifica se cada parte do domínio tem no máximo 63 caracteres
|
126
|
+
return all(len(part) <= 63 for part in self.value.split('.'))
|
127
|
+
|
128
|
+
def _validate_url(self) -> bool:
|
129
|
+
"""Valida uma URL."""
|
130
|
+
return bool(self._get_cached_regex(URL_PATTERN).match(self.value))
|
131
|
+
|
132
|
+
def _validate_email(self) -> bool:
|
133
|
+
"""Valida um endereço de e-mail."""
|
134
|
+
return bool(self._get_cached_regex(EMAIL_PATTERN).match(self.value))
|
135
|
+
|
136
|
+
def _validate_cve(self) -> bool:
|
137
|
+
"""Valida um identificador CVE."""
|
138
|
+
return bool(self._get_cached_regex(CVE_PATTERN).match(self.value.upper()))
|
139
|
+
|
140
|
+
def _validate_btc(self) -> bool:
|
141
|
+
"""Valida um endereço Bitcoin."""
|
142
|
+
return bool(self._get_cached_regex(BITCOIN_PATTERN).match(self.value))
|
143
|
+
|
144
|
+
def _validate_md5(self) -> bool:
|
145
|
+
"""Valida um hash MD5."""
|
146
|
+
return bool(self._get_cached_regex(MD5_PATTERN).match(self.value))
|
147
|
+
|
148
|
+
def _validate_sha1(self) -> bool:
|
149
|
+
"""Valida um hash SHA-1."""
|
150
|
+
return bool(self._get_cached_regex(SHA1_PATTERN).match(self.value))
|
151
|
+
|
152
|
+
def _validate_sha256(self) -> bool:
|
153
|
+
"""Valida um hash SHA-256."""
|
154
|
+
return bool(self._get_cached_regex(SHA256_PATTERN).match(self.value))
|
155
|
+
|
156
|
+
def _validate_ssdeep(self) -> bool:
|
157
|
+
"""Valida um hash SSDEEP."""
|
158
|
+
return bool(self._get_cached_regex(SSDEEP_PATTERN).match(self.value))
|
159
|
+
|
160
|
+
def _validate_yara(self) -> bool:
|
161
|
+
"""Valida uma regra YARA."""
|
162
|
+
# Verificação básica de sintaxe de regra YARA
|
163
|
+
return bool(self._get_cached_regex(YARA_PATTERN).search(self.value))
|
164
|
+
|
165
|
+
def to_dict(self) -> Dict[str, Any]:
|
166
|
+
"""Converte o IOC para um dicionário."""
|
167
|
+
return {
|
168
|
+
'value': self.value,
|
169
|
+
'ioc_type': self.ioc_type.value,
|
170
|
+
'threat_type': self.threat_type.value,
|
171
|
+
'source': self.source,
|
172
|
+
'first_seen': self.first_seen.isoformat(),
|
173
|
+
'last_seen': self.last_seen.isoformat(),
|
174
|
+
'confidence': self.confidence,
|
175
|
+
'tags': self.tags,
|
176
|
+
'metadata': self.metadata
|
177
|
+
}
|
178
|
+
|
179
|
+
@classmethod
|
180
|
+
def from_dict(cls, data: Dict[str, Any]) -> 'IOC':
|
181
|
+
"""Cria um IOC a partir de um dicionário."""
|
182
|
+
return cls(
|
183
|
+
value=data['value'],
|
184
|
+
ioc_type=data.get('ioc_type', 'custom'),
|
185
|
+
threat_type=data.get('threat_type', 'unknown'),
|
186
|
+
source=data.get('source', 'unknown'),
|
187
|
+
first_seen=datetime.fromisoformat(data.get('first_seen', datetime.utcnow().isoformat())),
|
188
|
+
last_seen=datetime.fromisoformat(data.get('last_seen', datetime.utcnow().isoformat())),
|
189
|
+
confidence=data.get('confidence', 50),
|
190
|
+
tags=data.get('tags', []),
|
191
|
+
metadata=data.get('metadata', {})
|
192
|
+
)
|
193
|
+
|
194
|
+
# Tipos específicos de IOCs para facilitar a criação
|
195
|
+
@dataclass
|
196
|
+
class IPAddress(IOC):
|
197
|
+
"""Representa um endereço IP como IOC."""
|
198
|
+
|
199
|
+
def __post_init__(self):
|
200
|
+
self.ioc_type = IOCType.IP
|
201
|
+
super().__post_init__()
|
202
|
+
|
203
|
+
@property
|
204
|
+
def is_private(self) -> bool:
|
205
|
+
"""Verifica se o endereço IP é privado."""
|
206
|
+
try:
|
207
|
+
return ipaddress.ip_address(self.value).is_private
|
208
|
+
except ValueError:
|
209
|
+
return False
|
210
|
+
|
211
|
+
@property
|
212
|
+
def version(self) -> int:
|
213
|
+
"""Retorna a versão do IP (4 ou 6)."""
|
214
|
+
try:
|
215
|
+
return ipaddress.ip_address(self.value).version
|
216
|
+
except ValueError:
|
217
|
+
return 0
|
218
|
+
|
219
|
+
@dataclass
|
220
|
+
class Domain(IOC):
|
221
|
+
"""Representa um domínio como IOC."""
|
222
|
+
|
223
|
+
def __post_init__(self):
|
224
|
+
self.ioc_type = IOCType.DOMAIN
|
225
|
+
super().__post_init__()
|
226
|
+
|
227
|
+
@property
|
228
|
+
def tld(self) -> str:
|
229
|
+
"""Retorna o TLD (Top-Level Domain) do domínio."""
|
230
|
+
return self.value.split('.')[-1] if '.' in self.value else ''
|
231
|
+
|
232
|
+
@property
|
233
|
+
def domain_parts(self) -> List[str]:
|
234
|
+
"""Retorna as partes do domínio como uma lista."""
|
235
|
+
return self.value.split('.') if self.value else []
|
236
|
+
|
237
|
+
# Funções auxiliares
|
238
|
+
def detect_ioc_type(value: str) -> Optional[IOCType]:
|
239
|
+
"""Tenta detectar o tipo de IOC com base no valor."""
|
240
|
+
if not value or not isinstance(value, str):
|
241
|
+
return None
|
242
|
+
|
243
|
+
value = value.strip()
|
244
|
+
|
245
|
+
# Ordem de verificação: mais específico para o mais genérico
|
246
|
+
checks = [
|
247
|
+
(IOCType.IP, lambda x: bool(IPAddress(x, 'ip')._validate_ip())),
|
248
|
+
(IOCType.DOMAIN, lambda x: bool(Domain(x, 'domain')._validate_domain())),
|
249
|
+
(IOCType.URL, lambda x: bool(IOC(x, 'url')._validate_url())),
|
250
|
+
(IOCType.EMAIL, lambda x: bool(IOC(x, 'email')._validate_email())),
|
251
|
+
(IOCType.CVE, lambda x: bool(IOC(x, 'cve')._validate_cve())),
|
252
|
+
(IOCType.BTC, lambda x: bool(IOC(x, 'btc')._validate_btc())),
|
253
|
+
(IOCType.MD5, lambda x: bool(IOC(x, 'md5')._validate_md5())),
|
254
|
+
(IOCType.SHA1, lambda x: bool(IOC(x, 'sha1')._validate_sha1())),
|
255
|
+
(IOCType.SHA256, lambda x: bool(IOC(x, 'sha256')._validate_sha256())),
|
256
|
+
(IOCType.SSDEEP, lambda x: bool(IOC(x, 'ssdeep')._validate_ssdeep())),
|
257
|
+
(IOCType.YARA, lambda x: bool(IOC(x, 'yara')._validate_yara())),
|
258
|
+
]
|
259
|
+
|
260
|
+
for ioc_type, check in checks:
|
261
|
+
try:
|
262
|
+
if check(value):
|
263
|
+
return ioc_type
|
264
|
+
except Exception:
|
265
|
+
continue
|
266
|
+
|
267
|
+
return None
|