吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3813|回复: 1
收起左侧

[其他转载] 成都某大学新生安全教育学习考试部分

[复制链接]
quandu 发表于 2019-1-27 20:04


本次文章写于2019年1月27日20:04:36


学校出了个新生安全教育和军事教育的网络教学,学习部分是H5的小动画,考试就是普通的答题。
网站是http://******.mycourse.cn/。(之前结课几次了,又开放了)(打出星号,避免嫌疑推广)


本篇文章将使用到PHP的curl和Fiddler抓包工具,只介绍考试部分。
(其中Fiddler使用的都是基础功能,少些介绍部分)


打开fiddler,对登陆时进行抓包
_test.png
(第一次插入图片,如果太小请点开)
登陆时请求了多个地址,根据请求的地址正确判断所需要的包。上图中蓝框选中的即所需要的包。查看Inspecter里面的WebForms即可知道请求用了哪些东西。
同理,需要自己做一次考试,并记录下封包。


以下是我寝室隔壁大佬做的记录,分享出来:


获取科目信息:url:http://*******.mycourse.cn/pharos/exam/listPlan.dotype: POSTContent-Type:application/x-www-form-urlencodedformdata:  userProjectId:d3495cef-a646-473d-9736-*******  tenantCode: 61000007res.data: [{  answerNum: 99  answerTime: 60  displayState: 1  examFinishNum: 1  examOddNum: 98  examPlanId:"5bbb515d-d2ed-4f47-a930-*******"  examPlanName: "结课考试"  examTimeState: 2  id:"03b47a23-9b51-4890-9c44-*******"  passScore: 60  prompt: ""  retakeFinishNum: 0  retakeOddNum: 10  retakeTimeState: 2  showRetake: 2}] 准备考试:url:http://*******.mycourse.cn/pharos/exam/preparePaper.dotype: POSTContent-Type:application/x-www-form-urlencodedformdata:  userExamPlanId:03b47a23-9b51-4890-9c44-*******  tenantCode: 61000007 获取试卷:url:http://*******.mycourse.cn/pharos/exam/startPaper.dotype: POSTContent-Type:application/x-www-form-urlencodedformdata:  userExamPlanId:03b47a23-9b51-4890-9c44-*******  tenantCode: 61000007 res.data: [  {    id:"0e67e582-a013-4f13-b816-16be9d49ed0e",    optionList: [      {        content: "在爱国游行中发生“打砸抢烧”不用负责任。",        id:"b51eb5a1-d9d3-4323-adef-593e822e07d8",        questionId:"0e67e582-a013-4f13-b816-16be9d49ed0e",        selected: 2,        sequence: 1      }    ]  }] 提交问题:url:http://*******.mycourse.cn/pharos/exam/recordQuestion.dotype: POSTContent-Type:application/x-www-form-urlencodedformdata:  userExamPlanId:03b47a23-9b51-4890-9c44-*******  questionId:0e67e582-a013-4f13-b816-16be9d49ed0e  useTime: 708  answerIds:6f9a46fb-cdf3-4715-9b86-c4f4c7449570(多选时用,隔开)  tenantCode: 61000007 交卷:url:http://weiban.mycourse.cn/pharos/exam/submitPaper.dotype: POSTContent-Type:application/x-www-form-urlencodedformdata:  userExamPlanId:03b47a23-9b51-4890-9c44-*******  tenantCode: 61000007


某些可能会泄露信息的ID的替换成星号,有需要的可以自己截取。


分析了这些我们大概能理出个流程
1.几乎所有请求都没有用到cookie
2.考试过程为登陆->获取科目信息->准备考试->获取试卷->提交问题->交卷


贴出部分PHP代码
其中curl部分封装为(有些地方多余的,我没有剔除去)
[PHP] 纯文本查看 复制代码
// 几乎所有类型的curl请求
function curl_all($url1,$post1='',$url2='',$post2='',$jstyp=''){
	// 创建一个临时文件用于cookie保存
	$cookie_jar = tempnam('./tmp','cookie');
	//$ch1初始化
	$ch1 = curl_init(); 
	//设定$ch1目的url1
	curl_setopt($ch1,CURLOPT_URL,$url1);
	//如果有post,则post方式服务器,否则get方式服务器
	if($post1) {
		curl_setopt($ch1, CURLOPT_POST, 1);
		curl_setopt($ch1, CURLOPT_POSTFIELDS, http_build_query($post1));
	}
    //把返回来的cookie信息保存在$cookie_jar文件中
	curl_setopt($ch1, CURLOPT_COOKIEJAR, $cookie_jar);
    //设定返回的数据是否自动显示
	curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
    //设定是否显示头信息
	curl_setopt($ch1, CURLOPT_HEADER, false);
    //设定是否输出页面内容
	curl_setopt($ch1, CURLOPT_NOBODY, false);
	//设定$res1为页面内容
	$res1=curl_exec($ch1);
	//关闭$ch1
    curl_close($ch1);
    //如果url2存在,则继续执行,否则返回$res1
    if($url2){
    	$ch2 = curl_init();
	    curl_setopt($ch2, CURLOPT_URL, $url2);
	    curl_setopt($ch2,CURLOPT_REFERER,$url2);
	    if($post2) {
			curl_setopt($ch2, CURLOPT_POST, 1);
			if ($jstyp) {
				curl_setopt($ch2, CURLOPT_HTTPHEADER,
				array(
				'Content-Type: application/json; charset=utf-8',
				'Content-Length:'.strlen($post2))
				);
				curl_setopt($ch2, CURLOPT_POSTFIELDS, $post2);
			} else {
				curl_setopt($ch2, CURLOPT_POSTFIELDS, http_build_query($post2));
			}
		}
		curl_setopt($ch2, CURLOPT_HEADER, 0);
	    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
	    curl_setopt($ch2,CURLOPT_FOLLOWLOCATION,1);
	    curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar);
	    $res2 = curl_exec($ch2);
	    curl_close($ch2);
	    return $res2;
    } else {
    	return $res1;
    }
}


