摘要:本文主要用于通过路由器的wan端口登录到帐户以连接到校园网络(Web身份验证)。连接到路由器的多个设备共享同一帐户。几分钟后,将检测到代理(或共享)行为,并且该帐户将成为“临时禁止发布”。同时,实现了自动Web身份验证,因此无需登录。
前言
Wikipedia openwrt简介:
OpenWrt是适用于嵌入式设备的Linux发行版。
与原始固件相比,OpenWrt不是单个一、静态固件,而是提供了可向其中添加软件包的可写文件系统。这使用户可以自由选择应用程序和配置,而不受设备提供商的限制,并且可以使用适合某些应用程序的软件包来自定义您的设备。对于开发人员来说,OpenWrt是一个框架。开发人员不必费心构建整个固件即可获得所需的应用程序;对于用户而言,这意味着能够以不同于以往的方式完全自定义和使用该设备,OPKG包含3500多种软件。
默认情况下,LuCI用作Web交互界面。
设备:已闪入openwrt系统的路由器
(作者使用Barley DW220D)
固件版本:OpenWrt屏障断路器14.07 / LuCI中继(0.12 + svn-r10530)
内核版本:3.1 0.49
涉及的内容:
JavaScript分析后程序包构建/发送基本的Linux命令外壳脚本
背景/原理:使用路由器的wan端口连接到园区网络时,终端对园区网络服务器是透明的(NAT地址转换),并且用户连接几分钟后,园区网络服务器将对其进行分析。到Internet(SWU为20分钟)数据包用于检测是否有多个设备共享该行为,因此它仅需要每十分钟断开/连接到Internet。实际上,Supermartin就是基于这一原理开发的,用于Windows环境的自动联网工具(破解重庆电信园区网络,在宿舍中共享宽带帐户),但是当宿舍计算机使用时,其功耗是不可接受的。开启了很长时间。归根结底,校园网络的Web身份验证是发送http应用程序层协议数据包(最常见的是post和get),因此这些步骤大致分为两个步骤:
分析登录/脱机数据包并在openwrt上发送数据包以进行认证/脱机一、分析Web认证数据包
可以通过数据包捕获和分析页面JavaScript来进行数据包分析。打开浏览器开发人员工具(F12)进行网络登录,然后通过敏感的气味找到关键的发布包,如图1所示。
可以看出,尽管userid和password关键字的内容是明确的(未加密),但queryString和服务的外观和内容还是不清楚的。应该结合使用JS来分析queryString和服务的结构和内涵。再次打开开发人员工具,html代码如图所示找到登录按钮,并发现登录按钮已绑定到doauthen()函数,如图2.
所示。
我发现此页面引入了两个js文件,并在其中一个js文件中找到了登录功能:
其中ePortalUrl是请求地址前缀:
login : function(userId, password, service, queryString,operatorPwd,operatorUserId,validcode,callback) {
/* 1.登录 */
var content = "userId=" + userId + "&password=" + password + "&service=" + service + "&queryString=" + queryString+"&operatorPwd="+operatorPwd+"&operatorUserId="+operatorUserId+"&validcode="+validcode;
post(ePortalUrl + "login", content, callback);
},
和离线功能:
logout : function(userIndex,callback) {
/* 4.下线 */
var content = "userIndex=" + userIndex;
post(ePortalUrl + "logout", content,callback);
},
可以发现有更多的登录关键字可以登录,但离线只需要一个userIndex
1.1个登录关键字querryString和Service
在JS文件中发现,queryString是上一页提交的get数据,经过两次encodeURIComponent()转码后,如图3所示
JavaScript encodeURLComponent()的含义是替换原始字符串的某些特殊字符(有关详细信息,请参见encodeURLComponen的含义。)
与%25E9%25BB%2598%25E8%25AE%25A4相对应的服务是图3的可选下拉框中默认单词的两个encodeURLComponent()转码。这是相对固定的,因此请查找获取queryString的数据源。
输入身份验证地址且未登录身份验证页面时,地址栏将变为
http://XXX.XXX.XXX.XXX/eportal/index.jsp?wlanuserip=10.69.XXX.XX&wlanacname=NAS&ssid=Ruijie&nasip=172.28.XXX.X&mac=143dXXXX9&t=wireless-v2-plain&url=http://123.123.123.123/
获取数据是“?”之后的部分
wlanuserip=10.69.XXX.XX&wlanacname=NAS&ssid=Ruijie&nasip=172.28.XXX.X&mac=143dXXXX9&t=wireless-v2-plain&url=http://123.123.123.123/
这意味着浏览器在此之前进行了跳转,并执行了get操作。如果您尚未登录,则可以在尚未重定向的页面上找到此信息。实际上,该信息是该设备未登录以连接到服务器,服务器返回的注册信息。获取此页面的方法有很多(必须处于未登录状态),例如:
禁用浏览器加载js脚本,使用python和其他编程语言直接捕获软件包并使用wget在linux上下载页面
wget在openwrt下获得的页面如图4所示。
此时,登录所需的四个关键字id,password,service和queryString都已清除。您只需要构造一个POST包并将这些关键字发送到图1中的请求URL即可完成登录。
1.2个离线关键字userindex
首先,我使用python根据1.1的背景发送post包,并发现直接返回了userindex,如图5所示
因此,您只需执行字符串操作即可获取userindex关键字。
两个openwrt循环执行登录/脱机操作2. 1openwrt发送帖子包和shell基础
卷曲后操作命令格式:
curl -d "args" "protocol://address:port/url"
openwrt上的shell是轻量级的解析器灰。语法不严格。具有一定编程基础的人们可以快速学习和应用它。有关详细信息,请参见shell教程。 (该网站的免费内容就足够了)
2. 2连接到openwrt
使用计算机直接插入路由器的局域网端口,使用腻子,Xshell和其他工具进行SSH连接(某些版本需要进入路由器设置页面以打开接收局域网端口SSH连接),地址为路由器管理地址,一般为19 2. 168.1.1,输入root用户名和密码即可进入路由器。
2. 3编写一个shell脚本,输入etc(cd / etc),创建一个新的net.sh文件(触摸net.sh),然后写入net.sh文件(vi net.sh,键入i以进入编辑模式)(请操作vi请参见linux vi)以下代码:
#!/bin/ash
eUc()#encode url 模拟前文的二次编码操作,函数都使用echo的返回值
{ s0=$1
s1=${s0//=/%3D}
s2=${s1//&/%26}
s3=${s2//:/%3A}
s4=${s3//\//%2F}
s5=${s4//%/%25}
echo $s5
return 0
}
getQs()#only work on unlogged status/获取queryString,使用
{
inf=$(wget http://222.198.127.170 -O -)
s1=${inf:73}
s2=${s1%\*}
echo $(eUc $s2)
}
login()#par1:id, par2:psw,par3:qS, return Userid/登陆操作,后面是参数顺序
{
s0=$(curl -d "userId=$1&password=$2&service=%25E9%25BB%2598%25E8%25AE%25A4&queryString=$3&operatorPwd=&operatorUserId=&validcode=" "http://222.198.127.170/eportal/InterFace.do?method=login")
s1=${s0#*:\"}
s2=${s1%%\"*}
echo $s2
}
logout()# par1:userId #退出当前登陆,后面是参数顺序
{
curl -d "userId=$1" "http://222.198.127.170/eportal/InterFace.do?method=logout"
}
logoutAll()#par1:ID, par2:password #使用ID和psw强制退出所有登陆,后面是参数顺序
{
curl -d "userId=$1&pass=$2" "http://222.198.127.170/eportal/InterFace.do?method=logoutByUserIdAndPass"
}
#main() begin
#因shell的特殊性,id和psw加不加引号都没关系
id=校园网账号
psw=校园网密码
#init
logoutAll $id $psw
qS=$(getQs)
userId=$(login $id $psw $qS)
#
while :
do
logout userId
qS=$(getQs)
userId=$(login $id $psw $qS)
sleep 600s#每10分钟执行一次
done
#end
vi保存的操作顺序为ESC:wq输入
2. 4执行脚本
在执行Linux脚本之前需要授权。授权命令为:
chmod +x /etc/net.sh
执行脚本:
/etc/net.sh
可以说它已经结束了,但是可以使用SSH输入openwrt来执行脚本。退出SSH时,脚本的执行将停止。在这里,屏幕包用于使其在后台执行。使用屏幕类似于Windows窗口。可以同时执行多个窗口。执行。安装命令如下:
opkg update
opkg install screen
直接在页面上进入屏幕以进入子页面,然后在此页面上执行:
/etc/net.sh
正常执行程序后,键入Ctrl + a,然后按d退出到主页。此时,您可以输入exit退出连接。
要再次进入该窗口,可以使用screen -ls获取前一个窗口的编号,然后使用screen -r number命令输入。
顺便显示openwrt SS设置方法的公开版本
本文来自本站,转载请注明本文网址:
http://www.pc-fly.com/a/tongxingongju/article-347985-1.html
……