首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我是怎样做到E练通满分的(上)

没错,就是每日一练、每周一测、每月一考的E练通。

本人郑重声明:E练通是个好系统,能够帮助税务干部掌握各项税费知识要点。本文只从技术的角度出发,学习探讨Python的urllib库,并给出自动答题的思路。本人不接受免费帮人答题,也不鼓励刷题,凡利用本文给出的方法进行刷题的行为及其造成的不良影响,本人概不负责,特此声明!

鲁迅说:要想战胜敌人,须先了解敌人!

通过分析,E练通系统使用古老的JSP语言写成,部署在远古的tomcat服务器上,运行在史前的低配虚拟机上。但这并不代表你能够用NMAP对该服务器进行扫描,得出ApacheTomcat的版本号,再利用CEV-2017-12615远程代码执行漏洞通过Burpsuite篡改PUT请求的方式,对服务器进行渗透攻击;也不代表你能够利用开放的3389端口,使用类似于xxk@2****之类的弱密码进行爆破并远程登录。凡利用上述方式进入服务器并获得到题库和答案的做法,不在本文讨论之列,本人也不提倡使用上述手段获得题库及答案insert进MySQL中,再用PHP写一个简单查询网页,返回正确答案用于答题。

我们要做的是模拟一个正常的用户,正常登录系统、获得题目、认真审题、提交答案、系统返回正确答案、用户退出登录的过程。我们要告诉服务器,我是一个正常的用户,我是通过自己的实力回答正确的。嗯,整个流程差不多就是这样,话不多说,现在开撸。

(图文不符)

首先是登录。E练通用cookie来控制一个会话,这个cookie用于判断用户的状态,例如未登录、或者登录者是谁、或者已退出登录。cookie的内容是JSESSIONID=596A96CC7BF9108CD896F33C44AEDC8A

后面是一个随机MD5值,每次打开E练通首页,都会SET一个随机的值。

我们想要正常登录,先决条件是搞定Cookie值:

如果服务器正常的话,利用函数就可以返回到cookie值了。

有了cookie还不够,我们要伪装成正常的用户,还需要修改请求的headers,让服务器接收我们的POST和GET请求。后续的答题还将发送不少POST请求,我们索性把这些目标网址都放在字典里,作为全局常量,以方便调用,这里先只用到login和logout,其他的后面再介绍。

同理,把需要修改的User-Angent、POST的数据、cookie等headers内容打包到一起,用函数返回的字典来构造字节流的headers,可以让代码更简洁:

至此,头部内容和cookie都搞定了,我们就可以开始撸登录了。E练通的登录非常简单,把账号密码POST到/admin/login即可,没有验证码,简直不能太爽。

这里主要用到了模块。作为爬虫必备,它可以伪造各种请求,简单来说就是骗过服务器,让其以为这就是一个正常的用户请求,除非有验证码。

将请求丢过服务器之后,无论用户是否存在、密码是否正确、是否重复登录,服务器都会返回一个JSON。如果一切正常,error->level的值为0,如果登录不正常,就会在error->text值中存储错误信息,例如账号不存在、密码错误、以及用户已经登录等。

我们让登录函数返回一个布尔值,也就是登录成功返回True,登录失败返回False。相信我,除非服务器没有正常运行,不然你总能登录成功。

撸完登录就顺便撸一下退出。这系统的退出机制设置得简直太水了,只要有cookie就给退出,没啥难度:

因为服务器是用cookie记录用户登录状态的,假如你登录后不小心关闭了网页,如之前所说,你再打开时它又给了你一个新的cookie,而你的登录状态是上一个cookie在记录的,那么你再登录的话,它就会提示你已经登录,你只能等服务器自动断开这个session,才能再次登录,这个时间大概是10分钟。就像下面这样:

所以我们在设计时,为了防止服务器原因或代码问题造成的突然断开,最好写个异常处理,即程序停止前,调用函数退出登录,然后才是,这样你就可以马上又拿起你的账号继续测试了。

今天就先聊到这里,大家新年快乐~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190203G019J900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券