zlown 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 19a2c7df1dee8add69e4ebf2f10c5d695196957b
4
- data.tar.gz: ccdc99c8c26528d5e2b5c79f96c06f1f64615aac
3
+ metadata.gz: 7b6ece0b0fb285bc512cae0a12d7a7455b14071a
4
+ data.tar.gz: ea1f3d87fe1404dbb06bc8db43197e5531174ed9
5
5
  SHA512:
6
- metadata.gz: bb981a35454d833cef5f91f4fb7a26f5a5319c6d945bd544a55829d447fcbf60fcfd407b911c3f12a889f9f46be730841bbfffda25c04f891f3ebb0d67b608ad
7
- data.tar.gz: 810175e2003cf970e08dbe36e4d1223f1e66dcb59aaeb06ae8a0ce47ed1db47851acf3fda1c0601dc971934d91e8b1b2fa4c7271d88628d96be14923087f5189
6
+ metadata.gz: ea460cde4a975bb2dd6d375827af0782f83fd80f7312353e2c52b9614fe594e088a2c28800a6c1c5dd3a49c72c059487535a391453f3b379facc36ee159f6a61
7
+ data.tar.gz: fbf83a149f6c70d12895b9b6db844f89041e0ebf84f7c109334cd78b38cfb8e3cb2600412e3fad787c4deae583e29fcaed83d90194ab4038570524258e397afc
data/etc/dnsmasq.conf CHANGED
@@ -1,6 +1,6 @@
1
1
  # EVIL STARTS HERE
2
2
  log-facility=/var/log/dnsmasq.log
3
- interface=wlan1
3
+ interface=${IFACE_AP}
4
4
  dhcp-range=10.0.0.10,10.0.0.250,12h
5
5
  dhcp-option=3,10.0.0.1
6
6
  dhcp-option=6,10.0.0.1
@@ -1,7 +1,6 @@
1
- interface=wlan1
2
- driver=nl80211
3
- ssid=FreeWifi
4
- channel=6
1
+ interface=${IFACE}
2
+ driver=${DRIVER}
3
+ ssid=${SSID}
4
+ channel=${CHANNEL}
5
5
  # Yes, we support the Karma attack.
6
6
  # enable_karma=1
7
-
data/etc/rc.local CHANGED
@@ -11,6 +11,6 @@
11
11
  #
12
12
  # By default this script does nothing.
13
13
 
14
- exec /root/scripts/enable-rogue.sh
14
+ exec /root/.zlown/enable-forwarding.sh
15
15
 
16
16
  exit 0
@@ -0,0 +1,12 @@
1
+ require_relative '../shared'
2
+
3
+ require_relative '../../core/core'
4
+
5
+ module Zlown::CLI
6
+ desc 'Update all required scripts based on config'
7
+ command 'update' do |c|
8
+ c.action do |global_options, options, args|
9
+ Core.update_configs(args, options)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,42 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright (c) 2016 Tomas Korcak <korczis@gmail.com>. All rights reserved.
4
+ # This source code is licensed under the MIT-style license found in the
5
+ # LICENSE file in the root directory of this source tree.
6
+
7
+ module Zlown
8
+ module Config
9
+ APP_DIR = File.expand_path('~/.zlown')
10
+ APP_BINARY = File.expand_path('../../../bin/zlown', __FILE__)
11
+
12
+ CONFIG_FILE = File.join(APP_DIR, 'zlown.yml')
13
+
14
+ BOOT_SCRIPT = File.join(APP_DIR, 'enable-forwarding.sh')
15
+ BOOT_SCRIPT_TEMPLATE = File.expand_path('../../../scripts/enable-forwarding.sh', __FILE__)
16
+
17
+ DNSMASQ_CONFIG = '/etc/dnsmasq.conf'
18
+ DNSMASQ_TEMPLATE = File.expand_path('../../../etc/dnsmasq.conf', __FILE__)
19
+
20
+ HOSTAPD_CONFIG = '/etc/hostapd/hostapd.conf'
21
+ HOSTAPD_TEMPLATE = File.expand_path('../../../etc/hostapd/hostapd.conf', __FILE__)
22
+
23
+ HTTPRY_PID_FILE = File.join(APP_DIR, 'run', 'httpry.pid')
24
+
25
+ DATA_DIR = File.join(APP_DIR, 'data')
26
+ RUN_DIR = File.join(APP_DIR, 'run')
27
+
28
+ SERVICE_TEMPLATE = File.expand_path('../../../etc/systemd/system/zlown.service', __FILE__)
29
+ SERVICE_FILE = File.expand_path("#{APP_DIR}/zlown.service")
30
+
31
+ RCLOCAL_CONFIG = '/etc/rc.local'
32
+ RCLOCAL_TEMPLATE = File.expand_path('../../../etc/rc.local', __FILE__)
33
+
34
+ RUN_CMD = "#{APP_BINARY} run"
35
+
36
+ DNSMASQ_SERVICE = 'dnsmasq.service'
37
+ HOSTAPD_SERVICE = 'hostapd.service'
38
+
39
+ ZLOWN_SERVICE_FILE = File.expand_path('~/.zlown/zlown.service')
40
+ ZLOWN_SERVICE_NAME = 'zlown'
41
+ end
42
+ end
@@ -8,23 +8,23 @@ require 'fileutils'
8
8
  require 'highline'
