MS Access SQL Injection
Aanlyn Speelgrond
DB Beperkings
String Samevoeging
String samevoeging is moontlik met & (%26)
en + (%2b)
karakters.
Kommentaar
Daar is geen kommentaar in MS Access nie, maar dit blyk moontlik te wees om die laaste van 'n navraag met 'n NULL-karakter te verwyder:
As dit nie werk nie, kan jy altyd die sintaksis van die navraag regmaak:
Gestapelde Vrae
Hulle word nie ondersteun nie.
BEPERK
Die LIMIT
operateur is nie geïmplementeer nie. Dit is egter moontlik om SELECT-vraagresultate te beperk tot die eerste N tabel rye met die TOP
operateur. TOP
aanvaar as argument 'n heelgetal, wat die aantal rye wat teruggegee moet word, verteenwoordig.
Net soos TOP kan jy LAST
gebruik wat die rye van die einde sal kry.
UNION Vrae/Subvrae
In 'n SQLi wil jy gewoonlik op een of ander manier 'n nuwe vraag uitvoer om inligting uit ander tabelle te onttrek. MS Access vereis altyd dat in subvrae of ekstra vrae 'n FROM
aangedui word.
So, as jy 'n UNION SELECT
of UNION ALL SELECT
of 'n SELECT
tussen hakies in 'n voorwaarde wil uitvoer, moet jy altyd 'n FROM
met 'n geldige tabelnaam aandui.
Daarom moet jy 'n geldige tabelnaam ken.
Chaining equals + Substring
Dit sal jou toelaat om waardes van die huidige tabel te exfiltreer sonder om die naam van die tabel te hoef te ken.
MS Access laat vreemde sintaksis toe soos '1'=2='3'='asd'=false
. Soos gewoonlik sal die SQL-inspuiting binne 'n WHERE
klousule wees wat ons kan misbruik.
Stel jou voor jy het 'n SQLi in 'n MS Access-databasis en jy weet (of het geraai) dat een kolomnaam username is, en dit is die veld wat jy wil exfiltreer. Jy kan die verskillende antwoorde van die webtoepassing nagaan wanneer die chaining equals tegniek gebruik word en moontlik inhoud exfiltreer met 'n boolean injection deur die Mid
funksie te gebruik om substrings te verkry.
As jy die naam van die tabel en kolom weet om te dump, kan jy 'n kombinasie van Mid
, LAST
en TOP
gebruik om alle inligting via boolean SQLi te lek:
Feel free to check this in the online playground.
Brute-forcing Tabel name
Met die kettinggelykte tegniek kan jy ook bruteforce tabel name met iets soos:
U kan ook 'n meer tradisionele manier gebruik:
Feel vry om dit in die aanlyn speelgrond te kontroleer.
Sqlmap algemene tabel name: https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt
Daar is 'n ander lys in http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
Brute-Forcing Kolom name
Jy kan brute-force huidige kolom name met die ketting gelyk trick met:
Of met 'n group by:
Of jy kan die kolomname van 'n ander tabel brute-force met:
Dumping data
Ons het reeds die chaining equals technique bespreek om data uit die huidige en ander tabelle te dump. Maar daar is ander maniere:
In 'n neutedop gebruik die navraag 'n "if-then" verklaring om 'n "200 OK" te aktiveer in geval van sukses of 'n "500 Internal Error" andersins. Deur voordeel te trek uit die TOP 10 operator, is dit moontlik om die eerste tien resultate te kies. Die daaropvolgende gebruik van LAST laat toe om slegs die 10de tuple te oorweeg. Op so 'n waarde, deur die MID operator te gebruik, is dit moontlik om 'n eenvoudige karaktervergelyking uit te voer. Deur die indeks van MID en TOP behoorlik te verander, kan ons die inhoud van die "username" veld vir alle rye dump.
Tydgebaseerd
Ander Interessante funksies
Mid('admin',1,1)
kry substring vanaf posisie 1 lengte 1 (beginposisie is 1)LEN('1234')
kry lengte van stringASC('A')
kry ascii waarde van karakterCHR(65)
kry string vanaf ascii waardeIIF(1=1,'a','b')
as danCOUNT(*)
Tel aantal items
Tabels opnoem
Van hier kan jy 'n navraag sien om tabelname te kry:
However, note that is very typical to find SQL Injections where you don't have access to read the table MSysObjects
.
FileSystem access
Web Root Directory Full Path
Die kennis van die web wortel absolute pad mag verdere aanvalle vergemaklik. As toepassingsfoute nie heeltemal verborge is nie, kan die gids pad ontdek word deur te probeer om data van 'n nie-bestaande databasis te kies.
http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00
MS Access reageer met 'n foutboodskap wat die web gids se volle padnaam bevat.
File Enumeration
Die volgende aanvalsvector kan gebruik word om die bestaan van 'n lêer op die afstands lêerstelsel af te lei. As die gespesifiseerde lêer bestaan, aktiveer MS Access 'n foutboodskap wat inligting gee dat die databasisformaat ongeldig is:
http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00
Nog 'n manier om lêers te tel, bestaan uit die spesifisering van 'n databasis.tabel item. As die gespesifiseerde lêer bestaan, vertoon MS Access 'n databasisformaat foutboodskap.
http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00
.mdb File Name Guessing
Databasis lêernaam (.mdb) kan afgelei word met die volgende navraag:
http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00
Waar name[i] 'n .mdb lêernaam is en realTable 'n bestaande tabel binne die databasis. Alhoewel MS Access altyd 'n foutboodskap sal aktiveer, is dit moontlik om tussen 'n ongeldige lêernaam en 'n geldige .mdb lêernaam te onderskei.
.mdb Password Cracker
Access PassView is 'n gratis nut wat gebruik kan word om die hoofdatabasis wagwoord van Microsoft Access 95/97/2000/XP of Jet Database Engine 3.0/4.0 te herstel.
References
Last updated