martedì 16 ottobre 2018

GL-AR150 con Captive Portal in OpenWRT

Ho preso un GL-Inet Mini Router per vedere se riesco realizzare un captive portal per la mia rete casalinga. Si tratta di un oggetto decisamente economico (almeno per quello che fa..circa 30 euro) con due interfacce ethernet ed una wireless piu' OpenWRT (esistono due versioni: un firmware openwrt customizzato ed uno stock))


Per reinstallare il firmware si deve:
1) connettere il cavo Ethernet sulla LAN (non e' neccessario un cavo cross)
2) premere il tasto Reset
3) inserire il cavo di alimentazione
4) attendere che led rosso lampeggi "esattamente" 5 volte
5) impostare il portatile su 192.168.1.2
6) connettersi via browser al 192.168.1.1
7) si effettua l'upload del file firmware


8) al riavvio ci si trovera' di fronte al nuovo SSID GL.iNET. La password di default e' goodlife
9) connessi all'AP ci si deve collegare al 192.168.1.1 nel caso di firmware stock o al 192.168.8.1 nel caso di OpenWRT modificato da GL.iNET

Il collegamento puo' essere fatto sia via interfaccia Web che tramite SSH. Preferisco la seconda

Di default la scheda wifi e' gia' in bridge con la WAN per cui non si sono da fare ulteriori impostazioni

Per installare il captive portal ho scelto NoDogSplash perche' a me non serve l'autenticazione ma solo uno splash screen 

Per prima cosa ho tolto il wpa sull'access point in modo da risultare in AP libero

opkg update
opkg install nodogsplash

di default il portale captivo non si attiva. Si deve andare nel file di configurazione che si trova in /etc/config/nodogsplash e si deve settare ad 1 

option enabled 1 

si salva e poi 

/etc/init.d/nodogsplah start

per verificare lo stato del portale captivo si usa

ndsctl status

qui si vedono i client loggati 
per togliere l'autorizzazione ad un client (utile in fase di debug)

ndsctl deauth (inserire mac od ip del client)

la configurazione della pagina di splash e' in /etc/nodogsplah/htdocs/ e come e' abbastanza evidente e' una semplice pagina html

Ogni volta che un client si collega all'AP free viene indicato dal dispositivo che l'antenna e' un portale captivo e si ha la redirezione verso lo splash screen


In un primo tentativo di creare un portale captivo avevo seguito la strada di dirottare il traffico verso lo splash screen tramite DNS ma cio' ha creato un delirio di problemi con il traffico https per problemi legati ai certificati 

lunedì 15 ottobre 2018

WOW FastWeb

WOW....ovvero l'esclamazione che fai quando lo disattivi

Da quando mi sono trasferito a Firenze ho notato che la connessione di dati FastWeb era nettamente peggiore di quella presente nel Comune di Fiesole

Ci ho girato intorno per piu' di mese, pensando anche che qualcuno potesse avere craccato la password (molto improbabile) ma alla fine sono riuscito a venirne a capo.
Mi sono accorto che la lista degli access point nella scheda di ricerca presentava il mio, una serie di AP dei vicini ed un WOW FI FastWeb caratterizzato da avere un segnale particolarmente intenso e paragonabile con il mio AP. ...ho scoperto che, senza essermi stato richiesto e senza nemmeno essere stato avvisato, il mio router aveva attivato un AP virtuale peraltro sullo canale WiFi oltre a quello principale

Una volta disabilitato questo servizio dalla MyFastWebPage

http://www.fastweb.it/myfastpage/abbonamento/wow-fi/

 (la disattivazione non e' immediata ma e' arrivata nel giro di qualche ora con conferma via SMS) adesso la rete funzione in modo ottimale

Abetone Outdoor

Una nuova applicazione...parente stretta di Abetone Trail Park. Ho scoperto che adesso si possono sottomettere al PlayStore solo app con minSDK >=26...il che vuole dire che mi sono giocato circa l'80% del pubblico







mercoledì 26 settembre 2018

DeAuth WiFi Clients con ESP8266

Questo e' un progettino semplice e veloce che pero' mi risolve un problema familiare.
Sono in costante battaglia con mio figlio che passa il tempo sul divano a guardare Youtube sul divano. Quando esagera (e se non bastano un paio di avvisi) gli stacco l'antenna WiFi bloccando pero' tutti gli altri client connessi

