Hotel Hotspot Hijinks
peateasea.de
peateasea.de
"captive portal auto-login hook (configured via uci/LuCI), you are able to reference an external script for captive portal auto-logins (see example below)"
https://github.com/openwrt/packages/blob/master/net/travelma...
It can also auto join open networks "automatically add open uplinks to your wireless config, e.g. hotel captive portals (disabled by default)"
It’s hacks (DNS hijacking) upon hacks (captive portal detection) upon hacks (captive portal detection evasion, used e.g. to allow devices to stay connected to networks offering “messaging only” plans).
On top of that, after a captive login, the entire session is only identified/authenticated via MAC address, which is very sniffable/cloneable in unencrypted wifi… At least I have yet to see any captive portal hotspot to leverage OWE for something more secure than that.
We do, actually, and have for decades.
https://en.wikipedia.org/wiki/WISPr
Back in ~2010 I wrote a simply python script that parses out the WISPR data that you get, and submits data to the place specified by the XML.
It works on 90+% of hotspots i've ever encountered.
Assuming that's indeed a thing, I wonder why the experience (at least on macOS/iOS) is still so mixed then.
For example, in inflight Wi-Fi, I practically always have to manually navigate to a non-HTTPS site in my browser to hopefully get redirected to airlinename.com/wifi or whatever they use, to be able to pay for an internet pass (with credit card or by watching their ads).
I suspect this is because many airlines now offer free in-flight entertainment and messaging on their free tiers, and the OS's native captive login UI would interfere with that. So I suppose that WISPr protocol doesn't support communicating something like "limited connectivity, navigate to URL x to pay for full access, portal available at URL y".
Apple has a page on it, here: https://developer.apple.com/news/?id=q78sq5rv
Basically I guess, browser vendors decided that there is no way to convince every captive portal operator on earth to adopt some kind of standard, so they just "standardized" the existing practice of querying some random http host and see if it gets intercepted.
I think there are also discentives to standardisation, unfortunately: Captive portal operators want their portals seen by humans, often just to get people to agree to some ToS. If this were standardized, someone would build a tool that could log into a captive portal without user interaction, and while this would be awesome for me and you, it defeats the entire purpose of the portal from the operator's perspective.
So I fear, this is why we (techies) can't have nice things.
What I have seen a lot is only certain URI's redirecting you to the captive portal. ("A lot" being some minority of open access points, not most of them which redirect everything - but it's common enough)
For anyone stuck in this labyrinthine hell, the two which always work belong to warring big tech behemoths:
http://www.msftconnecttest.com/
Others may work on these AP's; I haven't had to try different ones after trying these two.
(Or rather, you can hijack it, but you can't show a portal on that connection, so what would be the point?)
http://connectivitycheck.android.com,
http://connectivitycheck.gstatic.com, and
http://www.apple.com/library/test/success.html
to your list.
The concept of "engagement" strikes again. The objective there isn't to complete some business transaction or payment (otherwise it would be in every party's interests to make tooling to facilitate said transaction), it's to explicitly waste a human's time.
(instead of visiting a page, setting a bunch of cookies and tracking you all over the universe)
And next time, you can try to beat your personal high score for speed-running captive portal automation/evasion ;)
Now I think about it, that seems like it would be a rather fun activity for a software meetup!
Then locate the request that was made when you logged in, right click, and “Copy as cURL.”
Then just paste the resulting command in a terminal when needed. It should capture everything you need (notwithstanding CSRF/session IDs rotating etc.)