0x01 概述

密码学具有各种优点,包括信息的机密性。但是过分的依赖密码学来保护应用程序不是一个好主意。在这里将研究讨论一个案例,其中包含有经加密的SQL注入漏洞有效载荷和利用。

注意:我们这次不会讨论加密问题(即如何破解密码),而是一个应用程序缺陷,由开发人员进行监督,这使我们能够生成加密的有效负载(即任何给定明文的密文),然后将其用于识别和利用SQL注入。

0x02 过程

我们在我们的hack实验室中重新搭建了一个类似的漏洞,用于此演示,下面将详细介绍:

在一个电子商务应用程序中,我们观察到大多数请求参数值已被加密。当请求参数被加密时,很难test/fuzz应用程序,除非你可以破解加密(这需要知道密钥和加密算法)。这可以说很难,可以查看我们上一篇关于hacking cryptos的博客,以了解这个问题。

这是订单详细信息页面的示例,其中以加密格式发送id(orderid)参数。

1-order-details

注意:参数值(BDKfx3xNKsc=)是加密的,虽然ID参数的加密值以base64编码格式表示,但这不是简单的base64编码。

我们还注意到,如果我们退出应用程序,然后以相同的用户登录并导航到完全相同的页面,那么加密参数(nPBri1km2ic=)的值是不同的,如下所示:

2-order-details

不过这给我们提供了一个很好的指示,即随机密钥会在每个成功的登录时的会话ID中(cookie的一部分)加密,并以某种方式把它用作密钥的一部分。我们测试了一些加密的缺陷,但没有成功。

首先,我们尝试在几个位置注入单引号(’)来测试输入验证。请求参数被拒绝,因为它需要加密的格式(即有效的密文),所以这肯定是失败的。

然后我们测试了购物车的分享功能。此功能允许用户与其他人共享购物车项目。当用户保存购物车进行共享时,会产生一个带有随机查询令牌的链接。通过访问此链接(URL),用户可以访问彼此的购物车。在可以保存购物车之前,用户被要求命名购物车。

3-Cart-Sharing-

由于这是接受明文输入的罕见输入框之一,所以我们将SQLi,XSS以及其他可能存在的都测试了一遍!但还是没有成功。

我们然后意识到,我们实际上偶然发现了一些有趣的事情。在更深入的检查中,事实证明,生成的令牌共享购物车的URL,实际上是我们命名的购物车名称的密文。

注意Share cart功能不容易受到任何攻击的影响,但可以在刚刚的分享功能中输入特定的文本(明文)生成加密的有效内容(密文)。现在,可以生成一个加密的攻击payload来测试应用程序对SQL Injection,Authorization Bypass等漏洞的行为。为了测试SQL Injection,生成了单引号(’)的加密值,如下所示:

4-single-quote-Ciphertext-quote

加密的payload可用于fuzz仅接受密文值作为输入的各种应用参数。我们花了一些时间来测试存在漏洞的地方,最后发现,orderitem页面的ID参数返回一个SQL错误消息,我们确认了该漏洞,如下所示:

5-Error-Message

该错误消息证明的应用程序生成的动态查询,可能存在SQL注入漏洞。现在是从数据库中提取信息的时候了。基于UNION的SQL查询用于从数据库中提取数据。联合运算符用于组合两个或多个select语句的结果。

第一个任务是确定作为SQL查询的一部分返回的列数是多小。使用二分法来试错,我们确定了在查询中返回的(30)列。现在是时候从数据库中查看各种信息了。我们创建了一个加密的负载来查看数据库版本信息,如下所示:6-SQLi-union-query-version

然后,由上述payload的输出生成的密文作为页面上显示DB版本的ID参数的输入到URL中。

9-SQLi-union-query-version

然后我们使用这个漏洞来查询数据库系统,并最终得到一个shell!

:这是本实验室自己搭建的环境,本文存在着攻击性,请勿用于非法用途,一切责任与本人无关。

0x03 结论

使用加密参数来实现应用程序中的安全性是好的,但它并不会使软件安全。可以使用强加密算法加密的数据保密,直到时间密钥受到保护或者恶意角色识别生成加密有效载荷的方式。加密和密码已被视为用来防止篡改或伪造数据事实的机制,所以加密和其它的安全防御都是必不可少的。

 

*作者:notsosecure

源链接

Hacking more

...