emonti-rbkb 0.6.8 → 0.6.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.
- data/History.txt +9 -0
- data/cli_usage.rdoc +15 -12
- data/lib/rbkb/cli/feed.rb +18 -12
- data/lib/rbkb/cli/telson.rb +15 -10
- data/lib/rbkb/extends.rb +6 -1
- data/lib/rbkb/plug/peer.rb +0 -1
- data/lib/rbkb.rb +1 -1
- data/rbkb.gemspec +2 -2
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 0.6.9 / 2009-09-01
|
2
|
+
* Enhancements
|
3
|
+
* telson and feed now support -s/--source address:port using TCP with
|
4
|
+
bind_connect via eventmachine
|
5
|
+
* random_string and random_alphanum added to String extensions
|
6
|
+
* Bug-Fix
|
7
|
+
* Plug's PeerList.find_peers was returning nil resulting in problems for
|
8
|
+
blit -l amongst other things.
|
9
|
+
|
1
10
|
== 0.6.8.1 / 2009-06-12
|
2
11
|
* Enhancements
|
3
12
|
* Added String.rotate_bytes per request for a rotation cypher by
|
data/cli_usage.rdoc
CHANGED
@@ -106,14 +106,15 @@ Feed can do the following things with minimum fuss:
|
|
106
106
|
-v, --version Show version and exit
|
107
107
|
-o, --output=FILE Output to file
|
108
108
|
-l, --listen=(ADDR:?)PORT Server - on port (and addr?)
|
109
|
+
-s, --source=(ADDR:?)PORT Bind client on port and addr
|
109
110
|
-b, --blit=(ADDR:)?PORT Where to listen for blit
|
110
111
|
-i, --[no-]initiate Send the first message on connect
|
111
112
|
-e, --[no-]end End connection when feed is exhausted
|
112
|
-
|
113
|
+
--[no-]step 'Continue' prompt between messages
|
113
114
|
-u, --udp Use UDP instead of TCP
|
114
115
|
-r, --reconnect Attempt to reconnect endlessly.
|
115
116
|
-q, --quiet Suppress verbose messages/dumps
|
116
|
-
-
|
117
|
+
-Q, --squelch-exhausted Squelch 'FEED EXHAUSTED' messages
|
117
118
|
Sources: (can be combined)
|
118
119
|
-f, --from-files=GLOB Import messages from raw files
|
119
120
|
-x, --from-hex=FILE Import messages from hexdumps
|
@@ -121,6 +122,7 @@ Feed can do the following things with minimum fuss:
|
|
121
122
|
-p, --from-pcap=FILE[:FILTER] Import messages from pcap
|
122
123
|
|
123
124
|
|
125
|
+
|
124
126
|
=== hexify
|
125
127
|
|
126
128
|
Converts a string or raw data to hex characters. Input can be supplied via
|
@@ -215,16 +217,17 @@ Telson is for doing the following things with minimum fuss:
|
|
215
217
|
of a conversation.
|
216
218
|
|
217
219
|
Usage: telson [options] host:port
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
220
|
+
-h, --help Show this message
|
221
|
+
-v, --version Show version and exit
|
222
|
+
-o, --output=FILE Output to file
|
223
|
+
-q, --quiet Turn off verbose logging
|
224
|
+
-d, --dump-format=hex/raw Output conversations in hexdump or raw
|
225
|
+
-b, --blit=ADDR:PORT Where to listen for blit
|
226
|
+
-u, --udp UDP mode
|
227
|
+
-S, --start-tls Initiate TLS
|
228
|
+
-r, --reconnect Attempt to reconnect endlessly.
|
229
|
+
-s, --source=(ADDR:?)PORT Bind client on port and addr
|
230
|
+
|
228
231
|
|
229
232
|
=== unhexify
|
230
233
|
|
data/lib/rbkb/cli/feed.rb
CHANGED
@@ -35,7 +35,7 @@ class Rbkb::Cli::Feed < Rbkb::Cli::Executable
|
|
35
35
|
@persist = false
|
36
36
|
@transport = :TCP
|
37
37
|
@svr_method = :start_server
|
38
|
-
@cli_method = :
|
38
|
+
@cli_method = :bind_connect
|
39
39
|
@blit_addr = Plug::Blit::DEFAULT_IPADDR
|
40
40
|
@blit_port = Plug::Blit::DEFAULT_PORT
|
41
41
|
|
@@ -74,6 +74,15 @@ class Rbkb::Cli::Feed < Rbkb::Cli::Executable
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
+
arg.on("-s", "--source=(ADDR:?)PORT", "Bind client on port and addr") do |p|
|
78
|
+
if m=/^(?:([\w\.]+):)?(\d+)$/.match(p)
|
79
|
+
@local_addr = $1 if $1
|
80
|
+
@local_port = $2.to_i
|
81
|
+
else
|
82
|
+
bail("Invalid source argument: #{p.inspect}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
77
86
|
arg.on("-b", "--blit=(ADDR:)?PORT", "Where to listen for blit") do |b|
|
78
87
|
puts b
|
79
88
|
unless(m=/^(?:([\w\._-]+):)?(\d+)$/.match(b))
|
@@ -91,7 +100,7 @@ class Rbkb::Cli::Feed < Rbkb::Cli::Executable
|
|
91
100
|
@feed_opts[:close_at_end] = c
|
92
101
|
end
|
93
102
|
|
94
|
-
arg.on("
|
103
|
+
arg.on("--[no-]step", "'Continue' prompt between messages") do |s|
|
95
104
|
@feed_opts[:step] = s
|
96
105
|
end
|
97
106
|
|
@@ -149,14 +158,14 @@ class Rbkb::Cli::Feed < Rbkb::Cli::Executable
|
|
149
158
|
@svr_method = @cli_method = :open_datagram_socket
|
150
159
|
end
|
151
160
|
|
161
|
+
@local_port ||= 0
|
152
162
|
# Prepare EventMachine arguments based on whether we are a client or server
|
153
|
-
if @listen
|
154
|
-
@evma_addr = @local_addr
|
155
|
-
@evma_port = @local_port
|
163
|
+
if @listen # server
|
156
164
|
@meth = @svr_method
|
165
|
+
addr_args = [@local_addr, @local_port]
|
157
166
|
@feed_opts[:kind] = :server
|
158
167
|
@feed_opts[:no_stop_on_unbind] = true
|
159
|
-
else
|
168
|
+
else # client
|
160
169
|
|
161
170
|
## Get target/listen argument for client mode
|
162
171
|
unless (m = /^([\w\.]+):(\d+)$/.match(tgt=@argv.shift))
|
@@ -167,11 +176,9 @@ class Rbkb::Cli::Feed < Rbkb::Cli::Executable
|
|
167
176
|
@target_port = m[2].to_i
|
168
177
|
|
169
178
|
if @transport == :UDP
|
170
|
-
|
171
|
-
@evma_port = @local_port || 0
|
179
|
+
addr_args = [@local_addr, @local_port]
|
172
180
|
else
|
173
|
-
|
174
|
-
@evma_port = @target_port
|
181
|
+
addr_args = [@local_addr, @local_port, @target_addr, @target_port]
|
175
182
|
end
|
176
183
|
|
177
184
|
@meth = @cli_method
|
@@ -182,8 +189,7 @@ class Rbkb::Cli::Feed < Rbkb::Cli::Executable
|
|
182
189
|
|
183
190
|
@em_args=[
|
184
191
|
@meth,
|
185
|
-
|
186
|
-
@evma_port,
|
192
|
+
addr_args,
|
187
193
|
Plug::ArrayFeeder,
|
188
194
|
@transport,
|
189
195
|
@feed_opts
|
data/lib/rbkb/cli/telson.rb
CHANGED
@@ -20,7 +20,6 @@ class Rbkb::Cli::Telson < Rbkb::Cli::PlugCli
|
|
20
20
|
this.local_port = 0
|
21
21
|
end
|
22
22
|
|
23
|
-
@srced = false
|
24
23
|
@persist = false
|
25
24
|
end
|
26
25
|
|
@@ -32,13 +31,12 @@ class Rbkb::Cli::Telson < Rbkb::Cli::PlugCli
|
|
32
31
|
@persist=true
|
33
32
|
end
|
34
33
|
|
35
|
-
arg.on("-s", "--source=(ADDR:?)PORT", "Bind on port
|
34
|
+
arg.on("-s", "--source=(ADDR:?)PORT", "Bind client on port and addr") do |p|
|
36
35
|
if m=/^(?:([\w\.]+):)?(\d+)$/.match(p)
|
37
36
|
@local_addr = $1 if $1
|
38
37
|
@local_port = $2.to_i
|
39
|
-
@srced = true
|
40
38
|
else
|
41
|
-
bail("Invalid
|
39
|
+
bail("Invalid source argument: #{p.inspect}")
|
42
40
|
end
|
43
41
|
end
|
44
42
|
end
|
@@ -54,23 +52,30 @@ class Rbkb::Cli::Telson < Rbkb::Cli::PlugCli
|
|
54
52
|
|
55
53
|
def go(*args)
|
56
54
|
super(*args)
|
57
|
-
|
58
55
|
loop do
|
59
56
|
EventMachine.run {
|
60
57
|
if @transport == :TCP
|
61
|
-
bail("Sorry: --source only works with UDP.") if @srced
|
62
|
-
|
63
|
-
c=EventMachine.connect(@target_addr, @target_port, Plug::Telson, @transport, @plug_opts)
|
64
58
|
|
59
|
+
c=EventMachine.bind_connect( @local_addr,
|
60
|
+
@local_port,
|
61
|
+
@target_addr,
|
62
|
+
@target_port,
|
63
|
+
Plug::Telson,
|
64
|
+
@transport,
|
65
|
+
@plug_opts )
|
65
66
|
elsif @transport == :UDP
|
66
|
-
c=EventMachine.open_datagram_socket( @local_addr,
|
67
|
+
c=EventMachine.open_datagram_socket( @local_addr,
|
68
|
+
@local_port,
|
69
|
+
Plug::Telson,
|
70
|
+
@transport,
|
71
|
+
@plug_opts )
|
72
|
+
|
67
73
|
c.peers.add_peer_manually(@target_addr, @target_port)
|
68
74
|
|
69
75
|
### someday maybe raw or others?
|
70
76
|
else
|
71
77
|
raise "bad transport protocol"
|
72
78
|
end
|
73
|
-
|
74
79
|
EventMachine.start_server(@blit_addr, @blit_port, Plug::Blit, @blit_proto, c)
|
75
80
|
Plug::UI::verbose("** BLITSRV-#{@blit_addr}:#{@blit_port}(TCP) Started") # XXX
|
76
81
|
}
|
data/lib/rbkb/extends.rb
CHANGED
@@ -11,11 +11,16 @@ module Rbkb
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# Generates a random alphanumeric string of 'size' bytes (8 by default)
|
14
|
-
def
|
14
|
+
def random_alphanum(size = 8)
|
15
15
|
chars = ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a
|
16
16
|
(1..size).collect{|a| chars[rand(chars.size)]}.join
|
17
17
|
end
|
18
18
|
|
19
|
+
# Generates a random string of 'size' bytes (8 by default)
|
20
|
+
def random_string(size = 8)
|
21
|
+
chars = (0..255).map {|c| c.chr }
|
22
|
+
(1..size).collect {|a| char[rand(chars.size)]}
|
23
|
+
end
|
19
24
|
|
20
25
|
# Simple syntactic sugar to pass any object to a block
|
21
26
|
def with(x)
|
data/lib/rbkb/plug/peer.rb
CHANGED
data/lib/rbkb.rb
CHANGED
data/rbkb.gemspec
CHANGED
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rbkb}
|
5
|
-
s.version = "0.6.
|
5
|
+
s.version = "0.6.9"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Eric Monti"]
|
9
|
-
s.date = %q{2009-
|
9
|
+
s.date = %q{2009-09-01}
|
10
10
|
s.description = %q{Rbkb is a collection of ruby-based pen-testing and reversing tools. Inspired by Matasano Blackbag.}
|
11
11
|
s.email = %q{emonti@matasano.com}
|
12
12
|
s.executables = ["b64", "bgrep", "blit", "c", "crc32", "d64", "dedump", "feed", "hexify", "len", "plugsrv", "rex", "rstrings", "slice", "telson", "unhexify", "urldec", "urlenc", "xor"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: emonti-rbkb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Monti
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-01 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|