English translation for this article will be available HERE using Google Translate.
Als je een beetje handig bent heb je vast wel eens een WiFi naam of wachtwoord veranderd. Normaal gesproken is daar niks lastigs aan en zul je hier ook geen problemen mee ervaren. Alleen soms, heb je nou nét iets nodig wat je modem / router niet kan bieden.
In mijn geval: Een WiFi wachtwoord van 8 karakters
Het Probleem
Bij het instellen van je WiFi wachtwoord moet je aan een aantal eisen voldoen bij Ziggo:
In mijn geval zit ik vast aan een WiFi wachtwoord van 8 karakters (Lang verhaal) en heb ik nu dus een probleem. Ik zou er natuurlijk gewoon mee kunnen leven en doen wat er van me gevraagd wordt, maar daar is natuurlijk niks leuks aan.
Volgens de WPA2-PSK specificatie is de enige eis van een wachtwoord overigens minimaal 8 karakters (Dat is dus geen 10 Ziggo...) Waarom dit niet te overriden is na bijvoorbeeld een pop-up is mij een raadsel.
De ervaring leert dat modem / router configuratiepanelen vaak matig in elkaar zitten en de code die al het werk doet veelal op client-side (Ofwel het apparaat wat we gebruiken) draait. Dit betekent dat we controle kunnen nemen over deze code en aanpassingen kunnen doen waar we dat willen.
De Code
Wanneer we element inspecteren op de "Instellingen Opslaan" knop onderin de pagina zien we dat de JavaScript functie setWirelessAccessFix()
gecalled wordt:
Wanneer we deze zonder brackets invullen in de Developer Console krijgen we een directe pointer naar deze functie. Als we dubbelklikken op het resultaat krijgen we de broncode te zien met daarbij een marker naar de functie.
Na een snelle blik in de code lijkt het er op dat er een paar simpele checks worden uitgevoerd om te kijken of het gewenste instellingen voldoen aan de eisen. Wanneer dit niet het geval is, worden er foutmeldingen weergegeven en wordt de code afgebroken door middel van de onderstreepte return
statements.
Als we deze returns uit de code halen kunnen we het afbreken van de code voorkomen en daarmee wellicht een wachtwoord forceren dat niet aan de eisen voldoet. Als we namelijk de code verder bekijken zien we dat het AJAX verzoek wat de verandering aanroept gewoon verstuurd wordt, ongeacht welke waarden we er aan meegeven.
De Uitvoering
Aangezien de functie setWirelessAccessFix()
niet binnen lastige scopes valt kunnen we vrij gemakkelijk de functie herdefiniëren. Ik heb de volledige functie (Hier te vinden) gekopieerd en de "problematische" returns uit ge-comment.
Wanneer we het resultaat in de JavaScript console plakken en op <Enter>
drukken wordt de functie opnieuw gedefiniëerd maar dan met onze aanpassingen. Belangrijk is wel dat deze aanpassing alleen van toepassing is op de huidige pagina in de huidige staat. Als we de pagina verversen of een andere pagina bezoeken moeten we opnieuw de aangepaste functie in de console plakken en uitvoeren.
Nu kunnen we het gewenste wachtwoord invullen en hoeven we ons geen zorgen meer te maken om de eisen.
Let Op: De rode melding onder de velden zijn vanaf nu puur cosmetisch en kunnen genegeerd worden. Dit kan overigens vrij makkelijk aangepast worden.
In De Achtergrond
Wanneer we de wijzigingen doorvoeren zal het laadscherm verschijnen. Als we tijdens dit proces het Netwerk
tabblad van de Developer Console in de gaten houden, kunnen we verifiëren of het verzoek ook daadwerkelijk goed doorkomt. Hier zien we dat er een verzoek is verstuurd om de WiFi wachtwoorden (Zowel 2.4Ghz als 5Ghz) te veranderen en dat er geen foutmeldingen terug zijn gekomen.
Fun fact: Het veld fun
staat voor functie
. Alle AJAX requests van het gehele controlpanel worden naar hetzelfde endpoint gestuurd en met dit veld worden de verschillende functies van elkaar onderscheiden.
Nu het verzoek verwerkt word zal de pagina hoogstwaarschijnlijk niet uit zichzelf verversen. Mocht dit het geval zijn ververs je na +- 60 seconden de pagina zelf en zul je je nieuwe wachtwoord in beeld zien.
Hiermee hebben we succesvol de minimale eisen van het WiFi wachtwoord omzeild en kan ik weer gewoon verder met wat ik aan het doen was in plaats van me druk te maken over een WiFi wachtwoord :)
...En Verder?
Je gaat je afvragen... Zijn er meer instellingen die doorgedrukt kunnen worden met deze truct? Een ander ding waar ik wel eens tegenaan gelopen ben is problemen met Port Forwarding.
Bij Ziggo ben je vrij om poorten open te zetten met uitzondering van poorten: 25, 53, 135, 137, 138, 139, 161, 162, 445, 1080.
Dit omdat deze poorten gereserveerd zijn voor bepaald gebruik en flinke problemen kunnen veroorzaken als ze wel gebruikt worden.
(Lekker lange foutmelding trouwens)
Als we dezelfde weg bewandelen als met het WiFi wachtwoord kunnen we ook bij deze functie (setforwarding('add');
) de returns uit de code filteren. Helaas worden bij dit verzoek de waardes wél gevalideerd door het ontvangende endpoint en krijg je zowel in de console als op de pagina zelf een foutmelding te zien.
Waarschijnlijk is dit probleem ook makkelijk te vermijden maar dat is een avontuur voor een andere keer :)