MSSQL Injection
MSSQL Injeksie
Aktiewe Gidsopnoeming
Dit mag moontlik wees om domeingebruikers op te som deur middel van SQL-injeksie binne 'n MSSQL-bediener te gebruik met die volgende MSSQL-funksies:
SELECT DEFAULT_DOMAIN()
: Kry die huidige domeinnaam.master.dbo.fn_varbintohexstr(SUSER_SID('DOMAIN\Administrator'))
: As jy die naam van die domein weet (DOMAIN in hierdie voorbeeld), sal hierdie funksie die SID van die gebruiker Administrator in heksformaat teruggee. Dit sal lyk soos0x01050000000[...]0000f401
, let op hoe die laaste 4 byte die nommer 500 in big endian-formaat is, wat die gewone ID van die gebruiker administrator is. Hierdie funksie sal jou in staat stel om die ID van die domein te ken (alle bytes behalwe die laaste 4).SUSER_SNAME(0x01050000000[...]0000e803)
: Hierdie funksie sal die gebruikersnaam van die aangeduide ID teruggee (indien enige), in hierdie geval 0000e803 in big endian == 1000 (gewoonlik is dit die ID van die eerste gewone gebruikers-ID wat geskep is). Dan kan jy dink dat jy gebruikers-ID's van 1000 tot 2000 kan kragtig en waarskynlik al die gebruikersname van die gebruikers van die domein kan kry. Byvoorbeeld deur 'n funksie soos die volgende te gebruik:
Alternatiewe Fout-Gebaseerde vektore
Fout-Gebaseerde SQL-injeksies lyk gewoonlik soos konstruksies soos +AND+1=@@version--
en variasies gebaseer op die "OF" operator. Navrae wat sulke uitdrukkings bevat, word gewoonlik deur WAFs geblokkeer. As 'n omweg, kombineer 'n string met behulp van die %2b karakter met die resultaat van spesifieke funksie-oproepe wat 'n data tipe omskakelingsfout veroorsaak op die gesogte data.
Sommige voorbeelde van sulke funksies:
SUSER_NAME()
USER_NAME()
PERMISSIONS()
DB_NAME()
FILE_NAME()
TYPE_NAME()
COL_NAME()
Voorbeeld van die gebruik van die funksie USER_NAME()
:
SSRF
Hierdie SSRF-truuks is geneem vanaf hier
fn_xe_file_target_read_file
fn_xe_file_target_read_file
Dit vereis VIEW SERVER STATE
toestemming op die bediener.
fn_get_audit_file
fn_get_audit_file
Dit vereis die CONTROL SERVER
toestemming.
fn_trace_gettabe
fn_trace_gettabe
Dit vereis die CONTROL SERVER
toestemming.
xp_dirtree
, xp_fileexists
, xp_subdirs
xp_dirtree
, xp_fileexists
, xp_subdirs
Opgeslane prosedures soos xp_dirtree
, alhoewel nie amptelik deur Microsoft gedokumenteer nie, is deur ander aanlyn beskryf as gevolg van hul bruikbaarheid in netwerkoperasies binne MSSQL. Hierdie prosedures word dikwels gebruik vir Out of Band Data eksfiltrering, soos gedemonstreer in verskeie voorbeelde en berigte.
Die xp_dirtree
opgeslane prosedure word byvoorbeeld gebruik om netwerkversoeke te maak, maar dit is beperk tot slegs TCP-poort 445. Die poortnommer is nie wysigbaar nie, maar dit maak dit moontlik om van netwerk-aandele te lees. Die gebruik word gedemonstreer in die volgende SQL-skrip:
Dit is vermeldenswaardig dat hierdie metode moontlik nie op alle stelselkonfigurasies sal werk nie, soos op Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)
wat op 'n Windows Server 2016 Datacenter
met verstekinstellings loop.
Daar is ook alternatiewe gestoorde prosedures soos master..xp_fileexist
en xp_subdirs
wat soortgelyke uitkomste kan behaal. Verdere besonderhede oor xp_fileexist
kan gevind word in hierdie TechNet-artikel.
xp_cmdshell
xp_cmdshell
Dit is vanselfsprekend dat jy ook xp_cmdshell
kan gebruik om iets uit te voer wat 'n SSRF veroorsaak. Vir meer inligting lees die relevante afdeling op die bladsy:
MSSQL Gebruiker-gedefinieerde Funksie - SQLHttp
Die skep van 'n CLR UDF (Common Language Runtime User Defined Function), wat kode is wat in enige .NET-taal geskryf is en in 'n DLL saamgestel word, om binne MSSQL gelaai te word vir die uitvoering van aangepaste funksies, is 'n proses wat dbo
-toegang vereis. Dit beteken dit is gewoonlik haalbaar slegs wanneer die databasisverbinding as sa
of met 'n Administrateurrol gemaak word.
'n Visual Studio-projek en installasie-instruksies word verskaf in hierdie Github-opberging om die laai van die binêre lêer in MSSQL as 'n CLR-samestelling te fasiliteer, wat die uitvoering van HTTP GET-versoeke van binne MSSQL moontlik maak.
Die kern van hierdie funksionaliteit word gekapsuleer in die http.cs
-lêer, wat die WebClient
-klas gebruik om 'n GET-versoek uit te voer en inhoud te herwin soos hieronder geïllustreer:
Voordat die CREATE ASSEMBLY
SQL-opdrag uitgevoer word, word dit aanbeveel om die volgende SQL-snippet uit te voer om die SHA512-hash van die vergadering by die bediener se lys van vertroude vergaderings toe te voeg (sigbaar via select * from sys.trusted_assemblies;
):
Nadat die montage suksesvol bygevoeg is en die funksie geskep is, kan die volgende SQL-kode gebruik word om HTTP-versoeke uit te voer:
Vinnige Uitbuiting: Die volledige inhoud van 'n tabel in 'n enkele navraag herwin
'n Bondige metode om die volledige inhoud van 'n tabel in 'n enkele navraag te onttrek, behels die gebruik van die FOR JSON
-klousule. Hierdie benadering is beknopter as die gebruik van die FOR XML
-klousule, wat 'n spesifieke modus soos "raw" vereis. Die FOR JSON
-klousule word verkies vir sy bondigheid.
Hier is hoe om die skema, tabelle en kolomme van die huidige databasis te herwin:
Retrieving the Current Query
For users granted the VIEW SERVER STATE
permission on the server, it's possible to see all executing sessions on the SQL Server instance. However, without this permission, users can only view their current session. The currently executing SQL query can be retrieved by accessing sys.dm_exec_requests and sys.dm_exec_sql_text:
https://vuln.app/getItem?id=-1%20union%20select%20null,(select+text+from+sys.dm_exec_requests+cross+apply+sys.dm_exec_sql_text(sql_handle)),null,null
To check if you have the VIEW SERVER STATE permission, the following query can be used:
MSSQL-injectie
Inleiding
MSSQL-injectie is een veelvoorkomende techniek die wordt gebruikt om kwetsbaarheden in MSSQL-databases te misbruiken. Deze techniek maakt gebruik van onjuiste validatie van gebruikersinvoer om kwaadaardige SQL-query's uit te voeren en toegang te krijgen tot gevoelige gegevens.
Union-based MSSQL-injectie
Een veelgebruikte methode voor MSSQL-injectie is de union-based aanval. Deze aanval maakt gebruik van het UNION-statement om gegevens uit verschillende tabellen samen te voegen en terug te geven als resultaat van de query. Hierdoor kan een aanvaller gevoelige informatie extraheren die normaal gesproken niet toegankelijk zou zijn.
Stap 1: Identificatie van een kwetsbaar punt
Om een MSSQL-injectie uit te voeren, moet je eerst een kwetsbaar punt in de applicatie identificeren. Dit kan worden gedaan door het controleren van de URL-parameters, formulieren of andere invoervelden op de website.
Stap 2: Bepalen van het aantal kolommen
Om een union-based MSSQL-injectie uit te voeren, moet je weten hoeveel kolommen er in de query worden geretourneerd. Dit kan worden gedaan door het injecteren van een ORDER BY-clausule en het verhogen van het getal totdat er geen foutmeldingen meer worden weergegeven.
Stap 3: Gegevens extraheren
Nu je het aantal kolommen kent, kun je gegevens extraheren uit de database. Dit kan worden gedaan door het injecteren van een UNION-statement gevolgd door de gewenste gegevens. Bijvoorbeeld:
In dit voorbeeld wordt de @@version
-variabele gebruikt om de versie van de MSSQL-server terug te geven.
Conclusie
MSSQL-injectie is een krachtige techniek die kan worden gebruikt om toegang te krijgen tot gevoelige gegevens in een MSSQL-database. Het is belangrijk om deze kwetsbaarheid te begrijpen en de nodige maatregelen te nemen om deze te voorkomen, zoals het valideren en filteren van gebruikersinvoer.
MSSQL-injectie
Unieke SQL-injectie
Stap 1: Identificatie van SQL-injectie
Om te beginnen moeten we controleren of de applicatie vatbaar is voor SQL-injectie. We kunnen dit doen door een enkele aanhalingsteken (') in het invoerveld te plaatsen en te kijken of er een foutmelding wordt weergegeven. Als er een foutmelding wordt weergegeven, is de applicatie mogelijk vatbaar voor SQL-injectie.
Stap 2: Identificatie van het aantal kolommen
Om een succesvolle SQL-injectie uit te voeren, moeten we weten hoeveel kolommen er in de query worden gebruikt. We kunnen dit doen door de ORDER BY
-clausule te gebruiken en het aantal kolommen te verhogen totdat er geen foutmelding meer wordt weergegeven. Bijvoorbeeld:
In dit voorbeeld voegen we null
-waarden toe totdat er geen foutmelding meer wordt weergegeven. Het aantal null
-waarden dat we toevoegen, geeft het aantal kolommen weer.
Stap 3: Identificatie van de versie van MSSQL
Om de versie van MSSQL te identificeren, kunnen we de @@version
-variabele gebruiken. We kunnen dit doen door de query als volgt te wijzigen:
In dit voorbeeld gebruiken we @@version
om de versie van MSSQL te verkrijgen.
Opmerking
Het is belangrijk op te merken dat SQL-injectie illegaal is en alleen mag worden uitgevoerd met toestemming van de eigenaar van het systeem. Het is ook belangrijk om ethische richtlijnen te volgen en geen schade aan te richten aan systemen of gegevens.
https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
MSSQL Injection
Inleiding
MSSQL-injectie is een veelvoorkomende techniek die wordt gebruikt om kwetsbaarheden in MSSQL-databases bloot te leggen. Deze techniek maakt gebruik van SQL-injectie om kwaadaardige SQL-query's uit te voeren en gevoelige informatie te verkrijgen.
Stapsgewijze handleiding
Identificeer een kwetsbaar doelwit met een MSSQL-database.
Zoek naar invoervelden waarin SQL-query's worden uitgevoerd zonder de juiste validatie of ontsmetting.
Voer een kwaadaardige SQL-query in het invoerveld in om de database te manipuleren.
Gebruik de UNION-operator om gegevens uit andere tabellen op te halen.
Gebruik de @@version-functie om de versie van de MSSQL-server te achterhalen.
Analyseer de verkregen gegevens om verdere aanvallen uit te voeren of kwetsbaarheden te identificeren.
Voorbeeld
URL: https://vuln.app/getItem?id=1+union+select+null,@@version,null+from.users--
In dit voorbeeld wordt de UNION-operator gebruikt om de versie van de MSSQL-server te achterhalen. Door null
te selecteren voor de eerste en derde kolom, wordt voorkomen dat er gegevens worden gelekt. De @@version
-functie retourneert de versie van de MSSQL-server.
Conclusie
MSSQL-injectie is een krachtige techniek om kwetsbaarheden in MSSQL-databases te exploiteren. Het is belangrijk om de juiste beveiligingsmaatregelen te nemen, zoals het valideren en ontsmetten van invoervelden, om deze vorm van aanval te voorkomen.
MSSQL Injection
Inleiding
MSSQL-injectie is een veelvoorkomende techniek die wordt gebruikt om kwetsbaarheden in MSSQL-databases te exploiteren. Deze techniek maakt gebruik van onjuiste validatie van gebruikersinvoer om kwaadaardige SQL-query's uit te voeren en toegang te krijgen tot gevoelige gegevens.
Stapsgewijze handleiding
Hieronder volgt een stapsgewijze handleiding voor het uitvoeren van een MSSQL-injectieaanval:
Identificeer de invoervelden op de doelwebsite die mogelijk kwetsbaar zijn voor SQL-injectie. Dit kunnen zoekvakken, inlogformulieren of andere invoervelden zijn waarbij de gebruikersinvoer wordt verwerkt.
Voer een eenvoudige test uit door een enkel aanhalingsteken (') in het invoerveld in te voeren. Als de website een foutmelding of een onverwacht gedrag retourneert, kan dit duiden op een SQL-injectiekwetsbaarheid.
Gebruik de UNION-operator om gegevens uit andere tabellen in de database op te halen. De UNION-operator combineert de resultaten van twee of meer SELECT-statements. Een voorbeeld van een SQL-injectieaanval met de UNION-operator is:
In dit voorbeeld wordt de UNION-operator gebruikt om de versie van de MSSQL-server op te halen uit de
@@version
-variabele.Gebruik de informatie die is verkregen uit de UNION-operator om verdere aanvallen uit te voeren, zoals het ophalen van gebruikersnamen, wachtwoorden of andere gevoelige gegevens.
Preventie
Om MSSQL-injectie te voorkomen, moeten ontwikkelaars de volgende best practices volgen:
Gebruik parameterbinding of voorbereide verklaringen om gebruikersinvoer correct te valideren en te ontsmetten voordat deze wordt gebruikt in SQL-query's.
Implementeer strikte validatie van gebruikersinvoer om ongewenste tekens te filteren.
Beperk de rechten van de databasegebruiker die wordt gebruikt door de applicatie om alleen de minimale benodigde machtigingen te hebben.
Houd de MSSQL-server up-to-date met de nieuwste beveiligingspatches.
Voer regelmatig penetratietests uit om kwetsbaarheden in de applicatie te identificeren en te verhelpen.
Conclusie
MSSQL-injectie is een ernstige kwetsbaarheid die kan leiden tot ongeautoriseerde toegang tot gevoelige gegevens. Het is belangrijk voor ontwikkelaars en beheerders om zich bewust te zijn van deze kwetsbaarheid en de nodige maatregelen te nemen om deze te voorkomen. Door de best practices te volgen en regelmatig penetratietests uit te voeren, kunnen organisaties hun systemen beschermen tegen MSSQL-injectieaanvallen.
So for example, multiple queries such as:
Can be reduced to:
Therefore it could be possible to bypass different WAFs that doesn't consider this form of stacking queries. For example:
References
Last updated