1. Brute Force(暴力破解)简介
暴力破解一般是指穷举法,顾名思义,暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录。理论上来说,只要字典足够庞大,枚举总是能够成功的!
但实际发送的数据并不像想象中的那样简单——“ 每次只向服务器发送用户名和密码字段即可!”,实际情况是每次发送的数据都必须要封装成完整的 HTTP 数据包才能被服务器接收。但是你不可能一个一个去手动构造数据包;
所以在实施暴力破解之前,我们需要先去获取构造HTTP包所需要的参数,然后扔给暴力破解软件构造工具数据包,然后实施攻击就可以了。
下面我们利用Burpsuite的Intruder模块来对密码进行暴力破解。
2. Brute Force(暴力破解)
实验环境
(1)Windows服务器:Windows Server 2003,IP地址:192.168.37.128;
?
(2) 测试机:Windows7物理机(开启代理,代理服务器为burpsuite)
?
实验过程
安全级别:Low
(1)设置安全级别
(2)查看源码
(3)源码分析
针对用户输入的用户名和密码,服务器没有进行过滤操作;
没有任何的防爆破机制,存在明显的sql注入漏洞;
(4)实验操作
4.1> 首先输入用户名admin,输入随意密码,比如123,然后对数据包进行拦截;
4.2> 将获取到的数据包导入intruder;
4.3> 清空参数;
4.4> 添加所选参数(即需要爆破的参数);
四种暴力破解方式的区别:
一个字典,两个参数,先匹配第一项,再匹配第二项【sniper】
一个字典,两个参数,同用户名同密码【battering ram】
两个字典,两个参数,同行匹配,短的截止【pitch fork】
两个字典,两个参数,交叉匹配,所有可能【cluster bomb】
4.5> 第一种(sniper)方式攻击
添加字典,开始字典爆破;
尝试用爆破的用户名和密码登陆,成功登录;
4.6> 再选择第四种爆破(cluster bomb)的方式;
添加字典,开始字典爆破;
尝试用爆破成功的用户名和密码登陆,成功登录;
4.7> 也可以尝试SQL注入的方式登录;
安全级别:Medium
(1)设置安全级别;
(2)查看源码;
(3)源码分析
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符;
使用本函数来预防数据库攻击;基本防止了SQL注入;
同时,$pass做了MD5校验,杜绝了通过参数password进行sql注入的可能性;
但依然没有加入有效的防爆破机制;
不能采用Sql注入的方式登录;
不能采用SQL注入的方式登录;
(4)实验过程
Medium级别防止了SQL注入,但爆破步骤和Low级别基本一致;
安全级别:High
(1)设置安全级别
(2)查看源码
(3)源码分析
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符;
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠,可用于清理从数据库中或者从 HTML 表单中取回的数据;
(4) 实验过程
通过抓包,可以看到,登录验证时提交了四个参数:username、password、Login以及user_token;增加了爆破的难度;
这样就要求我们发送的每个请求包中包含随机生成的token值。我们无法简单的使用Burpsuite完成;
可以尝试使用python脚本,使用爬虫将服务器每次返回的user_token抓取到,后续有可能会更新成自己写的代码;
安全级别:Impossible
(1)设置安全级别
(2)查看源码
(3)源码分析
Impossible级别的代码加入了可靠的防爆破机制,当检测到频繁的错误登录后,系统会将账户锁定,爆破也就无法继续;
同时采用了更为安全的PDO(PHP Data Object)机制防御sql注入,这是因为不能使用PDO扩展本身执行任何数据库操作,而sql注入的关键就是通过破坏sql语句结构执行恶意的sql命令;
防止暴力破解的有效手段:
1、限制尝试次数;
2、验证码(验证码存在被技术破解风险仅用于增加每次尝试的成本);
3、PDO技术;