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.
Files changed (416) hide show
  1. moriarty/__init__.py +5 -0
  2. moriarty/adapters/__init__.py +0 -0
  3. moriarty/agent/__init__.py +0 -0
  4. moriarty/assets/modules/.gitkeep +0 -0
  5. moriarty/assets/modules/asia/douban.yaml +19 -0
  6. moriarty/assets/modules/asia/kakao.yaml +19 -0
  7. moriarty/assets/modules/asia/line.yaml +19 -0
  8. moriarty/assets/modules/asia/mixi.yaml +19 -0
  9. moriarty/assets/modules/asia/naver.yaml +19 -0
  10. moriarty/assets/modules/asia/qq.yaml +19 -0
  11. moriarty/assets/modules/asia/vk.yaml +19 -0
  12. moriarty/assets/modules/asia/wechat.yaml +19 -0
  13. moriarty/assets/modules/asia/weibo.yaml +19 -0
  14. moriarty/assets/modules/asia/xiaohongshu.yaml +19 -0
  15. moriarty/assets/modules/behance.yaml +47 -0
  16. moriarty/assets/modules/business/crunchbase.yaml +27 -0
  17. moriarty/assets/modules/business/fiverr.yaml +32 -0
  18. moriarty/assets/modules/business/freelancer.yaml +27 -0
  19. moriarty/assets/modules/business/glassdoor.yaml +27 -0
  20. moriarty/assets/modules/business/guru.yaml +26 -0
  21. moriarty/assets/modules/business/indeed.yaml +25 -0
  22. moriarty/assets/modules/business/monster.yaml +25 -0
  23. moriarty/assets/modules/business/peopleperhour.yaml +26 -0
  24. moriarty/assets/modules/business/toptal.yaml +28 -0
  25. moriarty/assets/modules/business/upwork.yaml +27 -0
  26. moriarty/assets/modules/business/ziprecruiter.yaml +25 -0
  27. moriarty/assets/modules/content/buymeacoffee.yaml +27 -0
  28. moriarty/assets/modules/content/gumroad.yaml +27 -0
  29. moriarty/assets/modules/content/ko-fi.yaml +32 -0
  30. moriarty/assets/modules/content/onlyfans.yaml +27 -0
  31. moriarty/assets/modules/content/patreon.yaml +33 -0
  32. moriarty/assets/modules/content/substack.yaml +32 -0
  33. moriarty/assets/modules/creative/500px.yaml +31 -0
  34. moriarty/assets/modules/creative/artstation.yaml +33 -0
  35. moriarty/assets/modules/creative/deviantart.yaml +32 -0
  36. moriarty/assets/modules/creative/flickr.yaml +31 -0
  37. moriarty/assets/modules/creative/pexels.yaml +26 -0
  38. moriarty/assets/modules/creative/unsplash.yaml +26 -0
  39. moriarty/assets/modules/creative/vimeo.yaml +31 -0
  40. moriarty/assets/modules/crypto/binance.yaml +27 -0
  41. moriarty/assets/modules/crypto/bitcointalk.yaml +33 -0
  42. moriarty/assets/modules/crypto/coinbase.yaml +26 -0
  43. moriarty/assets/modules/crypto/etherscan.yaml +32 -0
  44. moriarty/assets/modules/crypto/foundation.yaml +28 -0
  45. moriarty/assets/modules/crypto/kraken.yaml +27 -0
  46. moriarty/assets/modules/crypto/mirror.yaml +27 -0
  47. moriarty/assets/modules/crypto/niftygateway.yaml +26 -0
  48. moriarty/assets/modules/crypto/opensea.yaml +32 -0
  49. moriarty/assets/modules/crypto/rarible.yaml +27 -0
  50. moriarty/assets/modules/crypto/superrare.yaml +29 -0
  51. moriarty/assets/modules/dating/bumble.yaml +25 -0
  52. moriarty/assets/modules/dating/grindr.yaml +27 -0
  53. moriarty/assets/modules/dating/happn.yaml +25 -0
  54. moriarty/assets/modules/dating/her.yaml +27 -0
  55. moriarty/assets/modules/dating/hinge.yaml +25 -0
  56. moriarty/assets/modules/dating/match.yaml +25 -0
  57. moriarty/assets/modules/dating/meetme.yaml +27 -0
  58. moriarty/assets/modules/dating/okcupid.yaml +25 -0
  59. moriarty/assets/modules/dating/pof.yaml +25 -0
  60. moriarty/assets/modules/dating/tinder.yaml +25 -0
  61. moriarty/assets/modules/dating-nsfw/adultfriendfinder.yaml +28 -0
  62. moriarty/assets/modules/dating-nsfw/ashley-madison.yaml +26 -0
  63. moriarty/assets/modules/design/adobe-portfolio.yaml +27 -0
  64. moriarty/assets/modules/design/carbonmade.yaml +27 -0
  65. moriarty/assets/modules/design/cgsociety.yaml +27 -0
  66. moriarty/assets/modules/design/coroflot.yaml +27 -0
  67. moriarty/assets/modules/design/figma.yaml +27 -0
  68. moriarty/assets/modules/design/sketch.yaml +26 -0
  69. moriarty/assets/modules/dev/bitbucket.yaml +35 -0
  70. moriarty/assets/modules/dev/codeforces.yaml +32 -0
  71. moriarty/assets/modules/dev/codepen.yaml +34 -0
  72. moriarty/assets/modules/dev/hackerone.yaml +32 -0
  73. moriarty/assets/modules/dev/hackthebox.yaml +27 -0
  74. moriarty/assets/modules/dev/huggingface.yaml +27 -0
  75. moriarty/assets/modules/dev/kaggle.yaml +32 -0
  76. moriarty/assets/modules/dev/leetcode.yaml +32 -0
  77. moriarty/assets/modules/dev/replit.yaml +31 -0
  78. moriarty/assets/modules/dribbble.yaml +53 -0
  79. moriarty/assets/modules/ecommerce/etsy.yaml +32 -0
  80. moriarty/assets/modules/education/duolingo.yaml +32 -0
  81. moriarty/assets/modules/education/edx.yaml +26 -0
  82. moriarty/assets/modules/education/khanacademy.yaml +26 -0
  83. moriarty/assets/modules/education/lynda.yaml +27 -0
  84. moriarty/assets/modules/education/memrise.yaml +27 -0
  85. moriarty/assets/modules/education/pluralsight.yaml +27 -0
  86. moriarty/assets/modules/education/skillshare.yaml +27 -0
  87. moriarty/assets/modules/education/udacity.yaml +27 -0
  88. moriarty/assets/modules/email/github_email.yaml +40 -0
  89. moriarty/assets/modules/email/gravatar.yaml +23 -0
  90. moriarty/assets/modules/europe/badoo.yaml +19 -0
  91. moriarty/assets/modules/europe/lovoo.yaml +19 -0
  92. moriarty/assets/modules/europe/myspace.yaml +19 -0
  93. moriarty/assets/modules/europe/netlog.yaml +19 -0
  94. moriarty/assets/modules/europe/ok.yaml +19 -0
  95. moriarty/assets/modules/europe/skyrock.yaml +19 -0
  96. moriarty/assets/modules/europe/studivz.yaml +19 -0
  97. moriarty/assets/modules/europe/tuenti.yaml +19 -0
  98. moriarty/assets/modules/europe/viadeo.yaml +19 -0
  99. moriarty/assets/modules/europe/xing.yaml +19 -0
  100. moriarty/assets/modules/fitness/fitbit.yaml +27 -0
  101. moriarty/assets/modules/fitness/garmin.yaml +27 -0
  102. moriarty/assets/modules/fitness/myfitnesspal.yaml +27 -0
  103. moriarty/assets/modules/fitness/strava.yaml +33 -0
  104. moriarty/assets/modules/fitness/zwift.yaml +28 -0
  105. moriarty/assets/modules/food/allrecipes.yaml +27 -0
  106. moriarty/assets/modules/food/tasty.yaml +27 -0
  107. moriarty/assets/modules/food/yelp.yaml +32 -0
  108. moriarty/assets/modules/food/zomato.yaml +28 -0
  109. moriarty/assets/modules/forums/4chan.yaml +26 -0
  110. moriarty/assets/modules/forums/8kun.yaml +26 -0
  111. moriarty/assets/modules/forums/9gag.yaml +26 -0
  112. moriarty/assets/modules/forums/discourse.yaml +26 -0
  113. moriarty/assets/modules/forums/disqus.yaml +31 -0
  114. moriarty/assets/modules/forums/hackernews.yaml +32 -0
  115. moriarty/assets/modules/forums/launchpad.yaml +27 -0
  116. moriarty/assets/modules/forums/phpbb.yaml +25 -0
  117. moriarty/assets/modules/forums/quora.yaml +32 -0
  118. moriarty/assets/modules/forums/serverfault.yaml +27 -0
  119. moriarty/assets/modules/forums/slashdot.yaml +28 -0
  120. moriarty/assets/modules/forums/stackexchange.yaml +32 -0
  121. moriarty/assets/modules/forums/superuser.yaml +27 -0
  122. moriarty/assets/modules/forums/vbulletin.yaml +25 -0
  123. moriarty/assets/modules/forums/xenforo.yaml +25 -0
  124. moriarty/assets/modules/forums-nsfw/kiwifarms.yaml +25 -0
  125. moriarty/assets/modules/forums-nsfw/lolcow.yaml +26 -0
  126. moriarty/assets/modules/gaming/apextracker.yaml +27 -0
  127. moriarty/assets/modules/gaming/battlenet.yaml +26 -0
  128. moriarty/assets/modules/gaming/chess.yaml +30 -0
  129. moriarty/assets/modules/gaming/discord-public.yaml +27 -0
  130. moriarty/assets/modules/gaming/dotabuff.yaml +32 -0
  131. moriarty/assets/modules/gaming/epicgames.yaml +25 -0
  132. moriarty/assets/modules/gaming/faceit.yaml +33 -0
  133. moriarty/assets/modules/gaming/fortnitetracker.yaml +32 -0
  134. moriarty/assets/modules/gaming/gog.yaml +26 -0
  135. moriarty/assets/modules/gaming/itch.yaml +32 -0
  136. moriarty/assets/modules/gaming/kongregate.yaml +25 -0
  137. moriarty/assets/modules/gaming/minecraft.yaml +31 -0
  138. moriarty/assets/modules/gaming/opgg.yaml +32 -0
  139. moriarty/assets/modules/gaming/origin.yaml +26 -0
  140. moriarty/assets/modules/gaming/playstation.yaml +30 -0
  141. moriarty/assets/modules/gaming/roblox.yaml +31 -0
  142. moriarty/assets/modules/gaming/xbox.yaml +25 -0
  143. moriarty/assets/modules/github.yaml +68 -0
  144. moriarty/assets/modules/gitlab.yaml +60 -0
  145. moriarty/assets/modules/instagram.yaml +48 -0
  146. moriarty/assets/modules/latam/fotolog.yaml +27 -0
  147. moriarty/assets/modules/latam/orkut.yaml +26 -0
  148. moriarty/assets/modules/latam/taringa.yaml +27 -0
  149. moriarty/assets/modules/learning/coursera.yaml +26 -0
  150. moriarty/assets/modules/learning/udemy.yaml +26 -0
  151. moriarty/assets/modules/linkedin.yaml +40 -0
  152. moriarty/assets/modules/marketplaces/depop.yaml +28 -0
  153. moriarty/assets/modules/marketplaces/ebay.yaml +32 -0
  154. moriarty/assets/modules/marketplaces/grailed.yaml +27 -0
  155. moriarty/assets/modules/marketplaces/mercari.yaml +26 -0
  156. moriarty/assets/modules/marketplaces/poshmark.yaml +27 -0
  157. moriarty/assets/modules/marketplaces/reverb.yaml +27 -0
  158. moriarty/assets/modules/marketplaces/vinted.yaml +28 -0
  159. moriarty/assets/modules/medium.yaml +44 -0
  160. moriarty/assets/modules/music/audiomack.yaml +26 -0
  161. moriarty/assets/modules/music/bandcamp.yaml +30 -0
  162. moriarty/assets/modules/music/beatport.yaml +28 -0
  163. moriarty/assets/modules/music/deezer.yaml +26 -0
  164. moriarty/assets/modules/music/discogs.yaml +32 -0
  165. moriarty/assets/modules/music/genius.yaml +26 -0
  166. moriarty/assets/modules/music/lastfm.yaml +30 -0
  167. moriarty/assets/modules/music/mixcloud.yaml +26 -0
  168. moriarty/assets/modules/music/reverbnation.yaml +31 -0
  169. moriarty/assets/modules/music/soundcloud.yaml +31 -0
  170. moriarty/assets/modules/music/spotify.yaml +26 -0
  171. moriarty/assets/modules/music/tidal.yaml +26 -0
  172. moriarty/assets/modules/nsfw/adultwork.yaml +27 -0
  173. moriarty/assets/modules/nsfw/bongacams.yaml +28 -0
  174. moriarty/assets/modules/nsfw/cam4.yaml +28 -0
  175. moriarty/assets/modules/nsfw/chaturbate.yaml +28 -0
  176. moriarty/assets/modules/nsfw/clips4sale.yaml +27 -0
  177. moriarty/assets/modules/nsfw/extralunchmoney.yaml +27 -0
  178. moriarty/assets/modules/nsfw/fansly.yaml +28 -0
  179. moriarty/assets/modules/nsfw/fetlife.yaml +28 -0
  180. moriarty/assets/modules/nsfw/iwantclips.yaml +27 -0
  181. moriarty/assets/modules/nsfw/justforfans.yaml +28 -0
  182. moriarty/assets/modules/nsfw/loyalfans.yaml +28 -0
  183. moriarty/assets/modules/nsfw/manyvids.yaml +27 -0
  184. moriarty/assets/modules/nsfw/myfreecams.yaml +28 -0
  185. moriarty/assets/modules/nsfw/niteflirt.yaml +26 -0
  186. moriarty/assets/modules/nsfw/pornhub.yaml +32 -0
  187. moriarty/assets/modules/nsfw/redtube.yaml +27 -0
  188. moriarty/assets/modules/nsfw/stripchat.yaml +28 -0
  189. moriarty/assets/modules/nsfw/xhamster.yaml +27 -0
  190. moriarty/assets/modules/nsfw/xvideos.yaml +27 -0
  191. moriarty/assets/modules/nsfw/youporn.yaml +27 -0
  192. moriarty/assets/modules/photography/eyeem.yaml +25 -0
  193. moriarty/assets/modules/photography/fotki.yaml +25 -0
  194. moriarty/assets/modules/photography/photobucket.yaml +26 -0
  195. moriarty/assets/modules/photography/smugmug.yaml +25 -0
  196. moriarty/assets/modules/photography/vsco.yaml +27 -0
  197. moriarty/assets/modules/pinterest.yaml +40 -0
  198. moriarty/assets/modules/podcasts/anchor.yaml +26 -0
  199. moriarty/assets/modules/podcasts/castbox.yaml +26 -0
  200. moriarty/assets/modules/podcasts/podbean.yaml +26 -0
  201. moriarty/assets/modules/professional/about.yaml +31 -0
  202. moriarty/assets/modules/professional/academia.yaml +27 -0
  203. moriarty/assets/modules/professional/angellist.yaml +27 -0
  204. moriarty/assets/modules/professional/calendly.yaml +26 -0
  205. moriarty/assets/modules/professional/issuu.yaml +27 -0
  206. moriarty/assets/modules/professional/mendeley.yaml +27 -0
  207. moriarty/assets/modules/professional/notion.yaml +27 -0
  208. moriarty/assets/modules/professional/orcid.yaml +27 -0
  209. moriarty/assets/modules/professional/producthunt.yaml +31 -0
  210. moriarty/assets/modules/professional/researchgate.yaml +32 -0
  211. moriarty/assets/modules/professional/scribd.yaml +27 -0
  212. moriarty/assets/modules/professional/slideshare.yaml +31 -0
  213. moriarty/assets/modules/professional/trello.yaml +26 -0
  214. moriarty/assets/modules/professional/typeform.yaml +27 -0
  215. moriarty/assets/modules/reddit.yaml +46 -0
  216. moriarty/assets/modules/regional/amino.yaml +27 -0
  217. moriarty/assets/modules/regional/ask-fm.yaml +32 -0
  218. moriarty/assets/modules/regional/babycenter.yaml +26 -0
  219. moriarty/assets/modules/regional/cafemom.yaml +27 -0
  220. moriarty/assets/modules/regional/care2.yaml +27 -0
  221. moriarty/assets/modules/regional/diaspora.yaml +26 -0
  222. moriarty/assets/modules/regional/ello.yaml +27 -0
  223. moriarty/assets/modules/regional/gaia.yaml +27 -0
  224. moriarty/assets/modules/regional/habbo.yaml +27 -0
  225. moriarty/assets/modules/regional/imvu.yaml +27 -0
  226. moriarty/assets/modules/regional/lemmy.yaml +27 -0
  227. moriarty/assets/modules/regional/peertube.yaml +26 -0
  228. moriarty/assets/modules/regional/pixelfed.yaml +27 -0
  229. moriarty/assets/modules/regional/plurk.yaml +26 -0
  230. moriarty/assets/modules/regional/recroom.yaml +27 -0
  231. moriarty/assets/modules/regional/secondlife.yaml +26 -0
  232. moriarty/assets/modules/regional/vine-archive.yaml +27 -0
  233. moriarty/assets/modules/regional/vrchat.yaml +27 -0
  234. moriarty/assets/modules/regional/weheartit.yaml +27 -0
  235. moriarty/assets/modules/social/anilist.yaml +27 -0
  236. moriarty/assets/modules/social/beacons.yaml +26 -0
  237. moriarty/assets/modules/social/blogger.yaml +27 -0
  238. moriarty/assets/modules/social/crunchyroll.yaml +27 -0
  239. moriarty/assets/modules/social/discord.yaml +27 -0
  240. moriarty/assets/modules/social/dreamwidth.yaml +26 -0
  241. moriarty/assets/modules/social/facebook.yaml +34 -0
  242. moriarty/assets/modules/social/goodreads.yaml +32 -0
  243. moriarty/assets/modules/social/imdb.yaml +27 -0
  244. moriarty/assets/modules/social/kitsu.yaml +27 -0
  245. moriarty/assets/modules/social/letterboxd.yaml +32 -0
  246. moriarty/assets/modules/social/linktree.yaml +26 -0
  247. moriarty/assets/modules/social/livejournal.yaml +27 -0
  248. moriarty/assets/modules/social/mastodon.yaml +30 -0
  249. moriarty/assets/modules/social/minds.yaml +25 -0
  250. moriarty/assets/modules/social/myanimelist.yaml +32 -0
  251. moriarty/assets/modules/social/ravelry.yaml +27 -0
  252. moriarty/assets/modules/social/snapchat.yaml +25 -0
  253. moriarty/assets/modules/social/telegram.yaml +35 -0
  254. moriarty/assets/modules/social/tiktok.yaml +35 -0
  255. moriarty/assets/modules/social/trakt.yaml +28 -0
  256. moriarty/assets/modules/social/wattpad.yaml +32 -0
  257. moriarty/assets/modules/social/wordpress-com.yaml +26 -0
  258. moriarty/assets/modules/sports/espn.yaml +26 -0
  259. moriarty/assets/modules/sports/untappd.yaml +32 -0
  260. moriarty/assets/modules/stackoverflow.yaml +47 -0
  261. moriarty/assets/modules/steam.yaml +47 -0
  262. moriarty/assets/modules/streaming/caffeine.yaml +25 -0
  263. moriarty/assets/modules/streaming/dlive.yaml +27 -0
  264. moriarty/assets/modules/streaming/trovo.yaml +25 -0
  265. moriarty/assets/modules/travel/airbnb.yaml +26 -0
  266. moriarty/assets/modules/travel/booking.yaml +26 -0
  267. moriarty/assets/modules/travel/couchsurfing.yaml +27 -0
  268. moriarty/assets/modules/travel/tripadvisor.yaml +32 -0
  269. moriarty/assets/modules/tumblr.yaml +40 -0
  270. moriarty/assets/modules/twitch.yaml +48 -0
  271. moriarty/assets/modules/twitter.yaml +39 -0
  272. moriarty/assets/modules/youtube.yaml +42 -0
  273. moriarty/assets/templates/cves/CVE-2017-5638.yaml +27 -0
  274. moriarty/assets/templates/cves/CVE-2018-7600.yaml +30 -0
  275. moriarty/assets/templates/cves/CVE-2019-11510.yaml +27 -0
  276. moriarty/assets/templates/cves/CVE-2019-19781.yaml +28 -0
  277. moriarty/assets/templates/cves/CVE-2020-14882.yaml +28 -0
  278. moriarty/assets/templates/cves/CVE-2020-14883.yaml +29 -0
  279. moriarty/assets/templates/cves/CVE-2020-3452.yaml +28 -0
  280. moriarty/assets/templates/cves/CVE-2020-5902.yaml +28 -0
  281. moriarty/assets/templates/cves/CVE-2021-21972.yaml +31 -0
  282. moriarty/assets/templates/cves/CVE-2021-21985.yaml +28 -0
  283. moriarty/assets/templates/cves/CVE-2021-26084.yaml +30 -0
  284. moriarty/assets/templates/cves/CVE-2021-41773.yaml +25 -0
  285. moriarty/assets/templates/cves/CVE-2021-42013.yaml +28 -0
  286. moriarty/assets/templates/cves/CVE-2021-44228.yaml +27 -0
  287. moriarty/assets/templates/cves/CVE-2022-0185.yaml +21 -0
  288. moriarty/assets/templates/cves/CVE-2022-1388.yaml +36 -0
  289. moriarty/assets/templates/cves/CVE-2022-22954.yaml +28 -0
  290. moriarty/assets/templates/cves/CVE-2022-22965.yaml +31 -0
  291. moriarty/assets/templates/cves/CVE-2022-26134.yaml +27 -0
  292. moriarty/assets/templates/cves/CVE-2023-22515.yaml +27 -0
  293. moriarty/assets/templates/cves/CVE-2023-22527.yaml +29 -0
  294. moriarty/assets/templates/cves/CVE-2023-23752.yaml +33 -0
  295. moriarty/assets/templates/cves/CVE-2023-27350.yaml +27 -0
  296. moriarty/assets/templates/cves/CVE-2023-2868.yaml +27 -0
  297. moriarty/assets/templates/cves/CVE-2023-34362.yaml +27 -0
  298. moriarty/assets/templates/cves/CVE-2023-3519.yaml +28 -0
  299. moriarty/assets/templates/cves/CVE-2023-4966.yaml +27 -0
  300. moriarty/assets/templates/default-logins/admin-weak.yaml +40 -0
  301. moriarty/assets/templates/default-logins/wordpress-default.yaml +38 -0
  302. moriarty/assets/templates/exposures/aws-credentials.yaml +35 -0
  303. moriarty/assets/templates/exposures/backup-files.yaml +36 -0
  304. moriarty/assets/templates/exposures/database-files.yaml +34 -0
  305. moriarty/assets/templates/exposures/docker-exposed.yaml +31 -0
  306. moriarty/assets/templates/exposures/env-exposed.yaml +41 -0
  307. moriarty/assets/templates/exposures/git-exposed.yaml +41 -0
  308. moriarty/assets/templates/exposures/phpinfo.yaml +36 -0
  309. moriarty/assets/templates/exposures/svn-exposed.yaml +28 -0
  310. moriarty/assets/templates/fuzzing/api-endpoints.yaml +39 -0
  311. moriarty/assets/templates/fuzzing/common-files.yaml +37 -0
  312. moriarty/assets/templates/fuzzing/open-redirect-fuzz.yaml +35 -0
  313. moriarty/assets/templates/fuzzing/xss-search-fuzz.yaml +29 -0
  314. moriarty/assets/templates/git-config.yaml +18 -0
  315. moriarty/assets/templates/misconfigurations/cors-misconfiguration.yaml +30 -0
  316. moriarty/assets/templates/misconfigurations/debug-enabled.yaml +29 -0
  317. moriarty/assets/templates/misconfigurations/directory-listing.yaml +33 -0
  318. moriarty/assets/templates/misconfigurations/jwt-none-algo.yaml +30 -0
  319. moriarty/assets/templates/misconfigurations/ssl-tls-weak.yaml +23 -0
  320. moriarty/assets/templates/vulnerabilities/lfi-basic.yaml +31 -0
  321. moriarty/assets/templates/vulnerabilities/open-redirect.yaml +31 -0
  322. moriarty/assets/templates/vulnerabilities/rce-basic.yaml +34 -0
  323. moriarty/assets/templates/vulnerabilities/sqli-error.yaml +39 -0
  324. moriarty/assets/templates/vulnerabilities/ssrf-basic.yaml +31 -0
  325. moriarty/assets/templates/vulnerabilities/xss-reflected.yaml +38 -0
  326. moriarty/assets/templates/vulnerabilities/xxe-basic.yaml +30 -0
  327. moriarty/assets/wordlists/subdomains-1000.txt +1063 -0
  328. moriarty/cli/__init__.py +3 -0
  329. moriarty/cli/app.py +120 -0
  330. moriarty/cli/async_utils.py +19 -0
  331. moriarty/cli/dns.py +83 -0
  332. moriarty/cli/domain_cmd.py +572 -0
  333. moriarty/cli/email.py +383 -0
  334. moriarty/cli/email_investigate.py +224 -0
  335. moriarty/cli/intelligence.py +329 -0
  336. moriarty/cli/output.py +62 -0
  337. moriarty/cli/rdap.py +94 -0
  338. moriarty/cli/state.py +38 -0
  339. moriarty/cli/tls.py +91 -0
  340. moriarty/cli/user.py +227 -0
  341. moriarty/core/cache_backend.py +223 -0
  342. moriarty/core/config_manager.py +303 -0
  343. moriarty/correlator/__init__.py +0 -0
  344. moriarty/data/__init__.py +81 -0
  345. moriarty/data/ioc/__init__.py +142 -0
  346. moriarty/data/ioc/matcher.py +254 -0
  347. moriarty/data/ioc/types.py +267 -0
  348. moriarty/data/local_intelligence.py +507 -0
  349. moriarty/data/signature_loaders/__init__.py +103 -0
  350. moriarty/data/signature_loaders/base.py +54 -0
  351. moriarty/data/signature_loaders/ioc_feed.py +356 -0
  352. moriarty/data/signature_loaders/wappalyzer.py +112 -0
  353. moriarty/dsl/__init__.py +0 -0
  354. moriarty/dsl/loader.py +99 -0
  355. moriarty/dsl/schema.py +47 -0
  356. moriarty/export/__init__.py +0 -0
  357. moriarty/intelligence/__init__.py +27 -0
  358. moriarty/intelligence/__main__.py +150 -0
  359. moriarty/intelligence/config.py +395 -0
  360. moriarty/intelligence/ioc.py +267 -0
  361. moriarty/intelligence/signatures.py +550 -0
  362. moriarty/intelligence/storage.py +501 -0
  363. moriarty/interop/__init__.py +0 -0
  364. moriarty/logging/__init__.py +0 -0
  365. moriarty/logging/config.py +47 -0
  366. moriarty/models/__init__.py +16 -0
  367. moriarty/models/assertion.py +24 -0
  368. moriarty/models/entity.py +22 -0
  369. moriarty/models/evidence.py +37 -0
  370. moriarty/models/relation.py +24 -0
  371. moriarty/models/types.py +28 -0
  372. moriarty/modules/__init__.py +0 -0
  373. moriarty/modules/avatar_hash.py +184 -0
  374. moriarty/modules/directory_fuzzer.py +322 -0
  375. moriarty/modules/dns_scan.py +40 -0
  376. moriarty/modules/domain_scanner.py +620 -0
  377. moriarty/modules/email_check.py +98 -0
  378. moriarty/modules/email_investigate.py +267 -0
  379. moriarty/modules/email_security.py +274 -0
  380. moriarty/modules/googlemaps_lookup.py +106 -0
  381. moriarty/modules/headless_executor.py +201 -0
  382. moriarty/modules/orchestrator.py +60 -0
  383. moriarty/modules/passive_recon.py +444 -0
  384. moriarty/modules/phone_extractor.py +151 -0
  385. moriarty/modules/pipeline_orchestrator.py +726 -0
  386. moriarty/modules/port_scanner.py +129 -0
  387. moriarty/modules/rdap.py +61 -0
  388. moriarty/modules/rdap_extended.py +188 -0
  389. moriarty/modules/stealth_mode.py +610 -0
  390. moriarty/modules/subdomain_discovery.py +595 -0
  391. moriarty/modules/technology_profiler.py +361 -0
  392. moriarty/modules/template_executor.py +239 -0
  393. moriarty/modules/template_scanner.py +1048 -0
  394. moriarty/modules/tls_scan.py +46 -0
  395. moriarty/modules/tls_validator.py +188 -0
  396. moriarty/modules/vuln_scanner.py +483 -0
  397. moriarty/modules/waf_detector.py +585 -0
  398. moriarty/modules/wayback_discovery.py +234 -0
  399. moriarty/modules/web_crawler.py +163 -0
  400. moriarty/net/__init__.py +0 -0
  401. moriarty/net/dns_cache.py +175 -0
  402. moriarty/net/dns_client.py +188 -0
  403. moriarty/net/rdap_client.py +52 -0
  404. moriarty/net/smtp_client.py +114 -0
  405. moriarty/net/tls_client.py +111 -0
  406. moriarty/parsers/__init__.py +0 -0
  407. moriarty/parsers/html_parser.py +136 -0
  408. moriarty/tests/__init__.py +0 -0
  409. moriarty/tests/test_email_service.py +17 -0
  410. moriarty/tests/test_models.py +46 -0
  411. moriarty/tests/test_orchestrator.py +30 -0
  412. moriarty/tests/test_tls_client.py +18 -0
  413. moriarty_project-0.1.6.dist-info/METADATA +388 -0
  414. moriarty_project-0.1.6.dist-info/RECORD +418 -0
  415. moriarty_project-0.1.6.dist-info/WHEEL +4 -0
  416. moriarty_project-0.1.6.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,150 @@
