6379 - Pentesting Redis
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Sluit aan by HackenProof Discord bediener om met ervare hackers en bug bounty jagters te kommunikeer!
Hacking Inligting Betrek jouself met inhoud wat die opwinding en uitdagings van hacking ondersoek
Regte Tyd Hack Nuus Bly op hoogte van die vinnig bewegende hacking wêreld deur regte tyd nuus en insigte
Laaste Aankondigings Bly ingelig oor die nuutste bug bounties wat bekendgestel word en belangrike platform opdaterings
Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!
Van die docs: Redis is 'n oopbron (BSD gelisensieerde), in-geheue data struktuur stoor, wat gebruik word as 'n databasis, cache en boodskap broker).
Standaard gebruik Redis 'n teksgebaseerde protokol, maar jy moet in gedagte hou dat dit ook ssl/tls kan implementeer. Leer hoe om Redis met ssl/tls te laat loop hier.
Standaard poort: 6379
Sommige outomatiese gereedskap wat kan help om inligting van 'n redis-instantie te verkry:
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-instansie kan jy eenvoudig aansluit met nc
of jy kan ook redis-cli
gebruik:
Die eerste opdrag wat jy kan probeer is info
. Dit kan uitvoer met inligting van die Redis-instansie of iets soos die volgende teruggestuur word:
In hierdie laaste geval beteken dit dat jy geldige geloofsbriewe nodig het om toegang tot die Redis-instansie te verkry.
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 word 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.
As slegs 'n wagwoord geconfigureer is, is die gebruikersnaam wat gebruik word "default". Let ook daarop dat daar geen manier is om ekstern te vind of Redis slegs met 'n wagwoord of gebruikersnaam + wagwoord geconfigureer is nie.
In gevalle soos hierdie sal jy geldige geloofsbriewe moet vind om met Redis te kommunikeer, so jy kan probeer om dit te brute-force. As jy geldige geloofsbriewe gevind het, moet jy die sessie outentiseer nadat jy die verbinding met die opdrag gevestig het:
Geldige geloofsbriewe sal geantwoord word met: +OK
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:
Ander Redis-opdragte kan hier gevind word en hier.
Let daarop 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:
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 wat uitgevoer word 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
Binne Redis is die databasisse nommers wat vanaf 0 begin. Jy kan vind of enige iemand gebruik word in die uitvoer van die opdrag info
binne die "Keyspace" stuk:
Of jy kan net al die keyspaces (databasisse) kry met:
In daardie voorbeeld word die databasis 0 en 1 gebruik. Databasis 0 bevat 4 sleutels en databasis 1 bevat 1. Standaard sal Redis databasis 0 gebruik. Om byvoorbeeld databasis 1 te dump, moet jy doen:
In die geval dat jy die volgende fout kry -WRONGTYPE Operation against a key holding the wrong kind of value
terwyl jy GET <KEY>
uitvoer, is dit omdat die sleutel dalk iets anders as 'n string of 'n heelgetal is en 'n spesiale operator benodig om dit te vertoon.
Om die tipe van die sleutel te ken, gebruik die TYPE
opdrag, voorbeeld hieronder vir lys en hash sleutels.
Dump die databasis met npm redis-dump of python redis-utils
Sluit aan by HackenProof Discord bediener om te kommunikeer met ervare hackers en bug bounty jagters!
Hacking Inligting Betrek met inhoud wat die opwinding en uitdagings van hacking ondersoek
Regte Tyd Hack Nuus Bly op hoogte van die vinnige hacking wêreld deur regte tyd nuus en insigte
Laaste Aankondigings Bly ingelig oor die nuutste bug bounties wat bekendgestel word en belangrike platform opdaterings
Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!
redis-rogue-server kan outomaties 'n interaktiewe skulp of 'n omgekeerde skulp in Redis(<=5.0.5) verkry.
Inligting van hier. Jy moet die pad van die Webwerf-gids weet:
As die webshell toegang uitsondering, kan jy die databasis leegmaak na 'n rugsteun en weer probeer, onthou om die databasis te herstel.
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, volg hierdie skrywe, kan jy sien dat die aanvaller 'n rev shell in 'n html geïnterpreteer deur die nunjucks sjabloon enjin ingespuit het:
Let daarop dat verskeie sjabloon enjinne 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).
Voorbeeld van hier
Wees 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:
Genereer 'n ssh publieke-private sleutel paar op jou pc: ssh-keygen -t rsa
Skryf die publieke sleutel na 'n lêer : (echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt
Importeer die lêer in redis : cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key
Stoor die publieke sleutel in die authorized_keys lêer op die redis bediener:
Laastens, kan jy ssh na die redis bediener met private sleutel : ssh -i id_rsa redis@10.85.0.52
Hierdie tegniek is geoutomatiseer hier: https://github.com/Avinash-acid/Redis-Server-Exploit
Die laaste voorbeeld is vir Ubuntu, vir Centos, die bogenoemde opdrag moet 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
Volg die instruksies van https://github.com/n0b0dyCN/RedisModules-ExecuteCommand jy kan 'n redis module saamstel om arbitrêre opdragte uit te voer.
Dan het jy 'n manier nodig om die saamgestelde module te laai.
Laai die opgelaaide module tydens uitvoering met MODULE LOAD /path/to/mymodule.so
Lys gelaaide modules om te kontroleer of dit korrek gelaai is: MODULE LIST
Voer opdragte uit:
Laai die module af wanneer jy wil: MODULE UNLOAD mymodule
Hier kan jy sien dat Redis die opdrag EVAL gebruik om Lua kode in 'n sandbox uit te voer. In die gekoppelde pos kan jy sien hoe om dit te misbruik met die dofile funksie, maar klaarblyklik is dit nie meer moontlik nie. Hoe dit ook al sy, as jy die Lua sandbox kan omseil kan jy arbitrêre opdragte op die stelsel uitvoer. Ook, uit dieselfde pos kan jy 'n paar opsies sien om DoS te veroorsaak.
Sommige CVEs om uit LUA te ontsnap:
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.
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 sal antwoordgee op die lyne wat dit nie verstaan nie:
Daarom, as jy 'n SSRF vuln op 'n webwerf vind en jy kan beheer oor sommige headers (miskien met 'n CRLF vuln) of POST parameters, sal jy in staat wees om arbitrêre opdragte na Redis te stuur.
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] moontlik gemaak (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:
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:
Vir een of ander rede (soos vir die outeur 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 bug bounty jagters!
Hacking Inligting Betrek jouself by inhoud wat die opwinding en uitdagings van hacking ondersoek
Regte Tyd Hack Nuus Bly op hoogte van die vinnige wêreld van hacking deur regte tyd nuus en insigte
Laaste Aankondigings Bly ingelig oor die nuutste bug bounties wat bekendgestel word en belangrike platform opdaterings
Sluit by ons aan op Discord en begin vandag saamwerk met top hackers!
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)