在各种渗透测试的密码爆破的攻势下,有部分应用系统开发者开始另辟蹊径,将用户名密码加密至一个单参数的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位前的内容,成功查询到对应的明文密码。
请教下博主,key不是随机生成的吗,固定的key每个数据包都可以用嘛
所谓随机生成,但是还是要由前端生成传递给后端,后端并不记录,所以其实写死也是可以的
碰到一个统一认证,也是AES加密,但是每次密码错误就会在返回包更新一个key,不知道怎么解决
这种目前确实是不支持的,在BurpSuite的插件体系里比较难实现