9
9
  require 'yaml'
10
10
 
11
+ require_relative '../config'
12
+
11
13
  module Zlown
12
14
  class Core
13
- APP_DIR = File.expand_path('~/.zlown')
14
- APP_BINARY = File.expand_path('../../../../bin/zlown', __FILE__)
15
-
16
- CONFIG_FILE = File.join(APP_DIR, 'zlown.yml')
17
-
18
- DATA_DIR = File.join(APP_DIR, 'data')
19
- RUN_DIR = File.join(APP_DIR, 'run')
20
-
21
- SERVICE_TEMPLATE = File.expand_path('../../../../etc/systemd/system/zlown.service', __FILE__)
22
- SERVICE_FILE = File.expand_path("#{APP_DIR}/zlown.service")
23
-
24
- RUN_CMD = "#{APP_BINARY} run"
25
-
26
- DNSMASQ_SERVICE = 'dnsmasq.service'
27
- HOSTAPD_SERVICE = 'hostapd.service'
15
+ def self.load_config(args = [], opts = {})
16
+ config = {
17
+ upstream: 'eth0',
18
+ ap: 'wlan0',
19
+ driver: 'nl80211',
20
+ ssid: 'FreeWifi',
21
+ channel: '6'
22
+ }
23
+
24
+ if File.exist?(Zlown::Config::CONFIG_FILE)
25
+ config = config.merge(YAML.load(File.open(Zlown::Config::CONFIG_FILE)))
26
+ end
27
+ end
28
28
 
29
29
  def self.install(args = [], opts = {})
30
30
  cmd = 'apt-get install -y hostapd dnsmasq wireless-tools iw wvdial'
@@ -32,67 +32,159 @@ module Zlown
32
32
  system cmd
33
33
  end
34
34
 
35
- def self.init(args = [], opts = {})
36
- unless File.directory?(APP_DIR)
37
- puts "Creating directory #{APP_DIR}"
38
- FileUtils.mkdir_p(APP_DIR)
35
+ def self.init_dirs(args = [], opts = {})
36
+ unless File.directory?(Zlown::Config::APP_DIR)
37
+ puts "Creating directory #{Zlown::Config::APP_DIR}"
38
+ FileUtils.mkdir_p(Zlown::Config::APP_DIR)
39
39
  end
40
40
 
41
- unless File.directory?(DATA_DIR)
42
- puts "Creating directory #{DATA_DIR}"
43
- FileUtils.mkdir_p(DATA_DIR)
41
+ unless File.directory?(Zlown::Config::DATA_DIR)
42
+ puts "Creating directory #{Zlown::Config::DATA_DIR}"
43
+ FileUtils.mkdir_p(Zlown::Config::DATA_DIR)
44
44
  end
45
45
 
46
- unless File.directory?(RUN_DIR)
47
- puts "Creating directory #{RUN_DIR}"
48
- FileUtils.mkdir_p(RUN_DIR)
46
+ unless File.directory?(Zlown::Config::RUN_DIR)
47
+ puts "Creating directory #{Zlown::Config::RUN_DIR}"
48
+ FileUtils.mkdir_p(Zlown::Config::RUN_DIR)
49
49
  end
50
+ end
50
51
 
