渗透测试高级技巧(一):分析验签与前端加密

“开局一个登录框”

在黑盒的安全测试的工作开始的时候,打开网站一般来说可能仅仅是一个登录框;很多时候这种系统往往都是自研或者一些业务公司专门研发。最基础的情况下,我们会尝试使用 SQL 注入绕过或者爆破之类的常规手段,如果可以成功,那皆大欢喜;但是随着甲方系统研发的迭代与额外安全要求,简单的抓包重访变得非常困难:

秘技一:破解验签防篡改

签名验证(又叫验签或签名)是验证请求参数是否被篡改的一种常见安全手段,验证签名方法主流的有两种,一种是 KEY+哈希算法,例如 HMAC-MD5 / HMAC-SHA256 等,另外生成签名的规则可能为:username=&password=。在提交和验证的时候需要分别对提交数据进行处理,签名才可以使用和验证

在给请求签名的情况下,如果重访过程中,数据修改了然而签名没有修改,那就意味服务器可以因为“签名不一致”随时拒绝掉我们的用户请求。

为了方便大家理解这个过程,我们可以通过一个简单的案例向大家介绍这种前端安全防护技术:

渗透测试高级技巧(一):分析验签与前端加密_第1张图片

当我们把这个表单提交给后端之后,将会看到后端的验证结果:分别是 “签名验证成功”,“用户名密码验证失败”

渗透测试高级技巧(一):分析验签与前端加密_第2张图片

这说明我们可以从网站提供的表单简单发起了一个可以过验签的请求,但是并不能过认证;当然能不能过认证都要看“缘分”了。

验签真的可以防爆破吗?

验签是一个很基础的对数据包完整性和篡改防护的保护策略,他在大多数时候可以应对简单的修改,例如:我们在 Yakit 手动劫持中,劫持到验证数据包,然后直接进行修改:

渗透测试高级技巧(一):分析验签与前端加密_第3张图片

在这种情况下,我们想要重放数据包,从password这个字段入手,爆破一下密码,自然也是不行的:那么难道真的就一筹莫展了嘛?

渗透测试高级技巧(一):分析验签与前端加密_第4张图片

大家深入思考验签的流程,就很容易想到,只要修改数据的时候,连带签名一起修改掉就好了。那么我们应该如何做这个事情呢?首先用户需要很清楚如下几点:

  1. 大部分签名的逻辑都藏在前端 JavaScript 中;
  2. 签名中字段的顺序一般来说是有意义的,JavaScript 中的 Object Properties 是有顺序的;
  3. JavaScript 签名的算法可能用的算法库一般不需要用户手动实现,找出算法一般就可以开始实现了。

为了让大家更清楚这个过程,大家可以跟随笔者的操作一步一步复现分析过程:

渗透测试高级技巧(一):分析验签与前端加密_第5张图片

我们通过浏览器操作直接定位到 HTML 元素(为了方便大家观察,我们直接把 HTML 元素复制在下面的代码块中):

``我们要记住id='json-form'这个表格内的内容,,在验签的时候,多半是需要操作 DOM 元素取值计算的。细心的读者可能发现了,这个表格和我们有时候见到的表格是不一样的,他没有action也没有method,一般来说,在没有这些东西情况下,有两种情况:

  1. (大概率)表单提交事件会忽略掉默认浏览器行为,直接通过 JavaScript 来操作的
  2. 表单只提交到当前页面使用默认的 method 方法

在看页面内容中,我们发现

你可能感兴趣的:(前端,web安全,人工智能,安全,系统安全,计算机网络,网络安全)