一、暴力破解
1、概述
连续性尝试+字典+自动化
一个有效的密码,可以大大的提高暴力破解的效率
如果一个网站没有对登录接口实施防暴力破解的措施,或者实施了不合理的措施,则称该网站存在暴力破解漏洞
措施:是否要求用户设置了复杂的密码,是否每次认证都使用安全的密码,是否对尝试登录的行为进行判断和验证,双因素认证等
2、暴力破解测试流程
1)确认登录接口的脆弱性
确认目标是否存在暴力破解的漏洞(确认被暴力破解的可能性)
比如:尝试登录—抓包—观察验证元素和response信息,判断是否存在被暴力破解的可能
2)对字典进行优化
3)工具自动化操作:配置自动化工具(比如线程,超时时间,重试次数等)
字典优化技巧:
- 根据注册提示信息进行优化
- 如果爆破的是管理后台,往往这种系统的管理员是admin/administrator/root的几率比较高,可以使用这三个账号+随便一个密码,尝试登录,观看返回的结果,确定用户名
二、暴力破解实验演示以及burpsuite介绍
1、burpsuite
browser---proxy---web-site
intruder模块可以通过对http request的数据包以变量的方式自定义参数,然后根据对应策略进行自动化的重放,常用于自动化猜测/暴力破解过程中
target选项卡:设置攻击目标,可以通过proxy发送
pasitions选项卡:指定需要暴力破解的参数并设置为变量,同时选择攻击模式:
sniper:狙击手
设置一个payload,先将第一个变量使用字典进行测试,然后再将第二个变量使用字典进行测试
Battering ram:冲撞车
设置一个payload,所有的变量一起用字典内容替换,然后一起尝试
Pitchfork:草叉型
每个变量设置一个payload,分别使用对应的字典对变量进行同时替换
Cluster bomb:焦束炸弹
需要为每个变量设置一个payload,分别使用字典内容组合对变量进行替换
Payload选项卡:
设置字典,并可以对字典进行统一的策略处理
Options选项卡:
对扫描的线程、失败重试等进行配置
对结果设置匹配的flag:通过一个标识符来区别结果,并在结果栏中flag出来
Get一般用来获取服务器的信息,post一般用来更新信息
Get请求也可以传参到后台,但是传递的参数显示在地址栏中,安全性低,且参数的长度也有限制,post请求是将传递的参数放在request body中,不会在地址栏中显示安全性比get请求高
Get请求刷新浏览器或者回退没有影响,可以被缓存,也会保留在浏览器的历史记录中,通过url地址请求,产生一个tcp数据包,get请求会被浏览器主动cache
post请求则会重新请求一遍,不会被缓存,常见的是form表单请求,产生两个数据包,而post不会,需要手动设置
三、暴力破解的绕过与防范
一般用验证码来做什么:
登录暴力破解、防止机器恶意注册
验证码的认证流程:
1、客户端request登录页面,后台生成验证码
后台使用算法生成图片,并将图片response给客户端;
同时将算法生成的值全局赋值存到session中
2、校验验证码
客户端将认证消息喝验证码一同提交
后台对提交的验证码与session里面的进行比较
3、客户端重新刷新页面,再次生成新的验证码
验证码算法一般包含随机函数,所以每次刷新都会改变
验证码可以防止暴力破解,但是你的验证码安全吗?
不安全的验证码-on click(客户端)绕过实验演示
代码演示
前端的验证码只在前端进行了验证,并没有传入后端进行验证
不安全的验证码-on client常见问题
使用前端js实现验证码(纸老虎)
将验证码在cookie中泄露,容易被获取
将验证码在前端源代码中泄露,容易被获取
四、不安全的验证码-on server-实验演示、代码演示和分析
不安全的验证码-on server常见问题
验证码在后台不过期,导致可以长期被使用
验证码校验不合格,逻辑出现问题
验证码设计的太过简单和有规律,容易被猜解
首先通过分析,发现虽然有验证码,并且也会在后台进行验证码错误和非空的判断,但是验证码一直有效,不会过期,可以重复利用
暴力破解成功:
为空报错和验证码错误报错正常:
五、暴力破解防范措施和防范误区
措施总结:
- 设计安全的验证码(安全的流程+复杂而又可用的图形)
- 对认证错误的提示进行计数并给出限制,比如连续五次密码错误,锁定2小时
- 必要的情况下,使用双因素认证