51
- template = File.read(SERVICE_TEMPLATE)
52
- content = template.gsub('#{RUN_CMD}', RUN_CMD)
52
+ def self.init_service_template(args = [], opts = {})
53
+ template = File.read(Zlown::Config::SERVICE_TEMPLATE)
54
+ content = template.gsub('#{RUN_CMD}', Zlown::Config::RUN_CMD)
53
55
 
54
56
  # To write changes to the file, use:
55
- File.open(SERVICE_FILE, 'w') do |file|
56
- puts "Writting file #{SERVICE_FILE}"
57
+ File.open(Zlown::Config::SERVICE_FILE, 'w') do |file|
58
+ puts "Writting file #{Zlown::Config::SERVICE_FILE}"
57
59
  file.puts content
58
60
  end
61
+ end
59
62
 
60
- config = {}
61
- if File.exist?(CONFIG_FILE)
62
- config = YAML.load(File.open(CONFIG_FILE))
63
- end
63
+ def self.init_config_file(args = [], opts = {})
64
+ config = Core.load_config(args, opts)
64
65
 
65
66
  cli = HighLine.new
66
- config[:upstream] = cli.ask('upstream interface?') { |q| q.default = config[:upstream] || 'eth0' }
67
- config[:ap] = cli.ask('wifi ap interface?') { |q| q.default = config[:ap] || 'wlan0pa' }
68
-
69
- puts "Writting config to #{CONFIG_FILE}"
70
- File.open(CONFIG_FILE, 'w') do |f|
67
+ config[:upstream] = cli.ask('Upstream Interface?') { |q| q.default = config[:upstream] }
68
+ config[:ap] = cli.ask('Wi-Fi ap Interface?') { |q| q.default = config[:ap] }
69
+ config[:driver] = cli.ask('Wi-Fi Driver?') { |q| q.default = config[:driver] }
70
+ config[:ssid] = cli.ask('Wi-Fi SSID?') { |q| q.default = config[:ssid] }
71
+ config[:channel] = cli.ask('Wi-Fi Channel?') { |q| q.default = config[:channel] }
72
+
73
+ puts "Writting config to #{Zlown::Config::CONFIG_FILE}"
74
+ File.open(Zlown::Config::CONFIG_FILE, 'w') do |f|
71
75
  f.write config.to_yaml
72
76
  end
73
77
 
74
- # See https://www.offensive-security.com/kali-linux/kali-linux-evil-wireless-access-point/
75
- cmd = "sed -i 's#^DAEMON_CONF=.*#DAEMON_CONF=/etc/hostapd/hostapd.conf#' /etc/init.d/hostapd"
78
+ config
79
+ end
80
+
81
+ def self.init_systemctl(args = [], opts = {})
82
+ # TODO: Process dnsmasq.conf and hostapd.conf
83
+
84
+ cmd = "systemctl enable #{Zlown::Config::HOSTAPD_SERVICE}"
76
85
  puts cmd
77
86
  system cmd
78
87
 
79
- # TODO: Process dnsmasq.conf and hostapd.conf
88
+ cmd = "systemctl enable #{Zlown::Config::DNSMASQ_SERVICE}"
89
+ puts cmd
90
+ system cmd
80
91
 
81
- cmd = "systemctl enable #{HOSTAPD_SERVICE}"
92
+ cmd = "systemctl start #{Zlown::Config::HOSTAPD_SERVICE}"
82
93
  puts cmd
83
94
  system cmd
84
95
 
85
- cmd = "systemctl enable #{DNSMASQ_SERVICE}"
96
+ cmd = "systemctl start #{Zlown::Config::DNSMASQ_SERVICE}"
86
97
  puts cmd
87
98
  system cmd
99
+ end
100
+
101
+ def self.init_dnsmaq(args = [], opts = {})
102
+ config = Core.load_config(args, opts)
88
103
 
89
- cmd = "systemctl start #{HOSTAPD_SERVICE}"
104
+ template = File.read(Zlown::Config::DNSMASQ_TEMPLATE)
105
+ content = template.gsub('${IFACE_AP}', config[:ap])
106
+
107
+ # To write changes to the file, use:
108
+ File.open(Zlown::Config::DNSMASQ_CONFIG, 'w') do |file|
109
+ puts "Writting file #{Zlown::Config::DNSMASQ_CONFIG}"
110
+ file.puts content
111
+ end
112
+ end
113
+
114
+ def self.init_hostapd(args = [], opts = {})
115
+ # See https://www.offensive-security.com/kali-linux/kali-linux-evil-wireless-access-point/
116
+ cmd = "sed -i 's#^DAEMON_CONF=.*#DAEMON_CONF=/etc/hostapd/hostapd.conf#' /etc/init.d/hostapd"
90
117
  puts cmd
