首页 > 科技 > 正文

使用恶意 SQLite 数据库获取代码执行
2019-09-15 12:53:36   来源:东方头条   

前言

SQLite 是世界上部署最多的软件之一。但是,从安全角度来看,它只是通过 WebSQL 和浏览器开发的视角进行了安全检查。

在研究人员的长期研究中,曾尝试在 SQLite 中利用内存损坏漏洞,而不依赖于 SQL 语言之外的任何环境。使用研究人员的查询劫持和面向查询编程的创新技术,就可以地利用 SQLite 引擎中的内存损坏漏洞。

鉴于 SQLite 几乎内置于每个主要的操作系统、桌面或移动设备,研究人员希望通过发布研究人员的安全研究和方法,来避免大规模攻击事件的发生。此外,本文介绍的许多原语并不是 SQLite 独有的,可以拷贝到其他 SQL 引擎。

SQLite 的攻击面

下面的代码片段是密码窃取器后端的一个相当常见的示例:

由于研究人员控制了数据库及其内容,因此可以将可用的攻击面分为两部分 : 数据库的加载和初始解析,以及对其执行的 SELECT 查询。

sqlite3_open 完成的初始加载实际上非常有限,它基本上是打开数据库的大量设置和配置代码。

随着研究人员开始查询数据库,事情变得更加有趣。

用 SQLite 开发者的话来说,就是 "SELECT 语句是 SQL 语言中最复杂的命令 " 。

虽然研究人员无法控制查询本身(因为它在研究人员的目标中是硬编码的),但仔细研究 SELECT 过程将对研究人员的探索非常有益。

由于 SQLite3 是一个虚拟机,因此必须首先使用 sqlite3_prepare * 例程之一将每个 SQL 语句编译为字节码程序。

在其他操作中,prepare 函数会遍历并扩展所有 SELECT 子查询。这个过程的一部分是验证所有相关对象 ( 如表或视图 ) 是否确实存在,并将它们定位在主模式中。

sqlite_master 和 DDL

每个 SQLite 数据库都有一个 sqlite_master 表,它定义了所有数据库及其所有对象(例如表、视图、索引等)的模式。

sqlite_master 表定义为:

研究人员特别感兴趣的部分是 sql 列,该字段是用于描述对象的 DDL(数据定义语言)。

从某种意义上说,DDL 命令类似于 C 标头文件。 DDL 命令用于定义数据库中数据容器的结构、名称和类型,就像标头文件通常定义类型定义、结构、类和其他数据结构一样。

如果研究人员检查数据库文件,这些 DDL 语句实际上会以纯文本形式出现:

在查询准备过程中,sqlite3LocateTable ( ) 试图找到描述研究人员感兴趣的查询的内存结构。

sqlite3LocateTable ( ) 读取 sqlite_master 中可用的模式,如果这是第一次这样做,它还会对每个结果进行回调,以验证 DDL 语句是否有效,并构建必要的内部数据结构来描述所讨论的对象。

DDL 补丁

了解了这个准备过程后,研究人员是否可以简单地替换文件中以纯文本形式出现的 DDL ? 如果研究人员能将自己的 SQL 注入到文件中,也许就能影响它的行为。

基于上面的代码片段,DDL 语句似乎必须以 "create" 开头。

考虑到这种限制,研究人员需要评估研究人员发现的攻击面。

在检查 SQLite 的文档后发现,以下这些可能是研究人员可以创建的对象 :

CREATE VIEW 命令给研究人员提供一个有趣的想法,简单来说,VIEW 只是预先打包的 SELECT 语句。如果研究人员用兼容的 VIEW 替换目标软件所期望的表,那么攻击机会就会出现。

劫持查询

设想一下以下场景:假设原始数据库有一个名为 dummy 的 TABLE,定义如下:

目标软件使用以下内容查询它:

如果研究人员将 dummy 设计为 VIEW,研究人员实际上可以劫持此查询:

以下这个 VIEW 使研究人员能够劫持查询,这意味着可以生成一个研究人员完全控制的全新查询。

既然研究人员可以与 SQLite 解释器进行交互,接下来的问题是 SQLite 内置了哪些开发原语 ? 它是否允许任何系统命令从文件系统读取或写入文件系统 ?

SQL 注入

作为研究人员,研究人员很难在没有 "i" 的情况下拼写 SQL,所以它似乎是一个合理的起点。毕竟,研究人员希望熟悉 SQLite 提供的内部原语。似乎最直接的技巧是附加一个新的数据库文件,并使用以下内容写入:

可以看出,研究人员附加了一个新数据库,创建一个表并插入一行文本。然后,新数据库创建一个包含 web shell 的新文件 ( 因为数据库是 SQLite 中的文件 ) 。

PHP 解释器非常宽容的性质解析研究人员的数据库,直到它到达 PHP 开放标记 "

相关热词搜索:恶意 获取 执行 代码 数据库

上一篇:vivo TWS 真无线蓝牙耳机实机上手图曝光:渐变色外观加持
下一篇:最后一页

济宁知名律师   电话:0531-80961678
手机:18053115917   微信:18053115917   QQ:709581498   邮箱:709581498@qq.com
网站地图 (XML地图 / 百度地图