Ho scoperto che e' possibile forzare la disconnessione di un client mandando dei pacchetti di DeAutorizzazione DeAuth all'Access Point. Tale pratica peraltro sembra che sia legittima ed insita all'interno del protocollo WiFi e quindi non evitabile

In pratica si prende un comune NodeMCU con ESP 82666 e si installa il firmware esp8266_deauther
si scarica il file a questo indirizzo

https://github.com/spacehuhn/esp8266_deauther/releases/download/v2.0.5/ESP8266_Deauther_v2.0.5_DSTIKE_Deauther_v3_._DSTIKE_NodeMCU-07_v2.bin

per comodita' lo ho rinominato esp8266.bin, poi si installa il file .bin con il seguente comando

esptool.py -p /dev/ttyUSB3 write_flash -fm qio 0x0000 esp8266.bin 

ci si collega poi all'AP di nome pwned con password deauther (questi nomi possono essere modificati ricompilando il firmware da sorgenti) all'indirizzo 192.168.4.1
Si effettua la scansione degli AP visibili (Scan APS sulla prima pagina dopo il disclaimer) e si seleziona la stazione su cui si voglio deautorizzare i client (si vede il segno di spunta). 

Attenzione: la risposta del 8266 e' molto molto lenta


si passa poi al tab Attack e si sceglie l'operazione da effettuare (Start/Stop)


martedì 25 settembre 2018

Captive Portal su Raspberry Pi Zero W

Un esempio di Captive Portal (ovvero un Access Point WiFi che obbliga gli utenti a visualizzare determinate pagine, sia per loggarsi per l'accesso ad internet sia per altri accedere ad un web server interno)

La Raspberry Pi Zero W, non avendo due schede di rete di default come la 3b+, non puo' essere usata per fornire accesso ad internet come router


Per prima cosa si deve installare sulla SD una Raspbian Lite . Dato l'uso in HeadLess mode e' necessario configurare la scheda via SSH, non abilitata di default tramite la porta USB OTG, non abilitata di default

Una volta formattata la scheda SD si monta la partizione boot e
1) si inserisce un file vuoto denominato ssh (senza estensione)
2) si modifica il file config.txt aggiungendo una ultima riga con scritto dtoverlay=dwc2
3) si modifica il file cmdline.txt aggiungendo modules-load=dwc2,g_ether subito dopo rootwait

Fatto cio' si inserisce la SD nella Raspberry e si collega un cavo microUSB nella porta posta piu' centralmente collegando l'altro cavo al PC (l'alimentazione e' data dallo stesso cavo e non e' necessario di collegare la seconda USB)

A questo punto da PC (Linux o Mac) si puo' entrare in shell mediante SSH con il comando

ssh pi@raspberrypi.local

password : raspberry

si passa quindi a configurare la connessione WiFi per l'aggiornamento dei pacchetti con

sudo raspi-config 

opzione Netowork Options/Wifi dove si inseriscono i dati dell'Acces Point
si aggiorna il sistema e si installano i pacchetti

apt-get install hostapd dnsmasq apache2 php7.0