91
118
  system cmd
92
119
 
93
- cmd = "systemctl start #{DNSMASQ_SERVICE}"
120
+ config = Core.load_config(args, opts)
121
+
122
+ template = File.read(Zlown::Config::HOSTAPD_TEMPLATE)
123
+ content = template
124
+ .gsub('${IFACE}', config[:ap])
125
+ .gsub('${DRIVER}', config[:driver])
126
+ .gsub('${SSID}', config[:ssid])
127
+ .gsub('${CHANNEL}', config[:channel])
128
+
129
+ # To write changes to the file, use:
130
+ File.open(Zlown::Config::HOSTAPD_CONFIG, 'w') do |file|
131
+ puts "Writting file #{Zlown::Config::HOSTAPD_CONFIG}"
132
+ file.puts content
133
+ end
134
+ end
135
+
136
+ def self.init_boot_script(args = [], opts = {})
137
+ config = Core.load_config(args, opts)
138
+
139
+ template = File.read(Zlown::Config::BOOT_SCRIPT_TEMPLATE)
140
+ content = template
141
+ .gsub('${IFACE_AP}', config[:ap])
142
+ .gsub('${IFACE_UPSTREAM}', config[:upstream])
143
+
144
+ # To write changes to the file, use:
145
+ File.open(Zlown::Config::BOOT_SCRIPT, 'w') do |file|
146
+ puts "Writting file #{Zlown::Config::BOOT_SCRIPT}"
147
+ file.puts content
148
+ end
149
+
150
+ cmd = "chmod +x #{Zlown::Config::BOOT_SCRIPT}"
94
151
  puts cmd
95
152
  system cmd
96
153
  end
154
+
155
+ def self.init_rc_local(args = [], opts = {})
156
+ Core.init_boot_script(args, opts)
157
+
158
+ config = Core.load_config(args, opts)
159
+
160
+ template = File.read(Zlown::Config::RCLOCAL_TEMPLATE)
161
+ content = template
162
+
163
+ # To write changes to the file, use:
164
+ File.open(Zlown::Config::RCLOCAL_CONFIG, 'w') do |file|
165
+ puts "Writting file #{Zlown::Config::RCLOCAL_CONFIG}"
166
+ file.puts content
167
+ end
168
+ end
169
+
170
+ def self.update_configs(args = [], opts = {})
171
+ Core.init_dnsmaq(args, opts)
172
+
173
+ Core.init_hostapd(args, opts)
174
+
175
+ Core.init_rc_local(args, opts)
176
+
177
+ Core.init_systemctl(args, opts)
178
+ end
179
+
180
+ def self.init(args = [], opts = {})
181
+ Core.init_dirs(args, opts)
182
+
183
+ Core.init_service_template(args, opts)
184
+
185
+ Core.init_config_file(args, opts)
186
+
187
+ Core.update_configs(args, opts)
188
+ end
97
189
  end
98
190
  end
@@ -4,18 +4,18 @@
4
4
  # This source code is licensed under the MIT-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
7
+ require_relative '../config'
8
+
7
9
  module Zlown
8
10
  class Script
9
- HTTPRY_PID_FILE = '/root/.zlown/run/httpry.pid'
10
-
11
11
  def self.httpry_start(args = [], opts = {})
12
- cmd = "httpry -d -P #{HTTPRY_PID_FILE} -i wlan1 -o /root/.zlown/data/httpry.log -b /root/.zlown/data/httpry.bin"
12
+ cmd = "httpry -d -P #{Zlown::Config::HTTPRY_PID_FILE} -i wlan1 -o /root/.zlown/data/httpry.log -b /root/.zlown/data/httpry.bin"
13
13
  puts cmd
14
14
  system cmd
15
15
  end
16
16
 
17
17
  def self.httpry_stop(args = [], opts = {})
18
- pid = File.open(HTTPRY_PID_FILE).read.to_i
18
+ pid = File.open(Zlown::Config::HTTPRY_PID_FILE).read.to_i
19
19
  cmd = "kill #{pid}"
20
20
  puts cmd
21
21
  system cmd
