Python暴力猜解Web登录
盗号这种事向来都让人有些着迷,经常想象拿到别人密码之后各种翻箱倒柜,做一些恶趣味的事......然而没有一种万能的方法达到这个目的,挖洞利用门槛高,有时也没这个必要,所以暴力猜解就成为唯一的选择。
实验楼今天介绍的项目就是使用wordpress作为测试对象,使用模拟登陆和暴力猜解来获取wordpress管理员的登录密码。
一、效果图:
最终效果
二、实验准备
说明:以下步骤基于实验楼在线开发环境,在自己本地环境会有稍许不同,但基本一样。
1)下载并安装wordpress首先安装并我们用到的CMS即wordpress,以下简称wp。
$ sudo apt-get update
$ sudo apt-get install wordpress
$ sudo cp /usr/share/wordpress /var/www/html -rf
$ cd /var/www/html/
$ sudo chown -R www-data:www-data wordpress
$ sudo touch /etc/wordpress/config-localhost.php
2)配置数据库及 wordpress 账号
使用mysql数据库作为 wordpress 的数据库,创建 wordpress 将会用到的数据库和相应的数据库用户账号并分配权限。
$ sudo service mysql start
$ mysql -u root
>create database wordpress;
>create user wordpress@localhost identified by '666';
>grant create,drop,insert,delete,update,select on wordpress.* to wordpress@localhost;
然后按 ctrl + D ,退出 mysql。
3)配置部署 wordpress
在 wordpress 的配置文件中指定数据库用户的账号和密码,并创建后台管理员账号。
$ cd /var/www/html/wordpress
$ sudo vim wp-config.php
在配置文件中找到以下几行,并添加对于密码的设定:
数据库密码设定
保存配置后,启动apache2服务,然后再浏览器中输入http://localhost/wordpress/wp-admin/install.php配置管理员用户名与密码。
$ sudo service apache2 start
此处我们设置账号为shiyanlou,6位密码为syl666,设置好后点击Install WordPress即可。
管理员账号配置
如果浏览器没有自动跳转,可手动输入http://localhost/wordpress/wp-login.php进入登录页,可使用之前配置的账号来登入后台。
三、破解过程分析
需要理清登陆过程,弄懂破解原理才能够在使用时得心应手,以下从两个方面展开。
1 登录分析
在浏览器中输入http://localhost/wordprss/wp-login.php进入登录页,通过右键菜单中的检查元素打开firefox调试工具,跳转到网络选项卡。接着在浏览器中输入错误的密码,查看请求参数。
登录请求参数
登录时发送的的cookie:
登录带的cookie
无论是输入正确的密码还是错误的密码,这些登录需要提交的参数是不会改变的。并且只要登录成功,服务器一定会返回包含sessionid的cookie。整理后的发送参数如下:
| 参数名称 | 参数值 |
|---|---|
| log | 用户名 |
| pwd | 密码 |
| wp-submit | 固定值Log In
|
| redirect_to | 管理员首页链接http://localhost/wordpress/wp-admin
|
| test_cookie | 固定值1
|
| Cookie:wordpress_test_cookie | 固定值WP Cookie check
|
注意: 空格在html编码后变成+,图中的+原本是空格
2 破解分析
暴力猜解简述
暴力破解法就是列举法,将口令集合中的每一个口令一一尝试直到登录成功;有时候结合字典效率高一点,不过字典不一定猜得准。可以说它是一种“笨”办法,但有时候却是唯一的办法。它是在查找漏洞一筹莫展的时候,在漏洞利用不顺利的时候你所能依靠的方法。一个固若金汤的网站可能几乎找不到漏洞,但粗心的管理员却有可能使用了弱口令,就算我们没找到攻破整套系统的方法,但是只要知道了管理员的口令,同样能够达到修改系统的最终目的。
| 类型 | 测试口令空间 | 特点 | 可优化措施 |
|---|---|---|---|
| 暴力破解 | 口令字符的全部排列组合 | 一定有解,但计算开销巨大,一般在口令空间较小时使用 | 减小口令空间,硬件加速计算 |
| 字典攻击 | 预先准备的口令字典 | 字典的好坏决定成功率,一般用于弱口令破解 | 结合用户信息定制字典 |
破解流程
暴力破解可以自动化平时手动一个个试密码的过程,并且程序的速度更快,破解的一般流程如下。
流程
口令空间
口令由字符组成,这些字符构成的所有的字符串组成了口令空间。以数字密码为例,字符集合为0~9的阿拉伯数字,密码长度为6时共有10^6种可能性,要暴力破解就是一一尝试这10万个口令直到找到正确的口令。假设在一般条件下一次登录的http请求和响应耗时1s,那么10w个请求将耗时277个小时,按一天24小时算,折合成11天。如果使用11个线程并行破解,就只需要1天的时间。当然物理硬件性能越好,破解速度越快。由于这种破解方法建立在"猜"之上,因此口令数量很庞大,这点不可避免。但是结合人的行为习惯,可以从社会工程学的角度上减少组成口令的字符集的大小,从而减小口令空间。
由于虚拟机环境限制,简化下复杂度。假定这个wordpress由实验楼团队维护,那么管理员作为团队成员更有可能会用syl这三个字符;有空会玩LOL,可能会更加倾向于使用数字6;并且他要经常登录后台进行管理,为了省事将密码设置的比较短,6位左右的长度。我们使用lsy6作为他口令的字符集合来编写程序实现猜解过程。
四、用Python实现
说明:详细的代码可以点击这里进行查看,有代码详解步骤以及完整代码下载。这里说明实现的步骤。
1)模拟登陆函数
功能需求:可以独立的发送一次登录请求并通过解析返回参数判断登录是否成功,返回布尔类型。
2)暴力破解类
编写一个破解类Bruter来实现所有相关的功能,这个类包含以下功能:
- 模拟登录
- 测试口令生成
- 多个线程破解
- 破解进度通知
3)运行测试
想要动手试试该项目,可以点击Python暴力猜解Web登录,就可以照着教程一步步进行学习,并在在线环境中实践。