aspisec 0.0.2 → 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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +2 -1
  3. data/bin-ruby/aspisec +7 -7
  4. data/lib-ruby/aspisec/clean.rb +31 -11
  5. data/lib-ruby/aspisec/config.rb +57 -146
  6. data/lib-ruby/aspisec/configs/amass.rb +22 -0
  7. data/lib-ruby/aspisec/configs/bloodhound.rb +27 -0
  8. data/lib-ruby/aspisec/configs/crackmapexec.rb +28 -0
  9. data/lib-ruby/aspisec/configs/dbgate.rb +25 -0
  10. data/lib-ruby/aspisec/configs/ffuf.rb +19 -0
  11. data/lib-ruby/aspisec/configs/filezilla.rb +28 -0
  12. data/lib-ruby/aspisec/configs/hashcat.rb +33 -0
  13. data/lib-ruby/aspisec/configs/home_history_files.rb +59 -0
  14. data/lib-ruby/aspisec/configs/john.rb +24 -0
  15. data/lib-ruby/aspisec/configs/jwt_tool.rb +19 -0
  16. data/lib-ruby/aspisec/configs/lsassy.rb +22 -0
  17. data/lib-ruby/aspisec/configs/manspider.rb +25 -0
  18. data/lib-ruby/aspisec/configs/metasploit.rb +36 -0
  19. data/lib-ruby/aspisec/configs/mobsf.rb +30 -0
  20. data/lib-ruby/aspisec/configs/mongodb_compass.rb +19 -0
  21. data/lib-ruby/aspisec/configs/mongodb_mongosh.rb +24 -0
  22. data/lib-ruby/aspisec/configs/ncrack.rb +19 -0
  23. data/lib-ruby/aspisec/configs/netexec.rb +28 -0
  24. data/lib-ruby/aspisec/configs/recaf.rb +24 -0
  25. data/lib-ruby/aspisec/configs/remmina.rb +20 -0
  26. data/lib-ruby/aspisec/configs/semgrep.rb +22 -0
  27. data/lib-ruby/aspisec/configs/spiderfoot.rb +24 -0
  28. data/lib-ruby/aspisec/configs/sqlmap.rb +27 -0
  29. data/lib-ruby/aspisec/configs/theharvester.rb +18 -0
  30. data/lib-ruby/aspisec/configs/weevely.rb +31 -0
  31. data/lib-ruby/aspisec/configs/whatwaf.rb +18 -0
  32. data/lib-ruby/aspisec/module.rb +35 -0
  33. data/lib-ruby/aspisec/modules/amass.rb +38 -0
  34. data/lib-ruby/aspisec/modules/bloodhound.rb +38 -0
  35. data/lib-ruby/aspisec/modules/dbgate.rb +38 -0
  36. data/lib-ruby/aspisec/modules/ffuf.rb +33 -0
  37. data/lib-ruby/aspisec/modules/filezilla.rb +43 -0
  38. data/lib-ruby/aspisec/modules/home_history_files.rb +67 -0
  39. data/lib-ruby/aspisec/modules/jwt_tool.rb +33 -0
  40. data/lib-ruby/aspisec/modules/lsassy.rb +38 -0
  41. data/lib-ruby/aspisec/modules/manspider.rb +38 -0
  42. data/lib-ruby/aspisec/modules/mobsf.rb +49 -0
  43. data/lib-ruby/aspisec/modules/mongodb_compass.rb +33 -0
  44. data/lib-ruby/aspisec/modules/mongodb_mongosh.rb +38 -0
  45. data/lib-ruby/aspisec/modules/ncrack.rb +33 -0
  46. data/lib-ruby/aspisec/modules/recaf.rb +38 -0
  47. data/lib-ruby/aspisec/modules/remmina.rb +34 -0
  48. data/lib-ruby/aspisec/modules/semgrep.rb +38 -0
  49. data/lib-ruby/aspisec/modules/spiderfoot.rb +38 -0
  50. data/lib-ruby/aspisec/modules/weevely.rb +43 -0
  51. data/lib-ruby/aspisec/modules/whatwaf.rb +33 -0
  52. data/lib-ruby/aspisec/version.rb +1 -1
  53. metadata +60 -18
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ LSASSY = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$XDG_CONFIG_HOME/lsassy', # ~/.config/lsassy
10
+ 'masterkeys' => {
11
+ 'path' => '<base>/masterkeys.txt',
12
+ 'description' => 'File containing master keys retreived from targets.'
13
+ },
14
+ 'tickets' => {
15
+ 'path' => '<base>/tickets',
16
+ 'description' => 'Folder containing dumped tickets (TGT, TGS) from targets.'
17
+ }
18
+ }
19
+ }.freeze
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ MANSPIDER = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.manspider', # ~/.manspider
10
+ 'logs' => {
11
+ 'path' => '<base>/logs',
12
+ 'description' => "Directory containing log files.\n" \
13
+ 'Log files contains commands with the password not redacted and the path of all ' \
14
+ 'extracted files.'
15
+ },
16
+ 'loot' => {
17
+ 'path' => '<base>/loot',
18
+ 'description' => "Directory containing looted files.\n" \
19
+ 'Those are retrieved clients files.'
20
+ }
21
+ }
22
+ }.freeze
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ METASPLOIT = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.msf4', # ~/.msf4
10
+ 'history' => {
11
+ 'path' => '<base>/history',
12
+ 'description' => "File containing the history of commands used in msf shell.\n" \
13
+ 'It certainly contains username, passwords, hostnames, etc.'
14
+ },
15
+ 'logs' => {
16
+ 'path' => '<base>/logs',
17
+ 'description' => "Directory containing log files.\n" \
18
+ "framework.log may contain stacktraces that contain payloads.\n" \
19
+ "production.log and sessions/ ? (I don't know, empty for me)"
20
+ },
21
+ 'loot' => {
22
+ 'path' => '<base>/loot',
23
+ 'description' => "Directory containing looted files.\n" \
24
+ 'Those are retrieved clients files.'
25
+ },
26
+ 'meterpreter' => {
27
+ 'path' => '<base>/meterpreter_history',
28
+ 'description' => "File containing the history of commands used in meterpreter sessions.\n" \
29
+ "Less sensible than msf shell history but could still contains some file paths, \n" \
30
+ 'for example.'
31
+ }
32
+ }
33
+ }.freeze
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ MOBSF = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.MobSF', # ~/.MobSF
10
+ 'logs' => {
11
+ 'path' => '<base>/debug.log',
12
+ 'description' => 'Logs file containing at least APK name.'
13
+ },
14
+ 'downloads' => {
15
+ 'path' => '<base>/downloads',
16
+ 'description' => 'Directory where are stored files extracted from APK or screenshots of the app running.'
17
+ },
18
+ 'uploads' => {
19
+ 'path' => '<base>/uploads',
20
+ 'description' => 'Directory containing decompressed APKs.'
21
+ },
22
+ 'database' => {
23
+ 'path' => '<base>/db.sqlite3',
24
+ 'description' => 'Database file containing at least APK name.'
25
+ }
26
+ }
27
+ }.freeze
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ MONGODB_COMPASS = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.mongodb/compass', # ~/.mongodb/compass
10
+ 'logs' => {
11
+ 'path' => '<base>/*_log.gz',
12
+ 'description' => "Compressed log files.\n" \
13
+ 'Credentials are redacted but logs still contain IP and port.'
14
+ }
15
+ }
16
+ }.freeze
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ MONGODB_MONGOSH = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.mongodb/mongosh', # ~/.mongodb/mongosh
10
+ 'logs' => {
11
+ 'path' => '<base>/*_log',
12
+ 'description' => "Log files.\n" \
13
+ 'Contain at least information about target (IP, port).'
14
+ },
15
+ 'history' => {
16
+ 'path' => '<base>/mongosh_repl_history',
17
+ 'description' => "History file.\n" \
18
+ 'Contain the history of commands typed in mongosh shell.'
19
+ }
20
+ }
21
+ }.freeze
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ NCRACK = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.ncrack', # ~/.ncrack
10
+ 'restore' => {
11
+ 'path' => '<base>',
12
+ 'description' => "Directory containing retore files to resume a cracking session.\n" \
13
+ 'Restore files contain the command launch including the username or wordlist used.'
14
+ }
15
+ }
16
+ }.freeze
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ NETEXEC = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.nxc', # ~/.nxc
10
+ 'logs' => {
11
+ 'path' => '<base>/logs',
12
+ 'description' => 'Directory containing log files, secrets, hashes, cleartext password etc.'
13
+ },
14
+ 'screenshots' => {
15
+ 'path' => '<base>/screenshots',
16
+ 'description' => 'Directory where are stored all screenshots taken with the --screenshot option.'
17
+ },
18
+ 'workspaces' => {
19
+ 'path' => '<base>/workspaces',
20
+ 'description' => "Directory containing workspaces.\n" \
21
+ 'Workspaces contain SQLite databases including users (domain, usernames, password), ' \
22
+ 'shares, hosts, dpapi secrets, etc.'
23
+ }
24
+ }
25
+ }.freeze
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ RECAF = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$XDG_CONFIG_HOME/Recaf', # ~/.config/Recaf
10
+ 'classpath' => {
11
+ 'path' => '<base>/classpath',
12
+ 'description' => "Folder containing JARs.\n" \
13
+ 'Those JARs contain the classpath of previously openned JARs.'
14
+ },
15
+ 'logs' => {
16
+ 'path' => '<base>/rclog.txt',
17
+ 'description' => "Log file of the last session.\n" \
18
+ 'Contains class names, file names or commands if openned in CLI mode.'
19
+ }
20
+ }
21
+ }.freeze
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ REMMINA = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$XDG_DATA_HOME/remmina', # ~/.local/share/remmina/
10
+ 'configs' => {
11
+ 'enabled' => false,
12
+ 'path' => '<base>/*.remmina',
13
+ 'description' => "Configuration files for saved targets.\n" \
14
+ 'It could contain usernames, passwords, IP addresses, target name.'
15
+ }
16
+ }
17
+ }.freeze
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ SEMGREP = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.semgrep', # ~/.semgrep
10
+ 'logs1' => {
11
+ 'path' => '<base>/last.log',
12
+ 'description' => 'Logs files containing project path.'
13
+ },
14
+ 'logs2' => {
15
+ 'path' => '<base>/semgrep.log',
16
+ 'description' => 'Logs files containing project path.'
17
+ }
18
+ }
19
+ }.freeze
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ SPIDERFOOT = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.spiderfoot', # ~/.spiderfoot
10
+ 'database' => {
11
+ 'path' => '<base>/spiderfoot.db',
12
+ 'description' => "Database file.\n" \
13
+ 'It contains target domains in logs and results.'
14
+ },
15
+ 'logs' => {
16
+ 'path' => '<base>/logs',
17
+ 'description' => "Directory containing debug and errors logs.\n" \
18
+ 'Logs contain IP addresses of targets.'
19
+ }
20
+ }
21
+ }.freeze
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ SQLMAP = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$XDG_DATA_HOME/sqlmap', # ~/.local/share/sqlmap
10
+ 'history' => {
11
+ 'path' => '<base>/history',
12
+ 'description' => "Directory containing history files.\n" \
13
+ "os.hst stores system commands entered when using --os-pwn option.\n" \
14
+ 'sql.hst stores SQL quries entered when using --os-shell option.'
15
+ },
16
+ 'logs' => {
17
+ 'path' => '<base>/output',
18
+ 'description' => "Directory containing a folder per target.\n" \
19
+ "<target>/log contains all successful injection vectors.\n" \
20
+ "<target>/session.sqlite contains retrieved data.\n" \
21
+ '<target>/target.txt contains target URL + command used.'
22
+ }
23
+ }
24
+ }.freeze
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ THEHARVESTER = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$XDG_DATA_HOME/theHarvester', # ~/.local/share/theHarvester
10
+ 'stash' => {
11
+ 'path' => '<base>/stash.sqlite',
12
+ 'description' => 'File (SQLite DB) containing all the harvested addresses.'
13
+ }
14
+ }
15
+ }.freeze
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ WEEVELY = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.weevely', # ~/.weevely
10
+ 'history' => {
11
+ 'path' => '<base>/history',
12
+ 'description' => 'File containing the history of the commands typed on webshells.'
13
+ },
14
+ 'sessions' => {
15
+ 'path' => '<base>/sessions',
16
+ 'description' => "Directory containing session files.\n" \
17
+ 'Session files contain URL to webshell, webshell password, extension results, etc.'
18
+ },
19
+ 'logs' => {
20
+ 'path' => '<base>/weevely.log*',
21
+ 'description' => "Files containing the logs.\n" \
22
+ "A log file contains the response to commands executed on the remote machine.\n" \
23
+ 'As there is a rotation, mutiple log files may exist. The last will be weevely.log ' \
24
+ 'then the older ones will follow the pattern weevely.log.<number> e.g. weevely.log.1 ' \
25
+ 'etc.'
26
+ }
27
+ }
28
+ }.freeze
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aspisec
4
+ class Config
5
+ module Configs
6
+ WHATWAF = {
7
+ 'enabled' => true,
8
+ 'location' => {
9
+ 'base' => '$HOME/.whatwaf', # ~/.whatwaf
10
+ 'database' => {
11
+ 'path' => '<base>/whatwaf.sqlite',
12
+ 'description' => 'File (database) containing cached payloads and URLs.'
13
+ }
14
+ }
15
+ }.freeze
16
+ end
17
+ end
18
+ end
@@ -45,11 +45,22 @@ module Aspisec
45
45
  @name = tool_name