@@ -4,27 +4,26 @@
4
4
  # This source code is licensed under the MIT-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
7
+ require_relative '../config'
8
+
7
9
  module Zlown
8
10
  class Systemctl
9
- SERVICE_FILE = File.expand_path('~/.zlown/zlown.service')
10
- SERVICE_NAME = 'zlown'
11
-
12
11
  def self.enable(args = [], opts = {})
13
12
  puts 'Enabling systemctl service'
14
- cmd = "systemctl enable #{SERVICE_FILE}"
13
+ cmd = "systemctl enable #{Zlown::Config::ZLOWN_SERVICE_FILE}"
15
14
  puts cmd
16
15
  system cmd
17
16
  end
18
17
 
19
18
  def self.disable(args = [], opts = {})
20
19
  puts 'Disabling systemctl service'
21
- cmd = "systemctl disable #{SERVICE_NAME}"
20
+ cmd = "systemctl disable #{Zlown::Config::ZLOWN_SERVICE_NAME}"
22
21
  system cmd
23
22
  end
24
23
 
25
24
  def self.start(args = [], opts = {})
26
25
  puts 'Starting systemctl service'
27
- cmd = "systemctl start #{SERVICE_NAME}"
26
+ cmd = "systemctl start #{Zlown::Config::ZLOWN_SERVICE_NAME}"
28
27
  system cmd
29
28
  end
30
29
 
@@ -35,12 +34,12 @@ module Zlown
35
34
  end
36
35
 
37
36
  def self.status(args = [], opts = {})
38
- cmd = "systemctl status #{SERVICE_NAME}"
37
+ cmd = "systemctl status #{Zlown::Config::ZLOWN_SERVICE_NAME}"
39
38
  system cmd
40
39
  end
41
40
 
42
41
  def self.log(args = [], opts = {})
43
- cmd = "journalctl -u #{SERVICE_NAME}"
42
+ cmd = "journalctl -u #{Zlown::Config::ZLOWN_SERVICE_NAME}"
44
43
  system cmd
45
44
  end
46
45
  end
data/lib/zlown/version.rb CHANGED
@@ -5,5 +5,5 @@
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
7
7
  module Zlown
8
- VERSION = '0.0.2'.freeze
8
+ VERSION = '0.0.3'.freeze
9
9
  end
@@ -0,0 +1,8 @@
1
+ #! /usr/bin/env bash
2
+
3
+ iptables -t nat -F
4
+ iptables -F
5
+ iptables -t nat -A POSTROUTING -o ${IFACE_UPSTREAM} -j MASQUERADE
6
+ iptables -A FORWARD -i ${IFACE_AP} -o ${IFACE_UPSTREAM} -j ACCEPT
7
+
8
+ echo '1' > /proc/sys/net/ipv4/ip_forward
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zlown
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomas Korcak
@@ -134,14 +134,16 @@ files:
134
134
  - lib/zlown/cli/cmd/run_cmd.rb
135
135
  - lib/zlown/cli/cmd/script_cmd.rb
136
136
  - lib/zlown/cli/cmd/systemctl_cmd.rb
137
+ - lib/zlown/cli/cmd/update_cmd.rb
137
138
  - lib/zlown/cli/cmd/version_cmd.rb
138
139
  - lib/zlown/cli/shared.rb
140
+ - lib/zlown/config.rb
139
141
  - lib/zlown/core/core.rb
140
142
  - lib/zlown/daemon/daemon.rb
141
143
  - lib/zlown/script/script.rb
142
144
  - lib/zlown/systemctl/systemctl.rb
143
145
  - lib/zlown/version.rb
144
- - scripts/enable-rogue.sh
146
+ - scripts/enable-forwarding.sh
145
147
  - scripts/sniff-httpry.sh
146
148
  - scripts/sniff-ngrep.sh
147
149
  - scripts/wifi-power.sh
@@ -1,12 +0,0 @@
1
- #! /usr/bin/env bash
2
-
3
- IF_WIFI=wlan1
4
- IF_LTE=eth1
5
-
6
- iptables -t nat -F
7
- iptables -F
8
- iptables -t nat -A POSTROUTING -o ${IF_LTE} -j MASQUERADE
9
- iptables -A FORWARD -i ${IF_WIFI} -o ${IF_LTE} -j ACCEPT
10
-
11
- # echo '1' > /proc/sys/net/ipv4/ip_forward
12
-