pikachu之暴力破解

pikachu之暴力破解

一、神魔是暴力破解

在不知道密码的情况下(猜但不是瞎猜)

连续性的尝试+字典+自动化

场景

若一个网站没有对登录接口实施防暴力破解的措施,或实施了不合理的措施,则该网站存在暴力破解漏洞。

  • 是否要求用户设置了复杂的密码

  • 是否每次认证都使用安全验证码

  • 是否对尝试登录的行为进行判断和限制

  • 是否在必要情况下采用了双因素认证

字典

一个有效的字典,是提高暴力破解效率的关键

  • 常用的账号密码(弱口令),常用TOP 500等
  • 脱裤后的账号密码(社工库),登录其他网站效率比较高
  • 使用指定字符使用工具按照指定的规则进行排列组合算法生成密码

二、测试流程

  • 确认登录接口的脆弱性

    确认目标是否存在暴力破解的漏洞(是否设置有关防范措施)

    尝试登录----->抓包------>观察验证元素和response信息,判断是否存在被暴力破解的可能

  • 对字典进行优化

    根据实际的情况对字典进行优化,提高爆破过程的效率

    技巧一:

    根据注册提示信息进行优化

    对目标站点进行注册,搞清楚账号密码的一些限制(比如位数、复杂度规则),按照此去优化字典,比如去掉不符合要求的密码

    技巧二:

    若破解后台,则管理员用户名为admin/administrator/root的几率比较高。(可尝试登录根据回显确定用户名)

  • 工具自动化操作

    配置自动化工具(比如线程、超时时间,重试次数等),进行自动化操作。

三、靶场测试

知识补充:

burpsuite------instruder

target

设置攻击目标,可通过proxy发送

Pasitions

指定需要暴力破解的参数并设置成变量,同时选择攻击模式

Sniper:狙击手

设置一个payload,先将第一个变量使用字典去测试,再将第二个变量使用字典去测试(变量为主体);

Battering ram:碰撞车

设置一个payload,所有的变量一起用字典内容被替换,然后一起尝试;

Ptichfork:草叉型

每个变量设置一个payload,分别使用对应的字典对变量进行同时替换;

Cluster bomb:焦束炸弹

需要为每个变量设置一个payload,分别使用字典内容组合对变量进行替换;

Payloads

设置字典,并可以对字典进行统一的策略处理;

Options

对扫描的线程、失败重试等进行配置;

对结果设置匹配的flag:通过一个标识符来区别结果,并在结果栏中flag出来。

1、基于表单的暴力破解

image-20210207142144309

  • sniper模式

    使用场景:确定username,password中的一个,但不知道是哪一个

    保持一个变量不变,另一个变量遍历一个字典

    ------设置flag,对回显的特定字符标记,以便确定成功选项

    image-20210207143852200

    -------设置payload来源

    image-20210207144113752

    ------结果,没有爆破成功

    image-20210207144309619
  • Battering ram模式

    一个payload,将变量一起替换。适用于username,password相同,用一个字典爆破。

    image-20210207144607885 image-20210207144719206

    爆破失败!

  • Ptichfork模式

    用第一个字典的第一个 和 第二个字典的第二个登录测试,以此类推…

    image-20210207151414814 image-20210207151543416 image-20210207151641447
  • Cluster bomb模式(常用)

    与Ptichfork相比,该模式采用交叉式测试

    image-20210207152212867 image-20210207152320090

    爆破成功!

    image-20210207152428782

    使用admin/123456成功登录!

2、验证码绕过----on client相关问题

验证码CAPTCHA, (Completely Automated Public Turing test to tell Computers and Humans Apart)

作用:

防止登录暴力破解

防止机器恶意注册

认证流程

客户端request登录页面,后台生成验证码

1、后台使用算法生成图片,并将图片response给客户端;

2、同时将算法生成的值全局赋值存到SESSION中。

校验验证码

1、客户端将认证信息和验证码一同提交;

2、后台对提交的验证码与SESSION里面的进行比较;

客户端重新刷新页面,再次生成新的验证码

验证码算法中一般包含随机函数,所以每次刷新都会改变

测试过程:

查看网页源码,发现验证码设置在前端,一律无视,直接抓包重放

破解的过程与上一个一致

image-20210207162721979

后台源码分析:------------------bf_client.php

image-20210207163413904

3、验证码绕过----on server

场景:

  • 验证码在后台不过期,导致可以被长期使用;
  • 验证码校验不严格,逻辑出现问题;
  • 验证码设计的太过简单和有规律,容易被猜解。
  • 验证码以明文字符串的方式在cookie中,传到前端。

过程:

image-20210207180833424

抓包重放测试

image-20210207181408295

放包查看回显,发现验证码有效。

image-20210207182051414

修改账号和密码,再次放包查看回显,发现验证码依然有效,说明验证码为设置过期,可以重复利用。

image-20210207182214632

所以直接暴力破解:

image-20210207182556271

image-20210207182640637 image-20210207182724763 image-20210207183156978 image-20210207183226277

如图,爆破成功!

源码分析:

-----------------------bf_server.php

image-20210207185946383

image-20210207184138937

------------------------showvcode.php

向客户端设置一个cookie

其中有一个问题就是,服务端的验证码字符串是以明文cookie的方式传给前端,毫无意义。

image-20210207190901854

----------------------------function.php

生成验证码

image-20210207191311337

4、token真的防暴力破解?

什么是token?

访问资源接口(API)时所需要的资源凭证

简单 token 的组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)

因为有时间戳,所以每次刷新页面token会变

image-20210207205007766

因为token值是以明文方式存放在前端的,所以可以利用脚本获取,然后再实施重放攻击暴力破解。

源码分析:

---------------function.php

image-20210207205507498

--------------bf_token.php

image-20210207222110253

四、防范措施

  • 设计安全的验证码(安全的流程+复杂而又可用的图形)。
  • 对认证错误的提交进行计数并给出限制,比如连续5次密码错误,锁定2小时。
  • 必要的情况下,使用双因素认证。

猜你喜欢

转载自blog.csdn.net/qq_43665434/article/details/113748674