前言
外网入口绝大部分都是靠弱口令、密码爆破攻破。
所以掌握爆破手段十分重要,但是其中大部分的网站又对登录参数进行了加密,有的对用户名进行加密,有的对密码进行加密,这两个都还好,最恶心的是对用户名和密码同时进行加密。
目前主流的解决方案有两种:
第一种是调用加密js文件里面的加密函数,再指定用户名或者密码参数进行爆破。
第二种则是模拟人工登录的情况进行爆破。
两者各有优缺点。
前者缺点是需要一定的js基础,需要找出加密函数的位置,而有些js文件做了一定的混淆,这时候就不一定能找出加密函数了,而且也不适用于对同时加密了用户名和密码的情况进行爆破;优点是爆破速度快。
后者缺点是爆破速度慢,因为需要启用浏览器,占用一定的内存,而且有一定的延迟,但可以通过多线程来稍微改善一下;优点则是通杀一切加密,不管以后的加密形式如何变化,都可以做到通杀。
对比了两者的优缺点,我选择后一种方式来解决这个难题。
需求分析
1.多线程
为了弥补模拟爆破速度慢这个致命缺点,多线程功能无疑是十分重要的。毕竟渗透测试的时间是十分宝贵的。
2.代理功能
因为有些网站会对ip登录次数进行限制,所以可以增加一个简单的代理获取功能和代理设置功能。
3.爆破结果判定
每个网站登录成功的结果不一定一样,登录结果的判断可以依靠这些:
- 页面长度不一致
- 关键字,如“登录成功”,“欢迎登录”,“密码错误”等
- 状态码,200,301等
4.验证码识别
有些网站不但加密了还添加了验证码,但目前我没有遇到这种情况,但为了脚本的强大,可以预留一个调用验证码的接口即可,验证码的识别则可以使用 ddddocr 来识别。
5.可视化图形界面
这个可以以后开发,因为考虑到以后可能需要将脚本改成GUI,我们在开发的时候可以多想一下怎样的代码才容易改成gui。
环境配置
1. Python3
Python3 都可以,我这里用的是Python3.7
2. chromedrive
1)查看 chrome 版本
打开chrome浏览器,在地址栏输入
1 | chrome://version/ |
可以看到版本号
2)下载 chromeDrive
打开 http://chromedriver.storage.googleapis.com/index.html ,寻找最接近的 chromeDrive 版本
下载 chromedrive_win32.zip ,解压得到 chromedrive_win32.exe 。注:虽然电脑和浏览器都是64位的,但这并没有什么影响我们的使用
3)将 chromedrive_win32.exe 复制到 Python 安装路径下的 Script 文件夹下
3. selenium
使用命令安装 selenium 如下:
1 | pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium |
4. 测试
实例代码,如果能成功运行即代表环境配置没什么问题了:
1 | from selenium import webdriver |
正式开发
代码如下:
想要写成一个通用的密码爆破工具,任重而道远,毕竟登录网站的类型非常之多,可能适用于这个网站,但到了另一个网站,就会有点bug。完成了百分之九十,暂时遇到了一点困难,心力憔悴,身心俱疲,暂时搁置开发,等我重整旗鼓,收复旧山河。