arachni 0.4 → 0.4.0.1
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.
- data/CHANGELOG.md +5 -1
- data/README.md +11 -8
- data/lib/arachni/module/manager.rb +2 -1
- data/lib/arachni/parser/parser.rb +3 -3
- data/lib/arachni/plugin/manager.rb +2 -2
- data/lib/arachni/report/base.rb +7 -4
- data/lib/arachni/report/manager.rb +6 -2
- data/lib/arachni/ui/web/report_manager.rb +6 -6
- data/lib/arachni/version.rb +1 -1
- data/plugins/defaults/metamodules/remedies/discovery.rb +11 -17
- data/plugins/defaults/metamodules/remedies/timing_attacks.rb +23 -11
- data/reports/afr.rb +3 -13
- data/reports/plugin_formatters/html/profiler/template.erb +2 -2
- data/reports/xml.rb +8 -10
- metadata +38 -38
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
|
-
|
2
1
|
# ChangeLog
|
3
2
|
|
3
|
+
## Version 0.4.0.1 _(January 9, 2012)_
|
4
|
+
- Reports
|
5
|
+
- XML -- added missing Issue attributes
|
6
|
+
- Added draconian run-time exception handling to all components.
|
7
|
+
|
4
8
|
## Version 0.4 _(January 7, 2012)_
|
5
9
|
- RPC Infrastructure (**New**)
|
6
10
|
- Dispatcher
|
data/README.md
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
<table>
|
3
3
|
<tr>
|
4
4
|
<th>Version</th>
|
5
|
-
<td>0.4</td>
|
5
|
+
<td>0.4.0.1</td>
|
6
6
|
</tr>
|
7
7
|
<tr>
|
8
8
|
<th>Homepage</th>
|
9
|
-
<td><a href="http://arachni.
|
9
|
+
<td><a href="http://arachni-scanner.com">http://arachni-scanner.com</a></td>
|
10
10
|
</tr>
|
11
11
|
<tr>
|
12
12
|
<th>Blog</th>
|
@@ -100,12 +100,12 @@ From a user's or a component developer's point of view everything appears simple
|
|
100
100
|
- Pause/resume functionality.
|
101
101
|
- High performance asynchronous HTTP requests.
|
102
102
|
- Open [RPC](https://github.com/Zapotek/arachni/wiki/RPC-API) Client/Dispatcher Infrastructure
|
103
|
-
- Distributed deployment
|
103
|
+
- [Distributed deployment](https://github.com/Zapotek/arachni/wiki/Distributed-components)
|
104
104
|
- Multiple clients
|
105
105
|
- Parallel scans
|
106
106
|
- SSL encryption (with peer authentication)
|
107
107
|
- Remote monitoring
|
108
|
-
- Support for [High Performance Grid](https://github.com/Zapotek/arachni/wiki/
|
108
|
+
- Support for [High Performance Grid](https://github.com/Zapotek/arachni/wiki/HPG) configuration, combining the resources of multiple nodes to perform fast scans.
|
109
109
|
|
110
110
|
### Website Crawler
|
111
111
|
|
@@ -245,6 +245,12 @@ CDE packages are self contained and thus alleviate the need for Ruby and other d
|
|
245
245
|
You can download the latest CDE package from the [download](https://github.com/Zapotek/arachni/downloads) page and escape the dependency hell.<br/>
|
246
246
|
If you decide to go the CDE route you can skip the rest, you're done.
|
247
247
|
|
248
|
+
### Cygwin packages for Windows
|
249
|
+
|
250
|
+
Arachni does not yet run natively on Windows systems, however until that day comes you can download a pre-configured Cygwin environment containing Arachni and its dependencies.
|
251
|
+
All you need to do is download the [latest self-extracting archive](http://downloads.segfault.gr/arachni/), select a directory for it, open it up and then execute the Cygwin batch file.
|
252
|
+
You will then be presented with a Bash shell, after that you'll be able to use Arachni as if you were on a Linux system.
|
253
|
+
|
248
254
|
### Gem
|
249
255
|
|
250
256
|
To install the Gem or work with the source code you'll also need the following system libraries:
|
@@ -268,9 +274,6 @@ If you want to clone the repository and work with the source code then you'll ne
|
|
268
274
|
rake install
|
269
275
|
|
270
276
|
|
271
|
-
### [Windows -- under Cygwin](https://github.com/Zapotek/arachni/wiki/Installation)
|
272
|
-
|
273
|
-
|
274
277
|
## Usage
|
275
278
|
|
276
279
|
### [Command line interface](https://github.com/Zapotek/arachni/wiki/Command-line-user-interface)
|
@@ -292,7 +295,7 @@ Should you want to use these extra components simply move them from the <em>extr
|
|
292
295
|
|
293
296
|
Arachni should work on all *nix and POSIX compliant platforms with Ruby and the aforementioned requirements.
|
294
297
|
|
295
|
-
Windows users can
|
298
|
+
Windows users can download the pre-configured Cygwin package, see the [installation instructions](https://github.com/Zapotek/arachni/wiki/Installation).
|
296
299
|
|
297
300
|
## Bug reports/Feature requests
|
298
301
|
Please send your feedback using Github's issue system at
|
@@ -32,6 +32,7 @@ module Module
|
|
32
32
|
class Manager < Arachni::ComponentManager
|
33
33
|
|
34
34
|
include Arachni::UI::Output
|
35
|
+
include Arachni::Module::Utilities
|
35
36
|
|
36
37
|
@@results ||= []
|
37
38
|
@@on_register_results ||= []
|
@@ -54,7 +55,7 @@ class Manager < Arachni::ComponentManager
|
|
54
55
|
# @param [::Arachni::Framework] framework to be assigned to modules
|
55
56
|
#
|
56
57
|
def run( page, framework = nil )
|
57
|
-
keys.each { |mod| run_one( mod, page, framework ) }
|
58
|
+
keys.each { |mod| exception_jail( false ){ run_one( mod, page, framework ) } }
|
58
59
|
end
|
59
60
|
|
60
61
|
#
|
@@ -43,7 +43,7 @@ require opts.dir['lib'] + 'component_manager'
|
|
43
43
|
# @author: Tasos "Zapotek" Laskos
|
44
44
|
# <tasos.laskos@gmail.com>
|
45
45
|
# <zapotek@segfault.gr>
|
46
|
-
# @version: 0.2.
|
46
|
+
# @version: 0.2.2
|
47
47
|
#
|
48
48
|
class Parser
|
49
49
|
include Arachni::UI::Output
|
@@ -244,7 +244,7 @@ class Parser
|
|
244
244
|
#
|
245
245
|
# @return [Hash] HTTP header fields
|
246
246
|
#
|
247
|
-
def headers
|
247
|
+
def headers
|
248
248
|
headers_arr = []
|
249
249
|
{
|
250
250
|
'accept' => 'text/html,application/xhtml+xml,application' +
|
@@ -642,7 +642,7 @@ class Parser
|
|
642
642
|
|
643
643
|
return @@manager.available.map {
|
644
644
|
|name|
|
645
|
-
@@manager[name].new.run( doc )
|
645
|
+
exception_jail( false ){ @@manager[name].new.run( doc ) }
|
646
646
|
}.flatten.uniq.compact.
|
647
647
|
map { |path| to_absolute( url_sanitize( path ) ) }.
|
648
648
|
reject { |path| skip?( path ) }
|
@@ -24,7 +24,7 @@ module Plugin
|
|
24
24
|
# @author: Tasos "Zapotek" Laskos
|
25
25
|
# <tasos.laskos@gmail.com>
|
26
26
|
# <zapotek@segfault.gr>
|
27
|
-
# @version: 0.1
|
27
|
+
# @version: 0.1.1
|
28
28
|
#
|
29
29
|
class Manager < Arachni::ComponentManager
|
30
30
|
|
@@ -73,7 +73,7 @@ class Manager < Arachni::ComponentManager
|
|
73
73
|
|
74
74
|
@jobs << Thread.new {
|
75
75
|
|
76
|
-
exception_jail {
|
76
|
+
exception_jail( false ) {
|
77
77
|
Thread.current[:name] = name
|
78
78
|
|
79
79
|
plugin_new = create( name )
|
data/lib/arachni/report/base.rb
CHANGED
@@ -60,13 +60,14 @@ end
|
|
60
60
|
# @author: Tasos "Zapotek" Laskos
|
61
61
|
# <tasos.laskos@gmail.com>
|
62
62
|
# <zapotek@segfault.gr>
|
63
|
-
# @version: 0.1
|
63
|
+
# @version: 0.1.1
|
64
64
|
# @abstract
|
65
65
|
#
|
66
66
|
class Base
|
67
67
|
|
68
68
|
# get the output interface
|
69
69
|
include Arachni::UI::Output
|
70
|
+
include Arachni::Module::Utilities
|
70
71
|
|
71
72
|
# where to report false positives <br/>
|
72
73
|
# info about this should be included in all templates
|
@@ -88,7 +89,7 @@ class Base
|
|
88
89
|
#
|
89
90
|
# REQUIRED
|
90
91
|
#
|
91
|
-
def run
|
92
|
+
def run
|
92
93
|
|
93
94
|
end
|
94
95
|
|
@@ -129,7 +130,9 @@ class Base
|
|
129
130
|
plugin_results = plugins[name]
|
130
131
|
next if !plugin_results || plugin_results[:results].empty?
|
131
132
|
|
132
|
-
|
133
|
+
exception_jail( false ) {
|
134
|
+
formatted[name] = formatter.new( plugin_results.deep_clone ).run
|
135
|
+
}
|
133
136
|
}
|
134
137
|
|
135
138
|
return formatted
|
@@ -150,7 +153,7 @@ class Base
|
|
150
153
|
],
|
151
154
|
:description => %q{This class should be extended by all reports.},
|
152
155
|
:author => 'zapotek',
|
153
|
-
:version => '0.1',
|
156
|
+
:version => '0.1.1',
|
154
157
|
}
|
155
158
|
end
|
156
159
|
|
@@ -26,10 +26,12 @@ module Report
|
|
26
26
|
# @author: Tasos "Zapotek" Laskos
|
27
27
|
# <tasos.laskos@gmail.com>
|
28
28
|
# <zapotek@segfault.gr> <br/>
|
29
|
-
# @version: 0.1
|
29
|
+
# @version: 0.1.1
|
30
30
|
#
|
31
31
|
class Manager < Arachni::ComponentManager
|
32
32
|
|
33
|
+
include Arachni::Module::Utilities
|
34
|
+
|
33
35
|
# the extension of the Arachni Framework Report files
|
34
36
|
EXTENSION = '.afr'
|
35
37
|
|
@@ -54,7 +56,9 @@ class Manager < Arachni::ComponentManager
|
|
54
56
|
|
55
57
|
self.each {
|
56
58
|
|name, report|
|
57
|
-
|
59
|
+
exception_jail( false ){
|
60
|
+
run_one( name, audit_store.deep_clone )
|
61
|
+
}
|
58
62
|
}
|
59
63
|
end
|
60
64
|
|
@@ -191,7 +191,7 @@ class ReportManager
|
|
191
191
|
def get( type, id )
|
192
192
|
return if !valid_class?( type )
|
193
193
|
|
194
|
-
begin
|
194
|
+
# begin
|
195
195
|
location = savedir + Report.get( id ).filename + EXTENSION
|
196
196
|
|
197
197
|
# if it's the default report type don't waste time converting
|
@@ -200,11 +200,11 @@ class ReportManager
|
|
200
200
|
else
|
201
201
|
return convert( type, ::Arachni::AuditStore.load( location ) )
|
202
202
|
end
|
203
|
-
rescue Exception => e
|
204
|
-
ap e
|
205
|
-
ap e.backtrace
|
206
|
-
return nil
|
207
|
-
end
|
203
|
+
# rescue Exception => e
|
204
|
+
# ap e
|
205
|
+
# ap e.backtrace
|
206
|
+
# return nil
|
207
|
+
# end
|
208
208
|
end
|
209
209
|
|
210
210
|
#
|
data/lib/arachni/version.rb
CHANGED
@@ -55,9 +55,11 @@ class Discovery < Arachni::Plugin::Base
|
|
55
55
|
# URL path => size of responses
|
56
56
|
response_size_per_path = {}
|
57
57
|
|
58
|
-
|
58
|
+
@framework.audit_store.issues.each_with_index {
|
59
59
|
|issue, idx|
|
60
60
|
|
61
|
+
next if !includes_tags?( issue.tags )
|
62
|
+
|
61
63
|
# discovery issues only have 1 variation
|
62
64
|
variation = issue.variations.first
|
63
65
|
|
@@ -66,7 +68,14 @@ class Discovery < Arachni::Plugin::Base
|
|
66
68
|
# will control the behavior under that path
|
67
69
|
#
|
68
70
|
# did that make any sense?
|
69
|
-
path =
|
71
|
+
path = ''
|
72
|
+
begin
|
73
|
+
exception_jail {
|
74
|
+
path = File.dirname( URI( normalize_url( variation['url'] ) ).path )
|
75
|
+
}
|
76
|
+
rescue
|
77
|
+
next
|
78
|
+
end
|
70
79
|
|
71
80
|
# gathering total response sizes for issues per path
|
72
81
|
response_size_per_path[path] ||= 0
|
@@ -113,21 +122,6 @@ class Discovery < Arachni::Plugin::Base
|
|
113
122
|
register_results( issues ) if !issues.empty?
|
114
123
|
end
|
115
124
|
|
116
|
-
#
|
117
|
-
# Passes each issue that was logged by a discovery module to the block.
|
118
|
-
#
|
119
|
-
# @param [Proc] &block
|
120
|
-
#
|
121
|
-
def on_relevant_issues( &block )
|
122
|
-
@framework.audit_store.issues.each_with_index {
|
123
|
-
|issue, idx|
|
124
|
-
|
125
|
-
if includes_tags?( issue.tags )
|
126
|
-
block.call( issue, idx )
|
127
|
-
end
|
128
|
-
}
|
129
|
-
end
|
130
|
-
|
131
125
|
#
|
132
126
|
# Checks if 'tags' contain any item in {TAGS}
|
133
127
|
#
|
@@ -18,7 +18,7 @@ module Plugins
|
|
18
18
|
# @author: Tasos "Zapotek" Laskos
|
19
19
|
# <tasos.laskos@gmail.com>
|
20
20
|
# <zapotek@segfault.gr>
|
21
|
-
# @version: 0.1.
|
21
|
+
# @version: 0.1.4
|
22
22
|
#
|
23
23
|
class TimingAttacks < Arachni::Plugin::Base
|
24
24
|
|
@@ -42,15 +42,27 @@ class TimingAttacks < Arachni::Plugin::Base
|
|
42
42
|
# we don't care about non OK responses
|
43
43
|
next if res.code != 200
|
44
44
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
45
|
+
begin
|
46
|
+
path = nil
|
47
|
+
# let's hope for a proper and clean parse but be prepared for
|
48
|
+
# all hell to break loose too...
|
49
|
+
begin
|
50
|
+
path = URI( normalize_url( res.effective_url ) ).path
|
51
|
+
rescue
|
52
|
+
url = res.effective_url.split( '?' ).first
|
53
|
+
path = URI( normalize_url( res.effective_url ) ).path
|
54
|
+
end
|
55
|
+
|
56
|
+
path = '/' if path.empty?
|
57
|
+
@counter[path] ||= @times[path] ||= 0
|
58
|
+
|
59
|
+
# add up all request times for a specific path
|
60
|
+
@times[path] += res.start_transfer_time
|
61
|
+
|
62
|
+
# add up all requests for each path
|
63
|
+
@counter[path] += 1
|
64
|
+
rescue
|
65
|
+
end
|
54
66
|
}
|
55
67
|
|
56
68
|
wait_while_framework_running
|
@@ -111,7 +123,7 @@ class TimingAttacks < Arachni::Plugin::Base
|
|
111
123
|
Pages with high response times usually include heavy-duty processing
|
112
124
|
which makes them prime targets for Denial-of-Service attacks.},
|
113
125
|
:author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>',
|
114
|
-
:version => '0.1.
|
126
|
+
:version => '0.1.4',
|
115
127
|
:tags => [ 'anomaly' , 'timing', 'attacks', 'meta' ]
|
116
128
|
}
|
117
129
|
end
|
data/reports/afr.rb
CHANGED
@@ -17,22 +17,12 @@ module Reports
|
|
17
17
|
# @author: Tasos "Zapotek" Laskos
|
18
18
|
# <tasos.laskos@gmail.com>
|
19
19
|
# <zapotek@segfault.gr>
|
20
|
-
# @version: 0.1
|
20
|
+
# @version: 0.1.1
|
21
21
|
#
|
22
22
|
class AFR < Arachni::Report::Base
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
# @param [Hash] options options passed to the report
|
27
|
-
#
|
28
|
-
def initialize( audit_store, options )
|
29
|
-
@audit_store = audit_store
|
30
|
-
@options = options
|
31
|
-
end
|
32
|
-
|
33
|
-
def run( )
|
34
|
-
|
35
|
-
print_line( )
|
24
|
+
def run
|
25
|
+
print_line
|
36
26
|
print_status( 'Dumping audit results in \'' + @options['outfile'] + '\'.' )
|
37
27
|
|
38
28
|
@audit_store.save( @options['outfile'] )
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<%end%>
|
19
19
|
|
20
20
|
<%if item['element']['action']%>
|
21
|
-
pointing to <a href="<%=CGI.escapeHTML( item['element']['action'] )%>"> <%=item['element']['action']%> </a>
|
21
|
+
pointing to <a href="<%=CGI.escapeHTML( item['element']['action'] ) %>"> <%=item['element']['action']%> </a>
|
22
22
|
<%end%>
|
23
23
|
|
24
24
|
<%if item['element']['method']%>
|
@@ -71,7 +71,7 @@
|
|
71
71
|
<% if item['request']['params'] %>
|
72
72
|
<form style="display:inline" action="<%=item['request']['url']%>" target="_blank" method="<%=item['request']['method']%>">
|
73
73
|
<% item['request']['params'].each_pair do |name, value|%>
|
74
|
-
<input type="hidden" name="<%=CGI.escapeHTML(name)%>" value="<%=CGI.escapeHTML( value )%>" />
|
74
|
+
<input type="hidden" name="<%=CGI.escapeHTML( name || '' )%>" value="<%=CGI.escapeHTML( value || '' )%>" />
|
75
75
|
<%end%>
|
76
76
|
<input type="submit" value="Replay" />
|
77
77
|
</form>
|
data/reports/xml.rb
CHANGED
@@ -22,7 +22,7 @@ module Reports
|
|
22
22
|
# @author: Tasos "Zapotek" Laskos
|
23
23
|
# <tasos.laskos@gmail.com>
|
24
24
|
# <zapotek@segfault.gr>
|
25
|
-
# @version: 0.2
|
25
|
+
# @version: 0.2.1
|
26
26
|
#
|
27
27
|
class XML < Arachni::Report::Base
|
28
28
|
|
@@ -122,16 +122,14 @@ class XML < Arachni::Report::Base
|
|
122
122
|
|issue|
|
123
123
|
|
124
124
|
start_tag( 'issue' )
|
125
|
-
simple_tag( 'name', issue.name )
|
126
125
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
simple_tag( 'description', issue.description )
|
133
|
-
simple_tag( 'manual_verification', issue.verification.to_s )
|
126
|
+
issue.each_pair {
|
127
|
+
|k, v|
|
128
|
+
next if !v.is_a?( String )
|
129
|
+
simple_tag( k, v )
|
130
|
+
}
|
134
131
|
|
132
|
+
add_tags( [issue.tags].flatten.compact )
|
135
133
|
|
136
134
|
start_tag( 'references' )
|
137
135
|
issue.references.each{
|
@@ -173,7 +171,7 @@ class XML < Arachni::Report::Base
|
|
173
171
|
:name => 'XML report',
|
174
172
|
:description => %q{Exports a report as an XML file.},
|
175
173
|
:author => 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>',
|
176
|
-
:version => '0.2',
|
174
|
+
:version => '0.2.1',
|
177
175
|
:options => [ Arachni::Report::Options.outfile( '.xml' ) ]
|
178
176
|
}
|
179
177
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arachni
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.4.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: typhoeus
|
16
|
-
requirement: &
|
16
|
+
requirement: &5666540 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.3.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *5666540
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: awesome_print
|
27
|
-
requirement: &
|
27
|
+
requirement: &5665540 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *5665540
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: json
|
38
|
-
requirement: &
|
38
|
+
requirement: &5664340 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *5664340
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: nokogiri
|
49
|
-
requirement: &
|
49
|
+
requirement: &5663600 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.5.0
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *5663600
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: sys-proctable
|
60
|
-
requirement: &
|
60
|
+
requirement: &5662940 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.9.1
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *5662940
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: terminal-table
|
71
|
-
requirement: &
|
71
|
+
requirement: &5662460 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.4.2
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *5662460
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: sinatra
|
82
|
-
requirement: &
|
82
|
+
requirement: &5661740 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.3.1
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *5661740
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: sinatra-flash
|
93
|
-
requirement: &
|
93
|
+
requirement: &5661040 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.3.0
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *5661040
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: async_sinatra
|
104
|
-
requirement: &
|
104
|
+
requirement: &5660460 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: 0.5.0
|
110
110
|
type: :runtime
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *5660460
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: thin
|
115
|
-
requirement: &
|
115
|
+
requirement: &5659960 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: 1.2.11
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *5659960
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: data_objects
|
126
|
-
requirement: &
|
126
|
+
requirement: &5238300 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - =
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: 0.10.7
|
132
132
|
type: :runtime
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *5238300
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: datamapper
|
137
|
-
requirement: &
|
137
|
+
requirement: &5236360 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - =
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: 1.1.0
|
143
143
|
type: :runtime
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *5236360
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: dm-sqlite-adapter
|
148
|
-
requirement: &
|
148
|
+
requirement: &5235080 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - =
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: 1.1.0
|
154
154
|
type: :runtime
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *5235080
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: net-ssh
|
159
|
-
requirement: &
|
159
|
+
requirement: &5233980 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,10 +164,10 @@ dependencies:
|
|
164
164
|
version: 2.2.1
|
165
165
|
type: :runtime
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *5233980
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: net-scp
|
170
|
-
requirement: &
|
170
|
+
requirement: &5232740 !ruby/object:Gem::Requirement
|
171
171
|
none: false
|
172
172
|
requirements:
|
173
173
|
- - ! '>='
|
@@ -175,10 +175,10 @@ dependencies:
|
|
175
175
|
version: 1.0.4
|
176
176
|
type: :runtime
|
177
177
|
prerelease: false
|
178
|
-
version_requirements: *
|
178
|
+
version_requirements: *5232740
|
179
179
|
- !ruby/object:Gem::Dependency
|
180
180
|
name: eventmachine
|
181
|
-
requirement: &
|
181
|
+
requirement: &5231640 !ruby/object:Gem::Requirement
|
182
182
|
none: false
|
183
183
|
requirements:
|
184
184
|
- - ! '>='
|
@@ -186,10 +186,10 @@ dependencies:
|
|
186
186
|
version: 1.0.0.beta.4
|
187
187
|
type: :runtime
|
188
188
|
prerelease: false
|
189
|
-
version_requirements: *
|
189
|
+
version_requirements: *5231640
|
190
190
|
- !ruby/object:Gem::Dependency
|
191
191
|
name: em-synchrony
|
192
|
-
requirement: &
|
192
|
+
requirement: &4927740 !ruby/object:Gem::Requirement
|
193
193
|
none: false
|
194
194
|
requirements:
|
195
195
|
- - ! '>='
|
@@ -197,10 +197,10 @@ dependencies:
|
|
197
197
|
version: 1.0.0
|
198
198
|
type: :runtime
|
199
199
|
prerelease: false
|
200
|
-
version_requirements: *
|
200
|
+
version_requirements: *4927740
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
202
|
name: arachni-rpc-em
|
203
|
-
requirement: &
|
203
|
+
requirement: &4926240 !ruby/object:Gem::Requirement
|
204
204
|
none: false
|
205
205
|
requirements:
|
206
206
|
- - ! '>='
|
@@ -208,7 +208,7 @@ dependencies:
|
|
208
208
|
version: 0.1.1
|
209
209
|
type: :runtime
|
210
210
|
prerelease: false
|
211
|
-
version_requirements: *
|
211
|
+
version_requirements: *4926240
|
212
212
|
description: ! " Arachni is a feature-full, modular, high-performance Ruby
|
213
213
|
framework aimed towards\n helping penetration testers and administrators
|
214
214
|
evaluate the security of web applications.\n\n Arachni is smart, it trains
|