Skip to content

Commit 567493f

Browse files
authored
Merge branch '0.2.0' into extract_repos
2 parents ef5ad76 + 45eaea3 commit 567493f

File tree

4 files changed

+182
-135
lines changed

4 files changed

+182
-135
lines changed

Gemfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ gem 'ronin-vulns', '~> 0.3', github: 'ronin-rb/ronin-vulns',
3131
branch: '0.3.0'
3232
# gem 'ronin-web-spider', '~> 0.2', github: 'ronin-rb/ronin-web-spider',
3333
# branch: 'main'
34-
# gem 'ronin-recon', '~> 0.1', github: 'ronin-rb/ronin-recon'
34+
gem 'ronin-recon', '~> 0.2', github: 'ronin-rb/ronin-recon',
35+
branch: '0.2.0'
3536
# gem 'ronin-nmap', '~> 0.1', github: 'ronin-rb/ronin-nmap'
3637
# gem 'ronin-masscan', '~> 0.1', github: 'ronin-rb/ronin-masscan'
3738
# gem 'ronin-repos', '~> 0.2', github: 'ronin-rb/ronin-repos',

app.rb

Lines changed: 2 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,13 @@
3131
require_relative 'config/sidekiq'
3232

3333
# ronin libraries
34-
require 'ronin/payloads'
3534
require 'ronin/exploits'
3635
require 'ronin/support/encoding'
3736

3837
# param validations
3938
require 'ronin/app/validations/import_params'
4039
require 'ronin/app/validations/http_params'
4140

42-
# schema builders
43-
require 'ronin/app/schemas/payloads/encoders/encode_schema'
44-
require 'ronin/app/schemas/payloads/build_schema'
45-
4641
# helpers
4742
require 'ronin/app/helpers/html'
4843
require 'ronin/app/helpers/text'
@@ -90,133 +85,6 @@ class App < Sinatra::Base
9085
erb :index
9186
end
9287

