渗透测试高级技巧(二):对抗前端动态密钥与非对称加密防护
发布网友
发布时间:2024-09-29 13:25
我来回答
共1个回答
热心网友
时间:2024-09-29 16:37
在之前的分享中,我们探讨了验签和静态对称加密的常规场景,这些技术在实际测试中通常能通过基础方法破解。本文将深入探讨更复杂的前端加密策略:当获取密钥和提交表单操作不在一个请求中时的处理。
例如,开始时从 /get-key 接口获取加密密钥,随后用这个密钥加密表单内容,仅在 POST 中提交加密数据,服务器端利用服务器密钥解密。这种方式常用于保护登录信息,我们通过实际网站的加密方法,在Vulinbox中的靶场环境中模拟学习。
在实际操作中,首先观察网站通信,会发现它加载了一套证书。接着,我们需要在JavaScript中寻找加密线索。加密逻辑大致是:获取服务器的私钥解密签名数据,同时获取公钥签名要发送的数据。然而,由于RSA-OAEP加密限制,处理大块数据并不适用,通常采用“混合加密(RSA-OAEP + AES)”方法,因为AES KEY通常较小。
在JavaScript中,我们发现加密过程需要两个请求,符合Web Fuzzer的请求序列定义。主要工作是将AES KEY和IV通过RSA-OAEP加密,Yaklang的热加载代码可实现此步骤。设置热加载,提取服务器的公钥和后续加密数据的操作变得简单。
在实际测试中,我们首先通过数据提取器获取公钥,然后在后续请求中使用这个密钥加密表单数据。处理响应时,可能遇到加密后的数据,这时需要在热加载中解密RSA-OAEP内容,判断登录结果。
遇到HTTP响应加密问题时,我们利用Fuzzer序列提取私钥,解密响应内容。通过这种方式,我们能进行用户名和密码的爆破尝试。在Yaklang的1.2.7及以上版本,新增的mirrorHTTPFlow函数提供了一种解密和处理加密响应的编程方法,简化了流程。
总的来说,本篇高级技巧着重于理解并利用Web Fuzzer的上下文关联处理加密场景,尽管挑战重重,但熟练掌握这些技术后,应对复杂加密策略将更加游刃有余。实战案例源于真实场景,虽然细节可能有所不同,但理解和应用这些技巧后,渗透测试能力将显著提升。