ronin-listener 0.1.0.rc1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7caf08ff5f57fb24edcf6a23f1297bbc1844ccfc7b1ab0ffe93bbb0c9fa51de8
4
- data.tar.gz: 7cd8e3db9038d20c459a2eeedb4457dc887219c2ba5e0cd788c7130fc4605108
3
+ metadata.gz: b8add48e4efe85621678d887dc4abac281a6b773aed650c968aa012c7dcf482d
4
+ data.tar.gz: 31b11c3f616ba4c77efc08d7ac5c83bc73a1ec015e7cd824cf48a61f5769ecd3
5
5
  SHA512:
6
- metadata.gz: 32ea4d3be1b2114fe84e777d69ab5066717aad2d7f7819c9ab503f9373640c6239535640b805f138737f09e7334bab1c2b66d00e9bb1a668c7beb90d5c6272e3
7
- data.tar.gz: f93339653aa627a16b245d76af048aa6871020f1b2a54f5761ec7716ab4e10809882800ffc568d30b4ae929b0e035ed62d269e18299c413181f707098de0e7ff
6
+ metadata.gz: 60f82e8b52496b0492547f96f44062e561e12f5b419384426131d8d70389917a87b78cd726b07ab9a55c1291ec2629fd47b02b81a8a1c19fe21d4495281e7666
7
+ data.tar.gz: a73da44c738b54cd5d000925f1481baf8843c0a37163a21451e3cf1b0f108066ab93402ed7eee3ec56ab5f3d9f7630ab5e2d2f35524238483301743253a3f7e4
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.1
1
+ ruby-3.3
data/ChangeLog.md CHANGED
@@ -1,4 +1,4 @@
1
- ### 0.1.0 / 2024-XX-XX
1
+ ### 0.1.0 / 2024-07-22
2
2
 
3
3
  * Initial release:
4
4
  * Supports starting a DNS server for receiving exfiltrated data via DNS
@@ -11,7 +11,7 @@ _ronin-listener_completions_filter() {
11
11
 
12
12
  if [[ "${cur:0:1}" == "-" ]]; then
13
13
  echo "$words"
14
-
14
+
15
15
  else
16
16
  for word in $words; do
17
17
  [[ "${word:0:1}" != "-" ]] && result+=("$word")
@@ -29,75 +29,75 @@ _ronin-listener_completions() {
29
29
 
30
30
  case "$compline" in
31
31
  'new http'*'--vhost')
32
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A hostname -- "$cur" )
32
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A hostname -- "$cur")
33
33
  ;;
34
34
 
35
35
  'new http'*'--root')
36
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
36
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur")
37
37
  ;;
38
38
 
39
39
  'http'*'--output')
40
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
40
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
41
41
  ;;
42
42
 
43
43
  'dns'*'--output')
44
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
44
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
45
45
  ;;
46
46
 
47
47
  'http'*'--vhost')
48
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A hostname -- "$cur" )
48
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A hostname -- "$cur")
49
49
  ;;
50
50
 
51
- 'http'*'--root')
52
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
51
+ 'new http'*'-R')
52
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur")
53
53
  ;;
54
54
 
55
- 'new http'*'-R')
56
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
55
+ 'http'*'--root')
56
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur")
57
57
  ;;
58
58
 
59
59
  'completion'*)
60
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-listener_completions_filter "--print --install --uninstall")" -- "$cur" )
60
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-listener_completions_filter "--print --install --uninstall")" -- "$cur")
61
61
  ;;
62
62
 
63
63
  'new http'*)
64
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-listener_completions_filter "--host -H --port -p --vhost --root -R")" -- "$cur" )
64
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-listener_completions_filter "--host -H --port -p --vhost --root -R")" -- "$cur")
65
65
  ;;
66
66
 
67
67
  'http'*'-o')
68
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
68
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
69
69
  ;;
70
70
 
71
71
  'http'*'-R')
72
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A directory -- "$cur" )
72
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A directory -- "$cur")
73
73
  ;;
74
74
 
75
75
  'new dns'*)
76
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-listener_completions_filter "--host -H --port -p --domain -d")" -- "$cur" )
76
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-listener_completions_filter "--host -H --port -p --domain -d")" -- "$cur")
77
77
  ;;
78
78
 
79
79
  'dns'*'-o')
80
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A file -- "$cur" )
80
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -A file -- "$cur")
81
81
  ;;
82
82
 
83
83
  'http'*)
84
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-listener_completions_filter "--output -o --output-format -F --host -H --port -p --vhost --root -R")" -- "$cur" )
84
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-listener_completions_filter "--output -o --output-format -F --host -H --port -p --vhost --root -R")" -- "$cur")
85
85
  ;;
86
86
 
87
- 'dns'*)
88
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-listener_completions_filter "--output -o --output-format -F --host -H --port -p")" -- "$cur" )
87
+ 'new'*)
88
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-listener_completions_filter "help dns http")" -- "$cur")
89
89
  ;;
90
90
 
91
- 'new'*)
92
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-listener_completions_filter "help dns http")" -- "$cur" )
91
+ 'dns'*)
92
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-listener_completions_filter "--output -o --output-format -F --host -H --port -p")" -- "$cur")
93
93
  ;;
94
94
 
95
95
  *)
96
- while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -W "$(_ronin-listener_completions_filter "--version -V help completion dns http new")" -- "$cur" )
96
+ while read -r; do COMPREPLY+=("$REPLY"); done < <(compgen -W "$(_ronin-listener_completions_filter "--version -V help completion dns http new")" -- "$cur")
97
97
  ;;
