dap 0.1.9 → 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|