(questa configurazione e' stata ripresa da qui togliendo la parte malevola)

rc.local
-----------------------------------------------------------

service apache2 start

sleep 1
hostapd -B /etc/hostapd/hostapd.conf
sleep 2
ifconfig br0 up
ifconfig br0 10.1.1.1 netmask 255.255.255.0
sysctl net.ipv4.ip_forward=1
iptables --flush
iptables -t nat --flush
iptables -t nat -A PREROUTING -i br0 -p udp -m udp --dport 53 -j DNAT --to-destination 10.1.1.1:53
iptables -t nat -A PREROUTING -i br0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.1.1.1:80
iptables -t nat -A PREROUTING -i br0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.1.1.1:80
iptables -t nat -A POSTROUTING -j MASQUERADE
service dnsmasq start
exit 0


-----------------------------------------------------------

hostapd.conf
-----------------------------------------------------------
interface=wlan0
channel=6
hw_mode=g
ssid=Wi-Fi
bridge=br0
auth_algs=1
wmm_enabled=0
------------------------------------------------------------

dnsmasq.conf

------------------------------------------------------------
interface=br0
listen-address=10.1.1.1
no-hosts
dhcp-range=10.1.1.2,10.1.1.254,72h
dhcp-option=option:router,10.1.1.1
dhcp-authoritative

address=/apple.com/10.1.1.1
address=/appleiphonecell.com/10.1.1.1
address=/airport.us/10.1.1.1
address=/akamaiedge.net/10.1.1.1
address=/akamaitechnologies.com/10.1.1.1
address=/microsoft.com/10.1.1.1
address=/msftncsi.com/10.1.1.1
address=/msftconnecttest.com/10.1.1.1
address=/google.com/10.1.1.1
address=/gstatic.com/10.1.1.1
address=/googleapis.com/10.1.1.1
address=/android.com/10.1.1.1


override.conf
------------------------------------------------------------
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order Allow,Deny
 Allow from all
</Directory>
------------------------------------------------------------






venerdì 21 settembre 2018

Leaflet JS e GeoJSon

Alcune volte mi capita di dover convertire delle tracce GPX per visualizzarle con LeafletJS.
In generale il primo lavoro e' quello di rimuovere il dato di quota tramite la app (opzione flatten)
 
https://wtracks.appspot.com/

per poi semplificare il percorso mediante 

https://github.com/stefanocudini/gpx-simplify-optimizer

a questo punto rimane l.ultimo problema...ovvero che il formato GeoJSon usa il formato [lon,lat] mentre Leaflet usa [lat,lon]

per convertire i dati nel giusto formato e formattarli in un array javascript per poterli incollare nell'oggetto ployline di Leaflet ho scritto questo semplice codice che usa la libreria Python GeoJson (pip install geojson)
-------------------------------------------------------------------------------------------
import geojson
with open('svizzera_flat_1069nodes.geojson') as f:
    data = geojson.load(f)
   
for feature in data['features']:
    #print feature['geometry']['type']
    #print feature['geometry']['coordinates']+'\n'
    coo = feature['geometry']['coordinates']
    for p in coo: print "["+str(p[1]) + "," + str(p[0])+"],"

mercoledì 12 settembre 2018

Unbox GPS Tracker K8

Mi e' stato prestato un il GPS Tracker K8 perche' non presenta segni di vita. Ho provato a smontarlo per vedere se riuscivo a trovare qualche connettore di programmazione o seriale da cui poter interagire


In generale l'interazione avviene attravero una App FindME (che chiede peraltro permessi per nulla giustificati per esempio al GPS, alla fotocamera od al microfono) oppure inviando SMS alla numero della SIM interna. Da quanto risulta dalla scheda tecnica il posizionamento avviene tramite GPS o LBS (nel secondo caso i dati sono gestiti da un server esterno per la triangolazione delle antenne). La connessione non avviene direttamente tra il telefono ed il tracker ma tramite il server remoto della ditta produttrice via rete dati




Per aprire si alzano i due coperchi (in realta' quello giusto e' quello privo dell'adesivo dell'IMEI).Il disco metallico e' la calamita che e' incollata sopra la scheda


All'interno c'e' una LiPo da 380 mAh posta al di sotto della scheda. Nell'angolo in alto a destra della foto soprastante si vede un cubetto di colore piu' chiaro. Corrisponde al microfono. Sulla sinistra sulla flat di colore marrone ci sono i due led verde e rosso


Una volta rimossa la calamita e l'adesivo si osserva la scritta XMG001-E-GPS con sottostante quella che sembra la data di produzione. La parte superiore dell'integrato e' schermata da un coperchio metallico mentre al di sotto c'e' l'alloggiamento della SIM. Sono inoltre connesse due antenne s


Alla fine non sono riuscito a trovare nessuna connesione di debug.....ci sono delle piazzole libere sul pcb ma sono minuscole e senza scritte

PS ho controllato l'IMEI e non sembra un codice valido con lo schema ufficiale (il codice di controllo non risulta valido). Fra le altre cose ho scoperto che l'IMEI dei dispositivi e' di tipo prevedibile (non e' difficile forgiare un IMEI valido) e visto che ll'IMEI e' la username per il cloud e la password di default e' 123456 non e' difficile fare scherzi a utenti che non hanno modificato la password  di default

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...