dap 0.1.9 → 0.1.10
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 +4 -4
- data/lib/dap/filter/udp.rb +25 -4
- data/lib/dap/version.rb +1 -1
- data/spec/dap/filter/udp_filter_spec.rb +39 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6991fe2ebe6781802697f56a62a1a83dd5bbb83b
|
4
|
+
data.tar.gz: 8e6aef8bd4a882c6bbd0b0563926e00127079b91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9a979ee64979cae1d6dafa3ec261064ed67f69150fe2fe5ba3f045f01404b07bbb55da9bdc48d8f6b741cd899a25ee89536d58816ef1f1cbfee6da2c21dd65c
|
7
|
+
data.tar.gz: 4ba074456d6c4e4ac1503e8f9126cede1f2fbefa199f7a39e3071d101c6d86c3f4af42b65b6d438d7d31fdc8970825e62c915cb9a75f264314d930db8f8c14f9
|
data/lib/dap/filter/udp.rb
CHANGED
@@ -38,19 +38,40 @@ end
|
|
38
38
|
#
|
39
39
|
# Decode a DNS bind.version probe response ( zmap: dns_53.pkt )
|
40
40
|
#
|
41
|
+
# Note: The TCP DNS response contains two additional bytes at the beginning
|
42
|
+
# of the data which indicate length. Net::DNS::Packet doesn't handle this
|
43
|
+
# so we've implemented a fall back that will retry parsing with the first two
|
44
|
+
# bytes removed if the initial parsing attempt raises an exception.
|
45
|
+
#
|
41
46
|
class FilterDecodeDNSVersionReply
|
42
47
|
include BaseDecoder
|
43
48
|
def decode(data)
|
44
49
|
begin
|
45
50
|
r = Net::DNS::Packet.parse(data)
|
46
|
-
|
51
|
+
rescue
|
52
|
+
r = nil
|
53
|
+
end
|
47
54
|
|
55
|
+
unless r
|
56
|
+
begin
|
57
|
+
# Perhaps a TCP DNS response, trim the first two bytes (length value)
|
58
|
+
# and try again..
|
59
|
+
trimmed_data = data[2..-1]
|
60
|
+
r = Net::DNS::Packet.parse(trimmed_data)
|
61
|
+
rescue
|
62
|
+
return {}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
return {} unless r
|
67
|
+
|
68
|
+
begin
|
48
69
|
# XXX: This can throw an exception on bad data
|
49
70
|
vers = r.answer.map{|x| x.txt.strip rescue nil }.reject{|x| x.nil? }.first
|
50
|
-
return
|
51
|
-
return {
|
71
|
+
return {} unless vers
|
72
|
+
return { 'dns_version' => vers }
|
52
73
|
rescue ::Exception
|
53
|
-
{
|
74
|
+
{}
|
54
75
|
end
|
55
76
|
end
|
56
77
|
end
|
data/lib/dap/version.rb
CHANGED
@@ -0,0 +1,39 @@
|
|
1
|
+
describe Dap::Filter::FilterDecodeDNSVersionReply do
|
2
|
+
describe '.decode' do
|
3
|
+
|
4
|
+
let(:filter) { described_class.new([]) }
|
5
|
+
|
6
|
+
context 'parsing empty string' do
|
7
|
+
let(:decode) { filter.decode('') }
|
8
|
+
it 'returns an empty hash' do
|
9
|
+
expect(decode).to eq( {} )
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
base64_string = "AF8074UAAAEAAQABAAAHVkVSU0lPTgRCSU5EAAAQAAPADAAQAAMAAAAAACcmOS44LjJyYzEtUmVkSGF0LTkuOC4yLTAuMzcucmMxLmVsNl83LjXADAACAAMAAAAAAALADA=="
|
14
|
+
test_string = base64_string.to_s.unpack('m*').first
|
15
|
+
|
16
|
+
context 'parsing a partial response' do
|
17
|
+
let(:decode) { filter.decode(test_string[2..10]) }
|
18
|
+
it 'returns an empty hash' do
|
19
|
+
expect(decode).to eq( {} )
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'parsing TCP DNS response' do
|
24
|
+
let(:decode) { filter.decode(test_string) }
|
25
|
+
it 'returns the correct version' do
|
26
|
+
expect(decode).to eq({ 'dns_version' => '9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.5' })
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# strip the first two bytes from the TCP response to mimic a UDP response
|
31
|
+
context 'parsing UDP DNS response' do
|
32
|
+
let(:decode) { filter.decode(test_string[2..-1]) }
|
33
|
+
it 'returns the correct version' do
|
34
|
+
expect(decode).to eq({ 'dns_version' => '9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.5' })
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rapid7 Research
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -223,6 +223,7 @@ files:
|
|
223
223
|
- spec/dap/filter/http_filter_spec.rb
|
224
224
|
- spec/dap/filter/ldap_filter_spec.rb
|
225
225
|
- spec/dap/filter/simple_filter_spec.rb
|
226
|
+
- spec/dap/filter/udp_filter_spec.rb
|
226
227
|
- spec/dap/input/json_spec.rb
|
227
228
|
- spec/dap/proto/ipmi_spec.rb
|
228
229
|
- spec/dap/proto/ldap_proto_spec.rb
|
@@ -260,6 +261,7 @@ test_files:
|
|
260
261
|
- spec/dap/filter/http_filter_spec.rb
|
261
262
|
- spec/dap/filter/ldap_filter_spec.rb
|
262
263
|
- spec/dap/filter/simple_filter_spec.rb
|
264
|
+
- spec/dap/filter/udp_filter_spec.rb
|
263
265
|
- spec/dap/input/json_spec.rb
|
264
266
|
- spec/dap/proto/ipmi_spec.rb
|
265
267
|
- spec/dap/proto/ldap_proto_spec.rb
|