46
46
  @logger.debug("Module #{@name} was loaded", app: @name)
47
47
  @conf = conf['tools'][tool_name]
48
+ check_config
48
49
  @base = Pathname.new(@conf.dig('location', 'base'))
49
50
  @enabled = @conf.fetch('enabled', true)
50
51
  @locations_list = []
51
52
  end
52
53
 
54
+ # Raise an issue if the module configuration is missing
55
+ def check_config
56
+ return unless @conf.nil?
57
+
58
+ message = "Configuration for module #{@name} is missing. " \
59
+ 'You may use an old version of the configuration file.'
60
+ @logger.error(message, app: @name)
61
+ raise 'Missing configuration for the current module.'
62
+ end
63
+
53
64
  # Is this module enabled?
54
65
  # @return [true|false]
55
66
  def enabled?
@@ -98,6 +109,30 @@ module Aspisec
98
109
  def enabled?
99
110
  @enabled
100
111
  end
112
+
113
+ # Check if the location exist (weither it's a file, directory or a path contaning globbing so
114
+ # multiple files / directories).
115
+ # loc.path.exist? will return false when a path contains globbing as it's not expended,
116
+ # that's the main reason for creating the loc.exist? helper.
117
+ # @return [true|false]
118
+ def exist?
119
+ return true if path.exist?
120
+
121
+ # this case is needed to support globbing
122
+ candidates = Dir[path].map { |path| Pathname.new(path).exist? }
123
+ # rubocop:disable Lint/DuplicateBranch
124
+ # false positive in rubocop rule
125
+ if candidates.empty? # necessary because [].all? always return true whatever the condition is
126
+ # this is preventing doing a simple one-liner like
127
+ # self.path.exist? || Dir[self.path].map { |path| Pathname.new(path).exist? }.all? { |bool| bool == true }
128
+ false
129
+ elsif candidates.all? { |bool| bool == true }
130
+ true
131
+ else
132
+ false
133
+ end
134
+ # rubocop:enable Lint/DuplicateBranch
135
+ end
101
136
  end
