miteru 0.1.0 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7802cd8b2ddf76ba7b2401a1be5d7c1855a49d7a15e7ae95134e717bf111611
4
- data.tar.gz: b782d4432a8f3d9fe2074a758c05828878501b1fb02a8ccfee8c15737eac68bd
3
+ metadata.gz: b0961934a27b02e1571c875e3a5a1bed37e7069d5333b45ced0f2d20250c9423
4
+ data.tar.gz: 2172a57faed6cd18e7b00665f481821486606ab1407746bcf683bdea5e0829a4
5
5
  SHA512:
6
- metadata.gz: 7ec5226ab2cbaacc91a40a646c60e50370dd716010bdf6e3c76381213b0fb8d0b2936340c53b714c94c3f8e23ca8382566e8057724e218b407008fed66034cbb
7
- data.tar.gz: b18ddbb18399f5cef0c68d16268ff36159787c4478f79e76a864cb782c6715272c799a04c5716dbf431de210d15db426f6abd6301e9b267db5755b1ef266998e
6
+ metadata.gz: c100e58f709309e9d1dc1ed33cb660bcf7622bf4c8b5ec6186403571968d91a91e50bc22fb2087f662fa5dfb51e46b9c0688ed66d5758da69348a9955da0acec
7
+ data.tar.gz: 9efad43fa5a0e528d59c6b1c4ee16dd336b5378baf0c3bb21f6a9acafde84d16d806785968d7a5849e229a567c9e1e3f7c057cfd233a4ed40d0aa9ec67499a60
data/README.md CHANGED
@@ -25,3 +25,25 @@ Commands:
25
25
  miteru execute # Execute the crawler
26
26
  miteru help [COMMAND] # Describe available commands or one specific command