1
+ """Ponto de entrada principal para o módulo de inteligência."""
2
+
3
+ import sys
4
+ import logging
5
+ from pathlib import Path
6
+ from typing import List, Optional
7
+
8
+ import typer
9
+ from rich.console import Console
10
+ from rich.logging import RichHandler
11
+
12
+ from . import __version__
13
+ from .config import init_config, get_config
14
+ from .cli import app as cli_app
15
+
16
+ # Configura o logger
17
+ logging.basicConfig(
18
+ level=logging.INFO,
19
+ format="%(message)s",
20
+ datefmt="[%X]",
21
+ handlers=[RichHandler(rich_tracebacks=True)]
22
+ )
23
+
24
+ # Desativa logs de bibliotecas de terceiros
25
+ logging.getLogger("urllib3").setLevel(logging.WARNING)
26
+ logging.getLogger("aiohttp").setLevel(logging.WARNING)
27
+ logging.getLogger("asyncio").setLevel(logging.WARNING)
28
+
29
+ # Cria o logger para este módulo
30
+ logger = logging.getLogger("moriarty.intelligence")
31
+
32
+ # Cria a aplicação principal
33
+ app = typer.Typer(
34
+ name="moriarty-intel",
35
+ help="Ferramenta de inteligência de ameaças do Moriarty",
36
+ add_completion=False,
37
+ no_args_is_help=True,
38
+ rich_markup_mode="rich"
39
+ )
40
+
41
+ # Adiciona os comandos da CLI
42
+ app.add_typer(cli_app, name="cli")
43
+
44
+ # Console rico para saída formatada
45
+ console = Console()
46
+
47
+ def version_callback(value: bool):
48
+ """Mostra a versão e sai."""
49
+ if value:
50
+ console.print(f"[bold blue]Moriarty Intelligence[/] [green]v{__version__}[/]")
51
+ raise typer.Exit()
52
+
53
+ @app.callback()
54
+ def main(
55
+ version: bool = typer.Option(
56
+ None,
57
+ "--version",
58
+ "-v",
59
+ help="Mostra a versão e sai.",
60
+ callback=version_callback,
61
+ is_eager=True
62
+ ),
63
+ config: str = typer.Option(
64
+ None,
65
+ "--config",
66
+ "-c",
67
+ help="Caminho para o arquivo de configuração.",
68
+ envvar="MORIARTY_CONFIG"
69
+ ),
70
+ verbose: bool = typer.Option(
71
+ False,
72
+ "--verbose",
73
+ "-v",
74
+ help="Ativa o modo verboso."
75
+ ),
76
+ debug: bool = typer.Option(
77
+ False,
78
+ "--debug",
79
+ "-d",
80
+ help="Ativa o modo de depuração."
81
+ )
82
+ ):
83
+ """Ferramenta de inteligência de ameaças do Moriarty.
84
+
85
+ Uma ferramenta poderosa para coleta, análise e gerenciamento de
86
+ inteligência sobre ameaças cibernéticas.
87
+ """
88
+ # Configura o nível de log
89
+ if debug:
90
+ logging.getLogger().setLevel(logging.DEBUG)
91
+ logger.setLevel(logging.DEBUG)
92
+ elif verbose:
93
+ logging.getLogger().setLevel(logging.INFO)
94
+ logger.setLevel(logging.INFO)
95
+ else:
96
+ logging.getLogger().setLevel(logging.WARNING)
97
+ logger.setLevel(logging.WARNING)
98
+
99
+ # Inicializa a configuração
100
+ try:
101
+ init_config(config)
102
+ logger.debug("Configuração carregada com sucesso")
103
+ except Exception as e:
104
+ logger.error(f"Erro ao carregar a configuração: {e}")
105
+ if debug:
106
+ logger.exception("Detalhes do erro:")
107
+ raise typer.Exit(1)
108
+
109
+ # Comandos principais
110
+ @app.command()
111
+ def init():
112
+ """Inicializa o ambiente do Moriarty Intelligence."""
113
+ from rich.panel import Panel
114
+ from rich.text import Text
115
+
116
+ config = get_config()
117
+ config_dir = Path(config['storage.path']).parent
118
+
119
+ console.print(Panel.fit(
120
+ "[bold blue]Inicializando o ambiente do Moriarty Intelligence[/]\n\n"
121
+ f"[bold]Diretório de configuração:[/] {config_dir}\n"
122
+ f"[bold]Banco de dados:[/] {config['storage.path']}\n"
123
+ f"[bold]Arquivo de log:[/] {config['logging.file']}",
124
+ title="Moriarty Intelligence",
125
+ border_style="blue"
126
+ ))
127
+
128
+ # Cria o diretório de configuração se não existir
129
+ config_dir.mkdir(parents=True, exist_ok=True)
130
+
131
+ # Cria o diretório de assinaturas se não existir
132
+ sig_dir = Path(config['signatures.sources[0].path'])
133
+ sig_dir.mkdir(parents=True, exist_ok=True)
134
+
135
+ # Salva a configuração padrão se o arquivo não existir
136
+ config_file = config_dir / 'intelligence_config.json'
137
+ if not config_file.exists():
138
+ config.save(config_file)
139
+ console.print(f"[green]✓[/] Arquivo de configuração criado em {config_file}")
140
+
141
+ console.print("\n[bold]Configuração concluída com sucesso![/]")
142
+ console.print("\nUse [bold]moriarty-intel --help[/] para ver os comandos disponíveis.")
143
+
144
+ # Ponto de entrada
145
+ if __name__ == "__main__":
146
+ try:
147
+ app()
148
+ except Exception as e:
149
+ logger.error(f"Erro inesperado: {e}", exc_info=True)
150
+ raise typer.Exit(1)
@@ -0,0 +1,395 @@
1
+ """Configurações do módulo de inteligência."""
2
+
3
+ import os
4
+ import json
5
+ from pathlib import Path
6
+ from typing import Dict, Any, Optional, List, Union
7
+
8
+ # Caminho padrão para o diretório de configuração
9
+ DEFAULT_CONFIG_DIR = Path.home() / '.moriarty'
10
+ DEFAULT_CONFIG_FILE = DEFAULT_CONFIG_DIR / 'intelligence_config.json'
11
+
12
+ class ConfigError(Exception):
13
+ """Exceção para erros de configuração."""
14
+ pass
15
+
16
+ class Config:
17
+ """Gerenciador de configurações do módulo de inteligência."""
18
+
19
+ _instance = None
20
+
21
+ def __new__(cls):
22
+ if cls._instance is None:
23
+ cls._instance = super(Config, cls).__new__(cls)
24
+ cls._instance._initialized = False
25
+ return cls._instance
26
+
27
+ def __init__(self):
28
+ if self._initialized:
29
+ return
30
+
31
+ self._config = {}
32
+ self._config_file = None
33
+ self._initialized = True
34
+
35
+ # Carrega as configurações padrão
36
+ self._load_defaults()
37
+
38
+ # Tenta carregar as configurações do arquivo
39
+ self._config_file = self._find_config_file()
40
+ if self._config_file:
41
+ self.load(self._config_file)
42
+
43
+ def _load_defaults(self):
44
+ """Carrega as configurações padrão."""
45
+ self._config = {
46
+ # Configurações de armazenamento
47
+ 'storage': {
48
+ 'type': 'sqlite',
49
+ 'path': str(DEFAULT_CONFIG_DIR / 'intelligence.db'),
50
+ 'in_memory': False
51
+ },
52
+
53
+ # Configurações de coleta
54
+ 'collection': {
55
+ 'enabled': True,
56
+ 'interval': 3600, # segundos
57
+ 'max_items': 1000,
58
+ 'sources': ['all'], # ou lista de fontes específicas
59
+ 'exclude': [] # fontes a serem excluídas
60
+ },
61
+
62
+ # Configurações de assinaturas
63
+ 'signatures': {
64
+ 'enabled': True,
65
+ 'auto_update': True,
66
+ 'update_interval': 86400, # segundos (1 dia)
67
+ 'sources': [
68
+ {
69
+ 'name': 'default',
70
+ 'type': 'local',
71
+ 'path': str(DEFAULT_CONFIG_DIR / 'signatures'),
72
+ 'enabled': True
73
+ }
74
+ ]
75
+ },
76
+
77
+ # Configurações de feeds de ameaças
78
+ 'threat_feeds': {
79
+ 'enabled': True,
80
+ 'auto_update': True,
81
+ 'update_interval': 3600, # segundos (1 hora)
82
+ 'feeds': [] # Será preenchido com feeds padrão
83
+ },
84
+
85
+ # Configurações de API
86
+ 'api_keys': {
87
+ # Chaves de API para serviços externos
88
+ 'virustotal': '',
89
+ 'abuseipdb': '',
90
+ 'shodan': '',
91
+ 'censys_id': '',
92
+ 'censys_secret': '',
93
+ 'greynoise': '',
94
+ 'otx': ''
95
+ },
96
+
97
+ # Configurações de proxy
98
+ 'proxy': {
99
+ 'enabled': False,
100
+ 'http': '',
101
+ 'https': '',
102
+ 'no_proxy': 'localhost,127.0.0.1'
103
+ },
104
+
105
+ # Configurações de logging
106
+ 'logging': {
107
+ 'level': 'INFO',
108
+ 'file': str(DEFAULT_CONFIG_DIR / 'intelligence.log'),
109
+ 'max_size': 10485760, # 10 MB
110
+ 'backup_count': 5
111
+ },
112
+
113
+ # Configurações de cache
114
+ 'cache': {
115
+ 'enabled': True,
116
+ 'ttl': 3600, # segundos (1 hora)
117
+ 'max_size': 1000
118
+ },
119
+
120
+ # Configurações de privacidade
121
+ 'privacy': {
122
+ 'anonymize_ips': False,
123
+ 'anonymize_domains': False,
124
+ 'log_sensitive_data': False
125
+ },
126
+
127
+ # Configurações avançadas
128
+ 'advanced': {
129
+ 'max_workers': 10,
130
+ 'timeout': 30,
131
+ 'retry_attempts': 3,
132
+ 'retry_delay': 5
133
+ }
134
+ }
135
+
136
+ # Adiciona feeds de ameaças padrão
137
+ self._add_default_feeds()
138
+
139
+ def _add_default_feeds(self):
140
+ """Adiciona os feeds de ameaças padrão à configuração."""
141
+ from .collectors import ThreatFeedCollector
142
+
143
+ self._config['threat_feeds']['feeds'] = [
144
+ {
145
+ 'name': feed['name'],
146
+ 'url': feed['url'],
147
+ 'format': feed['format'],
148
+ 'ioc_type': feed['ioc_type'],
149
+ 'threat_type': feed['threat_type'],
150
+ 'confidence': feed['confidence'],
151
+ 'enabled': feed.get('enabled', True),
152
+ 'api_key_required': feed.get('api_key_required', False)
153
+ }
154
+ for feed in ThreatFeedCollector.THREAT_FEEDS
155
+ ]
156
+
157
+ def _find_config_file(self) -> Optional[Path]:
158
+ """Encontra o arquivo de configuração em locais padrão."""
159
+ # 1. Verifica o caminho especificado na variável de ambiente
160
+ env_config = os.environ.get('MORIARTY_CONFIG')
161
+ if env_config:
162
+ config_path = Path(env_config).expanduser().resolve()
163
+ if config_path.exists() and config_path.is_file():
164
+ return config_path
165
+
166
+ # 2. Verifica no diretório de configuração do usuário
167
+ user_config = DEFAULT_CONFIG_FILE
168
+ if user_config.exists() and user_config.is_file():
169
+ return user_config
170
+
171
+ # 3. Verifica no diretório de instalação do pacote
172
+ try:
173
+ import moriarty
174
+ package_dir = Path(moriarty.__file__).parent
175
+ package_config = package_dir / 'config' / 'intelligence_config.json'
176
+ if package_config.exists() and package_config.is_file():
177
+ return package_config
178
+ except (ImportError, AttributeError):
179
+ pass
180
+
181
+ # 4. Verifica no diretório de trabalho atual
182
+ cwd_config = Path.cwd() / 'intelligence_config.json'
183
+ if cwd_config.exists() and cwd_config.is_file():
184
+ return cwd_config
185
+
186
+ return None
187
+
188
+ def load(self, config_file: Union[str, Path] = None):
189
+ """Carrega as configurações de um arquivo JSON.
190
+
191
+ Args:
192
+ config_file: Caminho para o arquivo de configuração.
193
+ Se None, usa o arquivo padrão.
194
+ """
195
+ if config_file is None:
196
+ config_file = self._config_file or DEFAULT_CONFIG_FILE
197
+ else:
198
+ config_file = Path(config_file).expanduser().resolve()
199
+
200
+ if not config_file.exists() or not config_file.is_file():
201
+ raise ConfigError(f"Arquivo de configuração não encontrado: {config_file}")
202
+
203
+ try:
204
+ with open(config_file, 'r', encoding='utf-8') as f:
205
+ user_config = json.load(f)
206
+
207
+ # Atualiza recursivamente o dicionário de configuração
208
+ self._update_dict(self._config, user_config)
209
+ self._config_file = config_file
210
+
211
+ # Cria o diretório de configuração se não existir
212
+ if not config_file.parent.exists():
213
+ config_file.parent.mkdir(parents=True, exist_ok=True)
214
+
215
+ except json.JSONDecodeError as e:
216
+ raise ConfigError(f"Erro ao decodificar o arquivo de configuração {config_file}: {e}")
217
+ except Exception as e:
218
+ raise ConfigError(f"Erro ao carregar o arquivo de configuração {config_file}: {e}")
219
+
220
+ def save(self, config_file: Union[str, Path] = None):
221
+ """Salva as configurações em um arquivo JSON.
222
+
223
+ Args:
224
+ config_file: Caminho para o arquivo de configuração.
225
+ Se None, usa o arquivo atual ou o padrão.
226
+ """
227
+ if config_file is None:
228
+ if self._config_file is None:
229
+ config_file = DEFAULT_CONFIG_FILE
230
+ else:
231
+ config_file = self._config_file
232
+ else:
233
+ config_file = Path(config_file).expanduser().resolve()
234
+
235
+ try:
236
+ # Garante que o diretório existe
237
+ config_file.parent.mkdir(parents=True, exist_ok=True)
238
+
239
+ with open(config_file, 'w', encoding='utf-8') as f:
240
+ json.dump(self._config, f, indent=2, ensure_ascii=False)
241
+
242
+ self._config_file = config_file
243
+
244
+ except Exception as e:
245
+ raise ConfigError(f"Erro ao salvar o arquivo de configuração {config_file}: {e}")
246
+
247
+ def get(self, key: str, default=None) -> Any:
248
+ """Obtém um valor de configuração.
249
+
250
+ Args:
251
+ key: Chave de configuração no formato 'section.subsection.key'.
252
+ default: Valor padrão se a chave não existir.
253
+
254
+ Returns:
255
+ O valor da configuração ou o valor padrão.
256
+ """
257
+ keys = key.split('.')
258
+ value = self._config
259
+
260
+ try:
261
+ for k in keys:
262
+ value = value[k]
263
+ return value
264
+ except (KeyError, TypeError):
265
+ return default
266
+
267
+ def set(self, key: str, value: Any):
268
+ """Define um valor de configuração.
269
+
270
+ Args:
271
+ key: Chave de configuração no formato 'section.subsection.key'.
272
+ value: Valor a ser definido.
273
+ """
274
+ keys = key.split('.')
275
+ current = self._config
276
+
277
+ for i, k in enumerate(keys[:-1], 1):
278
+ if k not in current:
279
+ current[k] = {}
280
+ current = current[k]
281
+
282
+ current[keys[-1]] = value
283
+
284
+ def _update_dict(self, d: Dict, u: Dict) -> Dict:
285
+ """Atualiza recursivamente um dicionário."""
286
+ for k, v in u.items():
287
+ if isinstance(v, dict) and k in d and isinstance(d[k], dict):
288
+ d[k] = self._update_dict(d[k], v)
289
+ else:
290
+ d[k] = v
291
+ return d
292
+
293
+ def to_dict(self) -> Dict:
294
+ """Retorna as configurações como um dicionário."""
295
+ return self._config.copy()
296
+
297
+ def __getitem__(self, key: str) -> Any:
298
+ """Permite o acesso a itens usando colchetes."""
299
+ return self.get(key)
300
+
301
+ def __setitem__(self, key: str, value: Any):
302
+ """Permite a definição de itens usando colchetes."""
303
+ self.set(key, value)
304
+
305
+ def __contains__(self, key: str) -> bool:
306
+ """Verifica se uma chave de configuração existe."""
307
+ try:
308
+ self.get(key)
309
+ return True
310
+ except KeyError:
311
+ return False
312
+
313
+ # Instância global para uso em todo o módulo
314
+ settings = Config()
315
+
316
+ def get_config() -> Config:
317
+ """Obtém a instância global de configuração."""
318
+ return settings
319
+
320
+ def init_config(config_file: Union[str, Path] = None):
321
+ """Inicializa a configuração global.
322
+
323
+ Args:
324
+ config_file: Caminho para o arquivo de configuração (opcional).
325
+ """
326
+ global settings
327
+ settings = Config()
328
+
329
+ if config_file:
330
+ settings.load(config_file)
331
+ elif settings._config_file:
332
+ settings.load()
333
+ else:
334
+ # Cria o diretório de configuração se não existir
335
+ DEFAULT_CONFIG_DIR.mkdir(parents=True, exist_ok=True)
336
+ settings.save()
337
+
338
+ # Configura o logging
339
+ _setup_logging()
340
+
341
+ def _setup_logging():
342
+ """Configura o sistema de logging com base nas configurações."""
343
+ import logging.config
344
+ import logging.handlers
345
+
346
+ log_config = {
347
+ 'version': 1,
348
+ 'disable_existing_loggers': False,
349
+ 'formatters': {
350
+ 'standard': {
351
+ 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s',
352
+ 'datefmt': '%Y-%m-%d %H:%M:%S'
353
+ },
354
+ 'detailed': {
355
+ 'format': '%(asctime)s [%(levelname)s] %(name)s:%(lineno)d: %(message)s',
356
+ 'datefmt': '%Y-%m-%d %H:%M:%S'
357
+ }
358
+ },
359
+ 'handlers': {
360
+ 'console': {
361
+ 'class': 'logging.StreamHandler',
362
+ 'level': settings['logging.level'],
363
+ 'formatter': 'standard',
364
+ 'stream': 'ext://sys.stdout'
365
+ },
366
+ 'file': {
367
+ 'class': 'logging.handlers.RotatingFileHandler',
368
+ 'level': settings['logging.level'],
369
+ 'formatter': 'detailed',
370
+ 'filename': settings['logging.file'],
371
+ 'maxBytes': settings['logging.max_size'],
372
+ 'backupCount': settings['logging.backup_count'],
373
+ 'encoding': 'utf8'
374
+ }
375
+ },
376
+ 'loggers': {
377
+ 'moriarty.intelligence': {
378
+ 'handlers': ['console', 'file'],
379
+ 'level': settings['logging.level'],
380
+ 'propagate': False
381
+ },
382
+ '': {
383
+ 'handlers': ['console'],
384
+ 'level': 'WARNING',
385
+ 'propagate': False
386
+ }
387
+ },
388
+ 'root': {
389
+ 'level': 'WARNING',
390
+ 'handlers': ['console']
391
+ }
392
+ }
393
+
394
+ # Aplica a configuração de logging
395
+ logging.config.dictConfig(log_config)