前言

外网入口绝大部分都是靠弱口令、密码爆破攻破。

所以掌握爆破手段十分重要,但是其中大部分的网站又对登录参数进行了加密,有的对用户名进行加密,有的对密码进行加密,这两个都还好,最恶心的是对用户名和密码同时进行加密。

目前主流的解决方案有两种:

第一种是调用加密js文件里面的加密函数,再指定用户名或者密码参数进行爆破。

第二种则是模拟人工登录的情况进行爆破。

两者各有优缺点。

前者缺点是需要一定的js基础,需要找出加密函数的位置,而有些js文件做了一定的混淆,这时候就不一定能找出加密函数了,而且也不适用于对同时加密了用户名和密码的情况进行爆破;优点是爆破速度快。

后者缺点是爆破速度慢,因为需要启用浏览器,占用一定的内存,而且有一定的延迟,但可以通过多线程来稍微改善一下;优点则是通杀一切加密,不管以后的加密形式如何变化,都可以做到通杀。

对比了两者的优缺点,我选择后一种方式来解决这个难题。

需求分析

1.多线程

为了弥补模拟爆破速度慢这个致命缺点,多线程功能无疑是十分重要的。毕竟渗透测试的时间是十分宝贵的。

2.代理功能

因为有些网站会对ip登录次数进行限制,所以可以增加一个简单的代理获取功能和代理设置功能。

3.爆破结果判定

每个网站登录成功的结果不一定一样,登录结果的判断可以依靠这些:

  1. 页面长度不一致
  2. 关键字,如“登录成功”,“欢迎登录”,“密码错误”等
  3. 状态码,200,301等

4.验证码识别

有些网站不但加密了还添加了验证码,但目前我没有遇到这种情况,但为了脚本的强大,可以预留一个调用验证码的接口即可,验证码的识别则可以使用 ddddocr 来识别。

5.可视化图形界面

这个可以以后开发,因为考虑到以后可能需要将脚本改成GUI,我们在开发的时候可以多想一下怎样的代码才容易改成gui。

环境配置

1. Python3

Python3 都可以,我这里用的是Python3.7

2. chromedrive

1)查看 chrome 版本

打开chrome浏览器,在地址栏输入

1
chrome://version/

image-20220806224210281

可以看到版本号

2)下载 chromeDrive

打开 http://chromedriver.storage.googleapis.com/index.html ,寻找最接近的 chromeDrive 版本

image-20220806224436965

image-20220806224448420

下载 chromedrive_win32.zip ,解压得到 chromedrive_win32.exe 。注:虽然电脑和浏览器都是64位的,但这并没有什么影响我们的使用

3)将 chromedrive_win32.exe 复制到 Python 安装路径下的 Script 文件夹下

image-20220806225859858

3. selenium

使用命令安装 selenium 如下:

1
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium

4. 测试

实例代码,如果能成功运行即代表环境配置没什么问题了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome()
try:
browser.get('https://www.baidu.com')
input = browser.find_element(By.ID,'kw')
input.send_keys('Python')
input.send_keys(Keys.ENTER)
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.ID, 'content_left')))
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)
finally:
browser.close()

正式开发

代码如下:

想要写成一个通用的密码爆破工具,任重而道远,毕竟登录网站的类型非常之多,可能适用于这个网站,但到了另一个网站,就会有点bug。完成了百分之九十,暂时遇到了一点困难,心力憔悴,身心俱疲,暂时搁置开发,等我重整旗鼓,收复旧山河。


TODO