某日遇上Redis未授权访问,刚好有PHPINFO知道了路径,就可以直接写shell啦!
看下面的图,是不是很顺利??
结果……发现写入成功,访问报错,PHP代码解析有问题了?
我们写入txt文件,下载后查看什么原因
多了个问号字符出现在代码标签处开始处,所以下面的php代码直接执行不了了!
重新写马,闭合也不行,访问还是报错
查下资料找到解决方法,先把原来的数据备份,然后清空,这个前面的<??字符就不会影响到我们写马了!
备份语句,备份结果是json格式的文件
Redis-dump –u XXX.XXX.XXX.XXX:6379 > db_full.json
然后清空Redis数据库
FLUSHALL
Info命令看下keyspace为0了
再来写一次
访问OK了
菜刀测试连接,OK
恢复
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 ':'
参考