93-
get '/payloads' do
94-
@payloads = Ronin::Payloads.list_files
95-
96-
erb :"payloads/index"
97-
end
98-
99-
get '/payloads/encoders' do
100-
@payload_encoders = Ronin::Payloads::Encoders.list_files
101-
102-
erb :"payloads/encoders/index"
103-
end
104-
105-
get %r{/payloads/encoders/encode/(?<encoder_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
106-
@encoder_class = Ronin::Payloads::Encoders.load_class(params[:encoder_id])
107-
@encoder = @encoder_class.new
108-
109-
erb :"payloads/encoders/encode"
110-
rescue Ronin::Core::ClassRegistry::ClassNotFound
111-
halt 404
112-
end
113-
114-
post %r{/payloads/encoders/encode/(?<encoder_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
115-
@encoder_class = Ronin::Payloads::Encoders.load_class(params[:encoder_id])
116-
@encoder = @encoder_class.new
117-
118-
form_schema = Schemas::Payloads::Encoders::EncodeSchema(@encoder_class)
119-
result = form_schema.call(params)
120-
121-
if result.success?
122-
encoder_params = result[:params].to_h
123-
encoder_params.compact!
124-
125-
begin
126-
@encoder.params = encoder_params
127-
rescue Ronin::Core::Params::ParamError => error
128-
flash[:error] = "Failed to set params: #{error.message}"
129-
130-
halt 400, erb(:"payloads/encoders/encode")
131-
end
132-
133-
begin
134-
@encoder.validate
135-
rescue => error
136-
flash[:error] = "Failed to encode encoder: #{error.message}"
137-
138-
halt 500, erb(:"payloads/encoders/encode")
139-
end
140-
141-
@encoded_data = @encoder.encode(result[:data])
142-
143-
erb :"payloads/encoders/encode"
144-
else
145-
@params = params
146-
@errors = result.errors
147-
148-
halt 400, erb(:"payloads/encoders/encode")
149-
end
150-
rescue Ronin::Core::ClassRegistry::ClassNotFound
151-
halt 404
152-
end
153-
154-
get %r{/payloads/encoders/(?<encoder_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
155-
@encoder = Ronin::Payloads::Encoders.load_class(params[:encoder_id])
156-
157-
erb :"payloads/encoders/show"
158-
rescue Ronin::Core::ClassRegistry::ClassNotFound
159-
halt 404
160-
end
161-
162-
get %r{/payloads/build/(?<payload_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
163-
@payload_class = Ronin::Payloads.load_class(params[:payload_id])
164-
@payload = @payload_class.new
165-
166-
erb :"payloads/build"
167-
rescue Ronin::Core::ClassRegistry::ClassNotFound
168-
halt 404
169-
end
170-
171-
post %r{/payloads/build/(?<payload_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
172-
@payload_class = Ronin::Payloads.load_class(params[:payload_id])
173-
@payload = @payload_class.new
174-
175-
form_schema = Schemas::Payloads::BuildSchema(@payload_class)
176-
result = form_schema.call(params)
177-
178-
if result.success?
179-
payload_params = result[:params].to_h
180-
payload_params.compact!
181-
182-
begin
183-
@payload.params = payload_params
184-
rescue Ronin::Core::Params::ParamError => error
185-
flash[:error] = "Failed to set params: #{error.message}"
186-
187-
halt 400, erb(:"payloads/build")
188-
end
189-
190-
begin
191-
@payload.perform_validate
192-
@payload.perform_build
193-
rescue => error
194-
flash[:error] = "Failed to build payload: #{error.message}"
195-
196-
halt 500, erb(:"payloads/build")
197-
end
198-
199-
@built_payload = @payload.to_s
200-
201-
erb :"payloads/build"
202-
else
203-
@params = params
204-
@errors = result.errors
205-
206-
halt 400, erb(:"payloads/build")
207-
end
208-
rescue Ronin::Core::ClassRegistry::ClassNotFound
209-
halt 404
210-
end
211-
212-
get %r{/payloads/(?<payload_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
213-
@payload = Ronin::Payloads.load_class(params[:payload_id])
214-
215-
erb :"payloads/show"
216-
rescue Ronin::Core::ClassRegistry::ClassNotFound
217-
halt 404
218-
end
219-
22088
get '/exploits' do
22189
@exploits = Ronin::Exploits.list_files
22290

@@ -314,4 +182,5 @@ def pagy_get_vars(collection, vars)
314182

315183
require './app/db'
316184
require './app/scanning'
317-
require './app/repos'
185+
require './app/payloads'
186+
require './app/repos'

app/payloads.rb

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
# frozen_string_literal: true
2+
#
3+
# ronin-app - a local web app for Ronin.
4+
#
5+
# Copyright (C) 2023-2024 Hal Brodigan (postmodern.mod3@gmail.com)
6+
#
7+
# ronin-app is free software: you can redistribute it and/or modify
8+
# it under the terms of the GNU Affero General Public License as published by
9+
# the Free Software Foundation, either version 3 of the License, or
10+
# (at your option) any later version.
11+
#
12+
# ronin-app is distributed in the hope that it will be useful,
13+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
# GNU Affero General Public License for more details.
16+
#
17+
# You should have received a copy of the GNU Affero General Public License
18+
# along with ronin-app. If not, see <http://www.gnu.org/licenses/>.
19+
#
20+
21+
# ronin libraries
22+
require 'ronin/payloads'
23+
24+
# schema builders
25+
require 'ronin/app/schemas/payloads/encoders/encode_schema'
26+
require 'ronin/app/schemas/payloads/build_schema'
27+
28+
#
29+
# App class containing routes for payloads.
30+
#
31+
class App < Sinatra::Base
32+
33+
include Ronin::App
34+
include Pagy::Backend
35+
36+
configure do
37+
enable :sessions
38+
register Sinatra::Flash
39+
helpers Sinatra::ContentFor
40+
helpers Helpers::HTML
41+
end
42+
43+
configure :development do
44+
register Sinatra::Reloader
45+
end
46+
47+
helpers do
48+
include Pagy::Frontend
49+
end
50+
51+
get '/payloads' do
52+
@payloads = Ronin::Payloads.list_files
53+
54+
erb :"payloads/index"
55+
end
56+
57+
get '/payloads/encoders' do
58+
@payload_encoders = Ronin::Payloads::Encoders.list_files
59+
60+
erb :"payloads/encoders/index"
61+
end
62+
63+
get %r{/payloads/encoders/encode/(?<encoder_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
64+
@encoder_class = Ronin::Payloads::Encoders.load_class(params[:encoder_id])
65+
@encoder = @encoder_class.new
66+
67+
erb :"payloads/encoders/encode"
68+
rescue Ronin::Core::ClassRegistry::ClassNotFound
69+
halt 404
70+
end
71+
72+
post %r{/payloads/encoders/encode/(?<encoder_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
73+
@encoder_class = Ronin::Payloads::Encoders.load_class(params[:encoder_id])
74+
@encoder = @encoder_class.new
75+
76+
form_schema = Schemas::Payloads::Encoders::EncodeSchema(@encoder_class)
77+
result = form_schema.call(params)
78+
79+
if result.success?
80+
encoder_params = result[:params].to_h
81+
encoder_params.compact!
82+
83+
begin
84+
@encoder.params = encoder_params
85+
rescue Ronin::Core::Params::ParamError => error
86+
flash[:error] = "Failed to set params: #{error.message}"
87+
88+
halt 400, erb(:"payloads/encoders/encode")
89+
end
90+
91+
begin
92+
@encoder.validate
93+
rescue => error
94+
flash[:error] = "Failed to encode encoder: #{error.message}"
95+
96+
halt 500, erb(:"payloads/encoders/encode")
97+
end
98+
99+
@encoded_data = @encoder.encode(result[:data])
100+
101+
erb :"payloads/encoders/encode"
102+
else
103+
@params = params
104+
@errors = result.errors
105+
106+
halt 400, erb(:"payloads/encoders/encode")
107+
end
108+
rescue Ronin::Core::ClassRegistry::ClassNotFound
109+
halt 404
110+
end
111+
112+
get %r{/payloads/encoders/(?<encoder_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
113+
@encoder = Ronin::Payloads::Encoders.load_class(params[:encoder_id])
114+
115+
erb :"payloads/encoders/show"
116+
rescue Ronin::Core::ClassRegistry::ClassNotFound
117+
halt 404
118+
end
119+
120+
get %r{/payloads/build/(?<payload_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
121+
@payload_class = Ronin::Payloads.load_class(params[:payload_id])
122+
@payload = @payload_class.new
123+
124+
erb :"payloads/build"
125+
rescue Ronin::Core::ClassRegistry::ClassNotFound
126+
halt 404
127+
end
128+
129+
post %r{/payloads/build/(?<payload_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
130+
@payload_class = Ronin::Payloads.load_class(params[:payload_id])
131+
@payload = @payload_class.new
132+
133+
form_schema = Schemas::Payloads::BuildSchema(@payload_class)
134+
result = form_schema.call(params)
135+
136+
if result.success?
137+
payload_params = result[:params].to_h
138+
payload_params.compact!
139+
140+
begin
141+
@payload.params = payload_params
142+
rescue Ronin::Core::Params::ParamError => error
143+
flash[:error] = "Failed to set params: #{error.message}"
144+
145+
halt 400, erb(:"payloads/build")
146+
end
147+
148+
begin
149+
@payload.perform_validate
150+
@payload.perform_build
151+
rescue => error
152+
flash[:error] = "Failed to build payload: #{error.message}"
153+
154+
halt 500, erb(:"payloads/build")
155+
end
156+
157+
@built_payload = @payload.to_s
158+
159+
erb :"payloads/build"
160+
else
161+
@params = params
162+
@errors = result.errors
163+
164+
halt 400, erb(:"payloads/build")
165+
end
166+
rescue Ronin::Core::ClassRegistry::ClassNotFound
167+
halt 404
168+
end
169+
170+
get %r{/payloads/(?<payload_id>[a-z0-9_-]+(?:/[a-z0-9_-]+)*)} do
171+
@payload = Ronin::Payloads.load_class(params[:payload_id])
172+
173+
erb :"payloads/show"
174+
rescue Ronin::Core::ClassRegistry::ClassNotFound
175+
halt 404
176+
end
177+
end

gemspec.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ dependencies:
5050
ronin-web-spider: ~> 0.2
5151
ronin-nmap: ~> 0.1
5252
ronin-masscan: ~> 0.1
53-
ronin-recon: ~> 0.1
53+
ronin-recon: ~> 0.2
5454

5555
development_dependencies:
5656
bundler: ~> 2.0

0 commit comments

Comments
 (0)