这个教程主要描述如何通过网络抓包从而绕过下面的调查问卷的填写:
各位同学好:
为了更好的开始我们一年的集中教学生活,请大家填写“2023级集中教学学生信息调查表”,请于今天晚上24:00点前填写完毕。问卷星链接:https://www.wjx.cn/vm/wMNNEs7.aspx#
进入开发者模型进行抓包
首先按F12
进入开发者模型, 这里作者使用的是Edge, 其他Chrome内核的浏览器:
选择网络:
进行POST请求测试
对于这种调查问卷类型的表单,其一般采用POST请求进行表单上传,这里我们在每个输入框里面都填入test
字段进行测试。
对于下面的复选框, 随便选一个进行测试,点击提交,注意观看开发者模式的网路一栏的内容。
抓包内容分析:
手速要快,主要发现是这几个内容的请求,我们可以进行逐一分析。
其中三个都是gif
图像,显然不是所需的内容。
快速反应,最后可以确定提交的就是利用的这个POST
请求:
从负载我们可以看到, 这里的表单数据就是在submitdata里面:
就是我们所选取的test
字段和默认选择的1的标签,既然知道我们需要进行访问的URL和参数数据集,现在就可以进行模拟请求发送了。
模拟POST表单发送
这里笔者选择使用Python请求来发送脏数据进行测试,通过这个方法,你也可以在最下面的复选框中一个都不选了!
基于requests
库稍作推测和实现便可得到模拟访问程序:
import requests
import datetime
url = "https://www.wjx.cn/joinnew/processjq.ashx"
headers = {
"Accept": "text/plain, */*; q=0.01",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Connection": "keep-alive",
"Content-Length": "236",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "acw_tc=2f624a3816918348291846419e66cf78e8bd53a33e7c2afea8f27f1d1381d3; .ASPXANONYMOUS=p9EOmJYD2gEkAAAAZTYxZDY0ZTUtODc2ZS00YTY1LWI3M2EtOWMwNGNiMmM3YTgzWBfLKTIfMYSVXJxBdtDwAvcEscQ1; Hm_lvt_21be24c80829bd7a683b2c536fcf520b=1691834833; jcn225388949=test; LastActivityJoin=225388949,118451582870; join_225388949=1; browserid=cd2af523-f56d-4e46-933c-097f389f1d10; wjxawardload=13503%7C225388949; jac225388949=59380619; awardshowway10=1; lastshowway=10|2023-08-12 18:12; SERVERID=c4b399ae928d1f610f814996e4778c43|1691835159|1691834829; Hm_lpvt_21be24c80829bd7a683b2c536fcf520b=1691835163",
"Host": "www.wjx.cn",
"Origin": "https://www.wjx.cn",
"Referer": "https://www.wjx.cn/vm/wMNNEs7.aspx",
"Sec-Ch-Ua": '"Not/A)Brand";v="99", "Microsoft Edge";v="115", "Chromium";v="115"',
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "Windows",
"Sec-Fetch-Dest": "empty",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Site": "same-origin",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.200",
"X-Requested-With": "XMLHttpRequest"
}
# 获取当前时间
current_time = datetime.datetime.now()
# 格式化时间
formatted_time = current_time.strftime('%Y/%m/%d %H:%M:%S')
# 获取当前时间的时间戳(毫秒级)
timestamp_millis = int(current_time.timestamp() * 1000)
params = {
"shortid": "wMNNEs7",
"starttime": formatted_time, # 使用格式化的当前时间
"submittype": "1",
"ktimes": "227",
"hlv": "1",
"rn": "606778550.36779983",
"jqpram": "E5dngoOx",
"jcn": "sbts",
"nw": "1",
"jwt": "4",
"jpm": "52",
"nip": "1",
"t": str(timestamp_millis), # 使用当前时间的时间戳
"jqnonce": "0fb09b25-90d3-449b-83a0-12f8a58eb811",
"jqsign": "7ae7>e52*>7c4*33>e*?4f7*65a?f2?be?66"
}
data = {
"submitdata": "1$test}2$test}3$test}4$test}5$test}6$test}7$test}8$test}9$test}10$test}11$test}12$test}13$test}14$test}15$test}16$test}17$test}18$test}19$test}20$1"
}
responsed = requests.post(url, headers=headers, params=params, data=data)
print(responsed.text)
这里稍作解释下, 对于每一个调查问卷,都有一个shortid
, 在这个调查问卷中,就是这个调查问卷的唯一值标识码, 在实际传参中通过路径参数传入, 这里为了防止浏览器检测,选取了浏览器的默认的headers
进行传入反反爬虫。
而实际数据就是在data传入, 其他参数推测和时间日期和时间戳相关,所以稍作修改,发送POST
请求就可以得到访问结果:
进行发送,未出现报错,基本证明抓包和模拟请求正确,现在, 我们就可以进行仿造来传入自己想传入的数据,比如最后一个复选框,自己什么多不想选,这里可以直接传入-1
或者不传。
这里我生成一套伪数据来测试:
{
"姓名": "张三",
"性别": "男",
"班级": "2023级1班",
"学号": "20230001",
"民族": "汉族",
"籍贯": "北京",
"政治面貌": "团员",
"出生日期": "2005-01-01",
"身份证号": "110101200501011234",
"本人电话": "13800138000",
"常用邮箱": "zhangsan@example.com",
"所学专业": "计算机科学与技术",
"父亲电话": "13800138001",
"母亲电话": "13800138002",
"家庭详细住址": "北京市某某区某某街道123号",
"有何特长爱好": "编程、音乐",
"本科期间担任过的学生职务": "学生会主席",
"对研究生学习生活的愿景": "希望能够深入研究,为社会做出贡献",
"是否愿意加入学生工作队伍": "是",
"请选择是否有以下工作经历": ["微信公众号运营排版", "新闻稿撰写"]
}
对应的参数为:
比如,最后一个复选框,我一个都不想选,那么我就填-1
:
submitdata = "1$张三}2$男}3$2023级1班}4$20230001}5$汉族}6$北京}7$团员}8$2005-01-01}9$110101200501011234}10$13800138000}11$zhangsan@example.com}12$计算机科学与技术}13$13800138001}14$13800138002}15$北京市某某区某某街道123号}16$编程、音乐}17$学生会主席}18$希望能够深入研究,为社会做出贡献}19$是}20$-1"
改变传入,参数, 我们便可以传入我们想传入的虚假数据了, 可以做到开始实现的, 一个学生工作都不做,打破默认复选框的限制!!!!