27
27
  ```
28
+
29
+ ```sh
30
+ $ miteru help execute
31
+ Usage:
32
+ miteru execute
33
+
34
+ Options:
35
+ [--verbose], [--no-verbose]
36
+ # Default: true
37
+ [--post-to-slack], [--no-post-to-slack]
38
+
39
+ Execute the crawler
40
+ ```
41
+
42
+ ```sh
43
+ $ miteru execute
44
+ ...
45
+ https://dummy1.com: it doesn't contain a phishing kit.
46
+ https://dummy2.com: it doesn't contain a phishing kit.
47
+ https://dummy3.com: it doesn't contain a phishing kit.
48
+ https://dummy4.com: it might contain a phishing kit (dummy.zip).
49
+ ```
data/lib/miteru/cli.rb CHANGED
@@ -1,18 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "colorize"
3
4
  require "http"
4
5
  require "thor"
5
6
 
6
7
  module Miteru
7
8
  class CLI < Thor
9
+ method_option :verbose, type: :boolean, default: true
8
10
  method_option :post_to_slack, type: :boolean, default: false
9
11
  desc "execute", "Execute the crawler"
10
12
  def execute
11
- results = Crawler.execute
12
- results.each do |result|
13
- message = "#{result} might contain a phishing kit."
14
- puts message
15
- post_to_slack(message) if options[:post_to_slack] && valid_slack_setting?
13
+ websites = Crawler.execute(options[:verbose])
14
+ websites.each do |website|
15
+ if website.has_kit?
16
+ puts "#{website.url}: it might contain a phishing kit (#{website.zip_files.join(',')}).".colorize(:light_red)
17
+ post_to_slack(message) if options[:post_to_slack] && valid_slack_setting?
18
+ end
16
19
  end
17
20
  end
18
21
 
@@ -16,31 +16,24 @@ module Miteru
16
16
  res["results"].map { |result| result.dig("task", "url") }
17
17
  end
18
18
 
19
- def has_kit?(url)
20
- begin
21
- res = get(url)
22
- rescue HTTPResponseError => _
23
- false
24
- end
25
-
26
- rules = ["Index of", ".zip"]
27
- rules.all? { |rule| res.include? rule }
28
- end
29
-
30
- def execute
19
+ def execute(verbose = false)
31
20
  pool = Thread.pool(threads)
32
- results = []
21
+ websites = []
33
22
 
34
23
  suspicous_urls.each do |url|
35
- pool.process { results << url if has_kit?(url) }
24
+ pool.process do
25
+ website = Website.new(url)
26
+ puts "#{website.url}: it doesn't contain a phishing kit." if verbose && !website.has_kit?
27
+ websites << website
28
+ end
36
29
  end
37
30
  pool.shutdown
38
31
 
39
- results
32
+ websites
40
33
  end
41
34
 
42
- def self.execute
43
- new.execute
35
+ def self.execute(verbose = false)
36
+ new.execute(verbose)
44
37
  end
45
38
 
46
39
  private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Miteru
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "http"
4
+ require "oga"
5
+
6
+ module Miteru
7
+ class Website
8
+ attr_reader :url
9
+ def initialize(url)
10
+ @url = url
11
+ build
12
+ end
13
+
14
+ def title
15
+ doc.at_css("title")&.text
16
+ end
17
+
18
+ def zip_files
19
+ @zip_files ||= doc.css("a").map do |a|
20
+ href = a.get("href")
21
+ href&.end_with?(".zip") ? href : nil
22
+ end.compact
23
+ end
24
+
25
+ def ok?
26
+ response.code == 200
27
+ end
28
+
29
+ def index?
30
+ title == "Index of /"
31
+ end
32
+
33
+ def zip_files?
34
+ !zip_files.empty?
35
+ end
36
+
37
+ def has_kit?
38
+ ok? && index? && zip_files?
39
+ end
40
+
41
+ def build
42
+ doc
43
+ end
44
+
45
+ private
46
+
47
+ def response
48
+ @response ||= get
49
+ end
50
+
51
+ def get
52
+ ctx = OpenSSL::SSL::SSLContext.new
53
+ ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
54
+ HTTP.get(url, ssl_context: ctx)
55
+ end
56
+
57
+ def doc
58
+ @doc ||= Oga.parse_html(response.body.to_s)
59
+ end
60
+ end
61
+ end
data/lib/miteru.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "miteru/error"
4
+ require "miteru/website"
4
5
  require "miteru/crawler"
5
6
  require "miteru/cli"
6
7
  require "miteru/version"
data/miteru.gemspec CHANGED
@@ -26,12 +26,15 @@ Gem::Specification.new do |spec|
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 1.16"
28
28
  spec.add_development_dependency "coveralls", "~> 0.8"
29
+ spec.add_development_dependency "glint", "~> 0.1"
29
30
  spec.add_development_dependency "rake", "~> 12.3"
30
31
  spec.add_development_dependency "rspec", "~> 3.8"
31
32
  spec.add_development_dependency "vcr", "~> 4.0"
32
33
  spec.add_development_dependency "webmock", "~> 3.4"
33
34
 
35
+ spec.add_dependency "colorize", "~> 0.8"
34
36
  spec.add_dependency "http", "~> 3.3"
37
+ spec.add_dependency "oga", "~> 2.15"
35
38
  spec.add_dependency "thor", "~> 0.19"
36
39
  spec.add_dependency "thread", "~> 0.2.2"
37
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miteru
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manabu Niseki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-17 00:00:00.000000000 Z
11
+ date: 2018-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: glint
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.1'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +108,20 @@ dependencies:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
110
  version: '3.4'
111
+ - !ruby/object:Gem::Dependency
112
+ name: colorize
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '0.8'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '0.8'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: http
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +136,20 @@ dependencies:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
138
  version: '3.3'
139
+ - !ruby/object:Gem::Dependency
140
+ name: oga
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.15'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.15'
111
153
  - !ruby/object:Gem::Dependency
112
154
  name: thor
113
155
  requirement: !ruby/object:Gem::Requirement
@@ -159,6 +201,7 @@ files:
159
201
  - lib/miteru/crawler.rb
160
202
  - lib/miteru/error.rb
161
203
  - lib/miteru/version.rb
204
+ - lib/miteru/website.rb
162
205
  - miteru.gemspec
163
206
  homepage: https://github.com/ninoseki/miteru
164
207
  licenses: