-
Notifications
You must be signed in to change notification settings - Fork 75
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我校锐捷使用该V4算法,应该是丢失了许多信息,导致无法连接 #282
Comments
我这里使用的方法其实非常不恰当,是根据华科的数据包特点将v4认证信息强行插到了数据包的特定位置,这样就不用生成其他认证信息了。实际上这个数据包每个字段的位置是可以调整的,每个字段由开头几个字节的特征(似乎是标明类型和长度)加上实际内容组成,所以按我现在的方法将v4认证信息直接插到你们学校的数据包的那个位置可能会破坏其他认证信息,并且本身没有那几个字节的特征数据(我不确定v4认证信息有没有特征字节)。正确的做法是将我的两个认证函数生成的结果加上特征之后插入到某个已有的认证信息后面。 |
还有,可以看到我的checkv4函数调用了两个数组,它们是我直接从我校客户端里提取出来的。内容看起来非常随便,可能不同学校会有区别。 |
你好,能提供一下抓包的思路么。我不清楚如何分析我们学校的认证信息,我知道这个方法之后应该会顺利很多,谢谢 |
v3之后的版本已经不太可能仅通过抓包来分析算法了。需要进行逆向。抓包大概只能用于验证自己逆向的结果是否正确。 |
你好,求一个你们华科的认证数据包。我发现你抓的是Linux下锐捷的认证数据包,而我们学校只有windows客户端。还有,你的mystate.c文件中定义了三个字符串,ptk1,ptk2,ptk3,其中包含了认证服务商的信息,比如包含了你们华科的internet。而我抓的windows下的锐捷认证包只有两段信息这种认证信息,没有三段。 |
集大的同学,能不能给个联系方式?我是你隔壁学校的。可是学的不是编程,只想要让自己路由器用上锐捷。没想到要用那么多专业知识。 。。。如果成功希望分享一下。。。 |
http://www.right.com.cn/forum/thread-194307-1-1.html 恩山无线论坛发了帖子,发现没人会,或者会的也不愿意分享。太商业垄断了。又无能为力 |
我的email: |
其实pkt1,2,3就是华科的认证中EAPOL流程客户端发出的三个数据包(start, response identity, response md5challenge),除了v4认证信息之外,各个学校可能会有不同的字段,这个真的很难通过抓包得到。 |
我现在对比了你的数据包和我们学校的数据包,找到了服务商和用户ipv6地址的位置,替换成我们学校数据包中的数据。现在服务商和ipv6的信息,锐捷都能收到了,曾经收不到。现在就差一个用户ipv4的数据没有传上去了,找了很久ipv4的位置,没有找到。 |
而且你抓包有三段数据,我们的只有两段 |
恩是的,在使用dhcp时数据包中没有ipv4地址信息。 |
你好,作为一个爱好者以及学生我也希望可以一同研究。 |
不好意思,再打扰一下。 请问你在mystate.c文件中,sendStartPacket(),sendIdentityPacket(),sendChallengePacket()三个方法中,return pcap_sendpacket(,,int)中最后一个参数数据包大小你是怎么确定的。我看到你这个参数有更改,和源码不一样。 我现在用WireShark抓到了start,identity,challage三个包,三个包的长度都不一样。我看你的代码和源码,pkStart,pkIdentity数组都是一样长,pkChallage这个数组要长一些。但我抓到的三个包是递增的,你是否对这三个数据包进行过某种处理,使它符合锐捷的EAPOL包格式。 谢谢。 |
其实说起来很简单,就是因为每个学校每次认证时数据包长度总是固定的,所以我偷懒没有算,直接填的是抓包得到的每个包的长度。如果你想先出一个你的学校可以用的版本,也可以直接将抓包所得的包长度填进去。不过后面我还是想算出包的长度(就是头部长度和每个字段长度加起来)。 |
你好,我自己的账号在本机认证成功,切换服务也没有问题。 MAC是已经更换了的。 |
@hyrathb 我已经成功,并且也在路由器上实现锐捷认证。特别感谢你的V4算法,还有你对我的帮助。 我的实现方法分享在这里 |
好的,谢谢分享,我十一也有点时间看看缺了什么。 |
请问诸位是如何算出那两个长度为1820和2035字节的数组的? |
我现在弄的有点头大了,基础不够深现在碰上奇怪的问题无法解决。 我的账号服务器已经给我开了白名单,无论我用什么版本的Mentohust,只要包是符合规范的,管他什么的算法都给我认证上去。 但是现在我的朋友,在网络中心看失败日志都能看到各项认证参数了,说明包中的信息已经都给全了,而且服务器也收到认证请求了,只差 “客户端的问题”。 虽然我感觉是临门一脚,但是目前只有我一个人能上网,我心里虚的很...也请有思路的大神不吝赐教。 谢谢。 |
其实我现在发现有三种包都是可以认证的。 一种是Windows客户端的包,一种是Linux客户端的包,还有一种RPLink以及最初版的Mentohust发的包。 RPLink以及最初版的Mentohust发的包,每个包都是 0x3E8的长度。 只要弄懂以上三种包的一种,构造出来,发给服务器,就能认证。 |
@ShanQincheng 我也是前两天才知道有白名单这样的东西 另外我想那个1000的长度,是当初的mentuhust写的时候随意定的吧,1000个字节肯定放得下,而rp-link实际上是从mentohust改的,这个1000字节就不要纠结了,如果真的想做个100%接近的客户端,不应该使用这个长度 |
现在我都真不知道自己是成功还是没成功了....按理来说我是成功的,但是别人上不了,我又是没成功的。简直无奈 |
但是RPLink既然能用,说明除了白名单肯定有方法认证。只是包中某个细节没搞清楚 |
RP-Link还能用啊,这么幸福 PS:并非我想的那样,他们修正了抓包工具 |
这两个数组是我在逆向Linux版客户端时追踪到的。 |
@hyrathb 我直接从你的源码里面改了那两个长数组以及3个ptk的数组 ps:修正发包长度并不起作用 |
@czkwg8 直接在源码改服务名。MAC那个,你在虚拟机里面改一下连接信息中的MAC地址,改成你认证时用的MAC。这种情况说明你们学校还对MAC地址有限制 |
@ShanQincheng 是的的确是有MAC限制 |
|
1、官方Linux客户端心跳是20秒一次,我试着把mentohust的心跳分别设置为10秒、20秒,发现这两个结果是一样的,都是7分钟左右系统会检测到心跳超时,可能就是心跳包格式不对 |
我现在用的是 @updateing 的minieap,现在也发现了类似 @ShanQincheng的问题,截图右边是学校官方的包,对比minieap的包发现官方多了一段数据(地址0X17,长度固定0X20),并且这段数据也是每次抓包不断变化的,估计这也是 @ShanQincheng 魔改的mentohust只能自己用的原因 我们学校还算好,锐捷版本低可以用猎豹wifi,而且校内wifi覆盖,不过就是没linux客户端。 |
另外也发现我的dns数据是跟在锐捷版本号的后面,上面的截图对比能看出。 |
MentoHUST现在就是用改包的方式工作的,不过没有提供修改模板的选项。同时,IPv6地址和硬盘序列号这类字段也不支持修改。 字段顺序并不清楚是否影响认证结果,这里无法验证。 如果用模板的话,0x17这个字段也就定死了不能改变。可以在minieap里用 |
mute the thread
在 2016-11-25 14:23:45,"Hamster Tian" <notifications@github.com> 写道:
MentoHUST现在就是用改包的方式工作的,不过没有提供修改模板的选项。
字段顺序并不清楚是否影响认证结果,这里无法验证。
如果用模板的话,0x17这个字段也就定死了不能改变。可以在minieap里用--rj-option添加这个字段看能否起作用。
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.
|
@hezhuowei 是的,这一段是关键,我觉得也是我的魔改代码无法通用的原因。这一段是 V4 算法算出来的一段,连不上说明算错了,每一次请求的值都不一样。但长度一样,位置一样。 |
@hezhuowei 其实从M. 那个位置到后面很长的一段,也是一直在变的。但是我们学校,可以固定死数据,服务端似乎不验证这一段。我当时也在猜,服务端只对某一部分效验,其他的忽略。 |
@updateing 现在发现,0x17字段在锐捷linux版是没有的,只出现在windows版。不排除这两个平台版本的校验方法不一样。 |
@ShanQincheng 另外一个问题就是如何从官方的锐捷linux客户端提取array[1820],array_1[2035]这两个数组。 |
@hezhuowei 你可以看看Linux客户端符号表在不在,如果在的话,那很有可能就有两个数组appdata和dlldata,就是这俩。 |
这两个数组里面的数据,是从 Linux 版本的锐捷一个文件里面用 WinHex 工具提取出来的,每个学校也不一样。可以看看我的两个数组,再看看别的学校 Mentohust 版本里这两个数组,找一找里面相同的一段,然后去 WinHex 里面查询出来。我建议先看看我的数组和别的学校的数组的头尾是否相同,相同的话就查找对应的一段16进制数据,截取对应长度的16进制代码,复制为 C 数组的形式。 拿我的第一个数组,array[1820]举例。该数组开头为, 0x36,0xE0,0x04,0x08,0x46,0xE0 ..... 用 WinHex 打开 Linux 锐捷中, x32 文件下 rjsupplicant 文件,搜索这一段 16 进制 36E0040846E0 —————————————————————————————————————————————— 具体的图片,这里有,在文章后半部分 |
很高兴见到这个全局变量满天飞堪称黑历史的项目还有人在跟进。 |
哈哈炸出原作者了么 |
@hezhuowei 关于 0x17 字段,我发现 MentoHUST 本来是支持的。这一段逻辑在 v4 中并没有走到…… |
@ShanQincheng 请问你现在修改的代码编译后可以让其他同学也认证成功吗,我跟着你的做法做了一遍,自己成功认证了,但是在其他同学的端口认证失败,提示物理mac地址已被修改。有解决办法或思路吗 |
抓包分析,看看你认证时,和你朋友认证时,认证数据包中MAC地址是不是一样的。 根据提示消息,我猜想是,mentohust中把正在进行认证的电脑的MAC地址自动填充到认证数据包里的那段代码失效了,导致你和你同学认证时都用的是你电脑的MAC地址( 代码没有修改复制粘贴过去的认证数据包的MAC地址数据 ,有的学校锐捷认证是账号与MAC地址绑定的 )。 myconfig.c 文件中有 MAC 地址填充到数据包的代码,你可以去看看代码逻辑,然后修改。优雅的做法是修改代码自动获取本机MAC地址然后填充,暴力的做法是,直接将填充的那段字符串写成想要的MAC地址。( 这样做的话,每个MAC地址都得重新编译一份 ) |
@ShanQincheng 明白,现在解决好物理MAC地址的问题了。 |
@shanzhaozhen MiniEAP 支持全部已知字段的填充,包括 IP 和 MAC 在内(目前 IP 填充仅限于二次认证时后面一次的填充,静态地址还没有处理)。如果是二次认证的话直接能用,静态地址的话可以尝试改一下。 所有字段填充相关的逻辑都在这里。 |
@updateing 感谢! 认证成功后内网都可以直接打开,但是不能访问外网,因为我学校还有一个网页认证,我想是因为DNS解析不了,又是一个新问题,揪心 |
@updateing 我使用这个方法已经可以在学校内都认证成功了,可以直接上校园内网,但是部分测试却不能上外网,看了一下可以的人主要是跟我住同一栋宿舍的。之后找其他宿舍的同学抓包分析一下发现有一个地方不一样,请问这个地方是一些什么参数呢? |
看起来是第二 DNS 的地址。 在 Windows 下认证时,有没有“内网”“外网”之类两种服务的选择? |
@updateing 在windows下会多一组在linux不存在的参数,直接使用windows的包会出现版本检验的问题,而且windows下至发一次start包,其他都是两次。 |
我用最初的源代码,网址https://code.google.com/archive/p/mentohust/source/default/source
加上你的V4算法,连接锐捷失败。查询锐捷记录日志发现丢失了很多认证信息。登录失败的原因是“用户不允许在该接入地区使用本服务”地区、服务、接入控制,ipv4等信息全部没有。我判断是其中一个信息(也许是地区信息)没有送到锐捷导致其他都为空。
而我在没有加入V4算法之前,用最初源代码编译出来的Mentohust连接锐捷,在日志中可以看到这些信息,登录失败的原因是“户端完整性被破坏,配置文件中未包含该客户端信息”。我判断是V2算法已经不适用于我们学校,传言我们学校已经是V4算法了。
我只修改了mystate.c文件,删除了void customizeServiceName(char* service)方法,把用到了checkV4.c文件中的方法全部替换为V4方法。
总的就是,我仔细对比了你的V4和最初的源代码,找到了你添加V4算法的位置,替换成了新的V4方法。然后删去了你添加的void customizeServiceName(char* service)方法。其他的所有文件,都是最初的源代码文件,并没有复制你的。
按照我的逻辑,最初的版本可以将我的接入信息发给锐捷,只是V2算法太低级了。应该换成V4就可以直接连上了。可惜换成V4后,提示V4认证,可惜认证失败。查询日志发现我的接入信息,地区、服务、接入控制,ipv4等信息都为空。
谢谢你的帮助。
The text was updated successfully, but these errors were encountered: