SQLI

The leading cause of SQL injection is string concatenation.

This vulnerability can be exploited to dump the contents of an application database.

The two most common types of SQL injection are union-based and error-based.

  1. Union-based SQL injection: uses the “UNION” SQL operator to combine the results of two or more “SELECT” statements into a single result.

  2. Error-based SQL injection: utilizes the errors the SQL server throws to extract information.

MySql

Automation: using SqlMap.

Swap tabs

PostgreSQL

In case an error message is displayed, if you see the “psycopg2” name you know you’re working with a Postgres database server.

Union Based

  • Figure out how many columns the endpoint contains using the “order by” operator and keep adding one to the number until you get an error:

--> Order by 1 --> Order by 2 --> Order by n --> error (indicates there must be n-1 columns).

  • Figure out which columns are being displayed on the page using the “union all select” statement which can be accomplished by putting an invalid value:

--> Notice the numbers on the page refer to the columns displayed on the front end.

If you weren't able to detect the database type from the error message you could always use the “version()” function to print the database type:

-->-1 union all select 1,version()

  • Get a list of all tables in the databases:

  • Get a list of columns belonging to a specific table:

  • Dump the contents of specific columns:

In case retrieving username:password for a user, we can use them to log in as that user.

Oracle

Requires some additional knowledge to successfully exploit it.

  • Similar to PostgreSQL when you are selecting a column it must match the type of the first select statement.

  • When using the select operator you must specify a default “dual” table.

Test

  • Throw a bunch of single and double quotes around until you get an error message starting with “ORA” which indicates dealing with an Oracle database.

Union Based

  • Figure out how many columns the endpoint contains using the “order by” operator and keep adding one to the number until you get an error:

--> Order by 1 --> Order by 2 --> Order by n --> error (indicates there must be n-1 columns).

  • Figure out which columns are being displayed on the page using the “union all select” statement which can be accomplished by putting an invalid value:

--> Notice the numbers on the page refer to the columns displayed on the front end.

  • Figure out the target table name:

  • Get the table's columns:

  • Extract the sensitive information

Last updated