某学工网系统密码爆破

0x00 前言

之前一直有爆破学校学工网系统密码的念头,错过了用户名和密码都是学号的大好时机。

经过一番安全审查后,默认密码更改为身份证后六位,考虑了一下,还是可以爆破的,增加了时间成本。

知识点:

  • selenium 使用
  • tesserocr 识别图形化验证码
  • python 命令行参数 getopt 提取

http://www.runoob.com/python/python-command-line-arguments.html

0x01 分析

之前的思路,抓取登录的请求包然后更改密码参数就可以实现爆破,但这个网站实际上并没有这么简单。

密码传输采取了 RSA 加密,__VIEWSTATE__EVENTVALIDATION 两个参数也是随着每次访问刷新的。服务器采用的 java 架构,猜测可能和验证网页访问有关。

测试了一下,对输入的密码进行 RSA 加密,然后在 burp 里提交,刚开始几次还可以提交,连续几次或隔了一段时间后服务器提示 500 错误。

对于此类 js 处理输入参数,可以将其加密逻辑改为 python 代码同样处理参数,也可以用调用第三方模块运行 js 代码获取结果。

其余两个动态参数的分析还有服务器 500 的错误搞的很心烦,最后改用了 selenium 爆破的方式。

0x02 核心代码

大概思路:访问登录界面 -> 输入用户名密码 -> 提取验证码识别并输入 -> 点击登录判断验证结果

难点大概在于密码的生成,和身份证有关还有验证码的识别。身份证编码可以参考这篇文章:

https://zhuanlan.zhihu.com/p/27056281

后四位的前三位为顺序码,对应该区域同一天出生的婴儿的个数,单数对应男孩,双数对应女孩。以顺序码作为轮询生成密码

调用 tesserocr 识别验证码

0x05 问题记录

5.1 验证码定位

对网页内容进行截图,获取验证码元素在 html 页面的位置,根据这个位置裁剪截图。但是实际运用的时候,截取出的验证码位置大小不对,最后还是只有一点一点调整截取,猜测可能可 html 元素 margin,padding有关

5.2 判断弹框

密码或验证码输入错误会弹窗提示,提示的时候不能对 brower 对象进行操作,否则会报错,使用了网上的代码对弹框进行判断

0x04 to be continue

实际测试的时候发现 tesserocr 识别的准确率还是有点低