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,129 @@
|
|
1
|
+
"""Port scanning assíncrono com fingerprints básicos."""
|
2
|
+
from __future__ import annotations
|
3
|
+
|
4
|
+
import asyncio
|
5
|
+
import contextlib
|
6
|
+
from dataclasses import dataclass
|
7
|
+
from typing import Dict, List, Optional
|
8
|
+
|
9
|
+
import random
|
10
|
+
|
11
|
+
import structlog
|
12
|
+
|
13
|
+
logger = structlog.get_logger(__name__)
|
14
|
+
|
15
|
+
|
16
|
+
PROFILES = {
|
17
|
+
"quick": [22, 25, 53, 80, 110, 143, 443, 465, 587, 993, 995, 3306, 3389, 8080, 8443],
|
18
|
+
"full": list(range(1, 1025)),
|
19
|
+
"extended": [
|
20
|
+
21,
|
21
|
+
22,
|
22
|
+
23,
|
23
|
+
25,
|
24
|
+
53,
|
25
|
+
80,
|
26
|
+
110,
|
27
|
+
111,
|
28
|
+
135,
|
29
|
+
139,
|
30
|
+
143,
|
31
|
+
161,
|
32
|
+
389,
|
33
|
+
443,
|
34
|
+
445,
|
35
|
+
465,
|
36
|
+
587,
|
37
|
+
631,
|
38
|
+
993,
|
39
|
+
995,
|
40
|
+
1023,
|
41
|
+
1433,
|
42
|
+
1521,
|
43
|
+
2049,
|
44
|
+
3128,
|
45
|
+
3306,
|
46
|
+
3389,
|
47
|
+
5432,
|
48
|
+
5900,
|
49
|
+
6379,
|
50
|
+
8080,
|
51
|
+
8443,
|
52
|
+
9000,
|
53
|
+
],
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
@dataclass
|
58
|
+
class PortScanResult:
|
59
|
+
port: int
|
60
|
+
status: str
|
61
|
+
banner: Optional[str] = None
|
62
|
+
|
63
|
+
|
64
|
+
class PortScanner:
|
65
|
+
"""Execução assíncrona de port scanning com banners e fingerprint simples."""
|
66
|
+
|
67
|
+
def __init__(
|
68
|
+
self,
|
69
|
+
target: str,
|
70
|
+
profile: str = "quick",
|
71
|
+
concurrency: int = 200,
|
72
|
+
timeout: float = 1.5,
|
73
|
+
stealth_level: int = 0,
|
74
|
+
):
|
75
|
+
self.target = target
|
76
|
+
self.profile = profile if profile in PROFILES else "quick"
|
77
|
+
self.stealth_level = max(0, stealth_level)
|
78
|
+
adjusted_concurrency = concurrency
|
79
|
+
if self.stealth_level >= 3:
|
80
|
+
adjusted_concurrency = min(concurrency, 80)
|
81
|
+
elif self.stealth_level == 2:
|
82
|
+
adjusted_concurrency = min(concurrency, 120)
|
83
|
+
self.concurrency = max(10, adjusted_concurrency)
|
84
|
+
self.timeout = timeout
|
85
|
+
|
86
|
+
async def scan(self) -> List[PortScanResult]:
|
87
|
+
sem = asyncio.Semaphore(self.concurrency)
|
88
|
+
ports = PROFILES[self.profile]
|
89
|
+
results: List[PortScanResult] = []
|
90
|
+
|
91
|
+
async def worker(port: int):
|
92
|
+
async with sem:
|
93
|
+
res = await self._probe(port)
|
94
|
+
if res:
|
95
|
+
results.append(res)
|
96
|
+
|
97
|
+
await asyncio.gather(*(worker(p) for p in ports))
|
98
|
+
results.sort(key=lambda r: r.port)
|
99
|
+
return results
|
100
|
+
|
101
|
+
async def _probe(self, port: int) -> Optional[PortScanResult]:
|
102
|
+
try:
|
103
|
+
if self.stealth_level:
|
104
|
+
await asyncio.sleep(random.uniform(0.01, 0.2) * self.stealth_level)
|
105
|
+
reader, writer = await asyncio.wait_for(
|
106
|
+
asyncio.open_connection(self.target, port),
|
107
|
+
timeout=self.timeout,
|
108
|
+
)
|
109
|
+
except Exception:
|
110
|
+
return None
|
111
|
+
|
112
|
+
banner = None
|
113
|
+
try:
|
114
|
+
await writer.drain()
|
115
|
+
reader._transport.set_read_buffer_limits(1024)
|
116
|
+
banner_bytes = await asyncio.wait_for(reader.read(256), timeout=0.5)
|
117
|
+
if banner_bytes:
|
118
|
+
banner = banner_bytes.decode(errors="ignore").strip()
|
119
|
+
except Exception:
|
120
|
+
banner = None
|
121
|
+
finally:
|
122
|
+
writer.close()
|
123
|
+
with contextlib.suppress(Exception):
|
124
|
+
await writer.wait_closed()
|
125
|
+
|
126
|
+
return PortScanResult(port=port, status="open", banner=banner)
|
127
|
+
|
128
|
+
|
129
|
+
__all__ = ["PortScanner", "PortScanResult", "PROFILES"]
|
moriarty/modules/rdap.py
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from dataclasses import dataclass
|
4
|
+
from typing import Any, Dict
|
5
|
+
|
6
|
+
import structlog
|
7
|
+
|
8
|
+
from .orchestrator import Orchestrator, TaskContext
|
9
|
+
from ..net.rdap_client import RDAPClient, RDAPResponse
|
10
|
+
|
11
|
+
logger = structlog.get_logger(__name__)
|
12
|
+
|
13
|
+
|
14
|
+
@dataclass(slots=True)
|
15
|
+
class RDAPResult:
|
16
|
+
query: str
|
17
|
+
response: Dict[str, Any]
|
18
|
+
url: str
|
19
|
+
status: int
|
20
|
+
latency_ms: float
|
21
|
+
|
22
|
+
|
23
|
+
class RDAPService:
|
24
|
+
def __init__(
|
25
|
+
self,
|
26
|
+
client: RDAPClient,
|
27
|
+
orchestrator: Orchestrator[RDAPResponse],
|
28
|
+
) -> None:
|
29
|
+
self._client = client
|
30
|
+
self._orchestrator = orchestrator
|
31
|
+
|
32
|
+
async def domain(self, domain: str) -> RDAPResult:
|
33
|
+
logger.info("rdap.lookup.start", kind="domain", value=domain)
|
34
|
+
response = await self._orchestrator.run(
|
35
|
+
TaskContext(name="rdap_domain", metadata={"value": domain}),
|
36
|
+
lambda: self._client.fetch(f"domain/{domain}"),
|
37
|
+
)
|
38
|
+
logger.info("rdap.lookup.success", kind="domain", value=domain)
|
39
|
+
return self._to_result(domain, response)
|
40
|
+
|
41
|
+
async def ip(self, ip_value: str) -> RDAPResult:
|
42
|
+
logger.info("rdap.lookup.start", kind="ip", value=ip_value)
|
43
|
+
response = await self._orchestrator.run(
|
44
|
+
TaskContext(name="rdap_ip", metadata={"value": ip_value}),
|
45
|
+
lambda: self._client.fetch(f"ip/{ip_value}"),
|
46
|
+
)
|
47
|
+
logger.info("rdap.lookup.success", kind="ip", value=ip_value)
|
48
|
+
return self._to_result(ip_value, response)
|
49
|
+
|
50
|
+
@staticmethod
|
51
|
+
def _to_result(query: str, rdap_response: RDAPResponse) -> RDAPResult:
|
52
|
+
return RDAPResult(
|
53
|
+
query=query,
|
54
|
+
response=rdap_response.payload,
|
55
|
+
url=rdap_response.url,
|
56
|
+
status=rdap_response.status,
|
57
|
+
latency_ms=rdap_response.latency_ms,
|
58
|
+
)
|
59
|
+
|
60
|
+
|
61
|
+
__all__ = ["RDAPResult", "RDAPService"]
|
@@ -0,0 +1,188 @@
|
|
1
|
+
"""Funcionalidades estendidas de RDAP e CT logs."""
|
2
|
+
from dataclasses import dataclass
|
3
|
+
from typing import List, Optional
|
4
|
+
|
5
|
+
import httpx
|
6
|
+
import structlog
|
7
|
+
|
8
|
+
logger = structlog.get_logger(__name__)
|
9
|
+
|
10
|
+
|
11
|
+
@dataclass
|
12
|
+
class ASNInfo:
|
13
|
+
"""Informações de ASN (Autonomous System Number)."""
|
14
|
+
asn: int
|
15
|
+
name: str
|
16
|
+
description: str
|
17
|
+
country: str
|
18
|
+
registry: str # ARIN, RIPE, APNIC, etc.
|
19
|
+
prefixes: List[str]
|
20
|
+
|
21
|
+
|
22
|
+
@dataclass
|
23
|
+
class CTLogEntry:
|
24
|
+
"""Entrada do Certificate Transparency log."""
|
25
|
+
issuer_name: str
|
26
|
+
common_name: str
|
27
|
+
name_value: str # SANs
|
28
|
+
not_before: str
|
29
|
+
not_after: str
|
30
|
+
serial_number: str
|
31
|
+
entry_timestamp: str
|
32
|
+
|
33
|
+
|
34
|
+
class RDAPExtended:
|
35
|
+
"""Cliente RDAP estendido com ASN e CT logs."""
|
36
|
+
|
37
|
+
def __init__(self, timeout: float = 10.0):
|
38
|
+
self._timeout = timeout
|
39
|
+
|
40
|
+
async def lookup_asn(self, asn: int) -> Optional[ASNInfo]:
|
41
|
+
"""
|
42
|
+
Busca informações de um ASN.
|
43
|
+
|
44
|
+
Usa RDAP bootstrap para encontrar o servidor correto.
|
45
|
+
"""
|
46
|
+
logger.info("rdap.asn.lookup", asn=asn)
|
47
|
+
|
48
|
+
try:
|
49
|
+
# RDAP bootstrap para ASN
|
50
|
+
async with httpx.AsyncClient(timeout=self._timeout, http2=True) as client:
|
51
|
+
# Tenta via ARIN primeiro (covering most ASNs)
|
52
|
+
url = f"https://rdap.arin.net/registry/autnum/{asn}"
|
53
|
+
response = await client.get(url)
|
54
|
+
|
55
|
+
if response.status_code == 404:
|
56
|
+
# Tenta RIPE
|
57
|
+
url = f"https://rdap.db.ripe.net/autnum/{asn}"
|
58
|
+
response = await client.get(url)
|
59
|
+
|
60
|
+
if response.status_code == 404:
|
61
|
+
# Tenta APNIC
|
62
|
+
url = f"https://rdap.apnic.net/autnum/{asn}"
|
63
|
+
response = await client.get(url)
|
64
|
+
|
65
|
+
response.raise_for_status()
|
66
|
+
data = response.json()
|
67
|
+
|
68
|
+
# Parse resposta RDAP
|
69
|
+
name = data.get("name", "")
|
70
|
+
description = ""
|
71
|
+
country = ""
|
72
|
+
|
73
|
+
# Extrai informações das entities
|
74
|
+
entities = data.get("entities", [])
|
75
|
+
for entity in entities:
|
76
|
+
if "vcard" in entity:
|
77
|
+
# Processa vCard
|
78
|
+
pass
|
79
|
+
|
80
|
+
# Extrai prefixes (se disponível)
|
81
|
+
prefixes = []
|
82
|
+
remarks = data.get("remarks", [])
|
83
|
+
for remark in remarks:
|
84
|
+
description += remark.get("description", [""])[0] + " "
|
85
|
+
|
86
|
+
logger.info("rdap.asn.found", asn=asn, name=name)
|
87
|
+
|
88
|
+
return ASNInfo(
|
89
|
+
asn=asn,
|
90
|
+
name=name,
|
91
|
+
description=description.strip(),
|
92
|
+
country=country,
|
93
|
+
registry="ARIN", # Simplificado
|
94
|
+
prefixes=prefixes,
|
95
|
+
)
|
96
|
+
|
97
|
+
except Exception as e:
|
98
|
+
logger.warning("rdap.asn.error", asn=asn, error=str(e))
|
99
|
+
return None
|
100
|
+
|
101
|
+
async def lookup_prefix(self, ip: str) -> Optional[ASNInfo]:
|
102
|
+
"""
|
103
|
+
Busca o ASN e prefix de um IP.
|
104
|
+
"""
|
105
|
+
logger.info("rdap.prefix.lookup", ip=ip)
|
106
|
+
|
107
|
+
try:
|
108
|
+
async with httpx.AsyncClient(timeout=self._timeout, http2=True) as client:
|
109
|
+
# RDAP IP lookup
|
110
|
+
url = f"https://rdap.arin.net/registry/ip/{ip}"
|
111
|
+
response = await client.get(url)
|
112
|
+
|
113
|
+
if response.status_code == 404:
|
114
|
+
url = f"https://rdap.db.ripe.net/ip/{ip}"
|
115
|
+
response = await client.get(url)
|
116
|
+
|
117
|
+
response.raise_for_status()
|
118
|
+
data = response.json()
|
119
|
+
|
120
|
+
# Extrai ASN
|
121
|
+
asn = None
|
122
|
+
entities = data.get("entities", [])
|
123
|
+
for entity in entities:
|
124
|
+
if "asn" in entity:
|
125
|
+
asn = entity["asn"]
|
126
|
+
break
|
127
|
+
|
128
|
+
start_address = data.get("startAddress", "")
|
129
|
+
end_address = data.get("endAddress", "")
|
130
|
+
cidr = data.get("cidr0_cidrs", [{}])[0].get("v4prefix", "")
|
131
|
+
|
132
|
+
if asn:
|
133
|
+
return await self.lookup_asn(asn)
|
134
|
+
|
135
|
+
logger.info("rdap.prefix.found", ip=ip, cidr=cidr)
|
136
|
+
return None
|
137
|
+
|
138
|
+
except Exception as e:
|
139
|
+
logger.warning("rdap.prefix.error", ip=ip, error=str(e))
|
140
|
+
return None
|
141
|
+
|
142
|
+
async def query_ct_logs(self, domain: str, limit: int = 100) -> List[CTLogEntry]:
|
143
|
+
"""
|
144
|
+
Consulta Certificate Transparency logs via crt.sh.
|
145
|
+
|
146
|
+
Retorna certificados emitidos para o domínio.
|
147
|
+
"""
|
148
|
+
logger.info("ct.logs.query", domain=domain, limit=limit)
|
149
|
+
|
150
|
+
try:
|
151
|
+
async with httpx.AsyncClient(timeout=self._timeout) as client:
|
152
|
+
# crt.sh API
|
153
|
+
url = "https://crt.sh/"
|
154
|
+
params = {
|
155
|
+
"q": domain,
|
156
|
+
"output": "json",
|
157
|
+
}
|
158
|
+
|
159
|
+
response = await client.get(url, params=params)
|
160
|
+
response.raise_for_status()
|
161
|
+
data = response.json()
|
162
|
+
|
163
|
+
entries = []
|
164
|
+
for item in data[:limit]:
|
165
|
+
entry = CTLogEntry(
|
166
|
+
issuer_name=item.get("issuer_name", ""),
|
167
|
+
common_name=item.get("common_name", ""),
|
168
|
+
name_value=item.get("name_value", ""),
|
169
|
+
not_before=item.get("not_before", ""),
|
170
|
+
not_after=item.get("not_after", ""),
|
171
|
+
serial_number=item.get("serial_number", ""),
|
172
|
+
entry_timestamp=item.get("entry_timestamp", ""),
|
173
|
+
)
|
174
|
+
entries.append(entry)
|
175
|
+
|
176
|
+
logger.info("ct.logs.found", domain=domain, count=len(entries))
|
177
|
+
return entries
|
178
|
+
|
179
|
+
except Exception as e:
|
180
|
+
logger.warning("ct.logs.error", domain=domain, error=str(e))
|
181
|
+
return []
|
182
|
+
|
183
|
+
|
184
|
+
__all__ = [
|
185
|
+
"RDAPExtended",
|
186
|
+
"ASNInfo",
|
187
|
+
"CTLogEntry",
|
188
|
+
]
|