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,27 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Mailchimp < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "service",
11
+ :tags => ["Marketing", "SaaS"],
12
+ :vendor => "Mailchimp",
13
+ :product =>"Mandrill",
14
+ :match_details =>"login page",
15
+ :match_type => :content_title,
16
+ :version => nil,
17
+ :match_content => /Log in to Mandrill/i,
18
+ :paths => ["#{url}"],
19
+ :inference => false
20
+ }
21
+ ]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class ManageEngine < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "application",
11
+ :tags => [""],
12
+ :vendor =>"ManageEngine",
13
+ :product =>"ServiceDesk Plus",
14
+ :match_details =>"cookie",
15
+ :version => nil,
16
+ :match_type => :content_cookies,
17
+ :match_content => /SDPSESSIONID=/i,
18
+ :paths => ["#{url}"],
19
+ :inference => false
20
+ }
21
+ ]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Markmonitor < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "service",
11
+ :tags => ["Parked"],
12
+ :vendor => "MarkMonitor",
13
+ :product => "MarkMonitor",
14
+ :website => "https://markmonitor.com/",
15
+ :version => nil,
16
+ :match_type => :content_title,
17
+ :match_content => /^Registered &amp; Protected by MarkMonitor$/i,
18
+ :paths => ["#{url}"],
19
+ :inference => false
20
+ }
21
+ ]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
@@ -0,0 +1,29 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class MbfBioscience < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "operating_system",
11
+ :tags => ["COTS"],
12
+ :vendor => "MBF Bioscience",
13
+ :product => "Biolucidia",
14
+ :match_details =>"header",
15
+ :version => nil,
16
+ :references => ["https://www.mbfbioscience.com/biolucida"],
17
+ :match_type => :content_headers,
18
+ :match_content => /^x-biolucida-webapp: true$/,
19
+ :paths => ["#{url}"],
20
+ :examples => ["x-biolucida-webapp: true"],
21
+ :inference => false
22
+ }
23
+ ]
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Mcafee < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "application",
11
+ :tags => ["Administrative","COTS"],
12
+ :vendor => "McAfee",
13
+ :product =>"EPolicy Orchestrator",
14
+ :match_details =>"McAfee EPolicy Orchestrator",
15
+ :match_type => :content_body,
16
+ :version => nil,
17
+ :match_content => /McAfee Agent Activity Log/i,
18
+ :paths => ["#{url}"],
19
+ :inference => false
20
+ }
21
+ ]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class MediaTemple < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "service",
11
+ :tags => ["SaaS"],
12
+ :vendor =>"MediaTemple",
13
+ :product =>"MediaTemple",
14
+ :match_details =>"default string in title",
15
+ :match_type => :content_title,
16
+ :version => nil,
17
+ :match_content => /Business-Class Web Hosting by \(mt\) Media Temple/,
18
+ :paths => ["#{url}"],
19
+ :inference => false
20
+ }
21
+ ]
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,54 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class MediaWiki < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "application",
11
+ :tags => ["COTS", "CMS"],
12
+ :vendor =>"MediaWiki",
13
+ :product =>"MediaWiki",
14
+ :match_details =>"powered by tag",
15
+ :match_type => :content_body,
16
+ :version => nil,
17
+ :match_content => /<a href="\/\/www.mediawiki.org\/">Powered by MediaWiki<\/a>/,
18
+ :paths => ["#{url}"],
19
+ :inference => false
20
+ },
21
+ {
22
+ :type => "fingerprint",
23
+ :category => "application",
24
+ :tags => ["COTS", "CMS"],
25
+ :vendor =>"MediaWiki",
26
+ :product =>"MediaWiki",
27
+ :match_details =>"powered by tag",
28
+ :match_type => :content_body,
29
+ :version => nil,
30
+ :match_content => /poweredby_mediawiki/,
31
+ :paths => ["#{url}"],
32
+ :inference => false
33
+ },
34
+ {
35
+ :type => "fingerprint",
36
+ :category => "application",
37
+ :tags => ["COTS", "CMS"],
38
+ :vendor =>"MediaWiki",
39
+ :product =>"MediaWiki",
40
+ :match_details =>"generator tag",
41
+ :match_type => :content_body,
42
+ :match_content => /<meta name=\"generator\" content=\"MediaWiki/,
43
+ :version => nil,
44
+ :dynamic_version => lambda { |x| _first_body_capture(x,/<meta name=\"generator\" content=\"MediaWiki\ (.*?)\"\/>/) },
45
+ :paths => ["#{url}"],
46
+ :inference => true
47
+ }
48
+ ]
49
+ end
50
+
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,29 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class MHCSoftwareInc < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "application",
11
+ :tags => ["COTS", "Web Server"],
12
+ :vendor => "MHCSoftwareInc",
13
+ :product => "Document Self-Service",
14
+ :references => ["https://www.mhcsoftwareinc.com/platform/application-suites/document-self-service/"],
15
+ :version => nil,
16
+ :match_type => :content_headers,
17
+ :match_content => /^server:\ DSS WebServer\/(\d\.\d)$/i,
18
+ :dynamic_version => lambda { |x|
19
+ _first_header_capture(x,/^server:\ DSS WebServer\/(\d\.\d)$/i) },
20
+ :hide => false,
21
+ :paths => ["#{url}"],
22
+ :inference => true
23
+ }
24
+ ]
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,1325 @@
1
+ module Intrigue
2
+ module Ident
3
+ module Check
4
+ class Microsoft < Intrigue::Ident::Check::Base
5
+
6
+ def generate_checks(url)
7
+ [
8
+ {
9
+ :type => "fingerprint",
10
+ :category => "application",
11
+ :tags => ["Web Framework"],
12
+ :vendor => "Microsoft",
13
+ :product =>"ASP.NET Default Application",
14
+ :match_details =>"unique string",
15
+ :version => nil,
16
+ :match_type => :content_title,
17
+ :match_content => /Home Page - My ASP.NET Application/i,
18
+ :paths => ["#{url}"],
19
+ :inference => false
20
+ },
21
+ {
22
+ :type => "fingerprint",
23
+ :category => "application",
24
+ :tags => ["Web Framework"],
25
+ :vendor => "Microsoft",
26
+ :product =>"ASP.NET",
27
+ :version => nil,
28
+ :match_type => :content_cookies,
29
+ :match_content => /AspNetCore.Antiforgery/i,
30
+ :match_details =>"ASP.Net Antiforgery cookie",
31
+ :paths => ["#{url}"],
32
+ :inference => false
33
+ },
34
+ {
35
+ :type => "fingerprint",
36
+ :category => "application",
37
+ :tags => ["Web Framework"],
38
+ :vendor => "Microsoft",
39
+ :product =>"ASP.NET",
40
+ :version => nil,
41
+ :dynamic_version => lambda{|x|
42
+ _first_body_capture(x,/ASP.NET Version:\ ([\d\.]*)/i)},
43
+ :match_type => :content_body,
44
+ :match_content => /^.*ASP.NET is configured*$/i,
45
+ :match_details =>"ASP.Net Error Message",
46
+ :paths => ["#{url}", "#{url}/doesntexist-123" ],
47
+ :inference => false
48
+ },
49
+ {
50
+ :type => "fingerprint",
51
+ :category => "application",
52
+ :tags => ["Web Framework"],
53
+ :vendor => "Microsoft",
54
+ :product =>"ASP.NET",
55
+ :version => nil,
56
+ :dynamic_version => lambda{ |x|
57
+ _first_header_capture(x,/^x-aspnet-version:\ ([\d\.]*)/i) },
58
+ :match_type => :content_headers,
59
+ :match_content => /^x-aspnet-version:.*$/i,
60
+ :match_details =>"X-AspNet Header",
61
+ :paths => ["#{url}"],
62
+ :inference => false
63
+ },
64
+ {
65
+ :type => "fingerprint",
66
+ :category => "application",
67
+ :tags => ["Web Framework"],
68
+ :vendor => "Microsoft",
69
+ :product =>"ASP.NET",
70
+ :match_details =>"Asp.Net Cookie",
71
+ :version => nil,
72
+ :match_type => :content_cookies,
73
+ :match_content => /ASPSESSIONID.*$/i,
74
+ :paths => ["#{url}"],
75
+ :inference => false
76
+ },
77
+ {
78
+ :type => "fingerprint",
79
+ :category => "application",
80
+ :tags => ["Web Framework"],
81
+ :vendor => "Microsoft",
82
+ :product =>"ASP.NET",
83
+ :match_details =>"Asp.Net Default Cookie",
84
+ :version => nil,
85
+ :match_type => :content_cookies,
86
+ :match_content => /ASP.NET_SessionId.*$/i,
87
+ :paths => ["#{url}"],
88
+ :inference => false
89
+ },
90
+ {
91
+ :type => "fingerprint",
92
+ :category => "application",
93
+ :tags => ["Web Framework"],
94
+ :vendor => "Microsoft",
95
+ :product =>"ASP.NET",
96
+ :match_details =>"ASPXAUTH cookie",
97
+ :version => nil,
98
+ :references => [
99
+ "https://www.sitefinity.com/developer-network/forums/developing-with-sitefinity-/claims-auth---aspxauth-cookie-remains"
100
+ ],
101
+ :match_type => :content_cookies,
102
+ :match_content => /ASPXAUTH=/i,
103
+ :paths => ["#{url}"],
104
+ :inference => false
105
+ },
106
+ {
107
+ :type => "fingerprint",
108
+ :category => "application",
109
+ :tags => ["Web Framework"],
110
+ :vendor => "Microsoft",
111
+ :product =>"ASP.NET MVC",
112
+ :match_details =>"ASP.Net MVC Header",
113
+ :version => nil,
114
+ :dynamic_version => lambda{ |x|
115
+ _first_header_capture(x,/^x-aspnetmvc-version:\s([\d\.]+)/i) },
116
+ :match_type => :content_headers,
117
+ :match_content => /x-aspnetmvc-version/i,
118
+ :paths => ["#{url}"],
119
+ :inference => true
120
+ },
121
+ #{
122
+ # TODO. Not the same as MVC version
123
+ # :type => "fingerprint",
124
+ # :category => "application",
125
+ # :tags => ["Web Framework"],
126
+ # :vendor => "Microsoft",
127
+ # :product =>"ASP.NET Core",
128
+ # :match_details =>"Asp.Net MVC Header",
129
+ # :version => nil,
130
+ # :dynamic_version => lambda{ |x|
131
+ # _first_header_capture(x,/^x-aspnetmvc-version:\s([\d\.]+)/i) },
132
+ # :match_type => :content_headers,
133
+ # :match_content => /x-aspnetmvc-version/i,
134
+ # :paths => ["#{url}"],
135
+ # :inference => true
136
+ #},
137
+ {
138
+ :type => "fingerprint",
139
+ :category => "application",
140
+ :tags => ["Web Framework"],
141
+ :vendor => "Microsoft",
142
+ :product =>"ASP.NET",
143
+ :match_details => "WebResource.axd link in the page",
144
+ :version => nil,
145
+ :match_type => :content_body,
146
+ :match_content => /WebResource.axd?d=/i,
147
+ :paths => ["#{url}"],
148
+ :inference => false
149
+ },
150
+ {
151
+ :type => "fingerprint",
152
+ :category => "application",
153
+ :tags => ["Web Framework"],
154
+ :vendor => "Microsoft",
155
+ :product =>"ASP.NET",
156
+ :match_details =>"unique viewstate string",
157
+ :version => nil,
158
+ :match_type => :content_body,
159
+ :match_content => /__VIEWSTATEGENERATOR/i,
160
+ :paths => ["#{url}"],
161
+ :inference => false
162
+ },
163
+ {
164
+ :depends => [{:product => "ASP.NET"}],
165
+ :type => "fingerprint",
166
+ :category => "application",
167
+ :tags => ["Web Framework"],
168
+ :vendor => "Microsoft",
169
+ :product =>".NET Framework",
170
+ :match_details => "trace.axd version",
171
+ :version => nil,
172
+ :dynamic_version => lambda { |x|
173
+ _first_body_capture(x,/ASP.NET Version:([\d\.]*)/)
174
+ },
175
+ :match_type => :content_body,
176
+ :match_content => /Microsoft \.NET Framework Version/i,
177
+ :paths => ["#{url}/Trace.axd"],
178
+ :require_product => "ASP.NET",
179
+ :inference => true
180
+ },
181
+ {
182
+ :type => "fingerprint",
183
+ :category => "service",
184
+ :tags => ["Hosting", "IaaS"],
185
+ :vendor => "Microsoft",
186
+ :product =>"Azure",
187
+ :match_details => "standard 404",
188
+ :version => nil,
189
+ :match_type => :content_title,
190
+ :match_content => /^Microsoft Azure Web App - Error 404$/i,
191
+ :paths => ["#{url}"],
192
+ :hide => true,
193
+ :inference => false
194
+ },
195
+ {
196
+ :type => "fingerprint",
197
+ :category => "service",
198
+ :tags => ["Hosting", "Load Balancer", "IaaS"],
199
+ :vendor => "Microsoft",
200
+ :product => "Azure",
201
+ :match_details => "Proxy service header (x-msedge-ref)",
202
+ :version => nil,
203
+ :match_type => :content_headers,
204
+ :match_content => /^x-msedge-ref:.*/i,
205
+ :paths => ["#{url}"],
206
+ :inference => false
207
+ },
208
+ {
209
+ :type => "fingerprint",
210
+ :category => "service",
211
+ :tags => ["Hosting", "IaaS"],
212
+ :vendor => "Microsoft",
213
+ :product => "Azure",
214
+ :match_details => "proxy default error",
215
+ :match_type => :content_body,
216
+ :match_content => /<h2>Our services aren\'t available right now<\/h2><p>We\'re working to restore all services as soon as possible. Please check back soon/i,
217
+ :paths => ["#{url}"],
218
+ :hide => true,
219
+ :inference => false
220
+ },
221
+ {
222
+ :type => "fingerprint",
223
+ :category => "service",
224
+ :tags => ["Hosting", "Load Balancer", "IaaS"],
225
+ :vendor => "Microsoft",
226
+ :product =>"Azure",
227
+ :match_details =>"Proxy header (x-ms-ref)",
228
+ :version => nil,
229
+ :match_type => :content_headers,
230
+ :match_content => /^x-ms-ref:.*/i,
231
+ :paths => ["#{url}"],
232
+ :inference => false
233
+ },
234
+ {
235
+ :type => "fingerprint",
236
+ :category => "service",
237
+ :tags => ["Hosting", "Load Balancer", "IaaS"],
238
+ :vendor => "Microsoft",
239
+ :product =>"Azure",
240
+ :match_details =>"Storage service header",
241
+ :version => nil,
242
+ :match_type => :content_headers,
243
+ :match_content => /^x-ms-request-id:.*/i,
244
+ :paths => ["#{url}"],
245
+ :inference => false
246
+ },
247
+ {
248
+ :type => "fingerprint",
249
+ :category => "service",
250
+ :tags => ["Hosting", "Load Balancer", "IaaS"],
251
+ :vendor => "Microsoft",
252
+ :product =>"Azure",
253
+ :match_details =>"cookie: ApplicationGatewayAffinity",
254
+ :version => nil,
255
+ :match_type => :content_cookies,
256
+ :match_content => /ApplicationGatewayAffinity=/i,
257
+ :paths => ["#{url}"],
258
+ :inference => false
259
+ },
260
+ {
261
+ :type => "fingerprint",
262
+ :category => "service",
263
+ :tags => ["Hosting", "Load Balancer", "IaaS"],
264
+ :vendor => "Microsoft",
265
+ :product =>"Azure",
266
+ :match_details =>"cookie: ApplicationGatewayAffinityCORS",
267
+ :version => nil,
268
+ :match_type => :content_cookies,
269
+ :match_content => /ApplicationGatewayAffinityCORS=/i,
270
+ :paths => ["#{url}"],
271
+ :inference => false
272
+ },
273
+ {
274
+ :type => "fingerprint",
275
+ :category => "service",
276
+ :tags => ["CDN", "IaaS"],
277
+ :vendor => "Microsoft",
278
+ :product => "Verizon Azure CDN",
279
+ :references => [
280
+ "https://docs.microsoft.com/en-us/azure/cdn/cdn-verizon-http-headers",
281
+ "https://docs.vdms.com/cdn/Content/HTTP_and_HTTPS_Data_Delivery/Response.htm"
282
+ ],
283
+ :version => nil,
284
+ :match_type => :content_headers,
285
+ :match_content => /^server:\ (ECAcc|ECD|EOS|ECS)\ \([a-zA-Z]{3}\/[a-zA-Z0-9]{4}\)$/i,
286
+ :dynamic_version => lambda { |x|
287
+ _first_header_capture(x,/^server:\ (ECAcc|ECD|EOS|ECS)\ \([a-zA-Z]{3}\/[a-zA-Z0-9]{4}\)$/i) },
288
+ :hide => false,
289
+ :paths => ["#{url}"],
290
+ :inference => false
291
+ },
292
+ {
293
+ :type => "fingerprint",
294
+ :category => "application",
295
+ :tags => ["Web Framework"],
296
+ :vendor => "Microsoft",
297
+ :product =>"ASP.NET",
298
+ :match_details =>"powered by header",
299
+ :version => nil,
300
+ :match_type => :content_headers,
301
+ :match_content => /x-powered-by: ASP.NET/,
302
+ :paths => ["#{url}"],
303
+ :inference => false
304
+ },
305
+ {
306
+ :type => "fingerprint",
307
+ :category => "application",
308
+ :tags => ["COTS"],
309
+ :vendor => "Microsoft",
310
+ :product =>"Commerce Server",
311
+ :match_details =>"server header",
312
+ :version => nil,
313
+ :match_type => :content_headers,
314
+ :match_content => /commerce-server-software: Microsoft Commerce Server.*/,
315
+ :paths => ["#{url}"],
316
+ :inference => false
317
+ },
318
+ {
319
+ :type => "fingerprint",
320
+ :category => "application",
321
+ :tags => ["Productivity","COTS","Mail Server", "Email"],
322
+ :vendor => "Microsoft",
323
+ :product =>"Exchange Server",
324
+ :references => ["https://support.microsoft.com/en-us/help/4036163/you-can-t-access-owa-or-ecp-after-you-install-exchange-server-2016-cu6"],
325
+ :match_details =>"x-feserver header",
326
+ :version => nil,
327
+ :match_type => :content_headers,
328
+ :match_content => /^x-feserver:.*$/i,
329
+ :paths => ["#{url}"],
330
+ :inference => false
331
+ },
332
+ {
333
+ :type => "fingerprint",
334
+ :category => "application",
335
+ :tags => ["Productivity","COTS", "Mail Server", "Email"],
336
+ :vendor => "Microsoft",
337
+ :product =>"Exchange Server",
338
+ :references => [],
339
+ :match_details =>"/owa/ redirect",
340
+ :version => nil,
341
+ :match_type => :content_headers,
342
+ :match_content => /^location:.*\/owa\/$/i,
343
+ :paths => ["#{url}"],
344
+ :inference => false
345
+ },
346
+ {
347
+ :type => "fingerprint",
348
+ :category => "application",
349
+ :tags => ["Productivity", "Mail Server", "COTS"],
350
+ :vendor => "Microsoft",
351
+ :product =>"Exchange Server",
352
+ :match_details =>"OWA Header -> Exchange server inference",
353
+ :version => nil,
354
+ :match_type => :content_headers,
355
+ :match_content => /^x-owa-version:/i,
356
+ :dynamic_version => lambda { |x|
357
+ version_string = _first_header_capture(x, /^x-owa-version:(.*)$/i)
358
+ owa_to_exchange_version(version_string)[:version]
359
+ },
360
+ :dynamic_update => lambda { |x|
361
+ update_string = _first_header_capture(x, /^x-owa-version:(.*)$/i)
362
+ owa_to_exchange_version(update_string)[:update]
363
+ },
364
+ :paths => ["#{url}"],
365
+ :inference => true
366
+ },
367
+ {
368
+ :type => "fingerprint",
369
+ :category => "application",
370
+ :tags => ["Productivity","COTS", "Mail Server", "Email"],
371
+ :vendor => "Microsoft",
372
+ :product =>"Exchange Server",
373
+ :references => ["https://bit.ly/2k4Yoot"],
374
+ :match_details =>"OWA version -> Exchange server inference (body)",
375
+ :version => nil,
376
+ :match_type => :content_body,
377
+ :match_content => /OwaPage\ =\ ASP.auth_logon_aspx/i,
378
+ :dynamic_version => lambda { |x|
379
+
380
+ version_string = _first_body_capture(x, /href=\"\/owa\/auth\/([\d\.]+)\/themes\/resources\/favicon.ico/)
381
+ version_string = _first_body_capture(x, /href=\"\/owa\/([\d\.]+)\/themes\/resources\/favicon.ico/) unless version_string
382
+
383
+ owa_to_exchange_version(version_string)[:version]
384
+ },
385
+ :dynamic_update => lambda { |x|
386
+
387
+ update_string = _first_body_capture(x, /href=\"\/owa\/auth\/([\d\.]+)\/themes\/resources\/favicon.ico/)
388
+ update_string = _first_body_capture(x, /href=\"\/owa\/([\d\.]+)\/themes\/resources\/favicon.ico/) unless update_string
389
+
390
+ owa_to_exchange_version(update_string)[:update]
391
+ },
392
+ :paths => ["#{url}"],
393
+ :inference => true # TODO - not specific enough yet
394
+ },
395
+ {
396
+ :type => "fingerprint",
397
+ :category => "application",
398
+ :tags => ["Productivity","COTS", "Mail Server", "Email"],
399
+ :vendor => "Microsoft",
400
+ :product =>"Exchange Server",
401
+ :references => ["https://bit.ly/2k4Yoot"],
402
+ :match_details =>"OWA version -> Exchange server inference (headers)",
403
+ :version => nil,
404
+ :match_type => :content_headers,
405
+ :match_content => /x-owa-version/i,
406
+ :dynamic_version => lambda { |x|
407
+
408
+ version_string = _first_body_capture(x, /href=\"\/owa\/auth\/([\d\.]+)\/themes\/resources\/favicon.ico/)
409
+ version_string = _first_body_capture(x, /href=\"\/owa\/([\d\.]+)\/themes\/resources\/favicon.ico/) unless version_string
410
+
411
+ owa_to_exchange_version(version_string)[:version]
412
+ },
413
+ :dynamic_update => lambda { |x|
414
+
415
+ update_string = _first_body_capture(x, /href=\"\/owa\/auth\/([\d\.]+)\/themes\/resources\/favicon.ico/)
416
+ update_string = _first_body_capture(x, /href=\"\/owa\/([\d\.]+)\/themes\/resources\/favicon.ico/) unless update_string
417
+
418
+ owa_to_exchange_version(update_string)[:update]
419
+ },
420
+ :paths => ["#{url}"],
421
+ :inference => true # TODO - not specific enough yet
422
+ },
423
+ {
424
+ :type => "fingerprint",
425
+ :category => "application",
426
+ :tags => ["Firewall"],
427
+ :vendor => "Microsoft",
428
+ :product =>"Forefront TMG",
429
+ :match_details =>"Microsoft Forefront Threat Management Gateway",
430
+ :version => nil,
431
+ :match_type => :content_cookies,
432
+ :match_content => /<title>Microsoft Forefront TMG/,
433
+ :paths => ["#{url}"],
434
+ :inference => false
435
+ },
436
+ {
437
+ :type => "fingerprint",
438
+ :category => "application",
439
+ :tags => ["Firewall"],
440
+ :vendor => "Microsoft",
441
+ :product =>"Forefront TMG",
442
+ :match_details =>"Microsoft Forefront Threat Management Gateway",
443
+ :version => nil,
444
+ :match_type => :content_headers,
445
+ :match_content => /via:\ 1.1\ TMGSRVR/,
446
+ :paths => ["#{url}"],
447
+ :inference => false
448
+ },
449
+ {
450
+ :type => "fingerprint",
451
+ :category => "application",
452
+ :tags => ["Firewall"],
453
+ :vendor => "Microsoft",
454
+ :product =>"ISA Server",
455
+ :version => "2006",
456
+ :match_type => :content_title,
457
+ :match_content => /^Microsoft ISA Server 2006$/i,
458
+ :match_details =>"standard title",
459
+ :paths => ["#{url}"],
460
+ :inference => false
461
+ },
462
+ {
463
+ :type => "fingerprint",
464
+ :category => "application",
465
+ :tags => ["Library", "Application Server"],
466
+ :vendor =>"Microsoft",
467
+ :product =>"Frontpage",
468
+ :match_details =>"server header",
469
+ :version => nil,
470
+ :match_type => :content_headers,
471
+ :match_content => /^.*FrontPage\/.*$/i,
472
+ :dynamic_version => lambda { |x|
473
+ _first_header_capture(x,/^.*FrontPage\/([\d\.]*).*$/i)
474
+ },
475
+ :paths => ["#{url}"],
476
+ :inference => true
477
+ },
478
+ {
479
+ :type => "fingerprint",
480
+ :category => "application",
481
+ :tags => ["Web Server"],
482
+ :vendor => "Microsoft",
483
+ :product => "Internet Information Services",
484
+ :match_details =>"server header",
485
+ :match_type => :content_headers,
486
+ :match_content => /server: Microsoft-IIS/,
487
+ :paths => ["#{url}"],
488
+ :inference => false # not specific enough
489
+ },
490
+ {
491
+ :type => "fingerprint",
492
+ :category => "application",
493
+ :tags => ["Web Server"],
494
+ :vendor => "Microsoft",
495
+ :product => "Internet Information Services",
496
+ :match_details =>"server header",
497
+ :version => nil,
498
+ :dynamic_version => lambda { |x|
499
+ _first_header_capture x, /server: Microsoft-IIS\/(.*)/
500
+ },
501
+ :match_type => :content_headers,
502
+ :match_content => /server: Microsoft-IIS\//,
503
+ :paths => ["#{url}"],
504
+ :inference => false # not specific enough
505
+ },
506
+ {
507
+ :type => "fingerprint",
508
+ :category => "application",
509
+ :tags => ["Web Server"],
510
+ :vendor => "Microsoft",
511
+ :product => "Internet Information Services",
512
+ :match_details =>"body error messages",
513
+ :version => nil,
514
+ :match_type => :content_body,
515
+ :match_content => /401.2 - Unauthorized: Access is denied due to server configuration.<br>Internet Information Services \(IIS\)/,
516
+ :paths => ["#{url}"],
517
+ :inference => false # not specific enough
518
+ },
519
+ {
520
+ :type => "fingerprint",
521
+ :category => "application",
522
+ :tags => ["Web Server"],
523
+ :vendor => "Microsoft",
524
+ :product =>"Internet Information Services",
525
+ :match_details =>"Internet Information Services",
526
+ :version => "8.0",
527
+ :match_type => :content_body,
528
+ :match_content => /<img src=\"iis-8.png\"/,
529
+ :paths => ["#{url}"],
530
+ :inference => false # not specific enough
531
+ },
532
+ {
533
+ :type => "fingerprint",
534
+ :category => "application",
535
+ :tags => ["Web Server"],
536
+ :vendor => "Microsoft",
537
+ :product =>"Internet Information Services",
538
+ :match_details =>"Microsoft IIS 8.5",
539
+ :version => "8.5",
540
+ :match_type => :content_body,
541
+ :match_content => /<img src=\"iis-85.png\"/,
542
+ :paths => ["#{url}"],
543
+ :inference => false # not specific enough
544
+ },
545
+ {
546
+ :type => "fingerprint",
547
+ :category => "application",
548
+ :tags => ["Web Server"],
549
+ :vendor => "Microsoft",
550
+ :product =>"Internet Information Services",
551
+ :match_details =>"Microsoft-HTTPAPI/2.0 (IIS not configured)",
552
+ :version => nil,
553
+ :match_type => :content_headers,
554
+ :match_content => /server: Microsoft-HTTPAPI\/2.0/i,
555
+ :paths => ["#{url}"],
556
+ :inference => false
557
+ },
558
+ {
559
+ :type => "fingerprint",
560
+ :category => "application",
561
+ :vendor => "Microsoft",
562
+ :product =>"Internet Information Services",
563
+ :match_details =>"Microsoft IIS Unauthorized (403)",
564
+ :tags => ["error_page"],
565
+ :version => nil,
566
+ :match_type => :content_body,
567
+ :hide => true,
568
+ :match_content => /Error Code: 403 Forbidden. The server denied the specified Uniform Resource Locator \(URL\)/,
569
+ :paths => ["#{url}"],
570
+ :inference => false
571
+ },
572
+ {
573
+ :type => "fingerprint",
574
+ :category => "application",
575
+ :tags => ["Web Server"],
576
+ :vendor => "Microsoft",
577
+ :product =>"Internet Information Services",
578
+ :match_details =>"Microsoft IIS Missing Resource (404)",
579
+ :version => nil,
580
+ :match_type => :content_body,
581
+ :hide => true,
582
+ :match_content => /HTTP Error 404. The requested resource is not found./,
583
+ :paths => ["#{url}"],
584
+ :inference => false
585
+ },
586
+ {
587
+ :type => "fingerprint",
588
+ :category => "application",
589
+ :tags => ["Web Server"],
590
+ :vendor => "Microsoft",
591
+ :product =>"Internet Information Services",
592
+ :match_details =>"Microsoft IIS Generic Error - 403",
593
+ :version => nil,
594
+ :match_type => :content_body,
595
+ :hide => true,
596
+ :match_content => /403 Forbidden. The server denied the specified Uniform Resource Locator (URL)/,
597
+ :paths => ["#{url}"],
598
+ :inference => false
599
+ },
600
+ {
601
+ :type => "fingerprint",
602
+ :category => "application",
603
+ :tags => ["Web Server"],
604
+ :vendor => "Microsoft",
605
+ :product =>"Internet Information Services",
606
+ :match_details =>"Microsoft Generic Error - 503",
607
+ :version => nil,
608
+ :match_type => :content_body,
609
+ :hide => true,
610
+ :match_content => /HTTP Error 503. The service is unavailable./,
611
+ :paths => ["#{url}"],
612
+ :inference => false
613
+ },
614
+ {
615
+ :type => "fingerprint",
616
+ :category => "application",
617
+ :tags => ["Web Server"],
618
+ :vendor =>"Microsoft",
619
+ :product =>"Kestrel",
620
+ :references => ["https://stackify.com/what-is-kestrel-web-server/"],
621
+ :match_details =>"kestrel in server header",
622
+ :version => nil,
623
+ :match_type => :content_headers,
624
+ :match_content => /server: Kestrel/i,
625
+ :paths => ["#{url}"],
626
+ :inference => false
627
+ },
628
+ {
629
+ :type => "fingerprint",
630
+ :category => "service",
631
+ :tags => ["Productivity","SaaS"],
632
+ :vendor =>"Microsoft",
633
+ :product =>"Office 365",
634
+ :match_details =>"office 365 api unique header",
635
+ :version => nil,
636
+ :match_type => :content_headers,
637
+ :match_content => /x-ms-server-fqdn/i,
638
+ :paths => ["#{url}"],
639
+ :inference => false
640
+ },
641
+ {
642
+ :type => "fingerprint",
643
+ :category => "service",
644
+ :tags => ["Productivity","SaaS"],
645
+ :vendor =>"Microsoft",
646
+ :product =>"Office 365 API",
647
+ :match_details =>"office 365 api auth cookie",
648
+ :version => nil,
649
+ :match_type => :content_cookies,
650
+ :match_content => /x-ms-gateway-slice/i,
651
+ :paths => ["#{url}"],
652
+ :inference => false
653
+ },
654
+ {
655
+ :type => "fingerprint",
656
+ :category => "service",
657
+ :tags => ["Productivity","SaaS"],
658
+ :vendor =>"Microsoft",
659
+ :product =>"Office 365",
660
+ :match_details =>"office 365 fronted by okta",
661
+ :version => nil,
662
+ :match_type => :content_body,
663
+ :match_content => /ok3static.oktacdn.com\/assets\/img\/logos\/office365/i,
664
+ :paths => ["#{url}"],
665
+ :inference => false
666
+ },
667
+
668
+ {
669
+ :type => "fingerprint",
670
+ :category => "service",
671
+ :tags => ["Productivity","SaaS"],
672
+ :vendor =>"Microsoft",
673
+ :product =>"Microsoft Outlook (Office 365)",
674
+ :match_details =>"office 365 outlook signin",
675
+ :version => nil,
676
+ :match_type => :content_title,
677
+ :match_content => /Sign in to Outlook/i,
678
+ :paths => ["#{url}"],
679
+ :inference => false
680
+ },
681
+ {
682
+ :type => "fingerprint",
683
+ :category => "application",
684
+ :tags => ["Productivity", "Mail Server", "COTS"],
685
+ :vendor => "Microsoft",
686
+ :product =>"Outlook Web Access",
687
+ :match_details =>"Microsoft Outlook Web Access",
688
+ :version => nil,
689
+ :match_type => :content_headers,
690
+ :match_content => /location: \/owa/,
691
+ :paths => ["#{url}"],
692
+ :inference => false
693
+ },
694
+ {
695
+ :type => "fingerprint",
696
+ :category => "application",
697
+ :tags => ["Productivity", "Mail Server", "COTS"],
698
+ :vendor => "Microsoft",
699
+ :product =>"Outlook Web Access",
700
+ :match_details =>"Microsoft Outlook Web Access (header)",
701
+ :version => nil,
702
+ :match_type => :content_headers,
703
+ :match_content => /x-owa-version/,
704
+ :dynamic_version => lambda { |x|
705
+ _first_header_capture(x, /x-owa-version:(.*)/) },
706
+ :paths => ["#{url}"],
707
+ :inference => true
708
+ },
709
+ {
710
+ :type => "fingerprint",
711
+ :category => "application",
712
+ :tags => ["Productivity", "Mail Server", "COTS"],
713
+ :vendor => "Microsoft",
714
+ :product =>"Outlook Web Access",
715
+ :match_details =>"Microsoft Outlook Web Access (body)",
716
+ :version => nil,
717
+ :match_type => :content_body,
718
+ :match_content => /OwaPage\ =\ ASP.auth_logon_aspx/,
719
+ :dynamic_version => lambda { |x|
720
+ _first_body_capture x, /href=\"\/owa\/auth\/(.*)\/themes\/resources\/favicon.ico/ },
721
+ :paths => ["#{url}"],
722
+ :inference => true
723
+ },
724
+ {
725
+ :type => "fingerprint",
726
+ :category => "application",
727
+ :tags => ["Productivity", "Mail Server", "COTS"],
728
+ :vendor => "Microsoft",
729
+ :product =>"Outlook Web Access",
730
+ :match_details =>"title",
731
+ :version => nil,
732
+ :match_type => :content_title ,
733
+ :match_content => /^Outlook Web App$/,
734
+ :paths => ["#{url}"],
735
+ :inference => false
736
+ },
737
+ {
738
+ :type => "fingerprint",
739
+ :category => "application",
740
+ :tags => ["Productivity", "CMS"],
741
+ :vendor => "Microsoft",
742
+ :product =>"Sharepoint Server",
743
+ :match_details =>"Inferred from services version",
744
+ :version => nil,
745
+ :match_type => :content_headers,
746
+ :match_content => /microsoftsharepointteamservices/,
747
+ :dynamic_version => lambda { |x|
748
+ sharepoint_server_version_from_team_services(_first_header_capture(x,/^microsoftsharepointteamservices:(.*)/i))[:version] },
749
+ :dynamic_update => lambda { |x|
750
+ sharepoint_server_version_from_team_services(_first_header_capture(x,/^microsoftsharepointteamservices:(.*)/i))[:update] },
751
+ :paths => ["#{url}"],
752
+ :inference => false
753
+ },
754
+ {
755
+ :type => "fingerprint",
756
+ :category => "application",
757
+ :tags => ["Productivity", "CMS"],
758
+ :vendor => "Microsoft",
759
+ :product =>"Sharepoint Foundation",
760
+ :match_details =>"error page",
761
+ :version => nil,
762
+ :match_type => :content_body,
763
+ :requires_product => "Sharepoint Server",
764
+ :match_content => /Troubleshoot issues with Microsoft SharePoint Foundation. - Opens in new window/,
765
+ :paths => ["#{url}/WebResource.asmx"],
766
+ :require_product => "ASP.NET",
767
+ :inference => false
768
+ },
769
+ {
770
+ :type => "fingerprint",
771
+ :category => "application",
772
+ :tags => ["Productivity", "CMS"],
773
+ :vendor => "Microsoft",
774
+ :product =>"Sharepoint Team Services",
775
+ :match_details =>"Sharepoint cookie",
776
+ :version => nil,
777
+ :match_type => :content_headers,
778
+ :match_content => /sprequestguid/,
779
+ :dynamic_version => lambda { |x|
780
+ _first_header_capture(x,/^microsoftsharepointteamservices:(.*)/i) },
781
+ :paths => ["#{url}"],
782
+ :inference => true
783
+ },
784
+ {
785
+ :type => "fingerprint",
786
+ :category => "application",
787
+ :tags => ["Productivity", "CMS"],
788
+ :vendor => "Microsoft",
789
+ :product =>"Sharepoint Team Services",
790
+ :match_details =>"Sharepoint cookie",
791
+ :version => nil,
792
+ :match_type => :content_headers,
793
+ :match_content => /^microsoftsharepointteamservices:.*$/,
794
+ :dynamic_version => lambda { |x|
795
+ _first_header_capture(x,/^microsoftsharepointteamservices:(.*)/i) },
796
+ :paths => ["#{url}"],
797
+ :inference => true
798
+ },
799
+ {
800
+ :type => "fingerprint",
801
+ :category => "application",
802
+ :tags => ["Productivity", "CMS"],
803
+ :vendor => "Microsoft",
804
+ :product =>"Sharepoint Server",
805
+ :match_details =>"Sharepoint cookie",
806
+ :version => nil,
807
+ :match_type => :content_generator,
808
+ :match_content => /^Microsoft SharePoint$/,
809
+ :paths => ["#{url}"],
810
+ :inference => false
811
+ },
812
+ {
813
+ :type => "fingerprint",
814
+ :category => "application",
815
+ :tags => ["Productivity", "CMS"],
816
+ :vendor => "Microsoft",
817
+ :product =>"Sharepoint Services",
818
+ :match_details =>"header",
819
+ :version => nil,
820
+ :match_type => :content_headers,
821
+ :match_content => /microsoftofficewebserver:.*/,
822
+ :dynamic_version => lambda { |x| _first_header_capture(x,/^microsoftofficewebserver:(.*)/i) },
823
+ :paths => ["#{url}"],
824
+ :inference => true
825
+ },
826
+ {
827
+ :type => "fingerprint",
828
+ :category => "application",
829
+ :tags => ["Productivity", "CMS"],
830
+ :vendor => "Microsoft",
831
+ :product =>"Sharepoint Services",
832
+ :match_details =>"header",
833
+ :version => "3.0",
834
+ :match_type => :content_headers,
835
+ :match_content => /microsoftofficewebserver: 5.0_Pub/,
836
+ :paths => ["#{url}"]
837
+ }
838
+ ]
839
+ end
840
+
841
+ # https://buildnumbers.wordpress.com/sharepoint/
842
+ # https://www.eukhost.com/blog/webhosting/difference-between-windows-sharepoint-services-and-sharepoint-servers/
843
+ # https://sathiya.io/sharepoint-2016-build-numbers
844
+ def sharepoint_server_version_from_team_services(sp_teamsvc_version)
845
+
846
+ # adjust the version to fit our naming scheme
847
+ # simpluy remove one of the .0's
848
+ sp_version = sp_teamsvc_version.gsub("0.0.","0.")
849
+
850
+ reference_versions = File.open("#{$ident_dir}/data/microsoft_sharepoint_versions.csv").read.split("\n")
851
+
852
+ # do the comparison and simply return if we ahve it
853
+ reference_versions.each do |line|
854
+ # it's a csv
855
+ ref = line.split(",")
856
+
857
+ # grab the relevant fields
858
+ sp_release = ref[0]
859
+ build_version = ref[1]
860
+ update_version = ref[2]
861
+
862
+ # modify to fit our schema
863
+ compare_version = build_version.gsub(/\.\d+$/,"")
864
+ if compare_version == sp_version # # Got it
865
+ # recturn since we matched
866
+ return { version: sp_release, update: update_version }
867
+ end
868
+ end
869
+
870
+ # okay we made it this far, so no exact match
871
+ # handle cases where we don't have an exact match here
872
+ case
873
+ when sp_teamsvc_version =~ /^10\.0\.0\.\d+/
874
+ out = { version: "2003", update: nil }
875
+ when sp_teamsvc_version =~ /^11\.0\.0\.\d+/
876
+ out = { version: "2003", update: nil }
877
+ when sp_teamsvc_version =~ /^12\.0\.0\.\d+/
878
+ out = { version: "2007", update: nil }
879
+ when sp_teamsvc_version =~ /^14\.0\.0\.\d+/
880
+ out = { version: "2010", update: nil }
881
+ when sp_teamsvc_version =~ /^15\.0\.0\.\d+/
882
+ out = { version: "2013", update: nil }
883
+ when sp_teamsvc_version =~ /^16\.0\.4\d+\.\d+/
884
+ out = { version: "2016", update: nil }
885
+ when sp_teamsvc_version =~ /^16\.0\.10\d+\.\d+/
886
+ out = { version: "2019", update: nil }
887
+ else
888
+ out = { version: nil, update: nil }
889
+ end
890
+
891
+
892
+ out
893
+ end
894
+
895
+
896
+ # https://en.wikipedia.org/wiki/Internet_Information_Services
897
+ def iis_to_os_version(iis_version)
898
+
899
+ case
900
+ when iis_version == "10.0.17763"
901
+ out = { version: " Windows Server 2019 or Windows 10 October Update" }
902
+ when iis_version == "10.0"
903
+ out = { version: " Windows Server, version 1709 (Semi-Annual Channel) or Windows 10 Fall Creators Update" }
904
+ when iis_version == "10.0.14393" # IIS 10.0 version 1607
905
+ out = { version: "Windows Server 2016 or Windows 10 Anniversary Update" }
906
+ when iis_version == "8.5"
907
+ out = { version: "Windows Server 2012 R2 or Windows 8.1" }
908
+ when iis_version == "8.0"
909
+ out = { version: "Windows Server 2012 or Windows 8" }
910
+ when iis_version == "7.5"
911
+ out = { version: "Windows Server 2008 R2 or Windows 7" }
912
+ when iis_version == "7.0"
913
+ out = { version: "Windows Server 2008 or Windows Vista" }
914
+ when iis_version == "6.0"
915
+ out = { version: "Windows Server 2003 or Windows XP Professional x64 Edition" }
916
+ when iis_version == "5.1"
917
+ out = { version: "Windows XP Professional" }
918
+ when iis_version == "5.0"
919
+ out = { version: "Windows Server 2000" }
920
+ when iis_version == "4.0"
921
+ out = { version: "Windows NT 4.0 Option Pack" }
922
+ when iis_version == "3.0"
923
+ out = { version: "Windows NT 4.0 SP2" }
924
+ when iis_version == "2.0"
925
+ out = { version: "Windows NT 4.0" }
926
+ when iis_version == "1.0"
927
+ out = { version: "Windows NT 3.51" }
928
+ end
929
+
930
+ out
931
+ end
932
+
933
+ def owa_to_exchange_version(owa_version)
934
+
935
+ # 2007 SP1
936
+ if owa_version == "8.1.240.6" #.32"
937
+ out = { version: "2007 SP1", update: "RTM" }
938
+ elsif owa_version == "8.1.263.1" #.32"
939
+ out = { version: "2007 SP1", update: "Update Rollup 1" }
940
+ elsif owa_version == "8.1.278.2" #.32"
941
+ out = { version: "2007 SP1", update: "Update Rollup 2" }
942
+ elsif owa_version == "8.1.291.2" #.32"
943
+ out = { version: "2007 SP1", update: "Update Rollup 3" }
944
+ elsif owa_version == "8.1.311.3" #.32"
945
+ out = { version: "2007 SP1", update: "Update Rollup 4" }
946
+ elsif owa_version == "8.1.336.1" #.32"
947
+ out = { version: "2007 SP1", update: "Update Rollup 5" }
948
+ elsif owa_version == "8.1.340.1" #.32"
949
+ out = { version: "2007 SP1", update: "Update Rollup 6" }
950
+ elsif owa_version == "8.1.359.2" #.32"
951
+ out = { version: "2007 SP1", update: "Update Rollup 7" }
952
+ elsif owa_version == "8.1.375.2" #.32"
953
+ out = { version: "2007 SP1", update: "Update Rollup 8" }
954
+ elsif owa_version == "8.1.393.1" #.32"
955
+ out = { version: "2007 SP1", update: "Update Rollup 9" }
956
+ elsif owa_version == "8.1.436.0" #.32"
957
+ out = { version: "2007 SP1", update: "Update Rollup 10" }
958
+
959
+ # 2007 SP2
960
+ elsif owa_version == "8.2.176.2" #.32"
961
+ out = { version: "2007 SP2", update: "RTM" }
962
+ elsif owa_version == "8.2.217.3" #.32"
963
+ out = { version: "2007 SP2", update: "Update Rollup 1" }
964
+ elsif owa_version == "8.2.234.1" #.32"
965
+ out = { version: "2007 SP2", update: "Update Rollup 2" }
966
+ elsif owa_version == "8.2.247.2" #.32"
967
+ out = { version: "2007 SP2", update: "Update Rollup 3" }
968
+ elsif owa_version == "8.2.254.0" #.32"
969
+ out = { version: "2007 SP2", update: "Update Rollup 4" }
970
+ elsif owa_version == "8.2.305.3" #.32"
971
+ out = { version: "2007 SP2", update: "Update Rollup 5" }
972
+
973
+ # 2007 SP3
974
+ elsif owa_version == "8.3.083.6" #.32"
975
+ out = { version: "2007 SP3", update: "RTM" }
976
+ elsif owa_version == "8.3.106.2" #.32"
977
+ out = { version: "2007 SP3", update: "Update Rollup 1" }
978
+ elsif owa_version == "8.3.137.3" #.32"
979
+ out = { version: "2007 SP3", update: "Update Rollup 2" }
980
+ elsif owa_version == "8.3.159.0" #.32"
981
+ out = { version: "2007 SP3", update: "Update Rollup 3" }
982
+ elsif owa_version == "8.3.159.2" #.32"
983
+ out = { version: "2007 SP3", update: "Update Rollup 3-v2" }
984
+ elsif owa_version == "8.3.192.1" #.32"
985
+ out = { version: "2007 SP3", update: "Update Rollup 4" }
986
+ elsif owa_version == "8.3.213.1" #.32"
987
+ out = { version: "2007 SP3", update: "Update Rollup 5" }
988
+ elsif owa_version == "8.3.245.2" #.32"
989
+ out = { version: "2007 SP3", update: "Update Rollup 6" }
990
+ elsif owa_version == "8.3.264.0" #.32"
991
+ out = { version: "2007 SP3", update: "Update Rollup 7" }
992
+ elsif owa_version == "8.3.279.3" #.32"
993
+ out = { version: "2007 SP3", update: "Update Rollup 8" }
994
+ elsif owa_version == "8.3.279.5" #.32"
995
+ out = { version: "2007 SP3", update: "Update Rollup 8-v2" }
996
+ elsif owa_version == "8.3.279.6" #.32"
997
+ out = { version: "2007 SP3", update: "Update Rollup 8-v3" }
998
+ elsif owa_version == "8.3.297.2" #.32
999
+ out = { version: "2007 SP3", update: "Update Rollup 9" }
1000
+ elsif owa_version == "8.3.298.3" #.32"
1001
+ out = { version: "2007 SP3", update: "Update Rollup 10" }
1002
+ elsif owa_version == "8.3.327.1" #.32"
1003
+ out = { version: "2007 SP3", update: "Update Rollup 11" }
1004
+ elsif owa_version == "8.3.342.4" #.32"
1005
+ out = { version: "2007 SP3", update: "Update Rollup 12" }
1006
+ elsif owa_version == "8.3.348.1" #.32"
1007
+ out = { version: "2007 SP3", update: "Update Rollup 13" }
1008
+ elsif owa_version == "8.3.379.2" #.32"
1009
+ out = { version: "2007 SP3", update: "Update Rollup 14" }
1010
+ elsif owa_version == "8.3.389.2" #.32"
1011
+ out = { version: "2007 SP3", update: "Update Rollup 15" }
1012
+ elsif owa_version == "8.3.406.0" #.32"
1013
+ out = { version: "2007 SP3", update: "Update Rollup 16" }
1014
+ elsif owa_version == "8.3.417.1" #.32"
1015
+ out = { version: "2007 SP3", update: "Update Rollup 17" }
1016
+ elsif owa_version == "8.3.445.0" #.32"
1017
+ out = { version: "2007 SP3", update: "Update Rollup 18" }
1018
+ elsif owa_version == "8.3.459.0" #.32"
1019
+ out = { version: "2007 SP3", update: "Update Rollup 19" }
1020
+ elsif owa_version == "8.3.468.0" #.32"
1021
+ out = { version: "2007 SP3", update: "Update Rollup 20" }
1022
+ elsif owa_version == "8.4.485.1" #.32"
1023
+ out = { version: "2007 SP3", update: "Update Rollup 21" }
1024
+ elsif owa_version == "8.3.502.0" #.32"
1025
+ out = { version: "2007 SP3", update: "Update Rollup 22" }
1026
+ elsif owa_version == "8.3.517.0" #.32"
1027
+ out = { version: "2007 SP3", update: "Update Rollup 23" }
1028
+
1029
+ # 2010
1030
+ elsif owa_version == "14.0.639.21"
1031
+ out = { version: "2010", update: "RTM" }
1032
+ elsif owa_version == "14.0.682.1"
1033
+ out = { version: "2010", update: "Update Rollup 1" }
1034
+ elsif owa_version == "14.0.689.0"
1035
+ out = { version: "2010", update: "Update Rollup 2" }
1036
+ elsif owa_version == "14.0.694.0"
1037
+ out = { version: "2010", update: "Update Rollup 3" }
1038
+ elsif owa_version == "14.0.702.1"
1039
+ out = { version: "2010", update: "Update Rollup 4" }
1040
+ elsif owa_version == "14.0.722.0" # unknown release, found in the wild
1041
+ out = { version: "2010", update: "Update Rollup 4",
1042
+ note: "additional updates applied: #{owa_version}" }
1043
+ elsif owa_version == "14.0.726.0"
1044
+ out = { version: "2010", update: "Update Rollup 5" }
1045
+
1046
+ # 2010 SP1
1047
+ elsif owa_version == "14.1.218.13" || owa_version == "14.1.218.15"
1048
+ out = { version: "2010 SP1", update: "RTM" }
1049
+ elsif owa_version == "14.1.255.2"
1050
+ out = { version: "2010 SP1", update: "Update Rollup 1" }
1051
+ elsif owa_version == "14.1.270.1"
1052
+ out = { version: "2010 SP1", update: "Update Rollup 2" }
1053
+ elsif owa_version == "14.1.287.0"
1054
+ out = { version: "2010 SP1", update: "Update Rollup 2",
1055
+ note: "additional updates applied: #{owa_version}" }
1056
+ elsif owa_version == "14.1.289.3"
1057
+ out = { version: "2010 SP1", update: "Update Rollup 3" }
1058
+ elsif owa_version == "14.1.289.7"
1059
+ out = { version: "2010 SP1", update: "Update Rollup 3-v3" }
1060
+ elsif owa_version == "14.1.323.1"
1061
+ out = { version: "2010 SP1", update: "Update Rollup 4" }
1062
+ elsif owa_version == "14.1.323.6"
1063
+ out = { version: "2010 SP1", update: "Update Rollup 4-v2" }
1064
+ elsif owa_version == "14.1.339.1"
1065
+ out = { version: "2010 SP1", update: "Update Rollup 5" }
1066
+ elsif owa_version == "14.1.355.2"
1067
+ out = { version: "2010 SP1", update: "Update Rollup 6" }
1068
+ elsif owa_version == "14.1.420.0"
1069
+ out = { version: "2010 SP1", update: "Update Rollup 6",
1070
+ note: "additional updates applied: #{owa_version}" }
1071
+ elsif owa_version == "14.1.421.0"
1072
+ out = { version: "2010 SP1", update: "Update Rollup 7" }
1073
+ elsif owa_version == "14.1.421.2"
1074
+ out = { version: "2010 SP1", update: "Update Rollup 7-v2" }
1075
+ elsif owa_version == "14.1.421.3"
1076
+ out = { version: "2010 SP1", update: "Update Rollup 7-v3" }
1077
+ elsif owa_version == "14.1.438.0"
1078
+ out = { version: "2010 SP1", update: "Update Rollup 8" }
1079
+
1080
+ # 2010 SP2
1081
+ elsif owa_version == "14.2.247.5"
1082
+ out = { version: "2010 SP2", update: "RTM" }
1083
+ elsif owa_version == "14.2.283.3"
1084
+ out = { version: "2010 SP2", update: "Update Rollup 1" }
1085
+ elsif owa_version == "14.2.298.4"
1086
+ out = { version: "2010 SP2", update: "Update Rollup 2" }
1087
+ elsif owa_version == "14.2.309.2"
1088
+ out = { version: "2010 SP2", update: "Update Rollup 3" }
1089
+ elsif owa_version == "14.2.318.2"
1090
+ out = { version: "2010 SP2", update: "Update Rollup 4" }
1091
+ elsif owa_version == "14.2.318.4"
1092
+ out = { version: "2010 SP2", update: "Update Rollup 4-v2" }
1093
+ elsif owa_version == "14.2.328.5"
1094
+ out = { version: "2010 SP2", update: "Update Rollup 5" }
1095
+ elsif owa_version == "14.2.328.9" || owa_version == "14.2.328.10"
1096
+ out = { version: "2010 SP2", update: "Update Rollup 5-v2" }
1097
+ elsif owa_version == "14.2.342.3"
1098
+ out = { version: "2010 SP2", update: "Update Rollup 6" }
1099
+ elsif owa_version == "14.2.347.0"
1100
+ out = { version: "2010 SP2", update: "Update Rollup 6",
1101
+ note: "additional updates applied: #{owa_version}" }
1102
+ elsif owa_version == "14.2.375.0"
1103
+ out = { version: "2010 SP2", update: "Update Rollup 7" }
1104
+ elsif owa_version == "14.2.390.1" # unknown release, found in the wild
1105
+ out = { version: "2010 SP2", update: "Update Rollup 8",
1106
+ note: "prerelease version: #{owa_version}" }
1107
+ elsif owa_version == "14.2.390.3"
1108
+ out = { version: "2010 SP2", update: "Update Rollup 8" }
1109
+
1110
+ # 2010 SP3
1111
+ elsif owa_version == "14.3.123.3" || owa_version == "14.3.123.3"
1112
+ out = { version: "2010 SP3", update: "RTM" }
1113
+ elsif owa_version == "14.3.146.0"
1114
+ out = { version: "2010 SP3", update: "Update Rollup 1" }
1115
+ elsif owa_version == "14.3.158.1"
1116
+ out = { version: "2010 SP3", update: "Update Rollup 2" }
1117
+ elsif owa_version == "14.3.169.1"
1118
+ out = { version: "2010 SP3", update: "Update Rollup 3" }
1119
+ elsif owa_version == "14.3.174.1"
1120
+ out = { version: "2010 SP3", update: "Update Rollup 4" }
1121
+ elsif owa_version == "14.3.181.6"
1122
+ out = { version: "2010 SP3", update: "Update Rollup 5" }
1123
+ elsif owa_version == "14.3.195.1"
1124
+ out = { version: "2010 SP3", update: "Update Rollup 6" }
1125
+ elsif owa_version == "14.3.210.2"
1126
+ out = { version: "2010 SP3", update: "Update Rollup 7" }
1127
+ elsif owa_version == "14.3.224.2"
1128
+ out = { version: "2010 SP3", update: "Update Rollup 8-v2" }
1129
+ elsif owa_version == "14.3.235.1"
1130
+ out = { version: "2010 SP3", update: "Update Rollup 9" }
1131
+ elsif owa_version == "14.3.248.2"
1132
+ out = { version: "2010 SP3", update: "Update Rollup 10" }
1133
+ elsif owa_version == "14.3.266.1"
1134
+ out = { version: "2010 SP3", update: "Update Rollup 11" }
1135
+ elsif owa_version == "14.3.279.2"
1136
+ out = { version: "2010 SP3", update: "Update Rollup 12" }
1137
+ elsif owa_version == "14.3.294.0"
1138
+ out = { version: "2010 SP3", update: "Update Rollup 13" }
1139
+ elsif owa_version == "14.3.301.0"
1140
+ out = { version: "2010 SP3", update: "Update Rollup 14" }
1141
+ elsif owa_version == "14.3.319.2"
1142
+ out = { version: "2010 SP3", update: "Update Rollup 15" }
1143
+ elsif owa_version == "14.3.339.0"
1144
+ out = { version: "2010 SP3", update: "Update Rollup 16" }
1145
+ elsif owa_version == "14.3.351.0"
1146
+ out = { version: "2010 SP3", update: "Update Rollup 16",
1147
+ note: "additional updates applied: #{owa_version}" }
1148
+ elsif owa_version == "14.3.352.0"
1149
+ out = { version: "2010 SP3", update: "Update Rollup 17" }
1150
+ elsif owa_version == "14.3.361.1"
1151
+ out = { version: "2010 SP3", update: "Update Rollup 18" }
1152
+ elsif owa_version == "14.3.382.0"
1153
+ out = { version: "2010 SP3", update: "Update Rollup 19" }
1154
+ elsif owa_version == "14.3.388.0" # found in the wild
1155
+ out = { version: "2010 SP3", update: "Update Rollup 19",
1156
+ note: "additional updates applied: #{owa_version}" }
1157
+ elsif owa_version == "14.3.389.1"
1158
+ out = { version: "2010 SP3", update: "Update Rollup 20" }
1159
+ elsif owa_version == "14.3.399.0"
1160
+ out = { version: "2010 SP3", update: "Update Rollup 21",
1161
+ note: "additional updates applied: #{owa_version}" }
1162
+ elsif owa_version == "14.3.399.2"
1163
+ out = { version: "2010 SP3", update: "Update Rollup 21" }
1164
+ elsif owa_version == "14.3.409.0"
1165
+ out = { version: "2010 SP3", update: "Update Rollup 21",
1166
+ note: "additional updates applied: #{owa_version}" }
1167
+ elsif owa_version == "14.3.411.0"
1168
+ out = { version: "2010 SP3", update: "Update Rollup 22" }
1169
+ elsif owa_version == "14.3.415.0"
1170
+ out = { version: "2010 SP3", update: "Update Rollup 22",
1171
+ note: "additional updates applied: #{owa_version}" }
1172
+ elsif owa_version == "14.3.417.0"
1173
+ out = { version: "2010 SP3", update: "Update Rollup 23" }
1174
+ elsif owa_version == "14.3.419.0"
1175
+ out = { version: "2010 SP3", update: "Update Rollup 24" }
1176
+ elsif owa_version == "14.3.435.0"
1177
+ out = { version: "2010 SP3", update: "Update Rollup 25" }
1178
+ elsif owa_version == "14.3.439.0" # unknown release, found in the wild
1179
+ out = { version: "2010 SP3", update: "Update Rollup 25",
1180
+ note: "additional updates applied: #{owa_version}" }
1181
+ elsif owa_version == "14.3.442.0"
1182
+ out = { version: "2010 SP3", update: "Update Rollup 26" }
1183
+ elsif owa_version == "14.3.452.0"
1184
+ out = { version: "2010 SP3", update: "Update Rollup 27" }
1185
+ elsif owa_version == "14.3.461.1"
1186
+ out = { version: "2010 SP3", update: "Update Rollup 28" }
1187
+ elsif owa_version == "14.3.468.0"
1188
+ out = { version: "2010 SP3", update: "Update Rollup 29" }
1189
+ elsif owa_version == "14.3.487.0" # unknown release, found in the wild
1190
+ out = { version: "2010 SP3", update: "Update Rollup 29",
1191
+ note: "additional updates applied: #{owa_version}" }
1192
+ elsif owa_version == "14.3.496.0"
1193
+ out = { version: "2010 SP3", update: "Update Rollup 30" }
1194
+
1195
+ # 2013
1196
+ elsif owa_version == "15.0.516" #.32"
1197
+ out = { version: "2013", update: "RTM" }
1198
+ elsif owa_version == "15.0.620" #.29"
1199
+ out = { version: "2013", update: "Cumulative Update 1" }
1200
+ elsif owa_version == "15.0.712" #.24"
1201
+ out = { version: "2013", update: "Cumulative Update 2" }
1202
+ elsif owa_version == "15.0.775" #.38"
1203
+ out = { version: "2013", update: "Cumulative Update 3" }
1204
+ elsif owa_version == "15.0.847" #.32"
1205
+ out = { version: "2013", update: "Cumulative Update 4" }
1206
+ elsif owa_version == "15.0.913" #.22"
1207
+ out = { version: "2013", update: "Cumulative Update 5" }
1208
+ elsif owa_version == "15.0.995" #.29"
1209
+ out = { version: "2013", update: "Cumulative Update 6" }
1210
+ elsif owa_version == "15.0.1044" #.25"
1211
+ out = { version: "2013", update: "Cumulative Update 7" }
1212
+ elsif owa_version == "15.0.1076" #.9"
1213
+ out = { version: "2013", update: "Cumulative Update 8" }
1214
+ elsif owa_version == "15.0.1104" #.5"
1215
+ out = { version: "2013", update: "Cumulative Update 9" }
1216
+ elsif owa_version == "15.0.1130" #.7"
1217
+ out = { version: "2013", update: "Cumulative Update 10" }
1218
+ elsif owa_version == "15.0.1156" #.6"
1219
+ out = { version: "2013", update: "Cumulative Update 11" }
1220
+ elsif owa_version == "15.0.1178" #.4"
1221
+ out = { version: "2013", update: "Cumulative Update 12" }
1222
+ elsif owa_version == "15.0.1210" #.3"
1223
+ out = { version: "2013", update: "Cumulative Update 13" }
1224
+ elsif owa_version == "15.0.1236" #.3"
1225
+ out = { version: "2013", update: "Cumulative Update 14" }
1226
+ elsif owa_version == "15.0.1263" #.5"
1227
+ out = { version: "2013", update: "Cumulative Update 15" }
1228
+ elsif owa_version == "15.0.1293" #.2"
1229
+ out = { version: "2013", update: "Cumulative Update 16" }
1230
+ elsif owa_version == "15.0.1320" #.4"
1231
+ out = { version: "2013", update: "Cumulative Update 17" }
1232
+ elsif owa_version == "15.0.1347" #.2"
1233
+ out = { version: "2013", update: "Cumulative Update 18" }
1234
+ elsif owa_version == "15.0.1365" #.1"
1235
+ out = { version: "2013", update: "Cumulative Update 19" }
1236
+ elsif owa_version == "15.0.1367" #.3"
1237
+ out = { version: "2013", update: "Cumulative Update 20" }
1238
+ elsif owa_version == "15.0.1395" #.4"
1239
+ out = { version: "2013", update: "Cumulative Update 21" }
1240
+ elsif owa_version == "15.0.1473.3" || owa_version == "15.0.1473"
1241
+ out = { version: "2013", update: "Cumulative Update 22" }
1242
+ elsif owa_version == "15.0.1497"
1243
+ out = { version: "2013", update: "Cumulative Update 23" }
1244
+ elsif owa_version == "15.0.1497.2"
1245
+ out = { version: "2013", update: "Cumulative Update 23" }
1246
+
1247
+ # 2016
1248
+ elsif owa_version == "15.1.225" #.16"
1249
+ out = { version: "2016", update: "Preview" }
1250
+ elsif owa_version == "15.1.225" #.42"
1251
+ out = { version: "2016", update: "RTM" }
1252
+ elsif owa_version == "15.1.396" #.30"
1253
+ out = { version: "2016", update: "Cumulative Update 1" }
1254
+ elsif owa_version == "15.1.466" #.34"
1255
+ out = { version: "2016", update: "Cumulative Update 2" }
1256
+ elsif owa_version == "15.1.466" || owa_version == "15.1.544"
1257
+ out = { version: "2016", update: "Cumulative Update 3" }
1258
+ elsif owa_version == "15.1.669" #.32"
1259
+ out = { version: "2016", update: "Cumulative Update 4" }
1260
+ elsif owa_version == "15.1.845" #.34"
1261
+ out = { version: "2016", update: "Cumulative Update 5" }
1262
+ elsif owa_version == "15.1.1034" #.26"
1263
+ out = { version: "2016", update: "Cumulative Update 6" }
1264
+ elsif owa_version == "15.1.1261" #.35"
1265
+ out = { version: "2016", update: "Cumulative Update 7" }
1266
+ elsif owa_version == "15.1.1415" #.2"
1267
+ out = { version: "2016", update: "Cumulative Update 8" }
1268
+ elsif owa_version == "15.1.1466" #.3"
1269
+ out = { version: "2016", update: "Cumulative Update 9" }
1270
+ elsif owa_version == "15.1.1531" #.3"
1271
+ out = { version: "2016", update: "Cumulative Update 10" }
1272
+ elsif owa_version == "15.1.1591" #.01"
1273
+ out = { version: "2016", update: "Cumulative Update 11" }
1274
+ elsif owa_version == "15.1.1713" || owa_version == "15.1.1713.5" #.01"
1275
+ out = { version: "2016", update: "Cumulative Update 12" }
1276
+ elsif owa_version == "15.1.1779" || owa_version == "15.1.1779.2" #.01"
1277
+ out = { version: "2016", update: "Cumulative Update 13" }
1278
+ elsif owa_version == "15.1.1847" || owa_version == "15.1.1847.3" #.01"
1279
+ out = { version: "2016", update: "Cumulative Update 14" }
1280
+ elsif owa_version == "15.1.1913" #.01"
1281
+ out = { version: "2016", update: "Cumulative Update 15" }
1282
+ elsif owa_version == "15.1.1986" #.01"
1283
+ out = { version: "2016", update: "Cumulative Update 15",
1284
+ note: "additional updates applied: #{owa_version}" }
1285
+
1286
+
1287
+ # 2019
1288
+ elsif owa_version == "15.2.196.0" #
1289
+ out = { version: "2019", update: "Preview" }
1290
+ elsif owa_version == "15.2.221" || owa_version == "15.2.221.12" #
1291
+ out = { version: "2019", update: "RTM" }
1292
+ elsif owa_version == "15.2.330" || owa_version == "15.2.330.6" #
1293
+ out = { version: "2019", update: "Cumulative Update 1" }
1294
+ elsif owa_version == "15.2.397" || owa_version == "15.2.397.3" #
1295
+ out = { version: "2019", update: "Cumulative Update 2" }
1296
+ elsif owa_version == "15.2.464" || owa_version == "15.2.529" #
1297
+ out = { version: "2019", update: "Cumulative Update 3",
1298
+ note: "additional updates applied: #{owa_version}" }
1299
+
1300
+ =begin
1301
+ 1694 Microsoft Exchange Server [Unknown 15.2.221] [Unknown 15.2.221], Exchange Server 2019 RTM
1302
+ 2287 Microsoft Exchange Server [Unknown 15.2.397] [Unknown 15.2.397], Exchange Server 2019 CU2
1303
+ 2464 Microsoft Exchange Server [Unknown 15.2.330] [Unknown 15.2.330], Exchange Server 2019 CU1
1304
+ 2670 Microsoft Exchange Server [Unknown 15.1.544] [Unknown 15.1.544], Exchange Server 2016 CU3
1305
+ 3609 Microsoft Exchange Server [Unknown 15.2.464] [Unknown 15.2.464], Exchange Server 2019 CU3
1306
+ 14034 Microsoft Exchange Server [Unknown 15.1.1713] [Unknown 15.1.1713], Exchange Server 2016 CU12
1307
+
1308
+ =end
1309
+
1310
+ else
1311
+ out = { version: "[Unknown #{owa_version}]", update: "[Unknown #{owa_version}]" }
1312
+ end
1313
+
1314
+
1315
+
1316
+ end
1317
+
1318
+
1319
+
1320
+
1321
+ end
1322
+ end
1323
+ end
1324
+ end
1325
+