intrigue-ident 0.2 → 0.9.9

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 (484) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +21 -0
  3. data/.gitignore +3 -0
  4. data/.ruby-version +1 -0
  5. data/Dockerfile +39 -0
  6. data/Gemfile +10 -3
  7. data/Gemfile.lock +35 -20
  8. data/LICENSE.md +12 -0
  9. data/README.md +79 -0
  10. data/checks/ftp/base.rb +15 -0
  11. data/checks/ftp/filezilla.rb +28 -0
  12. data/checks/ftp/microsoft.rb +27 -0
  13. data/checks/ftp/proftp.rb +28 -0
  14. data/checks/ftp/pureftpd.rb +27 -0
  15. data/checks/ftp/vsftp.rb +28 -0
  16. data/checks/http/123reg.rb +31 -0
  17. data/checks/http/acme.rb +28 -0
  18. data/checks/http/acquia.rb +28 -0
  19. data/checks/http/adeptia.rb +30 -0
  20. data/checks/http/adobe.rb +168 -0
  21. data/checks/http/advantshop.rb +33 -0
  22. data/checks/http/afrihost.rb +29 -0
  23. data/checks/http/aftermarketpl.rb +46 -0
  24. data/checks/http/agility.rb +34 -0
  25. data/checks/http/akamai.rb +88 -0
  26. data/checks/http/alkacon.rb +30 -0
  27. data/checks/http/allegro.rb +28 -0
  28. data/checks/http/almuba.rb +30 -0
  29. data/checks/http/amazon.rb +263 -0
  30. data/checks/http/amirocms.rb +30 -0
  31. data/checks/http/anelectron.rb +29 -0
  32. data/checks/http/anquanbao.rb +32 -0
  33. data/checks/http/aol.rb +29 -0
  34. data/checks/http/apache.rb +358 -0
  35. data/checks/http/appdynamics.rb +43 -0
  36. data/checks/http/arris.rb +30 -0
  37. data/checks/http/artifactory.rb +30 -0
  38. data/checks/http/aruba.rb +27 -0
  39. data/checks/http/atlassian.rb +152 -0
  40. data/checks/http/auth0.rb +44 -0
  41. data/checks/http/automattic.rb +292 -0
  42. data/checks/http/axinom.rb +30 -0
  43. data/checks/http/axios.rb +29 -0
  44. data/checks/http/axis.rb +27 -0
  45. data/checks/http/axway.rb +33 -0
  46. data/checks/http/backdrop.rb +30 -0
  47. data/checks/http/banu.rb +30 -0
  48. data/checks/http/barracuda.rb +99 -0
  49. data/checks/http/base.rb +139 -0
  50. data/checks/http/beehive.rb +30 -0
  51. data/checks/http/bigcartel.rb +33 -0
  52. data/checks/http/bigcommerce.rb +33 -0
  53. data/checks/http/binarysec.rb +47 -0
  54. data/checks/http/bitly.rb +40 -0
  55. data/checks/http/blackboard.rb +44 -0
  56. data/checks/http/blueimp.rb +27 -0
  57. data/checks/http/bomgar.rb +27 -0
  58. data/checks/http/bootstrap.rb +27 -0
  59. data/checks/http/bower.rb +28 -0
  60. data/checks/http/broadcom.rb +29 -0
  61. data/checks/http/brocade.rb +39 -0
  62. data/checks/http/browsermedia.rb +29 -0
  63. data/checks/http/bsm.rb +29 -0
  64. data/checks/http/bynder.rb +31 -0
  65. data/checks/http/calibre.rb +33 -0
  66. data/checks/http/centos.rb +28 -0
  67. data/checks/http/cerberus.rb +28 -0
  68. data/checks/http/charity_engine.rb +27 -0
  69. data/checks/http/checkpoint.rb +56 -0
  70. data/checks/http/cherokee.rb +29 -0
  71. data/checks/http/cisco.rb +134 -0
  72. data/checks/http/citrix.rb +137 -0
  73. data/checks/http/cloud_city.rb +30 -0
  74. data/checks/http/cloudflare.rb +219 -0
  75. data/checks/http/cmsimple.rb +30 -0
  76. data/checks/http/codeigniter.rb +26 -0
  77. data/checks/http/communigate.rb +32 -0
  78. data/checks/http/concrete5.rb +30 -0
  79. data/checks/http/contenido.rb +33 -0
  80. data/checks/http/content/analytics.rb +40 -0
  81. data/checks/http/content/authentication.rb +111 -0
  82. data/checks/http/content/content.rb +92 -0
  83. data/checks/http/content/security_headers.rb +70 -0
  84. data/checks/http/cpanel.rb +56 -0
  85. data/checks/http/cradlepoint.rb +30 -0
  86. data/checks/http/craft.rb +42 -0
  87. data/checks/http/crazydomains.rb +31 -0
  88. data/checks/http/crowdstrike.rb +27 -0
  89. data/checks/http/dan.rb +30 -0
  90. data/checks/http/danneo.rb +30 -0
  91. data/checks/http/day.rb +31 -0
  92. data/checks/http/debian.rb +27 -0
  93. data/checks/http/dell.rb +43 -0
  94. data/checks/http/dev_php.rb +30 -0
  95. data/checks/http/discourse.rb +30 -0
  96. data/checks/http/discuz!.rb +30 -0
  97. data/checks/http/distil.rb +27 -0
  98. data/checks/http/django.rb +27 -0
  99. data/checks/http/dmanager.rb +29 -0
  100. data/checks/http/dns_made_easy.rb +29 -0
  101. data/checks/http/docuwiki.rb +27 -0
  102. data/checks/http/docverify.rb +29 -0
  103. data/checks/http/domain_parking_ru.rb +31 -0
  104. data/checks/http/domainname_shop.rb +30 -0
  105. data/checks/http/dosarrest.rb +29 -0
  106. data/checks/http/dreamhost.rb +31 -0
  107. data/checks/http/drupal.rb +91 -0
  108. data/checks/http/duo.rb +45 -0
  109. data/checks/http/dyn.rb +41 -0
  110. data/checks/http/dynamicweb.rb +29 -0
  111. data/checks/http/dynatrace.rb +40 -0
  112. data/checks/http/easyname.rb +44 -0
  113. data/checks/http/eclipse.rb +64 -0
  114. data/checks/http/enservio.rb +29 -0
  115. data/checks/http/envoy.rb +26 -0
  116. data/checks/http/epiccom.rb +31 -0
  117. data/checks/http/ergon.rb +31 -0
  118. data/checks/http/expressjs.rb +27 -0
  119. data/checks/http/ezproxy.rb +28 -0
  120. data/checks/http/f5.rb +122 -0
  121. data/checks/http/facebook.rb +27 -0
  122. data/checks/http/fastly.rb +67 -0
  123. data/checks/http/first_domains.rb +31 -0
  124. data/checks/http/flywheel.rb +30 -0
  125. data/checks/http/forgerock.rb +43 -0
  126. data/checks/http/fortinet.rb +29 -0
  127. data/checks/http/fresh_service.rb +30 -0
  128. data/checks/http/frontify.rb +29 -0
  129. data/checks/http/generic.rb +272 -0
  130. data/checks/http/github.rb +40 -0
  131. data/checks/http/gitlab.rb +30 -0
  132. data/checks/http/glimpse.rb +32 -0
  133. data/checks/http/globalscape.rb +27 -0
  134. data/checks/http/goahead.rb +31 -0
  135. data/checks/http/godaddy.rb +31 -0
  136. data/checks/http/google.rb +164 -0
  137. data/checks/http/google_cloud.rb +27 -0
  138. data/checks/http/grafana.rb +27 -0
  139. data/checks/http/gunicorn.rb +30 -0
  140. data/checks/http/haskell.rb +31 -0
  141. data/checks/http/heroku.rb +77 -0
  142. data/checks/http/hikvision.rb +29 -0
  143. data/checks/http/hp.rb +27 -0
  144. data/checks/http/hubspot.rb +104 -0
  145. data/checks/http/ibm.rb +182 -0
  146. data/checks/http/icewarp.rb +29 -0
  147. data/checks/http/impresspages.rb +30 -0
  148. data/checks/http/imunify360.rb +28 -0
  149. data/checks/http/incapsula.rb +54 -0
  150. data/checks/http/ingram_micro.rb +28 -0
  151. data/checks/http/innovative_interfaces_inc.rb +27 -0
  152. data/checks/http/inside_sales.rb +27 -0
  153. data/checks/http/instra.rb +61 -0
  154. data/checks/http/intercom.rb +27 -0
  155. data/checks/http/ivanti.rb +28 -0
  156. data/checks/http/jamf.rb +31 -0
  157. data/checks/http/jekyll.rb +31 -0
  158. data/checks/http/jenkins.rb +59 -0
  159. data/checks/http/jetbrains.rb +27 -0
  160. data/checks/http/jetty.rb +27 -0
  161. data/checks/http/jforum.rb +27 -0
  162. data/checks/http/jitbit.rb +30 -0
  163. data/checks/http/jive.rb +27 -0
  164. data/checks/http/joomla.rb +43 -0
  165. data/checks/http/jquery.rb +58 -0
  166. data/checks/http/jupyter.rb +28 -0
  167. data/checks/http/kentico.rb +27 -0
  168. data/checks/http/kerio.rb +34 -0
  169. data/checks/http/kibana.rb +56 -0
  170. data/checks/http/kong.rb +32 -0
  171. data/checks/http/kubernetes.rb +66 -0
  172. data/checks/http/laravel.rb +27 -0
  173. data/checks/http/lastpass.rb +27 -0
  174. data/checks/http/lcn.rb +27 -0
  175. data/checks/http/leadpages.rb +29 -0
  176. data/checks/http/lighttpd.rb +31 -0
  177. data/checks/http/limelight_networks.rb +43 -0
  178. data/checks/http/limesuvey.rb +27 -0
  179. data/checks/http/link1.rb +31 -0
  180. data/checks/http/linksys.rb +38 -0
  181. data/checks/http/litespeed.rb +29 -0
  182. data/checks/http/lithium.rb +43 -0
  183. data/checks/http/lotus.rb +55 -0
  184. data/checks/http/magento.rb +96 -0
  185. data/checks/http/magnolia.rb +27 -0
  186. data/checks/http/mailchimp.rb +27 -0
  187. data/checks/http/manage_engine.rb +27 -0
  188. data/checks/http/markmonitor.rb +27 -0
  189. data/checks/http/mbf_bioscience.rb +29 -0
  190. data/checks/http/mcafee.rb +27 -0
  191. data/checks/http/media_temple.rb +27 -0
  192. data/checks/http/mediawiki.rb +54 -0
  193. data/checks/http/mhcsoftwareinc.rb +29 -0
  194. data/checks/http/microsoft.rb +1325 -0
  195. data/checks/http/mikrotik.rb +44 -0
  196. data/checks/http/modwsgi.rb +30 -0
  197. data/checks/http/mojolicious.rb +32 -0
  198. data/checks/http/moodle.rb +28 -0
  199. data/checks/http/mura.rb +30 -0
  200. data/checks/http/nagios.rb +27 -0
  201. data/checks/http/namesilo.rb +31 -0
  202. data/checks/http/nationbuilder.rb +30 -0
  203. data/checks/http/nec.rb +32 -0
  204. data/checks/http/netlify.rb +40 -0
  205. data/checks/http/netobjects_inc.rb +30 -0
  206. data/checks/http/netscape.rb +29 -0
  207. data/checks/http/neustar.rb +29 -0
  208. data/checks/http/new_relic.rb +27 -0
  209. data/checks/http/nexicom.rb +44 -0
  210. data/checks/http/nginx.rb +82 -0
  211. data/checks/http/nisource.rb +29 -0
  212. data/checks/http/nodejs.rb +79 -0
  213. data/checks/http/okta.rb +53 -0
  214. data/checks/http/ookla.rb +28 -0
  215. data/checks/http/openbsd.rb +30 -0
  216. data/checks/http/openresty.rb +41 -0
  217. data/checks/http/openscholar.rb +27 -0
  218. data/checks/http/opensolution.rb +46 -0
  219. data/checks/http/openssl.rb +43 -0
  220. data/checks/http/opentext.rb +46 -0
  221. data/checks/http/openvpn.rb +27 -0
  222. data/checks/http/opscode.rb +43 -0
  223. data/checks/http/oracle.rb +335 -0
  224. data/checks/http/orion_technology.rb +30 -0
  225. data/checks/http/ovh.rb +46 -0
  226. data/checks/http/palo_alto.rb +27 -0
  227. data/checks/http/pantheon.rb +54 -0
  228. data/checks/http/papercut.rb +29 -0
  229. data/checks/http/parallels.rb +44 -0
  230. data/checks/http/pardot.rb +44 -0
  231. data/checks/http/parkingcrew.rb +47 -0
  232. data/checks/http/pbworks.rb +27 -0
  233. data/checks/http/perfectsense.rb +28 -0
  234. data/checks/http/perl.rb +62 -0
  235. data/checks/http/pfsense.rb +27 -0
  236. data/checks/http/php.rb +72 -0
  237. data/checks/http/phpmyadmin.rb +40 -0
  238. data/checks/http/phpwind.rb +30 -0
  239. data/checks/http/phusion.rb +59 -0
  240. data/checks/http/ping_identity.rb +28 -0
  241. data/checks/http/pivotal_software.rb +97 -0
  242. data/checks/http/pjax.rb +40 -0
  243. data/checks/http/plesk.rb +58 -0
  244. data/checks/http/porkbun.rb +31 -0
  245. data/checks/http/progress.rb +30 -0
  246. data/checks/http/proofpoint.rb +30 -0
  247. data/checks/http/pulsesecure.rb +91 -0
  248. data/checks/http/python.rb +30 -0
  249. data/checks/http/qnap.rb +43 -0
  250. data/checks/http/qualys.rb +69 -0
  251. data/checks/http/rapid7.rb +27 -0
  252. data/checks/http/rbs.rb +30 -0
  253. data/checks/http/readmeio.rb +28 -0
  254. data/checks/http/red_hat.rb +95 -0
  255. data/checks/http/redmine.rb +38 -0
  256. data/checks/http/restlet.rb +30 -0
  257. data/checks/http/ritecms.rb +30 -0
  258. data/checks/http/roadiz.rb +30 -0
  259. data/checks/http/rock.rb +30 -0
  260. data/checks/http/rollbar.rb +27 -0
  261. data/checks/http/roundcube.rb +42 -0
  262. data/checks/http/ruby.rb +92 -0
  263. data/checks/http/ruckus_wireless.rb +26 -0
  264. data/checks/http/sailpoint.rb +30 -0
  265. data/checks/http/salesforce.rb +28 -0
  266. data/checks/http/sap.rb +149 -0
  267. data/checks/http/seamless_cms.rb +30 -0
  268. data/checks/http/securi.rb +54 -0
  269. data/checks/http/sedo.rb +63 -0
  270. data/checks/http/segment.rb +27 -0
  271. data/checks/http/sencha.rb +31 -0
  272. data/checks/http/sentry.rb +27 -0
  273. data/checks/http/serendipity.rb +30 -0
  274. data/checks/http/shopfactory.rb +30 -0
  275. data/checks/http/sip.rb +29 -0
  276. data/checks/http/sitecore.rb +39 -0
  277. data/checks/http/smartling.rb +27 -0
  278. data/checks/http/smf.rb +30 -0
  279. data/checks/http/snews.rb +30 -0
  280. data/checks/http/software_ag.rb +47 -0
  281. data/checks/http/soha.rb +66 -0
  282. data/checks/http/solarwinds.rb +41 -0
  283. data/checks/http/sonatype.rb +43 -0
  284. data/checks/http/sonicwall.rb +63 -0
  285. data/checks/http/sophos.rb +40 -0
  286. data/checks/http/southriver.rb +43 -0
  287. data/checks/http/splash.rb +29 -0
  288. data/checks/http/splunk.rb +27 -0
  289. data/checks/http/springfox.rb +43 -0
  290. data/checks/http/squarespace.rb +41 -0
  291. data/checks/http/stackpath.rb +29 -0
  292. data/checks/http/stibo_systems.rb +35 -0
  293. data/checks/http/subrion.rb +29 -0
  294. data/checks/http/symantec.rb +27 -0
  295. data/checks/http/synacor.rb +26 -0
  296. data/checks/http/tableau_software.rb +42 -0
  297. data/checks/http/telerik.rb +46 -0
  298. data/checks/http/tengine.rb +29 -0
  299. data/checks/http/tibco.rb +57 -0
  300. data/checks/http/townnews.rb +33 -0
  301. data/checks/http/tridium.rb +28 -0
  302. data/checks/http/twiki.rb +27 -0
  303. data/checks/http/typo3.rb +27 -0
  304. data/checks/http/uberflip.rb +28 -0
  305. data/checks/http/ucoz.rb +31 -0
  306. data/checks/http/umbraco.rb +29 -0
  307. data/checks/http/unbounce.rb +28 -0
  308. data/checks/http/united_domains.rb +27 -0
  309. data/checks/http/vanilla_forums.rb +27 -0
  310. data/checks/http/varnish.rb +79 -0
  311. data/checks/http/vbulletin.rb +66 -0
  312. data/checks/http/verizon.rb +27 -0
  313. data/checks/http/vmware.rb +53 -0
  314. data/checks/http/vue_js.rb +27 -0
  315. data/checks/http/webflow.rb +44 -0
  316. data/checks/http/webgui.rb +30 -0
  317. data/checks/http/webmin.rb +44 -0
  318. data/checks/http/webpagetest_project.rb +30 -0
  319. data/checks/http/wftpserver.rb +28 -0
  320. data/checks/http/wildfly.rb +29 -0
  321. data/checks/http/wix.rb +28 -0
  322. data/checks/http/woltlab_gmbh.rb +30 -0
  323. data/checks/http/wordpress/ithemes.rb +50 -0
  324. data/checks/http/wordpress/john_godley.rb +29 -0
  325. data/checks/http/wordpress/pixelcraft.rb +31 -0
  326. data/checks/http/wordpress/rocklobster.rb +29 -0
  327. data/checks/http/wordpress/team_heateor.rb +31 -0
  328. data/checks/http/wordpress/w3_total_cache.rb +30 -0
  329. data/checks/http/wordpress/wp_fastest_cache.rb +30 -0
  330. data/checks/http/wordpress/wp_super_cache.rb +46 -0
  331. data/checks/http/wordpress/wpbakery.rb +30 -0
  332. data/checks/http/world4you.rb +46 -0
  333. data/checks/http/wp_engine.rb +57 -0
  334. data/checks/http/xcms.rb +30 -0
  335. data/checks/http/xelion.rb +27 -0
  336. data/checks/http/xerox.rb +27 -0
  337. data/checks/http/xmb.rb +30 -0
  338. data/checks/http/xtec.rb +30 -0
  339. data/checks/http/yaf.rb +30 -0
  340. data/checks/http/yaws.rb +30 -0
  341. data/checks/http/yoast.rb +31 -0
  342. data/checks/http/zeit.rb +30 -0
  343. data/checks/http/zendesk.rb +41 -0
  344. data/checks/http/zengenti.rb +30 -0
  345. data/checks/http/zoho.rb +69 -0
  346. data/checks/http/zscaler.rb +30 -0
  347. data/checks/smtp/base.rb +16 -0
  348. data/checks/smtp/exim.rb +30 -0
  349. data/checks/snmp/base.rb +15 -0
  350. data/checks/snmp/cisco.rb +59 -0
  351. data/checks/ssh/array_networks.rb +28 -0
  352. data/checks/ssh/base.rb +16 -0
  353. data/checks/ssh/openssh.rb +26 -0
  354. data/checks/telnet/base.rb +16 -0
  355. data/checks/telnet/huawei.rb +26 -0
  356. data/data/logos/acquia.png +0 -0
  357. data/data/logos/amazon_cloudfront.png +0 -0
  358. data/data/logos/apache_coyote.png +0 -0
  359. data/data/logos/apache_tomcat.png +0 -0
  360. data/data/logos/atlassian_bamboo.png +0 -0
  361. data/data/logos/atlassian_bitbucket.png +0 -0
  362. data/data/logos/atlassian_confluence.png +0 -0
  363. data/data/logos/atlassian_crowd.png +0 -0
  364. data/data/logos/atlassian_crucible.png +0 -0
  365. data/data/logos/atlassian_fisheye.png +0 -0
  366. data/data/logos/atlassian_jira.png +0 -0
  367. data/data/logos/atlassian_sourcetree.png +0 -0
  368. data/data/logos/automattic_wordpress.png +0 -0
  369. data/data/logos/calibre.png +0 -0
  370. data/data/logos/cisco_ssl_vpn.png +0 -0
  371. data/data/logos/citrix_netscaler_gateway.png +0 -0
  372. data/data/logos/cloudflare_cdn.png +0 -0
  373. data/data/logos/drupal.png +0 -0
  374. data/data/logos/f5_big-ip.png +0 -0
  375. data/data/logos/f5_big-ip_apm.png +0 -0
  376. data/data/logos/fastly.png +0 -0
  377. data/data/logos/generic.png +0 -0
  378. data/data/logos/gitlab.png +0 -0
  379. data/data/logos/ibm_axway_securetransport.png +0 -0
  380. data/data/logos/lithium.png +0 -0
  381. data/data/logos/microsoft_asp.net.png +0 -0
  382. data/data/logos/microsoft_iis.png +0 -0
  383. data/data/logos/microsoft_outlook_web_access.png +0 -0
  384. data/data/logos/microsoft_sharepoint.png +0 -0
  385. data/data/logos/microtik_routeros.png +0 -0
  386. data/data/logos/mikrotik_routeros.png +0 -0
  387. data/data/logos/newrelic.png +0 -0
  388. data/data/logos/nginx.png +0 -0
  389. data/data/logos/okta.png +0 -0
  390. data/data/logos/oracle_glassfish.png +0 -0
  391. data/data/logos/oracle_java_application_server.png +0 -0
  392. data/data/logos/oracle_java_server_pages.png +0 -0
  393. data/data/logos/oracle_weblogic.png +0 -0
  394. data/data/logos/phpmyadmin.png +0 -0
  395. data/data/logos/tableau.png +0 -0
  396. data/data/logos/vmware_esxi.png +0 -0
  397. data/data/logos/vmware_horizon.png +0 -0
  398. data/data/logos/zendesk.png +0 -0
  399. data/data/logos/zimbra_server.png +0 -0
  400. data/data/microsoft_sharepoint_versions.csv +224 -0
  401. data/intrigue-ident.gemspec +8 -7
  402. data/lib/banner_helpers.rb +36 -0
  403. data/lib/ftp/check_factory.rb +24 -0
  404. data/lib/ftp/content.rb +13 -0
  405. data/lib/ftp/ftp.rb +52 -0
  406. data/lib/ftp/matchers.rb +26 -0
  407. data/lib/http/browser.rb +260 -0
  408. data/lib/http/check_factory.rb +47 -0
  409. data/lib/http/content.rb +45 -0
  410. data/lib/http/http.rb +463 -0
  411. data/lib/http/matchers.rb +132 -0
  412. data/lib/ident.rb +263 -0
  413. data/lib/recog_wrapper.rb +70 -0
  414. data/lib/simple_socket.rb +41 -0
  415. data/lib/smtp/check_factory.rb +24 -0
  416. data/lib/smtp/content.rb +13 -0
  417. data/lib/smtp/matchers.rb +28 -0
  418. data/lib/smtp/smtp.rb +53 -0
  419. data/lib/snmp/check_factory.rb +24 -0
  420. data/lib/snmp/content.rb +13 -0
  421. data/lib/snmp/matchers.rb +25 -0
  422. data/lib/snmp/snmp.rb +55 -0
  423. data/lib/ssh/check_factory.rb +24 -0
  424. data/lib/ssh/content.rb +13 -0
  425. data/lib/ssh/matchers.rb +26 -0
  426. data/lib/ssh/ssh.rb +52 -0
  427. data/lib/telnet/check_factory.rb +24 -0
  428. data/lib/telnet/content.rb +13 -0
  429. data/lib/telnet/matchers.rb +26 -0
  430. data/lib/telnet/telnet.rb +52 -0
  431. data/lib/utils.rb +19 -0
  432. data/lib/version.rb +3 -0
  433. data/lib/vulndb_client.rb +43 -0
  434. data/util/console.rb +9 -0
  435. data/util/docker.sh +2 -0
  436. data/util/ident.rb +375 -0
  437. data/util/list_paths.rb +12 -0
  438. data/util/tags.rb +36 -0
  439. data/utils.rb +19 -0
  440. metadata +487 -55
  441. data/ident.rb +0 -319
  442. data/lib/check_factory.rb +0 -22
  443. data/lib/checks/akamai.rb +0 -22
  444. data/lib/checks/amazon.rb +0 -26
  445. data/lib/checks/aruba.rb +0 -20
  446. data/lib/checks/asp_net.rb +0 -70
  447. data/lib/checks/atlassian.rb +0 -55
  448. data/lib/checks/base.rb +0 -13
  449. data/lib/checks/chef.rb +0 -31
  450. data/lib/checks/cisco.rb +0 -33
  451. data/lib/checks/citrix.rb +0 -24
  452. data/lib/checks/cloudflare.rb +0 -59
  453. data/lib/checks/cloudfront.rb +0 -41
  454. data/lib/checks/cpanel.rb +0 -23
  455. data/lib/checks/django.rb +0 -22
  456. data/lib/checks/drupal.rb +0 -26
  457. data/lib/checks/f5.rb +0 -24
  458. data/lib/checks/fastly.rb +0 -22
  459. data/lib/checks/generic.rb +0 -23
  460. data/lib/checks/gitlab.rb +0 -22
  461. data/lib/checks/google.rb +0 -23
  462. data/lib/checks/grafana.rb +0 -22
  463. data/lib/checks/jenkins.rb +0 -40
  464. data/lib/checks/joomla.rb +0 -23
  465. data/lib/checks/limesuvey.rb +0 -22
  466. data/lib/checks/lithium.rb +0 -30
  467. data/lib/checks/magento.rb +0 -22
  468. data/lib/checks/mcafee.rb +0 -22
  469. data/lib/checks/mediawiki.rb +0 -38
  470. data/lib/checks/microsoft.rb +0 -69
  471. data/lib/checks/nagios.rb +0 -22
  472. data/lib/checks/oracle.rb +0 -38
  473. data/lib/checks/palo_alto.rb +0 -23
  474. data/lib/checks/pardot.rb +0 -22
  475. data/lib/checks/pfsense.rb +0 -25
  476. data/lib/checks/phpmyadmin.rb +0 -22
  477. data/lib/checks/rabbitmq.rb +0 -29
  478. data/lib/checks/spring.rb +0 -31
  479. data/lib/checks/team_city.rb +0 -22
  480. data/lib/checks/telerik.rb +0 -25
  481. data/lib/checks/tomcat.rb +0 -22
  482. data/lib/checks/varnish.rb +0 -27
  483. data/lib/checks/wordpress.rb +0 -120
  484. data/lib/checks/wp_engine.rb +0 -22
