BurpCrypto: 对单加密参数的登录接口进行密码爆破的一种方法

在各种渗透测试的密码爆破的攻势下,有部分应用系统开发者开始另辟蹊径,将用户名密码加密至一个单参数的base64编码数据中。

如图所示:

这样处理后常规的密码爆破方式就无计可施了,但是借助BurpCrypto插件,依然可以顺利爆破,下面我来介绍一下如何操作。

1、分析加密方式

既然含有加密数据,那必然会有相关的代码进行处理。

因为本文主要讲解如何进行密码爆破,加密方式分析过程暂且略过。

如想了解相关方法,可阅读jsEncrypter开发者c0ny1的文章:

快速定位前端加密方法

通过分析后我找到了该网站的加密方式为:

AES的CBC模式,填充为Pkcs7,随机Key,固定IV,Base64编码的方式。

最终发送的params参数为两部分数据组成,后16位为随机生成的AESKey,前面的部分为AES加密后的密文内容。对应的明文内容为一段含有用户名密码的Json数据:

{"uid":"username","pid":"passwd","utype":"R"}

2、如何爆破?

找到了加密方式后事情就清晰了起来,使用BurpCrypto可以很容易的对数据进行加密。

先设置好爆破位置,毫无疑问就是params的值

在Payload页设置Payload type为Custom iterator,该类型可以将多组Payload以特定的格式进行组合,并生成单一Payload,对于这个例子来说就是我们的用户名字典与密码字典。

根据上面Json格式,用户名与密码之间的对应分隔符就是","pid":",如下方法设置:

先Start attack看一下效果:

是不是跟Json的格式差不多了?

下一步我们来添加Json的头与尾,Burp中有对应的功能:

设置结果如下:

再来测试一下:

到这里已经和明文Json的格式完全一致了,下一步要进行加密。

3、设置加密

刚刚通过分析发现,加密密钥为固定IV(9875643210132456)和随机生成的16位密钥。我们这里指定一个固定密钥进行使用:

Y3MxMTg1MzUyOS4x

先添加一个Processor

添加到Payload处理器中即可。

然后在密文的后端再加入我们固定的Key字符串:

最后还要设置一个地方,因为在AES密文进行base64编码的过程中会产生一些特殊字符,而Burp默认会对Payload中的特殊字符进行UrlEncode,在这次的案例里,对Json进行UrlEncode是多此一举的。所以要关掉这个自动编码功能。

4、最终结果

可见我们已经成功爆破出账号密码,因为我们在BurpCrypto中生成的密文后又追加了16位的AESKey,所以我们选中后16位前的内容,成功查询到对应的明文密码。

加入对话

4条评论

    1. 所谓随机生成,但是还是要由前端生成传递给后端,后端并不记录,所以其实写死也是可以的

  1. 碰到一个统一认证,也是AES加密,但是每次密码错误就会在返回包更新一个key,不知道怎么解决

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注