苏州图书馆wifi认证

苏州图书馆wifi认证之旅

上个月月底去苏州图书馆自习(看HLE vs T1),难受的是流量在来苏州的路上用的已经差不多了,而苏州图书馆wifi的portal认证验证码却无法收到。想着以后可能经常会来这里自习,还是尝试破解一下吧。

绕过portal认证

抱着试试看的心态,先试了理工科大学生必经之路之用53端口绕过校园网认证。没想到在连接上图书馆的公共wifi后,用dig命令发现53端口竟然是开放的。

这种方案原理很简单,wifi可以转发dns请求,我们只需要一台服务器,把全部的请求伪装成dns请求发给服务器,服务器解包后请求正常网站,再把回应打包成dns回应回复给我们,我们再拆包就可以了。dns2tcp的方案网上有很多实现,这里因为博主不想用服务器的原因就没有使用这种方案。

F12大法

在poral认证页面,除了手机验证码认证外,没有其他选项了。一般的公共wifi都会照顾一些特殊群体,开放一些特殊认证,例如访客认证、注册用户认证等等。这些认证可能因为鉴权不严格让我们钻空子。

F12打开控制台,在大致看了一下前端代码后,果然不出所料。除了手机号认证外,还有微信认证、邮箱认证、快速认证等等。

function pcweixin_auth() {
	var userMac = $("#userMac").val();
	var ssid = $("#ssid").val();
	var userip = $("#userip").val();
	var port = imc_portal_function_readByodServerHttpPort();
	var ip;
	// æ ¹æ®å®¢æˆ·ç«¯ip是v4还是v6查询对应形式的微信服务器地址
	var ipVersion = imc_portal_function_getClientIPVersion();
	if (ipVersion == IP_VERSION_V4) {
		ip = imc_portal_function_readWeixinAddress();
	} else if (ipVersion == IP_VERSION_V6) {
		ip = "[" + imc_portal_function_readWeixinAddressIPv6() + "]";
	}
	var authUrl = "http://" + ip + ":" + port + "/weixin/wifiCode.jsp?ssid=" + ssid + "&userip=" + userip + "&usermac=" + userMac;
	window.location.replace(authUrl);
}

function weixin_auth() {
	if (!imc_portal_function_ifQuickAuth()) {
		var r = f_preLoginForInputPanel();
		if (!r) {
			return false;
		}
	}

	var showWechat = true;

	var data;
	$.ajax({
		url: "/portal/pws?t=wechatAuth",
		type: "POST",
		cache: false,
		async: false,
		dataType: "text",
		data: $("#form1").serializeArray(),
		beforeSend: function() {
			i_p_f_pageLoading("start");
		},
		success: function(json) {
			data = json;
		},
		error: function(x, y, z) {
		},
		complete: function() {
			i_p_f_pageLoading("complete");
			if (data == null) {
				alert($("#id_text_networkerror").val());
				return false;
			} else {
				var json = eval("(" + i_p_f_base64DecodeAndUrlDecode(data) + ")");
				if (json.resultCode != 0) {
					alert($("#id_text_phone_invalid").val());
					showWechat = false;
				}
			}
		}
	});

	if (!showWechat) {
		return false;
	}


	var phone = $("#id_userName").val();
	var userMac = $("#userMac").val();
	var ssid = $("#ssid").val();
	var userip = $("#userip").val();
	var port = imc_portal_function_readByodServerHttpPort();
	var ip;
	// æ ¹æ®å®¢æˆ·ç«¯ip是v4还是v6查询对应形式的微信服务器地址
	var ipVersion = imc_portal_function_getClientIPVersion();
	if (ipVersion == IP_VERSION_V4) {
		ip = imc_portal_function_readWeixinAddress();
	} else if (ipVersion == IP_VERSION_V6) {
		ip = "[" + imc_portal_function_readWeixinAddressIPv6() + "]";
	}
	var authUrl = "http://" + ip + ":" + port + "/weixin/wifi2.jsp?phone=" + phone + "&ac%2Dip=10%2E100%2E63%2E1&ssid=http%3A%2F%2F1%2E1%2E1%2E1&user%2Dipaddress=NECSE%2DWIFI&uaddress=10%2E100%2E68%2E127&umac=d0c637a6ecf3";
	window.open(authUrl);
}

直接在控制台中调用这两个函数后,发现imc_portal_function_readWeixinAddress函数返回的是null,微信认证还没有接入。顺着imc_portal_function_readWeixinAddress发现了访客的注册地址。

function imc_portal_function_readWeixinAddress() {
    return 'null';
}

function imc_portal_function_readWeixinAddressIPv6() {
    return 'null';
}

function imc_portal_function_readHttpPortIMC() {
    return 'null';
}
function imc_portal_function_getClientIPVersion() {

    return 4;
}
function imc_portal_function_goForgotPwd() {

    window.location.href = "http://10.211.183.232:9066/ssvui/selfservice/mail/forgetPassword.html?sourcePage=portal&nasRedirectUrl=" + window.location.href;
}

function imc_portal_function_goModify() {
    return "/portal/page/modifyPwdAlone.jsp" + window.location.search;
}
function imc_portal_function_guestRegister() {

    window.location.href = "http://10.211.183.232:9066/ssvui/selfservice/preregister/guestPreregister.html?fromPortalService=true&nasRedirectUrl=" + window.location.href;
}
function imc_portal_function_inodeDownload() {

    window.location.href = "http://10.211.183.232:9066/ssvui/selfservice/preregister/clientDown.html";
}

非常幸运,访客认证的地址http://10.211.183.232:9066/ssvui/selfservice/preregister/guestPreregister.html可以访问,并且注册没有进行检测。随便填了一个信息就可以注册使用wifi了。
访客wifi告知仅一天有效期且仅限一台设备。当天发现手机和电脑可以同时使用。隔了两天又去了图书馆,居然没失效诶,还能继续用。

其实这个后台渗透进去非常容易,因为可以上网了就没有往下继续进行了。

下策(未实践)

  • 通过arp中间人攻击,截获其他设备的数据包,把其他人的认证信息拿到自己用。
  • 直接问其他人,让我用用你的。(黑客的最佳实践)