Merge pull request #46 from jayofelony/dev

Dev to master
This commit is contained in:
Jayofelony
2024-02-04 18:04:44 +01:00
committed by GitHub
12 changed files with 61 additions and 66 deletions

View File

@ -1 +0,0 @@
hcxtools

View File

@ -60,6 +60,7 @@ def pwnagotchi_cli():
channels = agent.get_access_points_by_channel()
# for each channel
for ch, aps in channels:
time.sleep(0.2) # This is to make sure it doesn't error (https://github.com/seemoo-lab/nexmon/issues/596)
agent.set_channel(ch)
if not agent.is_stale() and agent.any_activity():

View File

@ -9,15 +9,6 @@ if is_crypted_mode; then
done
fi
# check if wifi driver is bugged
if ! check_brcm; then
if ! reload_brcm; then
echo "Could not reload wifi driver. Reboot"
reboot
fi
sleep 10
fi
# start mon0
start_monitor_interface

View File

@ -13,14 +13,6 @@ blink_led() {
sleep 0.3
}
# check if brcm is stuck
check_brcm() {
if [[ "$(journalctl -n10 -k --since -5m | grep -c 'brcmf_cfg80211_nexmon_set_channel.*Set Channel failed')" -ge 5 ]]; then
return 1
fi
return 0
}
# reload mod
reload_brcm() {
if ! modprobe -r brcmfmac; then

View File

@ -74,6 +74,10 @@ build {
inline = ["chmod +x /usr/bin/*"]
}
provisioner "shell" {
inline = ["dpkg --add-architecture armhf"]
}
provisioner "file" {
destination = "/etc/systemd/system/"
sources = [
@ -91,7 +95,11 @@ build {
inline = ["chmod +x /etc/update-motd.d/*"]
}
provisioner "shell" {
inline = ["apt-get -y --allow-releaseinfo-change update", "apt-get -y dist-upgrade", "apt-get install -y --no-install-recommends ansible"]
inline = [
"apt-get -y --allow-releaseinfo-change update",
"apt-get -y dist-upgrade",
"apt-get install -y --no-install-recommends ansible"
]
}
provisioner "ansible-local" {
command = "ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 PWN_VERSION=${var.pwn_version} PWN_HOSTNAME=${var.pwn_hostname} ansible-playbook"

View File

@ -6,8 +6,8 @@
vars:
kernel:
min: "6.1"
full: "6.1.0-rpi7-rpi-v8"
full_pi5: "6.1.0-rpi7-rpi-2712"
full: "6.1.0-rpi8-rpi-v8"
full_pi5: "6.1.0-rpi8-rpi-2712"
pwnagotchi:
hostname: "{{ lookup('env', 'PWN_HOSTNAME') | default('pwnagotchi', true) }}"
version: "{{ lookup('env', 'PWN_VERSION') | default('pwnagotchi-torch', true) }}"
@ -79,6 +79,11 @@
- curl
- dkms
- fbi
- firmware-atheros
- firmware-brcm80211
- firmware-libertas
- firmware-misc-nonfree
- firmware-realtek
- flex
- fonts-dejavu
- fonts-dejavu-core
@ -97,9 +102,9 @@
- libbz2-dev
- libc-ares-dev
- libc6-dev
- libc6:armhf
- libcap-dev
- libcurl-ocaml-dev
- libssl-ocaml-dev
- libdbus-1-dev
- libdbus-glib-1-dev
- libeigen3-dev
@ -112,7 +117,10 @@
- libgmp3-dev
- libgstreamer1.0-0
- libhdf5-dev
- libisl23:armhf
- liblapack-dev
- libmpc3:armhf
- libmpfr6:armhf
- libncursesw5-dev
- libnetfilter-queue-dev
- libopenblas-dev
@ -126,34 +134,31 @@
- libraspberrypi0
- libsqlite3-dev
- libssl-dev
- libssl-ocaml-dev
- libstdc++6:armhf
- libswscale5
- libtiff6
- libtool
- libusb-1.0-0-dev
- lsof
- make
- python3-yaml
- python3-dbus
- python3-flask
- python3-flask-cors
- python3-flaskext.wtf
- python3-gast
- python3-pil
- python3-pip
- python3-pycryptodome
- python3-requests
- python3-scapy
- python3-setuptools
- python3-smbus
- python3-smbus2
- python3-spidev
- python3-tweepy
- python3-werkzeug
- firmware-atheros
- firmware-brcm80211
- firmware-libertas
- firmware-misc-nonfree
- firmware-realtek
- python3-pip
- python3-setuptools
- python3-smbus
- python3-yaml
- qpdf
- raspberrypi-kernel-headers
- rsync
@ -291,9 +296,21 @@
path: /usr/local/src/hcxtools
# Install nexmon to fix wireless scanning (takes 2.5G of space)
- name: symlink 1
file:
src: "/usr/lib/arm-linux-gnueabihf/libisl.so.23.2.0"
dest: "/usr/lib/arm-linux-gnueabihf/libisl.so.10"
state: link
- name: symlink 2
file:
src: "/usr/lib/arm-linux-gnueabihf/libmpfr.so.6.2.0"
dest: "/usr/lib/arm-linux-gnueabihf/libmpfr.so.4"
state: link
- name: clone nexmon repository
git:
repo: https://github.com/DrSchottky/nexmon.git
repo: https://github.com/seemoo-lab/nexmon.git
dest: /usr/local/src/nexmon
# FIRST WE BUILD DRIVER FOR RPi5
@ -346,7 +363,7 @@
- name: clone nexmon repository
git:
repo: https://github.com/DrSchottky/nexmon.git
repo: https://github.com/seemoo-lab/nexmon.git
dest: /usr/local/src/nexmon
- name: make firmware, RPi4

View File

@ -1 +1 @@
__version__ = '2.8.0'
__version__ = '2.8.1'

View File

@ -21,11 +21,12 @@ RECOVERY_DATA_FILE = '/root/.pwnagotchi-recovery'
class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
def __init__(self, view, config, keypair):
Client.__init__(self, config['bettercap']['hostname'],
config['bettercap']['scheme'],
config['bettercap']['port'],
config['bettercap']['username'],
config['bettercap']['password'])
Client.__init__(self,
"127.0.0.1" if "hostname" not in config['bettercap'] else config['bettercap']['hostname'],
"http" if "scheme" not in config['bettercap'] else config['bettercap']['scheme'],
8081 if "port" not in config['bettercap'] else config['bettercap']['port'],
"pwnagotchi" if "username" not in config['bettercap'] else config['bettercap']['username'],
"pwnagotchi" if "password" not in config['bettercap'] else config['bettercap']['password'])
Automata.__init__(self, config, view)
AsyncAdvertiser.__init__(self, config, view, keypair)
AsyncTrainer.__init__(self, config)
@ -362,7 +363,8 @@ class Agent(Client, Automata, AsyncAdvertiser, AsyncTrainer):
plugins.on('handshake', self, filename, ap_mac, sta_mac)
else:
(ap, sta) = ap_and_station
self._last_pwnd = ap['hostname'] if ap['hostname'] != '' and ap['hostname'] != '<hidden>' else ap_mac
self._last_pwnd = ap['hostname'] if ap['hostname'] != '' and ap[
'hostname'] != '<hidden>' else ap_mac
logging.warning(
"!!! captured new handshake on channel %d, %d dBm: %s (%s) -> %s [%s (%s)] !!!",
ap['channel'], ap['rssi'], sta['mac'], sta['vendor'], ap['hostname'], ap['mac'], ap['vendor'])

View File

@ -198,11 +198,6 @@ ui.display.enabled = false
ui.display.rotation = 180
ui.display.type = "waveshare_4"
bettercap.scheme = "http"
bettercap.hostname = "localhost"
bettercap.port = 8081
bettercap.username = "pwnagotchi"
bettercap.password = "pwnagotchi"
bettercap.handshakes = "/root/handshakes"
bettercap.silence = [
"ble.device.new",

View File

@ -46,7 +46,7 @@ class FixServices(plugins.Plugin):
last_lines = self.get_last_lines('journalctl', ['-n10', '-k'], 10)
try:
cmd_output = subprocess.check_output("ip link show wlan0mon", shell=True)
logging.info("[Fix_Services ip link show wlan0mon]: %s" % repr(cmd_output))
logging.debug("[Fix_Services ip link show wlan0mon]: %s" % repr(cmd_output))
if ",UP," in str(cmd_output):
logging.info("wlan0mon is up.")
@ -122,7 +122,7 @@ class FixServices(plugins.Plugin):
# Look for pattern 1
if len(self.pattern.findall(last_lines)) >= 3:
logging.info("[Fix_Services]**** Should trigger a reload of the wlan0mon device:\n%s" % last_lines)
logging.debug("[Fix_Services]**** Should trigger a reload of the wlan0mon device:\n%s" % last_lines)
if hasattr(agent, 'view'):
display = agent.view()
display.set('status', 'Blind-Bug detected. Restarting.')
@ -135,7 +135,7 @@ class FixServices(plugins.Plugin):
# Look for pattern 2
elif len(self.pattern2.findall(other_last_lines)) >= 5:
logging.info("[Fix_Services]**** Should trigger a reload of the wlan0mon device:\n%s" % last_lines)
logging.debug("[Fix_Services]**** Should trigger a reload of the wlan0mon device:\n%s" % last_lines)
if hasattr(agent, 'view'):
display = agent.view()
display.set('status', 'Wifi channel stuck. Restarting recon.')
@ -167,7 +167,7 @@ class FixServices(plugins.Plugin):
try:
# Run the monstart command to restart wlan0mon
cmd_output = subprocess.check_output("monstart", shell=True)
logging.info("[Fix_Services monstart]: %s" % repr(cmd_output))
logging.debug("[Fix_Services monstart]: %s" % repr(cmd_output))
except Exception as err:
logging.error("[Fix_Services monstart]: %s" % repr(err))
@ -181,7 +181,7 @@ class FixServices(plugins.Plugin):
try:
# Run the monstart command to restart wlan0mon
cmd_output = subprocess.check_output("monstart", shell=True)
logging.info("[Fix_Services monstart]: %s" % repr(cmd_output))
logging.debug("[Fix_Services monstart]: %s" % repr(cmd_output))
except Exception as err:
logging.error("[Fix_Services monstart]: %s" % repr(err))
@ -237,7 +237,7 @@ class FixServices(plugins.Plugin):
# is it up?
try:
cmd_output = subprocess.check_output("ip link show wlan0mon", shell=True)
logging.info("[Fix_Services ip link show wlan0mon]: %s" % repr(cmd_output))
logging.debug("[Fix_Services ip link show wlan0mon]: %s" % repr(cmd_output))
if ",UP," in str(cmd_output):
logging.info("wlan0mon is up. Skip reset?")
# not reliable, so don't skip just yet
@ -309,11 +309,9 @@ class FixServices(plugins.Plugin):
# stop looping and get back to recon
break
else:
logging.info(
"[Fix_Services set wifi.interfaceface wlan0mon] failed? %s" % repr(result))
logging.debug("[Fix_Services set wifi.interfaceface wlan0mon] failed? %s" % repr(result))
except Exception as err:
logging.info(
"[Fix_Services set wifi.interface wlan0mon] except: %s" % repr(err))
logging.debug("[Fix_Services set wifi.interface wlan0mon] except: %s" % repr(err))
except Exception as cerr: #
if not display:
print("failed loading wlan0mon attempt #%s: %s" % (tries, repr(cerr)))
@ -362,7 +360,7 @@ class FixServices(plugins.Plugin):
"face": faces.HAPPY})
else:
print("I can see again")
logging.info("[Fix_Services] wifi.recon on")
logging.debug("[Fix_Services] wifi.recon on")
self.LASTTRY = time.time() + 120 # 2-minute pause until next time.
else:
logging.error("[Fix_Services] wifi.recon did not start up")
@ -378,7 +376,7 @@ class FixServices(plugins.Plugin):
try:
logging.info("[Fix_Services] unloaded")
except Exception as err:
logging.info("[Fix_Services] unload err %s " % repr(err))
logging.error("[Fix_Services] unload err %s " % repr(err))
pass

View File

@ -153,8 +153,7 @@ class View(object):
self.set('uptime', last_session.duration)
self.set('channel', '-')
self.set('aps', "%d" % last_session.associated)
self.set('shakes', '%d (%s)' % (last_session.handshakes, \
utils.total_unique_handshakes(self._config['bettercap']['handshakes'])))
self.set('shakes', '%d (%s)' % (last_session.handshakes, utils.total_unique_handshakes(self._config['bettercap']['handshakes'])))
self.set_closest_peer(last_session.last_peer, last_session.peers)
self.update()

View File

@ -30,13 +30,6 @@ def install_file(source_filename, dest_filename):
def install_system_files():
f = open("apt_packages.txt", "r")
for x in f:
if x == "":
continue
os.system(f"apt-get install {x}")
f.close()
setup_path = os.path.dirname(__file__)
data_path = os.path.join(setup_path, "builder/data")