zlown 0.0.2 → 0.0.3

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
  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
-