98
98
 
99
99
  esac
100
100
  } &&
101
- complete -F _ronin-listener_completions ronin-listener
101
+ complete -F _ronin-listener_completions ronin-listener
102
102
 
103
103
  # ex: filetype=sh
data/gemspec.yml CHANGED
@@ -2,7 +2,8 @@ name: ronin-listener
2
2
  summary: A Ruby CLI utility for receiving exfiltrated data.
3
3
  description: |
4
4
  ronin-listener is a small CLI utility for receiving exfiltrated data over DNS
5
- or HTTP.
5
+ or HTTP. Supports logging DNS queries and HTTP requests as TXT, CVS, JSON,
6
+ or NDJSON.
6
7
 
7
8
  license: LGPL-3.0
8
9
  authors: Postmodern
@@ -31,9 +32,9 @@ required_ruby_version: ">= 3.0.0"
31
32
 
32
33
  dependencies:
33
34
  # Ronin dependencies:
34
- ronin-listener-dns: ~> 0.1.0.rc1
35
- ronin-listener-http: ~> 0.1.0.rc1
36
- ronin-core: ~> 0.2.0.rc1
35
+ ronin-listener-dns: ~> 0.1
36
+ ronin-listener-http: ~> 0.1
37
+ ronin-core: ~> 0.2
37
38
 
38
39
  development_dependencies:
39
40
  bundler: ~> 2.0
@@ -108,11 +108,13 @@ module Ronin
108
108
  # The `DOMAIN` argument.
109
109
  #
110
110
  def run(domain)
111
- output_file = if options[:output] && options[:output_format]
111
+ output_file = if options[:output]
112
112
  options[:output_format].open(options[:output])
113
113
  end
114
114
 
115
- Ronin::Listener::DNS.listen(domain,**proxy_kwargs) do |query|
115
+ log_info "Listening on #{options[:host]}:#{options[:port]} ..."
116
+
117
+ Ronin::Listener::DNS.listen(domain,**server_kwargs) do |query|
116
118
  log_info "Received DNS query: #{query.type} #{query.label} from #{query.source}"
117
119
  output_file << query if output_file
118
120
  end
@@ -123,7 +125,7 @@ module Ronin
123
125
  #
124
126
  # @return [Hash{Symbol => Object}]
125
127
  #
126
- def proxy_kwargs
128
+ def server_kwargs
127
129
  {
128
130
  host: options[:host],
129
131
  port: options[:port]
@@ -116,30 +116,24 @@ module Ronin
116
116
  # Runs the `ronin-listener http` command.
117
117
  #
118
118
  def run
119
- output_file = if options[:output] && options[:output_format]
119
+ output_file = if options[:output]
120
120
  options[:output_format].open(options[:output])
121
121
  end
122
122
 
123
- Ronin::Listener::HTTP.listen(**server_kwargs) do |request|
124
- remote_addr = request.remote_address
125
-
126
- log_info "Received HTTP request from #{remote_addr.ip_address}:#{remote_addr.ip_port} ..."
123
+ log_info "Listening on #{options[:host]}:#{options[:port]} ..."
127
124
 
128
- puts "#{request.method} #{request.path}"
129
-
130
- request.headers.each do |name,value|
131
- puts "#{name}: #{value}"
132
- end
125
+ Ronin::Listener::HTTP.listen(**server_kwargs) do |request|
126
+ log_info "Received HTTP request from #{request.remote_ip}:#{request.remote_port} ..."
133
127
 
134
- puts request.body if request.body
135
- puts
128
+ puts(request)
136
129
 
137
130
  output_file << request if output_file
138
131
  end
139
132
  end
140
133
 
141
134
  #
142
- # Maps options to keyword arguments for `Ronin::Listener::HTTP.listen`.
135
+ # Maps options to keyword arguments for
136
+ # `Ronin::Listener::HTTP.listen`.
143
137
  #
144
138
  # @return [Hash{Symbol => Object}]
145
139
  #
@@ -21,6 +21,6 @@
21
21
  module Ronin
22
22
  module Listener
23
23
  # ronin-listener version
24
- VERSION = '0.1.0.rc1'
24
+ VERSION = '0.1.0'
25
25
  end
26
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ronin-listener
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.rc1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-23 00:00:00.000000000 Z
11
+ date: 2024-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ronin-listener-dns
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.0.rc1
19
+ version: '0.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.0.rc1
26
+ version: '0.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: ronin-listener-http
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.0.rc1
33
+ version: '0.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.1.0.rc1
40
+ version: '0.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: ronin-core
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.2.0.rc1
47
+ version: '0.2'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.2.0.rc1
54
+ version: '0.2'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -68,7 +68,8 @@ dependencies:
68
68
  version: '2.0'
69
69
  description: |
70
70
  ronin-listener is a small CLI utility for receiving exfiltrated data over DNS
71
- or HTTP.
71
+ or HTTP. Supports logging DNS queries and HTTP requests as TXT, CVS, JSON,
72
+ or NDJSON.
72
73
  email: postmodern.mod3@gmail.com
73
74
  executables:
74
75
  - ronin-listener
@@ -146,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
147
  - !ruby/object:Gem::Version
147
148
  version: '0'
148
149
  requirements: []
149
- rubygems_version: 3.3.27
150
+ rubygems_version: 3.5.11
150
151
  signing_key:
151
152
  specification_version: 4
152
153
  summary: A Ruby CLI utility for receiving exfiltrated data.