其他部分,部分代码为:
[PHP] 纯文本查看 复制代码
<?php 
header('content-type:text/html;charset=utf-8');
//题库答案
$ans_pre = [
"“打砸抢烧”都属于违法乱纪的行为,会受到法律的惩处。",
"其他三个选项皆是。",
"等等答案……"
];
// 列举需要用到的网址
$url_login = "http://weiban.mycourse.cn/pharos/login/login.do";
$url_list = "http://weiban.mycourse.cn/pharos/usercourse/listCourse.do";
$url_study = "http://weiban.mycourse.cn/pharos/usercourse/study.do";
$url_getcouurl = "http://weiban.mycourse.cn/pharos/usercourse/getCourseUrl.do?";
$url_ex_pre = "http://weiban.mycourse.cn/pharos/exam/listPlan.do";
$url_bgnex = "http://weiban.mycourse.cn/pharos/exam/preparePaper.do";
$url_getex = "http://weiban.mycourse.cn/pharos/exam/startPaper.do";
$url_doex = "http://weiban.mycourse.cn/pharos/exam/recordQuestion.do";
$url_handex = "http://weiban.mycourse.cn/pharos/exam/submitPaper.do";

//预准备
$login["keyNumber"]=$id;
$login["password"]=$id;
$login["tenantCode"]="61000007";

$preid = json_decode(curl_all($url_login,$login),true)["data"]["preUserProjectId"];
$userProjectId = $preid;
$tenantCode = "61000007";
$list["userProjectId"] = $userProjectId;
$list["chooseType"] = "3";
$list["tenantCode"] = $tenantCode;
$list["name"] = "";

$tenantCode = "61000007";
$userProjectId = $preid;
//
$ex_pre["userProjectId"] = $userProjectId;
$ex_pre["tenantCode"] = $tenantCode;
$ex_info=json_decode(curl_all($url_ex_pre,$ex_pre),true)["data"][0];
//
$all_use_info["userExamPlanId"] = $ex_info["id"];
$all_use_info["tenantCode"] = $tenantCode;
curl_all($url_bgnex,$all_use_info);
//
$qsnr = json_decode(curl_all($url_getex,$all_use_info),true)["data"];
//
for ($i=0; $i < count($qsnr); $i++) { 
	for ($j=0; $j < count($ans_pre); $j++) { 
		for ($k=0; $k < count($qsnr[$i]["optionList"]); $k++) { 
			if ($ans_pre[$j] == $qsnr[$i]["optionList"][$k]["content"]) {
				$tmp_ans_arr[$i][] = $qsnr[$i]["optionList"][$k]["id"];
			}
		}
	}
	$answer["userExamPlanId"] = $ex_info["id"];
	$answer["questionId"] = $qsnr[$i]["id"];
	$answer["useTime"] = rand(8, 12);
	$answer["answerIds"] = $tmp_ans_arr[$i][0];
	$answer["tenantCode"] = $tenantCode;
	for ($l=0; $l < count($tmp_ans_arr[$i]) - 1; $l++) { 
		$answer["answerIds"] .= (",".$tmp_ans_arr[$i][($l)+1]);
	}
	curl_all($url_doex,$answer);
}
//
curl_all($url_handex,$all_use_info);


部分答案在题库里面可能对可能错,需要在提交答案的for循环里面加if判断题目,接下来break就行;


用curl多线程能否成功,我没试过,我还不是对curl理解太多。值得尝试。(针对学习部分)




好了,差不多就这么多了,我也是跟着大佬学的,不懂的挺多的,我还是要好好加油。




免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
wushaominkk + 3 + 1 用心讨论,共获提升!

查看全部评分

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

dingyin1351567 发表于 2019-1-27 22:24
楼主很努力哦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-26 17:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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