Redis未授权访问漏洞获取shell,及写shell报错解决办法

Redis未授权访问漏洞获取shell,及写shell报错解决办法

某日遇上Redis未授权访问,刚好有PHPINFO知道了路径,就可以直接写shell啦!

看下面的图,是不是很顺利??

image

结果……发现写入成功,访问报错,PHP代码解析有问题了?

image

我们写入txt文件,下载后查看什么原因

image

多了个问号字符出现在代码标签处开始处,所以下面的php代码直接执行不了了!

clip_image002

重新写马,闭合也不行,访问还是报错

image

查下资料找到解决方法,先把原来的数据备份,然后清空,这个前面的<??字符就不会影响到我们写马了!

备份语句,备份结果是json格式的文件

Redis-dump –u XXX.XXX.XXX.XXX:6379 > db_full.json

然后清空Redis数据库

FLUSHALL

Info命令看下keyspace为0了

clip_image001

再来写一次

image

访问OK了

image

菜刀测试连接,OK

image

恢复

Export REDIS_URI=XXX.XXX.XXX.XXX:6379

Redis-dump

这次,得到的webshell就可以执行了。最后需要注意的地方,webshell上传成功且可以执行之后,如果恢复Redis数据库,你会发现之前能够成功执行的webshell又不能执行了。貌似恢复的Redis数据库中的内容会覆盖webshell中的内容。所以,先上传个小马,然后再用小马上传个大马,这样小马不行了,还可以用大马。

 

读文件命令

 

XXX.XXX.XXX.XXX:6379> EVAL "return dofile('/etc/passwd')" 0

(error) ERR Error running script (call to f_08c011fe391ccf0f929e4157315420760f61e767): /etc/passwd:1: function arguments expected near ':'

参考

http://blog.csdn.net/bnxf00000/article/details/45392387

tag