Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
sqlite-cli-go — SQLite 3.53.4 CLI - 高危 - 本地 - 命令注入 - go 和斜杠终止符后接点命令 | Kitploit
工具/GitHubGitHub/abraxas/sqlite-cli-go
漏洞分析漏洞利用安全虚拟化密码学渗透测试实验室与实践
GitHubabraxas/sqlite-cli-go

sqlite-cli-go

SQLite 3.53.4 CLI - 高危 - 本地 - 命令注入 - go 和斜杠终止符后接点命令

查看仓库
229天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - sqlite-cli-go

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-cli-go

技术分析文章:https://abraxaslabs.tech/research/sqlite-cli-go

sqlite-cli-go

类别: 命令注入 影响范围: 本地

SQLite 3.53.4(b09c88c)默认的 sqlite3 CLI 仍将 SQL Server 的 go 和 Oracle 的 / 视为语句终止符。line_is_command_terminator 会把该行改写为 ;。当 SQL 缓冲区为空时,下一行会进入 do_meta_command,因此 .shell / .output / .read 会以操作员 UID 执行。

--safe 仍会阻止 .shell。该控制措施依然有效。默认的 sqlite3 不会启用 --safe。这不是 libsqlite3 的问题。Oracle 是对见证字符串执行 echo。

ID暂无 CVE
类别命令注入(CLI 的 go / / 终止符,随后执行后续点命令)
影响范围本地(受害者在未启用 --safe 的情况下,用默认 sqlite3 运行攻击者的 SQL/脚本;UI:R)
CWECWE-78
CVSS高危:7.8 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
产品SQLite(sqlite3 CLI)
受影响版本3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
认证受害者将脚本提供给默认 sqlite3;未启用 --safe
许可证GNU Affero GPL v3.0
实验环境仅 127.0.0.1:18920。见证字符串 SQLITE-CLI-GO-WITNESS。

攻击者能做什么

当操作员在未启用 --safe 的情况下将脚本提供给 sqlite3,且脚本中存在未终止的 SQL 后,go 或 / 行之后的 .shell / .output / .read 会以操作员 UID 执行。

分号已经可以结束语句。剩余部分是终止 SQL,它没有 ;,因此认为语句仍未结束的包装器仍会执行下一个点命令。.shell 就是 system()。实验环境中的 oracle 是对见证字符串执行 echo。不是反弹 shell。

我是如何发现的

在 OpenLiteSpeed 之后,对 3.53.4 进行了二十次源码排查。使用的是最新 GA 版本,而非 3.54.0 草案。CLI 附加功能并非默认库。--safe 是处理不可信脚本的文档化防护措施(CVE-2022-46908)。它仍会阻止 .shell。默认的 sqlite3 不会启用它。

src/shell.c.in 仍保留 SQL Server / Oracle 兼容路径。主干 ac6ac0c22d(2026-10-08)除非定义 SQLITE_SHELL_LEGACY_COMMAND_TERMINATOR,否则会禁用该路径。该提交晚于本 GA 版本。

已记录的弯路:将分号视为相同的剩余部分;重新提交 CVE-2022-46908;期望 --safe 成为默认值;将此称为 libsqlite3 RCE;使用反弹 shell 作为 oracle;锁定 3.54.0(草案)。

实验环境

cd lab
./run.sh

将官方 sqlite-src-3530400 构建为默认的 Unix sqlite3(--disable-readline)。Compose sqlite-cli-go。在 127.0.0.1:18920 上运行 Dummy TCP。默认 CLI 将 go 和 / 视为终止符,然后运行 .shell echo SQLITE-CLI-GO-WITNESS。--safe 打印 cannot run .shell in safe mode。绑定回环地址。

SUCCESS sqlite-cli-go how=go-then-dot-shell slash=yes safe=blocked SQLITE-CLI-GO-WITNESS

修复方案

停止将 go 和 / 视为终止符,这正是 trunk ac6ac0c22d 所做的,除非定义了 -DSQLITE_SHELL_LEGACY_COMMAND_TERMINATOR。在此之前,请使用 --safe 运行不受信任的脚本。--safe 仍然是有效的控制手段。

参考资料

  • sqlite.org/src 标签 version-3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)
  • 官方 zip https://www.sqlite.org/2026/sqlite-src-3530400.zip
  • src/shell.c.in 中的 line_is_command_terminator、process_input 重写、do_meta_command、.shell 在 failIfSafeMode 之后调用 system()
  • CVE-2022-46908 --safe
  • sqlite.org/cli.html CLI --safe
  • CWE-78
下载工具