@@ -0,0 +1,132 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Http
4
+ module Matchers
5
+
6
+ require_relative "http"
7
+ require_relative 'content'
8
+ include Intrigue::Ident::Http
9
+ include Intrigue::Ident::Content::Http
10
+
11
+ def match_http_response_hash(check,hash)
12
+
13
+ # save off the generator string
14
+ generator_match = "#{hash[:response_body]}".match(/<meta name=\"?generator\"? content=\"?(.*?)\"?\/>/i)
15
+ generator_string = generator_match.captures.first.gsub("\"","") if generator_match
16
+
17
+ # save off the title string
18
+ title_match = "#{hash[:response_body]}".match(/<title>(.*?)<\/title>/i)
19
+ title_string = title_match.captures.first.strip if title_match
20
+
21
+ # grab the set cookie header
22
+ set_cookie_header = "#{(hash[:response_headers]||[]).select{|x| x =~ /^set-cookie:(.*)/i}.first}".gsub("set-cookie:","").strip
23
+
24
+ data = hash.merge({
25
+ "details" => {
26
+ "hidden_response_data" => "#{hash[:response_body]}",
27
+ "start_url" => "#{hash[:start_url]}",
28
+ "final_url" => "#{hash[:final_url]}",
29
+ "headers" => hash[:response_headers], # this is a hash and we need an array!
30
+ "cookies" => set_cookie_header,
31
+ "generator" => generator_string,
32
+ "title" => title_string
33
+ }
34
+ })
35
+
36
+ match_uri_hash(check,data)
37
+ end
38
+
39
+ def match_browser_response_hash(check,browser_response_hash)
40
+ data = {
41
+ "details" => {
42
+ "hidden_response_data_rendered" => "#{browser_response_hash[:rendered]}",
43
+ "start_url" => "#{browser_response_hash[:start_url]}",
44
+ "final_url" => "#{browser_response_hash[:final_url]}",
45
+ "headers" => [],
46
+ "cookies" => "",
47
+ "generator" => "",
48
+ "title" => "#{browser_response_hash[:title]}",
49
+ }
50
+ }
51
+
52
+ match_uri_hash(check,data)
53
+ end
54
+
55
+ # Matches a text http response
56
+ def match_http_response_text(check,http_response_text)
57
+
58
+ # first convert to intrigue uri format
59
+
60
+ # grab headers
61
+ header_part = http_response_text.split(/\n\n/).first
62
+ body_part = http_response_text.split(/\n\n/).last
63
+
64
+ headers = header_part.split("\n");
65
+ body = body_part
66
+
67
+ # TODO - fix to only grab content!!!!
68
+ cookies = headers.select{|x| x =~ /^set-cookie:(.*)/i }
69
+
70
+ ### grab the page attributes
71
+ match = body.match(/<title>(.*?)<\/title>/i)
72
+ title = match.captures.first if match
73
+
74
+ match = response.body.match(/<meta name=\"?generator\"? content=\"?(.*?)\"?\/?>/i)
75
+ generator = match.captures.first.gsub("\"","") if match
76
+
77
+ # rest is a response
78
+ # save title
79
+ # save Cookies
80
+ # save scripts ?
81
+ data = {
82
+ "details" => {
83
+ "hidden_response_data" => body,
84
+ "headers" => headers,
85
+ "cookies" => cookies,
86
+ "generator" => generator,
87
+ "title" => title
88
+ }
89
+ }
90
+
91
+ match_uri_hash(check,data)
92
+ end
93
+
94
+ def match_uri_hash(check, data)
95
+ return nil unless check && data
96
+
97
+ # data[:body] => page body
98
+ # data[:headers] => block of text with headers, one per line
99
+ # data[:cookies] => set_cookie header
100
+ # data[:title] => parsed page title
101
+ # data[:generator] => parsed meta generator tag
102
+ # data[:body_md5] => md5 hash of the body
103
+ # if type "content", do the content check
104
+
105
+ if check[:type] == "fingerprint"
106
+ if check[:match_type] == :content_body
107
+ match = _construct_match_response(check,data) if _body(data) =~ check[:match_content]
108
+ elsif check[:match_type] == :content_body_raw
109
+ match = _construct_match_response(check,data) if _body_raw(data) =~ check[:match_content]
110
+ elsif check[:match_type] == :content_dom
111
+ match = _construct_match_response(check,data) if _body_rendered(data) =~ check[:match_content]
112
+ elsif check[:match_type] == :content_headers
113
+ match = _construct_match_response(check,data) if _headers(data) =~ check[:match_content]
114
+ elsif check[:match_type] == :content_cookies
115
+ match = _construct_match_response(check,data) if _cookies(data) =~ check[:match_content]
116
+ elsif check[:match_type] == :content_generator
117
+ match = _construct_match_response(check,data) if _generator(data) =~ check[:match_content]
118
+ elsif check[:match_type] == :content_title
119
+ match = _construct_match_response(check,data) if _title(data) =~ check[:match_content]
120
+ elsif check[:match_type] == :checksum_body
121
+ match = _construct_match_response(check,data) if _body_raw_checksum(data) == check[:match_content]
122
+ end
123
+ elsif check[:type] == "content"
124
+ match = _construct_match_response(check,data)
125
+ end
126
+ match
127
+ end
128
+
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,263 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'net/http'
4
+ require 'openssl'
5
+ require 'zlib'
6
+
7
+ # load in generic utils
8
+ require_relative 'utils'
9
+ require_relative 'version'
10
+
11
+ # integrate recog
12
+ require_relative 'recog_wrapper'
13
+
14
+ ###
15
+ ### Start protocol requires
16
+ ###
17
+
18
+ ##################################
19
+ # Load in http matchers and checks
20
+ ###################################
21
+ require_relative 'http/matchers'
22
+ include Intrigue::Ident::Http::Matchers
23
+
24
+ require_relative 'http/check_factory'
25
+ require_relative '../checks/http/base'
26
+
27
+ # http fingerprints
28
+ check_folder = File.expand_path('../checks/http', File.dirname(__FILE__)) # get absolute directory
29
+ Dir["#{check_folder}/*.rb"].each { |file| require_relative file }
30
+
31
+ # http content checks (always run)
32
+ content_check_folder = File.expand_path('../checks/http/content', File.dirname(__FILE__)) # get absolute directory
33
+ Dir["#{content_check_folder}/*.rb"].each { |file| require_relative file }
34
+
35
+ # http content, wordpress specific checks
36
+ content_check_folder = File.expand_path('../checks/http/wordpress', File.dirname(__FILE__)) # get absolute directory
37
+ Dir["#{content_check_folder}/*.rb"].each { |file| require_relative file }
38
+
39
+ # General helpers (apply widely across protocols)
40
+
41
+ require_relative 'simple_socket'
42
+ require_relative 'banner_helpers'
43
+
44
+ ##################################
45
+ # Load in ftp matchers and checks
46
+ #################################
47
+ require_relative 'ftp/matchers'
48
+ include Intrigue::Ident::Ftp::Matchers
49
+
50
+ require_relative 'ftp/check_factory'
51
+ require_relative '../checks/ftp/base'
52
+
53
+ # ftp fingerprints
54
+ check_folder = File.expand_path('../checks/ftp', File.dirname(__FILE__)) # get absolute directory
55
+ Dir["#{check_folder}/*.rb"].each { |file| require_relative file }
56
+
57
+ ##################################
58
+ # Load in smtp matchers and checks
59
+ ##################################
60
+ require_relative 'smtp/matchers'
61
+ include Intrigue::Ident::Smtp::Matchers
62
+
63
+ require_relative 'smtp/check_factory'
64
+ require_relative '../checks/smtp/base'
65
+
66
+ # smtp fingerprints
67
+ check_folder = File.expand_path('../checks/smtp', File.dirname(__FILE__)) # get absolute directory
68
+ Dir["#{check_folder}/*.rb"].each { |file| require_relative file }
69
+
70
+ ##################################
71
+ # Load in snmp matchers and checks
72
+ ##################################
73
+ require_relative 'snmp/matchers'
74
+ include Intrigue::Ident::Snmp::Matchers
75
+
76
+ require_relative 'snmp/check_factory'
77
+ require_relative '../checks/snmp/base'
78
+
79
+ # snmp fingerprints
80
+ check_folder = File.expand_path('../checks/snmp', File.dirname(__FILE__)) # get absolute directory
81
+ Dir["#{check_folder}/*.rb"].each { |file| require_relative file }
82
+
83
+
84
+ ##################################
85
+ # Load in ssh matchers and checks
86
+ ##################################
87
+ require_relative 'ssh/matchers'
88
+ include Intrigue::Ident::Ssh::Matchers
89
+
90
+ require_relative 'ssh/check_factory'
91
+ require_relative '../checks/ssh/base'
92
+
93
+ # ssh fingerprints
94
+ check_folder = File.expand_path('../checks/ssh', File.dirname(__FILE__)) # get absolute directory
95
+ Dir["#{check_folder}/*.rb"].each { |file| require_relative file }
96
+
97
+ ##################################
98
+ # Load in telnet matchers and checks
99
+ ##################################
100
+ require_relative 'telnet/matchers'
101
+ include Intrigue::Ident::Telnet::Matchers
102
+
103
+ require_relative 'telnet/check_factory'
104
+ require_relative '../checks/telnet/base'
105
+
106
+ # telnet fingerprints
107
+ check_folder = File.expand_path('../checks/telnet', File.dirname(__FILE__)) # get absolute directory
108
+ Dir["#{check_folder}/*.rb"].each { |file| require_relative file }
109
+
110
+ ###
111
+ ### End protocol requires
112
+ ###
113
+
114
+ # Load vulndb client
115
+ require_relative "vulndb_client"
116
+
117
+ # set default encoding
118
+ Encoding.default_external = Encoding::UTF_8
119
+ Encoding.default_internal = Encoding::UTF_8
120
+
121
+
122
+ # set a base directory so we can use in checks
123
+ $ident_dir = File.expand_path('../', File.dirname(__FILE__))
124
+
125
+ module Intrigue
126
+ module Ident
127
+
128
+ private
129
+
130
+ def _construct_match_response(check, data)
131
+
132
+ if check[:type] == "fingerprint"
133
+ calculated_version = (check[:dynamic_version].call(data) if check[:dynamic_version]) || check[:version] || ""
134
+ calculated_update = (check[:dynamic_update].call(data) if check[:dynamic_update]) || check[:update] || ""
135
+
136
+ calculated_type = "a" if check[:category] == "application"
137
+ calculated_type = "h" if check[:category] == "hardware"
138
+ calculated_type = "o" if check[:category] == "operating_system"
139
+ calculated_type = "s" if check[:category] == "service" # literally made up
140
+
141
+ vendor_string = check[:vendor].gsub(" ","_") if check[:vendor]
142
+ product_string = check[:product].gsub(" ","_") if check[:product]
143
+
144
+ version = "#{calculated_version}".gsub(" ","_")
145
+ update = "#{calculated_update}".gsub(" ","_")
146
+
147
+ cpe_string = "cpe:2.3:#{calculated_type}:#{vendor_string}:#{product_string}:#{version}:#{update}".downcase
148
+
149
+ ##
150
+ ## Support for Dynamic
151
+ ##
152
+ if check[:dynamic_issue]
153
+ issue = check[:dynamic_issue].call(data)
154
+ elsif check[:issue]
155
+ issue = check[:issue]
156
+ else
157
+ issue = nil
158
+ end
159
+
160
+ ##
161
+ ## Support for Dynamic Hide
162
+ ##
163
+ if check[:dynamic_hide]
164
+ hide = check[:dynamic_hide].call(data)
165
+ elsif check[:hide]
166
+ hide = check[:hide]
167
+ else
168
+ hide = false
169
+ end
170
+
171
+ ##
172
+ ## Support for Dynamic Task
173
+ ##
174
+ if check[:dynamic_task]
175
+ task = check[:dynamic_task].call(data)
176
+ elsif check[:task]
177
+ task = check[:task]
178
+ else
179
+ task = nil
180
+ end
181
+
182
+ to_return = {
183
+ "method" => "ident",
184
+ "type" => check[:type],
185
+ "vendor" => check[:vendor],
186
+ "product" => check[:product],
187
+ "version" => calculated_version,
188
+ "update" => calculated_update,
189
+ "tags" => check[:tags],
190
+ "match_type" => check[:match_type],
191
+ "match_details" => check[:match_details],
192
+ "hide" => hide,
193
+ "cpe" => cpe_string,
194
+ "issue" => issue,
195
+ "task" => task, # [{ :task_name => "example", :task_options => {}}]
196
+ "inference" => check[:inference]
197
+ }
198
+
199
+ elsif check[:type] == "content"
200
+
201
+ # Mandatory lambda
202
+ result = check[:dynamic_result].call(data)
203
+
204
+ ##
205
+ ## Support for Dynamic Issue (must be dynamic, these checks always run)
206
+ ##
207
+ if result
208
+
209
+ ##
210
+ ## Support for Dynamic
211
+ ##
212
+ if check[:dynamic_issue]
213
+ issue = check[:dynamic_issue].call(data)
214
+ elsif check[:issue]
215
+ issue = check[:issue]
216
+ else
217
+ issue = nil
218
+ end
219
+
220
+ ##
221
+ ## Support for Dynamic Hide
222
+ ##
223
+ if check[:dynamic_hide]
224
+ hide = check[:dynamic_hide].call(data)
225
+ elsif check[:hide]
226
+ hide = check[:hide]
227
+ else
228
+ hide = false
229
+ end
230
+
231
+ ##
232
+ ## Support for Dynamic Task
233
+ ##
234
+ if check[:dynamic_task]
235
+ task = check[:dynamic_task].call(data)
236
+ elsif check[:task]
237
+ task = check[:task]
238
+ else
239
+ task = nil
240
+ end
241
+
242
+ end
243
+
244
+ to_return = {
245
+ "type" => check[:type],
246
+ "name" => check[:name],
247
+ "hide" => hide,
248
+ "issue" => issue,
249
+ "task" => task,
250
+ "result" => result
251
+ }
252
+ end
253
+
254
+ to_return
255
+ end
256
+
257
+ end
258
+ end
259
+
260
+
261
+
262
+ # always include
263
+ include Intrigue::Ident
@@ -0,0 +1,70 @@
1
+ require 'recog'
2
+
3
+ module Intrigue
4
+ module Ident
5
+ module RecogWrapper
6
+
7
+ module Helpers
8
+
9
+ def recog_to_ident_hash(recog_hash)
10
+
11
+ # do the field conversation
12
+ out = {}
13
+ out["method"] = "recog"
14
+ out["vendor"] = recog_hash["service.vendor"]
15
+ out["product"] = recog_hash["service.product"]
16
+ out["version"] = recog_hash["service.version"]
17
+ out["cpe"] = recog_hash["service.cpe23"]
18
+ out["match_details"] = "#{recog_hash["matched"]} (Recog: #{recog_hash["fingerprint_db"]})"
19
+ out["inference"] = false
20
+ out["hide"] = false
21
+ out["issue"] = nil
22
+
23
+ out
24
+ end
25
+
26
+ end
27
+
28
+ module Http
29
+ include Intrigue::Ident::RecogWrapper::Helpers
30
+
31
+ def recog_match_http_server_banner(banner)
32
+ options = OpenStruct.new(color: false, detail: true, fail_fast: false, multi_match: true)
33
+ ndb = ::Recog::DB.new("http_servers.xml");nil
34
+ options.fingerprints = ndb.fingerprints;nil
35
+ matcher = ::Recog::MatcherFactory.build(options);nil
36
+ matches = matcher.match_banner(banner.gsub("server:","").strip)
37
+
38
+ # now convert a match to ident match format
39
+ matches.compact.map {|m| recog_to_ident_hash(m)}
40
+ end
41
+
42
+ def recog_match_http_cookies(string)
43
+ options = OpenStruct.new(color: false, detail: true, fail_fast: false, multi_match: true)
44
+ ndb = ::Recog::DB.new("http_cookies.xml");nil
45
+ options.fingerprints = ndb.fingerprints;nil
46
+ matcher = ::Recog::MatcherFactory.build(options);nil
47
+ matches = matcher.match_banner(string.gsub("set-cookie:","").strip)
48
+
49
+ # now convert it
50
+ matches.map {|m| recog_to_ident_hash(m)}
51
+ end
52
+ end
53
+
54
+ module Smtp
55
+ include Intrigue::Ident::RecogWrapper::Helpers
56
+ def recog_match_smtp_banner(string)
57
+ options = OpenStruct.new(color: false, detail: true, fail_fast: false, multi_match: true)
58
+ ndb = ::Recog::DB.new("smtp_banners.xml");nil
59
+ options.fingerprints = ndb.fingerprints;nil
60
+ matcher = ::Recog::MatcherFactory.build(options);nil
61
+ matches = matcher.match_banner(string)
62
+
63
+ # now convert it
64
+ matches.map {|m| recog_to_ident_hash(m)}
65
+ end
66
+ end
67
+
68
+ end
69
+ end
70
+ end