102
137
  end
103
138
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aspisec/module'
4
+
5
+ module Aspisec
6
+ module Modules
7
+ # Amass module.
8
+ # Inherits {Aspisec::Module}.
9
+ # For more examples of methods, see {Aspisec::Modules::Sqlmap}.
10
+ # @see https://github.com/OWASP/Amass
11
+ # @example
12
+ # # Get the global config
13
+ # conf = Aspisec::Config.new.conf
14
+ # # Create a Amass module instance
15
+ # ama = Aspisec::Modules::Amass.new(conf)
16
+ # # Locations available
17
+ # ama.locations_list # => ["logs", "database"]
18
+ class Amass < Aspisec::Module
19
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
20
+ # @return [Location]
21
+ attr_reader :logs
22
+
23
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
24
+ # @return [Location]
25
+ attr_reader :database
26
+
27
+ # Inherits from {Aspisec::Module} but has only the `conf` argument,
28
+ # `tool_name` is hardcoded for each module.
29
+ # @param conf [Aspisec::Config] an instance of the global configuration
30
+ def initialize(conf, logger: nil)
31
+ super(conf, 'amass', logger:)
32
+ @logs = Location.new(@conf, 'logs')
33
+ @database = Location.new(@conf, 'database')
34
+ @locations_list = %w[logs database]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aspisec/module'
4
+
5
+ module Aspisec
6
+ module Modules
7
+ # Bloodhound module.
8
+ # Inherits {Aspisec::Module}.
9
+ # For more examples of methods, see {Aspisec::Modules::Sqlmap}.
10
+ # @see https://github.com/BloodHoundAD/BloodHound
11
+ # @example
12
+ # # Get the global config
13
+ # conf = Aspisec::Config.new.conf
14
+ # # Create a Bloodhound module instance
15
+ # blh = Aspisec::Modules::Bloodhound.new(conf)
16
+ # # Locations available
17
+ # blh.locations_list # => ["database", "transactions"]
18
+ class Bloodhound < Aspisec::Module
19
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
20
+ # @return [Location]
21
+ attr_reader :database
22
+
23
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
24
+ # @return [Location]
25
+ attr_reader :transactions
26
+
27
+ # Inherits from {Aspisec::Module} but has only the `conf` argument,
28
+ # `tool_name` is hardcoded for each module.
29
+ # @param conf [Aspisec::Config] an instance of the global configuration
30
+ def initialize(conf, logger: nil)
31
+ super(conf, 'bloodhound', logger:)
32
+ @database = Location.new(@conf, 'database')
33
+ @transactions = Location.new(@conf, 'transactions')
34
+ @locations_list = %w[database transactions]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aspisec/module'
4
+
5
+ module Aspisec
6
+ module Modules
7
+ # dbgate module.
8
+ # Inherits {Aspisec::Module}.
9
+ # For more examples of methods, see {Aspisec::Modules::Sqlmap}.
10
+ # @see https://github.com/dbgate/dbgate
11
+ # @example
12
+ # # Get the global config
13
+ # conf = Aspisec::Config.new.conf
14
+ # # Create a Dbgate module instance
15
+ # dbg = Aspisec::Modules::Dbgate.new(conf)
16
+ # # Locations available
17
+ # dbg.locations_list # => ["connections", "logs"]
18
+ class Dbgate < Aspisec::Module
19
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
20
+ # @return [Location]
21
+ attr_reader :connections
22
+
23
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
24
+ # @return [Location]
25
+ attr_reader :logs
26
+
27
+ # Inherits from {Aspisec::Module} but has only the `conf` argument,
28
+ # `tool_name` is hardcoded for each module.
29
+ # @param conf [Aspisec::Config] an instance of the global configuration
30
+ def initialize(conf, logger: nil)
31
+ super(conf, 'dbgate', logger:)
32
+ @connections = Location.new(@conf, 'connections')
33
+ @logs = Location.new(@conf, 'logs')
34
+ @locations_list = %w[connections logs]
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aspisec/module'
4
+
5
+ module Aspisec
6
+ module Modules
7
+ # ffuf module.
8
+ # Inherits {Aspisec::Module}.
9
+ # For more examples of methods, see {Aspisec::Modules::Sqlmap}.
10
+ # @see https://github.com/ffuf/ffuf
11
+ # @example
12
+ # # Get the global config
13
+ # conf = Aspisec::Config.new.conf
14
+ # # Create a Ffuf module instance
15
+ # ffu = Aspisec::Modules::Ffuf.new(conf)
16
+ # # Locations available
17
+ # ffu.locations_list # => ["history"]
18
+ class Ffuf < Aspisec::Module
19
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
20
+ # @return [Location]
21
+ attr_reader :history
22
+
23
+ # Inherits from {Aspisec::Module} but has only the `conf` argument,
24
+ # `tool_name` is hardcoded for each module.
25
+ # @param conf [Aspisec::Config] an instance of the global configuration
26
+ def initialize(conf, logger: nil)
27
+ super(conf, 'ffuf', logger:)
28
+ @history = Location.new(@conf, 'history')
29
+ @locations_list = %w[history]
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aspisec/module'
4
+
5
+ module Aspisec
6
+ module Modules
7
+ # FileZilla module.
8
+ # Inherits {Aspisec::Module}.
9
+ # For more examples of methods, see {Aspisec::Modules::Sqlmap}.
10
+ # @see https://filezilla-project.org
11
+ # @example
12
+ # # Get the global config
13
+ # conf = Aspisec::Config.new.conf
14
+ # # Create a Filezilla module instance
15
+ # fzl = Aspisec::Modules::Filezilla.new(conf)
16
+ # # Locations available
17
+ # fzl.locations_list # => ["connexions", "config", "queue"]
18
+ class Filezilla < Aspisec::Module
19
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
20
+ # @return [Location]
21
+ attr_reader :connexions
22
+
23
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
24
+ # @return [Location]
25
+ attr_reader :config
26
+
27
+ # see {Aspisec::Config::DEFAULT_CONFIG} or call {Aspisec::Module::Location#description}.
28
+ # @return [Location]
29
+ attr_reader :queue
30
+
31
+ # Inherits from {Aspisec::Module} but has only the `conf` argument,
32
+ # `tool_name` is hardcoded for each module.
33
+ # @param conf [Aspisec::Config] an instance of the global configuration
34
+ def initialize(conf, logger: nil)
35
+ super(conf, 'filezilla', logger:)
36
+ @connexions = Location.new(@conf, 'connexions')
37
+ @config = Location.new(@conf, 'config')
38
+ @queue = Location.new(@conf, 'queue')
39
+ @locations_list = %w[connexions config queue]
40
+ end
41
+ end
42
+ end
43
+ end