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
data/ident.rb DELETED
@@ -1,319 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'net/http'
3
- require 'openssl'
4
- require 'zlib'
5
-
6
- require_relative 'lib/check_factory'
7
- require_relative 'lib/checks/base'
8
- check_folder = File.expand_path('lib/checks', File.dirname(__FILE__)) # get absolute directory
9
- Dir["#{check_folder}/*.rb"].each { |file| require_relative file }
10
-
11
- module Intrigue
12
- module Ident
13
-
14
- VERSION=0.2
15
-
16
- def generate_requests_and_check(url)
17
-
18
- results = []
19
-
20
- # gather all fingeprints for each product
21
- # this will look like an array of checks, each with a uri and a SET of checks
22
- generated_checks = Intrigue::Ident::CheckFactory.all.map{|x| x.new.generate_checks(url) }.flatten
23
-
24
- # group by the uris, with the associated checks
25
- # TODO - this only currently supports the first path of the group!!!!
26
- grouped_generated_checks = generated_checks.group_by{|x| x[:paths].first }
27
-
28
- # call the check on each uri
29
- grouped_generated_checks.each do |ggc|
30
-
31
- target_url = ggc.first
32
-
33
- # get the response
34
- response = _http_request :get, "#{target_url}"
35
-
36
- unless response
37
- puts "Unable to get a response at: #{target_url}, failing"
38
- return nil
39
- end
40
-
41
- # Go ahead and match it up if we got a response!
42
- if response
43
- # call each check, collecting the product if it's a match
44
- ggc.last.each do |check|
45
- results << _match_http_response(check, response)
46
- end
47
- end
48
- end
49
-
50
- # Return all matches, minus the nils (non-matches)
51
- results.compact
52
- end
53
-
54
- private
55
-
56
- def _construct_match_response(check, data)
57
- {
58
- :version => (check[:dynamic_version].call(data) if check[:dynamic_version]) || check[:version],
59
- :name => check[:name],
60
- :tags => check[:tags],
61
- :match => check[:type],
62
- :hide => check[:hide]
63
- }
64
- end
65
-
66
- def _match_uri(check,data)
67
-
68
- # data[:body] => page body
69
- # data[:headers] => block of text with headers, one per line
70
- # data[:cookies] => set_cookie header
71
- # data[:body_md5] => md5 hash of the body
72
- # if type "content", do the content check
73
-
74
-
75
- if check[:type] == :content_body
76
- match = _construct_match_response(check,data) if data["details"]["hidden_response_data"] =~ check[:content]
77
- elsif check[:type] == :content_headers
78
- match = _construct_match_response(check,data) if data["details"]["headers"].join("\n") =~ check[:content]
79
- elsif check[:type] == :content_cookies
80
- # Check only the set-cookie header
81
- match = _construct_match_response(check,data) if data["details"]["cookies"] =~ check[:content]
82
- elsif check[:type] == :checksum_body
83
- match = _construct_match_response(check,data) if Digest::MD5.hexdigest(data["details"]["response_data_hash"]) == check[:checksum]
84
- end
85
-
86
- match
87
- end
88
-
89
- # this method takes a check and a net/http response object and
90
- # constructs it into a format that's matchable. it then attempts
91
- # to match, and returns a match object if it matches, otherwise
92
- # returns nil.
93
- def _match_http_response(check, response)
94
-
95
- # Construct an Intrigue Entity of type Uri so we can match it
96
- data = []
97
- =begin
98
- json = '{
99
- "id": 1572,
100
- "type": "Intrigue::Entity::Uri",
101
- "name": "http://69.162.37.69:80",
102
- "deleted": false,
103
- "hidden": false,
104
- "detail_string": "Server: | App: | Title: Index page",
105
- "details": {
106
- "uri": "http://69.162.37.69:80",
107
- "code": "200",
108
- "port": 80,
109
- "forms": false,
110
- "title": "Index page",
111
- "verbs": null,
112
- "headers": ["content-length: 701", "last-modified: Tue, 03 Jul 2018 16:55:36 GMT", "cache-control: no-cache", "content-type: text/html"],
113
- "host_id": 1571,
114
- "scripts": [],
115
- "products": [],
116
- "protocol": "tcp",
117
- "ip_address": "69.162.37.69",
118
- "javascript": [],
119
- "fingerprint": [],
120
- "api_endpoint": false,
121
- "masscan_string": "sudo masscan -p80,443,2004,3389,7001,8000,8080,8081,8443,U:161,U:500 --max-rate 10000 -oL /tmp/masscan20180703-9816-18n0ri --range 69.162.0.0/18",
122
- "app_fingerprint": [],
123
- "hidden_original": "http://69.162.37.69:80",
124
- "response_data_hash": "7o0r6ie5DOrJJnz1sS7RGO4XWsNn3hWykbwGkGnySWU=",
125
- "server_fingerprint": [],
126
- "enrichment_complete": ["enrich/uri"],
127
- "include_fingerprint": [],
128
- "enrichment_scheduled": ["enrich/uri"],
129
- "hidden_response_data": "",
130
- "hidden_screenshot_contents": """
131
- },
132
- "task_results": [{
133
- "id": 32,
134
- "name": "masscan_scan_on_69.162.0.0/18",
135
- "base_entity_name": "69.162.0.0/18",
136
- "base_entity_type": "Intrigue::Entity::NetBlock"
137
- }],
138
- "generated_at": "2018-07-04T03:43:11+00:00"
139
- }'
140
- =end
141
- data = {}
142
- data["details"] = {}
143
- data["details"]["hidden_response_data"] = "#{response.body}"
144
- # construct the headers into a big string block
145
- headers = []
146
- response.each_header do |h,v|
147
- headers << "#{h}: #{v}"
148
- end
149
- data["details"]["headers"] = headers
150
- data["details"]["cookies"] = response.header['set-cookie']
151
- data["details"]["response_data_hash"] = Digest::SHA256.base64digest("#{response.body}")
152
-
153
- # call the actual matcher & return
154
- _match_uri check, data
155
- end
156
-
157
- def _http_request(method, uri_string, credentials=nil, headers={}, data=nil, limit = 10, open_timeout=15, read_timeout=15)
158
-
159
- response = nil
160
- begin
161
-
162
- # set user agent
163
- headers["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36"
164
-
165
- attempts=0
166
- max_attempts=10
167
- found = false
168
-
169
- uri = URI.parse uri_string
170
-
171
- unless uri
172
- _log error "Unable to parse URI from: #{uri_string}"
173
- return
174
- end
175
-
176
- until( found || attempts >= max_attempts)
177
- attempts+=1
178
-
179
- # proxy configuration, disabled for now
180
- #if $config["http_proxy"]
181
- # proxy_addr = $config["http_proxy"]["host"]
182
- # proxy_port = $config["http_proxy"]["port"]
183
- # proxy_user = $config["http_proxy"]["user"]
184
- # proxy_pass = $config["http_proxy"]["pass"]
185
- #end
186
- proxy_addr = nil
187
- proxy_port = nil
188
-
189
- # set options
190
- opts = {}
191
- if uri.instance_of? URI::HTTPS
192
- opts[:use_ssl] = true
193
- opts[:verify_mode] = OpenSSL::SSL::VERIFY_NONE
194
- end
195
-
196
- http = Net::HTTP.start(uri.host, uri.port, proxy_addr, proxy_port, opts)
197
- #http.set_debug_output($stdout) if _get_system_config "debug"
198
- http.read_timeout = 20
199
- http.open_timeout = 20
200
-
201
- path = "#{uri.path}"
202
- path = "/" if path==""
203
-
204
- # add in the query parameters
205
- if uri.query
206
- path += "?#{uri.query}"
207
- end
208
-
209
- ### ALLOW DIFFERENT VERBS HERE
210
- if method == :get
211
- request = Net::HTTP::Get.new(uri)
212
- elsif method == :post
213
- # see: https://coderwall.com/p/c-mu-a/http-posts-in-ruby
214
- request = Net::HTTP::Post.new(uri)
215
- request.body = data
216
- elsif method == :head
217
- request = Net::HTTP::Head.new(uri)
218
- elsif method == :propfind
219
- request = Net::HTTP::Propfind.new(uri.request_uri)
220
- request.body = "Here's the body." # Set your body (data)
221
- request["Depth"] = "1" # Set your headers: one header per line.
222
- elsif method == :options
223
- request = Net::HTTP::Options.new(uri.request_uri)
224
- elsif method == :trace
225
- request = Net::HTTP::Trace.new(uri.request_uri)
226
- request.body = "intrigue"
227
- end
228
- ### END VERBS
229
-
230
- # set the headers
231
- headers.each do |k,v|
232
- request[k] = v
233
- end
234
-
235
- # handle credentials
236
- #if credentials
237
- # request.basic_auth(credentials[:username],credentials[:password])
238
- #end
239
-
240
- # get the response
241
- response = http.request(request)
242
-
243
- if response.code=="200"
244
- break
245
- end
246
-
247
- if (response.header['location']!=nil)
248
- newuri=URI.parse(response.header['location'])
249
- if(newuri.relative?)
250
- newuri=uri+response.header['location']
251
- end
252
- uri=newuri
253
-
254
- else
255
- found=true #resp was 404, etc
256
- end #end if location
257
- end #until
258
-
259
- ### TODO - this code may be be called outside the context of a task,
260
- ### meaning @task_result is not available to it. Below, we check to
261
- ### make sure that it exists before attempting to log anything,
262
- ### but there may be a cleaner way to do this (hopefully?). Maybe a
263
- ### global logger or logging queue?
264
- ###
265
- #rescue TypeError
266
- # # https://github.com/jaimeiniesta/metainspector/issues/125
267
- # puts "TypeError - unknown failure"
268
- rescue ArgumentError => e
269
- puts "Unable to open connection: #{e}"
270
- rescue Net::OpenTimeout => e
271
- puts "Timeout : #{e}"
272
- rescue Net::ReadTimeout => e
273
- puts "Timeout : #{e}"
274
- rescue Errno::ETIMEDOUT => e
275
- puts "Timeout : #{e}"
276
- rescue Errno::EINVAL => e
277
- puts "Unable to connect: #{e}"
278
- rescue Errno::ENETUNREACH => e
279
- puts "Unable to connect: #{e}"
280
- rescue Errno::EHOSTUNREACH => e
281
- puts "Unable to connect: #{e}"
282
- rescue URI::InvalidURIError => e
283
- #
284
- # XXX - This is an issue. We should catch this and ensure it's not
285
- # due to an underscore / other acceptable character in the URI
286
- # http://stackoverflow.com/questions/5208851/is-there-a-workaround-to-open-urls-containing-underscores-in-ruby
287
- #
288
- puts "Unable to request URI: #{uri} #{e}"
289
- rescue OpenSSL::SSL::SSLError => e
290
- puts "SSL connect error : #{e}"
291
- rescue Errno::ECONNREFUSED => e
292
- puts "Unable to connect: #{e}"
293
- rescue Errno::ECONNRESET => e
294
- puts "Unable to connect: #{e}"
295
- rescue Net::HTTPBadResponse => e
296
- puts "Unable to connect: #{e}"
297
- rescue Zlib::BufError => e
298
- puts "Unable to connect: #{e}"
299
- rescue Zlib::DataError => e # "incorrect header check - may be specific to ruby 2.0"
300
- puts "Unable to connect: #{e}"
301
- rescue EOFError => e
302
- puts "Unable to connect: #{e}"
303
- rescue SocketError => e
304
- puts "Unable to connect: #{e}"
305
- #rescue SystemCallError => e
306
- # puts "Unable to connect: #{e}"
307
- #rescue ArgumentError => e
308
- # puts "Argument Error: #{e}"
309
- rescue Encoding::InvalidByteSequenceError => e
310
- puts "Encoding error: #{e}"
311
- rescue Encoding::UndefinedConversionError => e
312
- puts "Encoding error: #{e}"
313
- end
314
-
315
- response
316
- end
317
-
318
- end
319
- end
@@ -1,22 +0,0 @@
1
- module Intrigue
2
- module Ident
3
- class CheckFactory
4
-
5
- #
6
- # Register a new handler
7
- #
8
- def self.register(klass)
9
- @checks = [] unless @checks
10
- @checks << klass if klass
11
- end
12
-
13
- #
14
- # Provide the full list of checks
15
- #
16
- def self.all
17
- @checks
18
- end
19
-
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- module Intrigue
2
- module Ident
3
- module Check
4
- class Akamai < Intrigue::Ident::Check::Base
5
-
6
- def generate_checks(url)
7
- [
8
- {
9
- :name => "Akamai",
10
- :description => "Akamai Missing Uri",
11
- :version => nil,
12
- :type => :content_body,
13
- :content => /The requested URL "&#91;no&#32;URL&#93;", is invalid.<p>/,
14
- :hide => true,
15
- :paths => ["#{url}"]
16
- }
17
- ]
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,26 +0,0 @@
1
- module Intrigue
2
- module Ident
3
- module Check
4
- class Amazon < Intrigue::Ident::Check::Base
5
-
6
- def generate_checks(uri)
7
- [
8
- {
9
- :name => "Amazon ELB",
10
- :description => "Amazon Elastic Load Balancer",
11
- :url => "https://aws.amazon.com/elasticloadbalancing/",
12
- :version => nil,
13
- :tags => ["error_page"],
14
- :type => :content_headers,
15
- :content => /awselb\/\d.\d/,
16
- :hide => true,
17
- :dynamic_version => lambda { |x| x[:headers].match(/awselb\/(\d.\d)/).captures[0] },
18
- :verify_sites => ["http://52.4.103.22:80"],
19
- :paths => ["#{uri}"]
20
- }
21
- ]
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,20 +0,0 @@
1
- module Intrigue
2
- module Ident
3
- module Check
4
- class Aruba < Intrigue::Ident::Check::Base
5
-
6
- def generate_checks(url)
7
- [
8
- {
9
- :description => "Aruba Wireless Controller",
10
- :version => nil,
11
- :type => :content_body,
12
- :content => /arubalp=/,
13
- :paths => ["#{url}"]
14
- }
15
- ]
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,70 +0,0 @@
1
- module Intrigue
2
- module Ident
3
- module Check
4
- class AspNet < Intrigue::Ident::Check::Base
5
-
6
- def generate_checks(uri)
7
- [
8
- {
9
- :accept => "Intrigue::Entity::Uri",
10
- :name => "ASP.NET",
11
- :description => "ASP.Net Error Message",
12
- :version => nil,
13
- :tags => ["error_page"],
14
- :type => :content_body,
15
- :content => /^.*ASP.NET is configured.*$/i,
16
- :dynamic_version => lambda{|x| x.body.scan(/ASP.NET Version:(.*)$/)[0].first.chomp },
17
- :paths => ["#{uri}"]
18
- },
19
- {
20
- :accept => "Intrigue::Entity::Uri",
21
- :name => "ASP.NET",
22
- :description => "X-AspNet Header",
23
- :version => nil,
24
- :type => :content_headers,
25
- :content => /^x-aspnet-version:.*$/i,
26
- :dynamic_version => lambda{|x| x.body.scan(/ASP.NET Version:(.*)$/i)[0].first.chomp if x.body.scan(/ASP.NET Version:(.*)$/i)[0] },
27
- :paths => ["#{uri}"]
28
- },
29
- {
30
- :name => "ASP.NET",
31
- :description => "Asp.Net Default Cookie",
32
- :version => nil,
33
- :type => :content_cookies,
34
- :content => /ASPSESSIONID.*$/i,
35
- :paths => ["#{uri}"]
36
- #:dynamic_version => lambda{|x| x.each_header{|k,v| return v if k =~ /x-aspnet-version/ } }
37
- },
38
- {
39
- :name => "ASP.NET",
40
- :description => "Asp.Net Default Cookie",
41
- :version => nil,
42
- :type => :content_cookies,
43
- :content => /ASP.NET_SessionId.*$/i,
44
- :paths => ["#{uri}"]
45
- #:dynamic_version => lambda{|x| x.each_header{|k,v| return v if k =~ /x-aspnet-version/ } }
46
- },
47
- {
48
- :name => "ASP.NET MVC",
49
- :description => "Asp.Net MVC Header",
50
- :version => nil,
51
- :type => :content_headers,
52
- :content => /x-aspnetmvc-version/i,
53
- :paths => ["#{uri}"]
54
- #:dynamic_version => lambda{|x| x.each_header{|k,v| return v if k =~ /x-aspnetmvc-version/ } }
55
- },
56
- {
57
- :name => "ASP.NET",
58
- :description => "WebResource.axd link in the page",
59
- :version => nil,
60
- :type => :content_body,
61
- :content => /WebResource.axd?d=/i,
62
- :paths => ["#{uri}"]
63
- #:dynamic_version => lambda{|x| x.each_header{|k,v| return v if k =~ /WebResource.axd?d=/ } }
64
- }
65
- ]
66
- end
67
- end
68
- end
69
- end
70
- end